diff options
| author | Josef Karthauser <joe@FreeBSD.org> | 2002-04-02 14:54:52 +0000 |
|---|---|---|
| committer | Josef Karthauser <joe@FreeBSD.org> | 2002-04-02 14:54:52 +0000 |
| commit | 86cf1335d502876c29db6dfaa518e05b73c852fb (patch) | |
| tree | f51022b9d0c37f6487ccba7596376cd14452c1b2 /sys/dev | |
| parent | b784ffe91a96a9f419cfe56c02cf30b809e4c95b (diff) | |
Notes
Diffstat (limited to 'sys/dev')
| -rw-r--r-- | sys/dev/usb/usbdi.c | 25 | ||||
| -rw-r--r-- | sys/dev/usb/usbdi.h | 5 |
2 files changed, 27 insertions, 3 deletions
diff --git a/sys/dev/usb/usbdi.c b/sys/dev/usb/usbdi.c index 7fcfb4bd9f06..4bf3a13c5ecb 100644 --- a/sys/dev/usb/usbdi.c +++ b/sys/dev/usb/usbdi.c @@ -1,4 +1,4 @@ -/* $NetBSD: usbdi.c,v 1.80 2001/04/13 11:19:58 augustss Exp $ */ +/* $NetBSD: usbdi.c,v 1.79 2001/01/21 02:39:53 augustss Exp $ */ /* $FreeBSD$ */ /* @@ -294,7 +294,28 @@ usbd_transfer(usbd_xfer_handle xfer) if (!xfer->done) { if (pipe->device->bus->use_polling) panic("usbd_transfer: not done\n"); - tsleep(xfer, PRIBIO, "usbsyn", 0); + /* XXX Temporary hack XXX */ + if (xfer->flags & USBD_NO_TSLEEP) { + int i; + usbd_bus_handle bus = pipe->device->bus; + int to = xfer->timeout * 1000; + DPRINTFN(2,("usbd_transfer: polling\n")); + for (i = 0; i < to; i += 10) { + delay(10); + bus->methods->do_poll(bus); + if (xfer->done) + break; + } + DPRINTFN(2,("usbd_transfer: polling done =\n", + xfer->done)); + /* XXX Is this right, what about the HC timeout? */ + if (!xfer->done) { + pipe->methods->abort(xfer); + xfer->status = USBD_TIMEOUT; + } + } else + /* XXX End hack XXX */ + tsleep(xfer, PRIBIO, "usbsyn", 0); } splx(s); return (xfer->status); diff --git a/sys/dev/usb/usbdi.h b/sys/dev/usb/usbdi.h index c15d9b4d4de9..65a483ea4422 100644 --- a/sys/dev/usb/usbdi.h +++ b/sys/dev/usb/usbdi.h @@ -1,4 +1,4 @@ -/* $NetBSD: usbdi.h,v 1.51 2001/04/13 11:19:58 augustss Exp $ */ +/* $NetBSD: usbdi.h,v 1.50 2001/04/12 01:18:24 thorpej Exp $ */ /* $FreeBSD$ */ /* @@ -85,6 +85,9 @@ typedef void (*usbd_callback)(usbd_xfer_handle, usbd_private_handle, /* in usb.h #define USBD_SHORT_XFER_OK 0x04*/ /* allow short reads */ #define USBD_FORCE_SHORT_XFER 0x08 /* force last short packet on write */ +/* XXX Temporary hack XXX */ +#define USBD_NO_TSLEEP 0x80 /* XXX use busy wait */ + #define USBD_NO_TIMEOUT 0 #define USBD_DEFAULT_TIMEOUT 5000 /* ms = 5 s */ |
