freebsd-dev/sys/dev/usb
Don Lewis 4d54b88811 Replace three copies of the host controller reset sequence that
differ in their details with calls to a new function, ehci_hcreset(),
that performs the reset.

The original sequences either had no delay or a 1ms delay between
telling the controller to stop and asserting the controller reset
bit.  One instance of the original reset sequence waited for the
controller to indicate that its reset was complete before continuing,
but the other two immediately let the subsequent code execute.  The
latter is a problem on some hardware, because a read of the HCCPARAMS
register returns an incorrect value while the reset is in progress,
which triggers an infinite loop in ehci_pci_givecontroller(), which
hangs the system on shutdown.

The reset sequence in ehci_hcreset() starts with the most complete
instance from the original code, which contains a loop to wait for
the controller to indicate that its reset is complete.   This appears
to be the correct thing to do according to "Enhanced Host Controller
Interface Specification for Universal Serial Bus" revision 1.0,
section 2.3.1.  Add another loop to wait for the controller to
indicate that it has stopped before setting the HCRESET bit.  This
is required by the section 2.3.1 in the specification, which says
that setting HCRESET before the controller has halted "will result
in undefined behaviour".

Reviewed by:	imp (previous patch version without the extra wait loop)
Tested by:	se  (previous patch version without the extra wait loop)
Approved by:	re (bmah)
MFC after:	1 week
2007-08-12 18:45:24 +00:00
..
dsbr100io.h
ehci_pci.c Latest round of usb cleanups: 2007-06-21 14:42:34 +00:00
ehci.c Replace three copies of the host controller reset sequence that 2007-08-12 18:45:24 +00:00
ehcireg.h
ehcivar.h
FILES
hid.c s/logprintf/printf/g 2007-06-20 05:11:37 +00:00
hid.h
if_aue.c Remove duplicate ID and recall that I comes after E in alphabetical 2007-06-23 05:59:53 +00:00
if_auereg.h
if_axe.c Merge in the AX88178 and AX88772 register definions (along with 2007-08-09 04:40:07 +00:00
if_axereg.h Merge in the AX88178 and AX88772 register definions (along with 2007-08-09 04:40:07 +00:00
if_cdce.c Fix two more PRs: 2007-06-30 20:18:44 +00:00
if_cdcereg.h
if_cue.c Note the Belkin F5U111 Adapter is covered by NETMATE entry. 2007-06-23 06:29:19 +00:00
if_cuereg.h
if_kue.c Add a boatload of devices from OpenBSD and NetBSD to kue and cdce. 2007-06-23 06:47:43 +00:00
if_kuereg.h
if_rue.c When all the other drivers were converted to scheduling a taskqueue to 2007-07-09 16:58:07 +00:00
if_ruereg.h Missed in last commit: add usb task for rue to use for its ticks. 2007-07-09 20:56:39 +00:00
if_rum.c Latest round of usb cleanups: 2007-06-21 14:42:34 +00:00
if_rumreg.h
if_rumvar.h
if_udav.c Add support for ShanTou ST268 usb nic. This is from a patch for NetBSD 2007-07-24 14:44:23 +00:00
if_udavreg.h
if_ural.c Correct RSSI calculation. 2007-07-17 11:27:57 +00:00
if_uralreg.h
if_uralvar.h
kue_fw.h
ohci_pci.c Latest round of usb cleanups: 2007-06-21 14:42:34 +00:00
ohci.c s/logprintf/printf/g 2007-06-20 05:11:37 +00:00
ohcireg.h
ohcivar.h
rio500_usb.h
rt2573_ucode.h
sl811hs.c Include usb_port.h to fix build. 2007-06-19 10:28:08 +00:00
sl811hsreg.h
sl811hsvar.h
slhci_pccard.c Include usb_port.h to fix build. 2007-06-19 10:28:08 +00:00
uark.c Reduce diffs to OtherBSD by using usb_lookup. No functional changes. 2007-06-30 02:42:36 +00:00
ubsa.c add support for Option GlobeTrotter 3G+ 2007-06-22 05:56:05 +00:00
ubser.c Prefer device_printf to printf("%s: ...", device_get_nameunit()). On 2007-07-05 06:42:14 +00:00
ubser.h
ucom.c Starting in version 1.56, ucomstop started calling ucomstart to work 2007-06-25 06:40:20 +00:00
ucomvar.h
ucycom.c Latest round of usb cleanups: 2007-06-21 14:42:34 +00:00
udbp.c Prefer device_printf to printf + device_get_nameunit. This saves 2007-07-05 15:25:32 +00:00
udbp.h
ufm.c Latest round of usb cleanups: 2007-06-21 14:42:34 +00:00
ufoma.c Minor Bug fix that will cause panic with some terminal with voice path on USB. 2007-07-27 12:00:29 +00:00
uftdi.c Tactrix Openport support 2007-06-22 05:53:05 +00:00
uftdireg.h
ugen.c The timeout is in milliseconds, not in hz. Only the portion of the 2007-06-28 06:22:40 +00:00
ugraphire_rdesc.h
uhci_pci.c Latest round of usb cleanups: 2007-06-21 14:42:34 +00:00
uhci.c
uhcireg.h
uhcivar.h
uhid.c Latest round of usb cleanups: 2007-06-21 14:42:34 +00:00
uhub.c Fix two more PRs: 2007-06-30 20:18:44 +00:00
uipaq.c Latest round of usb cleanups: 2007-06-21 14:42:34 +00:00
ukbd.c Fix absolutely maddening autorepeat bug that would cause the last key 2007-07-25 06:48:33 +00:00
ulpt.c Latest round of usb cleanups: 2007-06-21 14:42:34 +00:00
umass.c Add quirks, derived from the linux quirks table for: 2007-07-05 05:26:08 +00:00
umct.c Finish removal of usb_port.h macros. 2007-06-18 22:27:57 +00:00
umodem.c Add missing newline in printf. 2007-07-29 18:16:43 +00:00
ums.c ums(4) does not work if the mouse defaults to boot protocol. Force 2007-07-25 06:43:06 +00:00
uplcom.c s/logprintf/printf/g 2007-06-20 05:11:37 +00:00
urio.c Latest round of usb cleanups: 2007-06-21 14:42:34 +00:00
usb_ethersubr.c
usb_ethersubr.h
usb_if.m
usb_mem.c s/logprintf/printf/g 2007-06-20 05:11:37 +00:00
usb_mem.h
usb_port.h uhub already does the printing and naming of a device, so don't do it 2007-07-06 20:02:37 +00:00
usb_quirks.c WISPY added an X. 2007-07-22 15:59:45 +00:00
usb_quirks.h Add support for various MS Wirless usb mice. the patch is from 2007-06-29 21:07:41 +00:00
usb_subr.c Fix two more PRs: 2007-06-30 20:18:44 +00:00
usb.c s/logprintf/printf/g 2007-06-20 05:11:37 +00:00
usb.h Add definition for UIPROTO_MOUSE. 2007-06-30 02:40:21 +00:00
usbcdc.h
usbdevs Start to converge on standard ways of saying some things like 2007-07-25 07:11:08 +00:00
usbdi_util.c s/logprintf/printf/g 2007-06-20 05:11:37 +00:00
usbdi_util.h
usbdi.c Fix two more PRs: 2007-06-30 20:18:44 +00:00
usbdi.h Fix two more PRs: 2007-06-30 20:18:44 +00:00
usbdivar.h
usbhid.h
uscanner.c add Benq 3300U/4300U support 2007-06-22 05:49:12 +00:00
uvisor.c Prefer device_printf to printf("%s:...", device_get_nameunit(),...); 2007-07-05 06:28:46 +00:00
uvscom.c Prefer device_printf to printf("%s:...", device_get_nameunit(),...); 2007-07-05 06:28:46 +00:00
uxb360gp_rdesc.h