Module Name: src Committed By: riastradh Date: Wed Feb 12 16:01:00 UTC 2020
Modified Files: src/sys/arch/mips/adm5120/dev: ahci.c src/sys/dev/usb: ehci.c motg.c ohci.c uhci.c usbdi.c usbdi.h usbdivar.h xhci.c src/sys/external/bsd/dwc2: dwc2.c dwc2var.h Log Message: Factor out HCI-independent xfer completion logic. New API for HCI drivers to synchronize hardware completion interrupts, synchronous aborts, and asynchronous timeouts: - When submitting an xfer to hardware, call usbd_xfer_schedule_timeout(xfer). - On HCI completion interrupt for xfer completion: if (!usbd_xfer_trycomplete(xfer)) return; /* timed out or aborted, ignore it */ - In upm_abort methods, call usbd_xfer_abort(xfer). For HCI drivers that use this API (not needed in drivers that don't, or for xfers like root intr xfers that don't use it): - New ubm_abortx method serves role of former *hci_abort_xfer, but without any logic for wrangling timeouts/callouts/tasks -- caller in usbd_xfer_abort has already handled them. - New ubm_dying method, returns true if the device is in the process of detaching, used by the timeout logic. Converted and tested: - ehci - ohci Converted and compile-tested: - ahci (XXX did this ever work?) - dwc2 - motg (XXX missing usbd_xfer_schedule_timeout in motg_*_start?) - uhci - xhci Not changed: - slhci (sys/dev/ic/sl811hs.c) -- doesn't use a separate per-xfer callout for timeouts (XXX but maybe should?) - ugenhc (sys/rump/dev/lib/libugenhc/ugenhc.c) -- doesn't manage its own transfer timeouts - vhci -- times transfers out only on detach; could be adapted easily if we wanted to use the xfer->ux_callout To generate a diff of this commit: cvs rdiff -u -r1.17 -r1.18 src/sys/arch/mips/adm5120/dev/ahci.c cvs rdiff -u -r1.270 -r1.271 src/sys/dev/usb/ehci.c cvs rdiff -u -r1.25 -r1.26 src/sys/dev/usb/motg.c cvs rdiff -u -r1.292 -r1.293 src/sys/dev/usb/ohci.c cvs rdiff -u -r1.288 -r1.289 src/sys/dev/usb/uhci.c cvs rdiff -u -r1.191 -r1.192 src/sys/dev/usb/usbdi.c cvs rdiff -u -r1.100 -r1.101 src/sys/dev/usb/usbdi.h cvs rdiff -u -r1.121 -r1.122 src/sys/dev/usb/usbdivar.h cvs rdiff -u -r1.115 -r1.116 src/sys/dev/usb/xhci.c cvs rdiff -u -r1.66 -r1.67 src/sys/external/bsd/dwc2/dwc2.c cvs rdiff -u -r1.6 -r1.7 src/sys/external/bsd/dwc2/dwc2var.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.