From a506f5dba7a093fe331cf415b8f9c6830722fe62 Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Thu, 4 Oct 2001 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 2001-10-04 --- pc/devusb.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/pc/devusb.c b/pc/devusb.c index 89392d18ae35ba3e33ec386b7b26b308827e98ff..065a36dcc1bad76b804b7d32dc0c5fdcf341602f 100644 --- a/pc/devusb.c +++ b/pc/devusb.c @@ -684,15 +684,14 @@ tdisready(void *arg) static Block * isoxmit(Endpt *e, Block *b, int pid) { - TD *td; - int n, id; Block *ob; static int ioc; + TD *td; td = e->etd; if (td == nil) panic("usb: isoxmit"); - while(td->status & Active && (td->dev & 0x7ff<21) != (0x7ff<21)){ + while(td->status & Active){ XPRINT("isoxmit: sleep %lux\n", &e->wr); sleep(&e->wr, tdisready, e->etd); XPRINT("isoxmit: awake\n"); @@ -707,7 +706,10 @@ isoxmit(Endpt *e, Block *b, int pid) n = BLEN(b); id = (e->x<<7)|(e->dev->x&0x7F); td->dev = ((n-1)<<21) | ((id&0x7FF)<<8) | pid; - td->status = ErrLimit1 | Active | IsoSelect | IOC; + if ((ioc++ & 0xff) == 0) + td->status = ErrLimit3 | Active | IsoSelect | IOC; + else + td->status = ErrLimit3 | Active | IsoSelect; e->etd = td->next; return ob; }