summaryrefslogtreecommitdiffstats
path: root/sys/dev/usb/controller/ehci.h
diff options
context:
space:
mode:
authorhselasky <hselasky@FreeBSD.org>2010-10-14 21:38:06 +0000
committerhselasky <hselasky@FreeBSD.org>2010-10-14 21:38:06 +0000
commit5847c5148341acd3fc2b3e1e3b53d6a4e2ff79d3 (patch)
tree5b6919fc9d4c0f0d25acb687448e6c3f2295e54a /sys/dev/usb/controller/ehci.h
parentd4dfd1db594fda2eb1069f82b45d735613569ef0 (diff)
downloadFreeBSD-src-5847c5148341acd3fc2b3e1e3b53d6a4e2ff79d3.zip
FreeBSD-src-5847c5148341acd3fc2b3e1e3b53d6a4e2ff79d3.tar.gz
Revert most of r197682 (EHCI Hardware BUG workaround). Implement
proper solution which is to not use the TERMINATE pointer, but rather link to a halted TD. The initial fix was due to a misunderstanding about how the EHCI hardware works. Thanks to Alan Stern for clearing this up. This patch can increase mass storage read performance significantly when the IRQ rate is less than 8000 IRQ/s. Approved by: thompsa (mentor)
Diffstat (limited to 'sys/dev/usb/controller/ehci.h')
-rw-r--r--sys/dev/usb/controller/ehci.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/sys/dev/usb/controller/ehci.h b/sys/dev/usb/controller/ehci.h
index 397e61d..a8aa514 100644
--- a/sys/dev/usb/controller/ehci.h
+++ b/sys/dev/usb/controller/ehci.h
@@ -285,12 +285,14 @@ typedef struct ehci_fstn ehci_fstn_t;
struct ehci_hw_softc {
struct usb_page_cache pframes_pc;
+ struct usb_page_cache terminate_pc;
struct usb_page_cache async_start_pc;
struct usb_page_cache intr_start_pc[EHCI_VIRTUAL_FRAMELIST_COUNT];
struct usb_page_cache isoc_hs_start_pc[EHCI_VIRTUAL_FRAMELIST_COUNT];
struct usb_page_cache isoc_fs_start_pc[EHCI_VIRTUAL_FRAMELIST_COUNT];
struct usb_page pframes_pg;
+ struct usb_page terminate_pg;
struct usb_page async_start_pg;
struct usb_page intr_start_pg[EHCI_VIRTUAL_FRAMELIST_COUNT];
struct usb_page isoc_hs_start_pg[EHCI_VIRTUAL_FRAMELIST_COUNT];
@@ -329,6 +331,7 @@ typedef struct ehci_softc {
bus_space_tag_t sc_io_tag;
bus_space_handle_t sc_io_hdl;
+ uint32_t sc_terminate_self; /* TD short packet termination pointer */
uint32_t sc_eintrs;
uint32_t sc_cmd; /* shadow of cmd register during
* suspend */
OpenPOWER on IntegriCloud