summaryrefslogtreecommitdiffstats
path: root/sys/dev/usb/ehcivar.h
diff options
context:
space:
mode:
authoriedowse <iedowse@FreeBSD.org>2006-01-15 21:03:19 +0000
committeriedowse <iedowse@FreeBSD.org>2006-01-15 21:03:19 +0000
commit08f12da89e4e44fb70838e3034b8a53c820e4a94 (patch)
treedc5e95154f45d0649ffb78f44c7dcd521cbcf008 /sys/dev/usb/ehcivar.h
parent057cec0ceb81de5bf9a310a4b88d537ed506da80 (diff)
downloadFreeBSD-src-08f12da89e4e44fb70838e3034b8a53c820e4a94.zip
FreeBSD-src-08f12da89e4e44fb70838e3034b8a53c820e4a94.tar.gz
Work around a problem seen on VIA EHCI controllers where occasionally
an interrupt appears to occur before the transfer has been marked as completed. This caused umass transfers to get stuck, especially when writing large files. The workaround sets up a timer that rechecks for missed completed transfers if some operations are still pending. Other suggested workarounds, such as performing a PCI read immediately after acknowledging the interrupts, do not appear to help. Obtained from: OpenBSD
Diffstat (limited to 'sys/dev/usb/ehcivar.h')
-rw-r--r--sys/dev/usb/ehcivar.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/sys/dev/usb/ehcivar.h b/sys/dev/usb/ehcivar.h
index f7a2029..e1b852d 100644
--- a/sys/dev/usb/ehcivar.h
+++ b/sys/dev/usb/ehcivar.h
@@ -94,6 +94,7 @@ struct ehci_soft_islot {
#define EHCI_COMPANION_MAX 8
#define EHCI_SCFLG_DONEINIT 0x0001 /* ehci_init() has been called. */
+#define EHCI_SCFLG_LOSTINTRBUG 0x0002 /* workaround for VIA chipsets */
typedef struct ehci_softc {
struct usbd_bus sc_bus; /* base device */
@@ -153,6 +154,7 @@ typedef struct ehci_softc {
struct lock sc_doorbell_lock;
usb_callout_t sc_tmo_pcd;
+ usb_callout_t sc_tmo_intrlist;
#if defined(__NetBSD__) || defined(__OpenBSD__)
device_ptr_t sc_child; /* /dev/usb# device */
OpenPOWER on IntegriCloud