diff -r a62bc34fa4fa sys/man/4/nusb --- a/sys/man/4/nusb Wed Mar 31 17:50:25 2021 +0200 +++ b/sys/man/4/nusb Thu Apr 01 10:14:27 2021 -0700 @@ -60,7 +60,7 @@ .I usbd take the decimal usb .I devid -of the device they should handle as ther last argument. A +of the device they should handle as their last argument. A driver's instance handles only one device at a time. .PP Drivers that provide file systems make them available as shares under @@ -181,6 +181,9 @@ such as .BR rndis , .BR smsc , +.BR url , +.BR lan78xx , +.BR aue , .BR a88772 or .BR a88178 diff -r a62bc34fa4fa sys/src/9/boot/nusbrc --- a/sys/src/9/boot/nusbrc Wed Mar 31 17:50:25 2021 +0200 +++ b/sys/src/9/boot/nusbrc Thu Apr 01 10:14:27 2021 -0700 @@ -34,8 +34,11 @@ case *03 nusb/kb $id case *02 - # CDC ethernet - nusb/ether $etherargs $id + # RNDIS, otherwise CDC ethernet + if(~ $4 ff0202) + nusb/ether -t rndis $etherargs $id + if not + nusb/ether $etherargs $id case *08 if(nusb/disk $id) @{ rfork ne diff -r a62bc34fa4fa sys/src/cmd/nusb/ether/rndis.c --- a/sys/src/cmd/nusb/ether/rndis.c Wed Mar 31 17:50:25 2021 +0200 +++ b/sys/src/cmd/nusb/ether/rndis.c Thu Apr 01 10:14:27 2021 -0700 @@ -118,7 +118,8 @@ for(i = 0; i < nelem(d->usb->ep); i++){ if((ep = d->usb->ep[i]) == nil) continue; - if(ep->iface->csp == 0x000301e0) + // ff0202 is canonical CSP per Linux kernel; 301e0 used by Nexus 5 + if(ep->iface->csp == 0xff0202 || ep->iface->csp == 0x000301e0) r = 1; } if(!r){