summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@rei2.9hal>1970-01-01 01:34:55 +0100
committercinap_lenrek <cinap_lenrek@rei2.9hal>1970-01-01 01:34:55 +0100
commit9d49fcdb377f698366ba0bd7f45efd85a607652b (patch)
treec1437ec070d04f1d2c098e648854e4b7a34c13d7
parente321b1b9d2dcaa3176608496b419eb5a079f51ba (diff)
nusb: handle sub hubs
-rw-r--r--sys/src/cmd/nusb/usbd/fns.h1
-rw-r--r--sys/src/cmd/nusb/usbd/usbd.c11
2 files changed, 12 insertions, 0 deletions
diff --git a/sys/src/cmd/nusb/usbd/fns.h b/sys/src/cmd/nusb/usbd/fns.h
index 7f016536f..f6f2add65 100644
--- a/sys/src/cmd/nusb/usbd/fns.h
+++ b/sys/src/cmd/nusb/usbd/fns.h
@@ -1,2 +1,3 @@
int startdev(Port*);
void work(void);
+Hub* newhub(char *, Dev *);
diff --git a/sys/src/cmd/nusb/usbd/usbd.c b/sys/src/cmd/nusb/usbd/usbd.c
index 79990e233..97059e11d 100644
--- a/sys/src/cmd/nusb/usbd/usbd.c
+++ b/sys/src/cmd/nusb/usbd/usbd.c
@@ -311,6 +311,17 @@ startdev(Port *p)
fprint(2, "okay what?\n");
return -1;
}
+ if(d->usb->class == Clhub){
+ /*
+ * Hubs are handled directly by this process avoiding
+ * concurrent operation so that at most one device
+ * has the config address in use.
+ * We cancel kernel debug for these eps. too chatty.
+ */
+ if((p->hub = newhub(d->dir, d)) == nil)
+ return -1;
+ return 0;
+ }
close(d->dfd);
d->dfd = -1;
pushevent(formatdev(d));