diff options
author | cinap_lenrek <cinap_lenrek@localhost> | 2011-05-21 18:39:13 +0000 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@localhost> | 2011-05-21 18:39:13 +0000 |
commit | 742fe500b5dcae2248e5d4d378a8026b8bdbf49b (patch) | |
tree | ad55f4ca19cd129cb8cb819e2f1baa2ece85a110 | |
parent | 1ac9d6ab0e2100fc395af4813b6283e009fd739f (diff) |
fix panic in usbuhci driver, increase max number of endpoints and alt configurations, make usb/audio continue besides some errors
-rw-r--r-- | sys/src/9/pc/usbuhci.c | 1 | ||||
-rw-r--r-- | sys/src/cmd/usb/audio/audio.c | 6 | ||||
-rw-r--r-- | sys/src/cmd/usb/audio/audioctl.c | 11 | ||||
-rw-r--r-- | sys/src/cmd/usb/lib/fsdir.c | 2 | ||||
-rw-r--r-- | sys/src/cmd/usb/lib/usb.h | 4 |
5 files changed, 6 insertions, 18 deletions
diff --git a/sys/src/9/pc/usbuhci.c b/sys/src/9/pc/usbuhci.c index 2bb98bc14..6a1dab01d 100644 --- a/sys/src/9/pc/usbuhci.c +++ b/sys/src/9/pc/usbuhci.c @@ -1107,7 +1107,6 @@ episoread(Ep *ep, Isoio *iso, void *a, int count) error(iso->err ? iso->err : Eio); } iso->state = Qdone; - assert(iso->tdu != iso->tdi); for(tot = 0; iso->tdi != iso->tdu && tot < count; tot += nr){ tdu = iso->tdu; diff --git a/sys/src/cmd/usb/audio/audio.c b/sys/src/cmd/usb/audio/audio.c index 47cd5f353..6a4bed1db 100644 --- a/sys/src/cmd/usb/audio/audio.c +++ b/sys/src/cmd/usb/audio/audio.c @@ -358,17 +358,17 @@ threadmain(int argc, char **argv) if(setrec){ value[0] = i; if(setcontrol(Record, "channels", value) == Undef) - sysfatal("Can't set record channels"); + fprint(2, "%s: can't set record channels\n", argv0); value[0] = 16; if(setcontrol(Record, "resolution", value) == Undef) - sysfatal("Can't set record resolution"); + fprint(2, "%s: can't set record resolution\n", argv0); } } getcontrols(); /* Get the initial value of all controls */ value[0] = defaultspeed[Play]; if(endpt[Play] >= 0 && setcontrol(Play, "speed", value) < 0) - sysfatal("can't set play speed"); + fprint(2, "%s: can't set play speed\n", argv0); value[0] = defaultspeed[Record]; if(endpt[Record] >= 0 && setcontrol(Record, "speed", value) < 0) fprint(2, "%s: can't set record speed\n", argv0); diff --git a/sys/src/cmd/usb/audio/audioctl.c b/sys/src/cmd/usb/audio/audioctl.c index c4c7a0d00..ab63c0d37 100644 --- a/sys/src/cmd/usb/audio/audioctl.c +++ b/sys/src/cmd/usb/audio/audioctl.c @@ -131,7 +131,7 @@ findalt(int rec, int nchan, int res, int speed) int setspeed(int rec, int speed) { - int ps, n, no, dist, i; + int n, no, dist, i; Audioalt *a; Altc *da; Ep *ep; @@ -215,15 +215,6 @@ setspeed(int rec, int speed) } dprint(2, " speed now %d Hz;", speed); } - ps = ((speed * da->interval + 999) / 1000) - * controls[rec][Channel_control].value[0] - * controls[rec][Resolution_control].value[0]/8; - if(ps > ep->maxpkt){ - fprint(2, "%s: setspeed(rec %d, speed %d): packet size %d > " - "maximum packet size %d\n", - argv0, rec, speed, ps, ep->maxpkt); - return Undef; - } dprint(2, "Configuring %s endpoint for %d Hz\n", rec?"record":"playback", speed); epdev[rec] = openep(ad, endpt[rec]); diff --git a/sys/src/cmd/usb/lib/fsdir.c b/sys/src/cmd/usb/lib/fsdir.c index ee4f42c2b..96e972ba5 100644 --- a/sys/src/cmd/usb/lib/fsdir.c +++ b/sys/src/cmd/usb/lib/fsdir.c @@ -66,8 +66,6 @@ usbfsadd(Usbfs *dfs) { int i, j; - print("%s: %s\n", argv0, dfs->name); - dprint(2, "%s: fsadd %s\n", argv0, dfs->name); qlock(&fslck); for(i = 1; i < nfs; i++) diff --git a/sys/src/cmd/usb/lib/usb.h b/sys/src/cmd/usb/lib/usb.h index e52dddae1..072f6e030 100644 --- a/sys/src/cmd/usb/lib/usb.h +++ b/sys/src/cmd/usb/lib/usb.h @@ -13,13 +13,13 @@ typedef struct Usbdev Usbdev; enum { /* fundamental constants */ - Nep = 16, /* max. endpoints per usb device & per interface */ + Nep = 256, /* max. endpoints per usb device & per interface */ /* tunable parameters */ Nconf = 16, /* max. configurations per usb device */ Nddesc = 8*Nep, /* max. device-specific descriptors per usb device */ Niface = 16, /* max. interfaces per configuration */ - Naltc = 16, /* max. alt configurations per interface */ + Naltc = 256, /* max. alt configurations per interface */ Uctries = 4, /* no. of tries for usbcmd */ Ucdelay = 50, /* delay before retrying */ |