summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorthompsa <thompsa@FreeBSD.org>2009-02-08 21:08:00 +0000
committerthompsa <thompsa@FreeBSD.org>2009-02-08 21:08:00 +0000
commit616dc8027b655da8510fd6d7b5b33da7243ff426 (patch)
treeff15cb19c81a9760a5ba53817fc8b640ed30027e
parentfc6cc1f763e313135ec799aeeca03620a61bfb06 (diff)
downloadFreeBSD-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
-rw-r--r--sys/dev/usb2/controller/ehci2.c4
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) {
OpenPOWER on IntegriCloud