diff options
author | cinap_lenrek <cinap_lenrek@rei2.9hal> | 1970-01-01 01:34:55 +0100 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@rei2.9hal> | 1970-01-01 01:34:55 +0100 |
commit | 9d49fcdb377f698366ba0bd7f45efd85a607652b (patch) | |
tree | c1437ec070d04f1d2c098e648854e4b7a34c13d7 | |
parent | e321b1b9d2dcaa3176608496b419eb5a079f51ba (diff) |
nusb: handle sub hubs
-rw-r--r-- | sys/src/cmd/nusb/usbd/fns.h | 1 | ||||
-rw-r--r-- | sys/src/cmd/nusb/usbd/usbd.c | 11 |
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)); |