summaryrefslogtreecommitdiffstats
path: root/sys/dev/usb/controller/ehci.c
diff options
context:
space:
mode:
authorhselasky <hselasky@FreeBSD.org>2012-05-03 16:06:22 +0000
committerhselasky <hselasky@FreeBSD.org>2012-05-03 16:06:22 +0000
commitcc7f2dd68e15314066b859d35b1ef4382896af75 (patch)
tree7b149c9ea0f45d15fcb82dfb37ddae1e7a658cc9 /sys/dev/usb/controller/ehci.c
parent2b71ee361804cc7bc850d6f7d37d55d6986a7008 (diff)
downloadFreeBSD-src-cc7f2dd68e15314066b859d35b1ef4382896af75.zip
FreeBSD-src-cc7f2dd68e15314066b859d35b1ef4382896af75.tar.gz
Make sure the EHCI bandwidth allocation algorithm
for FULL speed SPLIT transactions works fully. MFC after: 1 week
Diffstat (limited to 'sys/dev/usb/controller/ehci.c')
-rw-r--r--sys/dev/usb/controller/ehci.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/sys/dev/usb/controller/ehci.c b/sys/dev/usb/controller/ehci.c
index a822077..a6470b8 100644
--- a/sys/dev/usb/controller/ehci.c
+++ b/sys/dev/usb/controller/ehci.c
@@ -2638,11 +2638,29 @@ ehci_device_isoc_fs_enter(struct usb_xfer *xfer)
/* update isoc_next */
xfer->endpoint->isoc_next = (pp_last - &sc->sc_isoc_fs_p_last[0]) &
(EHCI_VIRTUAL_FRAMELIST_COUNT - 1);
+
+ /*
+ * We don't allow cancelling of the SPLIT transaction USB FULL
+ * speed transfer, because it disturbs the bandwidth
+ * computation algorithm.
+ */
+ xfer->flags_int.can_cancel_immed = 0;
}
static void
ehci_device_isoc_fs_start(struct usb_xfer *xfer)
{
+ /*
+ * We don't allow cancelling of the SPLIT transaction USB FULL
+ * speed transfer, because it disturbs the bandwidth
+ * computation algorithm.
+ */
+ xfer->flags_int.can_cancel_immed = 0;
+
+ /* set a default timeout */
+ if (xfer->timeout == 0)
+ xfer->timeout = 500; /* ms */
+
/* put transfer on interrupt queue */
ehci_transfer_intr_enqueue(xfer);
}
OpenPOWER on IntegriCloud