summaryrefslogtreecommitdiffstats
path: root/sys/dev/usb/controller/ehci.h
diff options
context:
space:
mode:
authorthompsa <thompsa@FreeBSD.org>2009-11-08 20:51:15 +0000
committerthompsa <thompsa@FreeBSD.org>2009-11-08 20:51:15 +0000
commit138b1174a623634b265299a95c263adcbc9c76de (patch)
tree58453478da79b83d50f1f9b6a76b6554e1ff82e8 /sys/dev/usb/controller/ehci.h
parent410f2a9fd7c27f9feea4855407b8a73cc612993d (diff)
downloadFreeBSD-src-138b1174a623634b265299a95c263adcbc9c76de.zip
FreeBSD-src-138b1174a623634b265299a95c263adcbc9c76de.tar.gz
Integrate lost interrupts patch from the old USB stack.
Some EHCI chips from VIA / ATI seem to trigger interrupts before writing back the qTD status, or miss signalling occasionally under heavy load. If the host machine is too fast, we can miss transaction completion - when we scan the active list the transaction still seems to be active. This generally exhibits itself as a umass stall that never recovers. We work around this behaviour by setting up this callback after any softintr that completes with transactions still pending, giving us another chance to check for completion after the writeback has taken place Submitted by: Alexander Nedotsuko MFC after: 3 days
Diffstat (limited to 'sys/dev/usb/controller/ehci.h')
-rw-r--r--sys/dev/usb/controller/ehci.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/sys/dev/usb/controller/ehci.h b/sys/dev/usb/controller/ehci.h
index 32c0835..a3d8406 100644
--- a/sys/dev/usb/controller/ehci.h
+++ b/sys/dev/usb/controller/ehci.h
@@ -321,6 +321,7 @@ typedef struct ehci_softc {
struct ehci_hw_softc sc_hw;
struct usb_bus sc_bus; /* base device */
struct usb_callout sc_tmo_pcd;
+ struct usb_callout sc_tmo_poll;
union ehci_hub_desc sc_hub_desc;
struct usb_device *sc_devices[EHCI_MAX_DEVICES];
@@ -348,6 +349,7 @@ typedef struct ehci_softc {
#define EHCI_SCFLG_BIGEDESC 0x0008 /* big-endian byte order descriptors */
#define EHCI_SCFLG_BIGEMMIO 0x0010 /* big-endian byte order MMIO */
#define EHCI_SCFLG_TT 0x0020 /* transaction translator present */
+#define EHCI_SCFLG_LOSTINTRBUG 0x0040 /* workaround for VIA / ATI chipsets */
uint8_t sc_offs; /* offset to operational registers */
uint8_t sc_doorbell_disable; /* set on doorbell failure */
OpenPOWER on IntegriCloud