From cc7f2dd68e15314066b859d35b1ef4382896af75 Mon Sep 17 00:00:00 2001 From: hselasky Date: Thu, 3 May 2012 16:06:22 +0000 Subject: Make sure the EHCI bandwidth allocation algorithm for FULL speed SPLIT transactions works fully. MFC after: 1 week --- sys/dev/usb/controller/ehci.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'sys/dev/usb/controller/ehci.c') 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); } -- cgit v1.1