diff options
author | hselasky <hselasky@FreeBSD.org> | 2010-10-14 21:38:06 +0000 |
---|---|---|
committer | hselasky <hselasky@FreeBSD.org> | 2010-10-14 21:38:06 +0000 |
commit | 5847c5148341acd3fc2b3e1e3b53d6a4e2ff79d3 (patch) | |
tree | 5b6919fc9d4c0f0d25acb687448e6c3f2295e54a /sys/dev/usb/controller/ehci.h | |
parent | d4dfd1db594fda2eb1069f82b45d735613569ef0 (diff) | |
download | FreeBSD-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.h | 3 |
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 */ |