diff options
author | thompsa <thompsa@FreeBSD.org> | 2009-02-08 21:08:00 +0000 |
---|---|---|
committer | thompsa <thompsa@FreeBSD.org> | 2009-02-08 21:08:00 +0000 |
commit | 616dc8027b655da8510fd6d7b5b33da7243ff426 (patch) | |
tree | ff15cb19c81a9760a5ba53817fc8b640ed30027e /sys/dev/usb2/controller | |
parent | fc6cc1f763e313135ec799aeeca03620a61bfb06 (diff) | |
download | FreeBSD-src-616dc8027b655da8510fd6d7b5b33da7243ff426.zip FreeBSD-src-616dc8027b655da8510fd6d7b5b33da7243ff426.tar.gz |
The NRL value in the queue head must be zero for interrupt transfers. This was
diagnosed using a USB analyser obtained through a FreeBSD Foundation grant.
Thanks to: FreeBSD Foundation
Diffstat (limited to 'sys/dev/usb2/controller')
-rw-r--r-- | sys/dev/usb2/controller/ehci2.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/sys/dev/usb2/controller/ehci2.c b/sys/dev/usb2/controller/ehci2.c index f55e834..4dd00b8 100644 --- a/sys/dev/usb2/controller/ehci2.c +++ b/sys/dev/usb2/controller/ehci2.c @@ -1892,7 +1892,9 @@ ehci_setup_standard_chain(struct usb2_xfer *xfer, ehci_qh_t **qh_last) if (usb2_get_speed(xfer->xroot->udev) == USB_SPEED_HIGH) { qh_endp |= (EHCI_QH_SET_EPS(EHCI_QH_SPEED_HIGH) | - EHCI_QH_DTC | EHCI_QH_SET_NRL(8)); + EHCI_QH_DTC); + if (methods != &ehci_device_intr_methods) + qh_endp |= EHCI_QH_SET_NRL(8); } else { if (usb2_get_speed(xfer->xroot->udev) == USB_SPEED_FULL) { |