aboutsummaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
authorJosef Karthauser <joe@FreeBSD.org>2002-04-02 14:54:52 +0000
committerJosef Karthauser <joe@FreeBSD.org>2002-04-02 14:54:52 +0000
commit86cf1335d502876c29db6dfaa518e05b73c852fb (patch)
treef51022b9d0c37f6487ccba7596376cd14452c1b2 /sys/dev
parentb784ffe91a96a9f419cfe56c02cf30b809e4c95b (diff)
Notes
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/usb/usbdi.c25
-rw-r--r--sys/dev/usb/usbdi.h5
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 */