9front - general discussion about 9front
 help / color / mirror / Atom feed
* [9front] [PATCH] nusb/lib and nusb/ether fixes.
@ 2023-05-21 17:06 inbox
  0 siblings, 0 replies; only message in thread
From: inbox @ 2023-05-21 17:06 UTC (permalink / raw)
  To: 9front

[-- Attachment #1: Type: text/plain, Size: 155 bytes --]

added setconf() to nusb/lib, and fixed findendpoints() in nusb/ether
to set the correct configuration.

this makes nusb/ether work for my rtl8156 adapter.

[-- Attachment #2: nusb-ether.diff --]
[-- Type: text/plain, Size: 1503 bytes --]

From: mia soweli <inbox@tachibana-labs.org>
Date: Sun, 21 May 2023 17:01:43 +0000
Subject: [PATCH] nusb/ether: set configuration, and use the first interface that matches


before, we were parsing all configurations, to find the cdc union,
but we would not set the config. this means we would try to talk cdc ethernet to whatever the first configuration is.

this makes cdc ethernet work on my rtl8156.
---
diff daeb5b0ab6d6342dd7d4a25ee6380f67082cfbed 7df4a1cd04d3c77382fbe58062bfb95ed2fb2035
--- a/sys/src/cmd/nusb/ether/ether.c
+++ b/sys/src/cmd/nusb/ether/ether.c
@@ -642,15 +642,18 @@
 		ctlif = datif = nil;
 		for(j = 0; j < nelem(c->iface); j++){
 			for(iface = c->iface[j]; iface != nil; iface = iface->next){
-				if(iface->id == ctlid)
+				if(ctlif == nil && iface->id == ctlid)
 					ctlif = iface;
-				if(iface->id == datid)
+				if(datif == nil && iface->id == datid)
 					datif = iface;
 			}
 			if(datif != nil && ctlif != nil){
-				if(Subclass(ctlif->csp) == Scether)
+				if(Subclass(ctlif->csp) == Scether) {
+					if(setconf(d, c) < 0)
+						break;
 					if(ifaceinit(d, datif, ein, eout) != -1)
 						return 0;
+				}
 				break;
 			}
 		}		
@@ -659,6 +662,8 @@
 	/* try any other one that seems to be ok */
 	for(i = 0; i < nelem(ud->conf); i++){
 		if((c = ud->conf[i]) != nil){
+			if(setconf(d, c) < 0)
+				break;
 			for(j = 0; j < nelem(c->iface); j++){
 				for(datif = c->iface[j]; datif != nil; datif = datif->next){
 					if(ifaceinit(d, datif, ein, eout) != -1)

[-- Attachment #3: nusb-setconf.diff --]
[-- Type: text/plain, Size: 987 bytes --]

From: mia soweli <inbox@tachibana-labs.org>
Date: Sat, 20 May 2023 19:15:57 +0000
Subject: [PATCH] nusb/lib: add setconf() to set the configuration

---
diff f27164167a90a7bc8613375a2d90f2438625518b e3cd2bf512fee93d44d1f48c9813f15f81b21938
--- a/sys/src/cmd/nusb/lib/dev.c
+++ b/sys/src/cmd/nusb/lib/dev.c
@@ -483,6 +483,16 @@
 }
 
 int
+setconf(Dev *d, Conf *c)
+{
+	if(usbcmd(d, Rh2d|Rstd|Rdev, Rsetconf, c->cval, 0, nil, 0) > 0) {
+		werrstr("setconf: %s: %r", d->dir);
+		return -1;
+	}
+	return 0;
+}
+
+int
 setalt(Dev *d, Iface *ifc)
 {
 	if(usbcmd(d, Rh2d|Rstd|Riface, Rsetiface, ifc->alt, ifc->id, nil, 0) < 0){
--- a/sys/src/cmd/nusb/lib/usb.h
+++ b/sys/src/cmd/nusb/lib/usb.h
@@ -353,6 +353,7 @@
 int	unstall(Dev *dev, Dev *ep, int dir);
 int	usbcmd(Dev *d, int type, int req, int value, int index, uchar *data, int count);
 Dev*	getdev(char *devid);
+int	setconf(Dev *d, Conf *c);
 int	setalt(Dev *d, Iface *ifc);
 
 extern int usbdebug;	/* more messages for bigger values */

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2023-05-21 17:11 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-05-21 17:06 [9front] [PATCH] nusb/lib and nusb/ether fixes inbox

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).