diff options
author | hselasky <hselasky@FreeBSD.org> | 2012-05-03 16:06:22 +0000 |
---|---|---|
committer | hselasky <hselasky@FreeBSD.org> | 2012-05-03 16:06:22 +0000 |
commit | cc7f2dd68e15314066b859d35b1ef4382896af75 (patch) | |
tree | 7b149c9ea0f45d15fcb82dfb37ddae1e7a658cc9 /sys/dev/usb/controller/ehci.c | |
parent | 2b71ee361804cc7bc850d6f7d37d55d6986a7008 (diff) | |
download | FreeBSD-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.c | 18 |
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); } |