android_kernel_xiaomi_sm8350/drivers/usb/host
Sarah Sharp ae63674714 USB: xhci: URB cancellation support.
Add URB cancellation support to the xHCI host controller driver.  This
currently supports cancellation for endpoints that do not have streams
enabled.

An URB is represented by a number of Transaction Request Buffers (TRBs),
that are chained together to make one (or more) Transaction Descriptors
(TDs) on an endpoint ring.  The ring is comprised of contiguous segments,
linked together with Link TRBs (which may or may not be chained into a TD).

To cancel an URB, we must stop the endpoint ring, make the hardware skip
over the TDs in the URB (either by turning them into No-op TDs, or by
moving the hardware's ring dequeue pointer past the last TRB in the last
TD), and then restart the ring.

There are times when we must drop the xHCI lock during this process, like
when we need to complete cancelled URBs.  We must ensure that additional
URBs can be marked as cancelled, and that new URBs can be enqueued (since
the URB completion handlers can do either).  The new endpoint ring
variables cancels_pending and state (which can only be modified while
holding the xHCI lock) ensure that future cancellation and enqueueing do
not interrupt any pending cancellation code.

To facilitate cancellation, we must keep track of the starting ring
segment, first TRB, and last TRB for each URB.  We also need to keep track
of the list of TDs that have been marked as cancelled, separate from the
list of TDs that are queued for this endpoint.  The new variables and
cancellation list are stored in the xhci_td structure.

Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2009-06-15 21:44:49 -07:00
..
whci USB: whci-hcd: check return value of usb_hcd_link_urb_to_ep() 2009-04-17 10:50:27 -07:00
ehci-au1xxx.c USB: EHCI: update toggle state for linked QHs 2009-06-15 21:44:46 -07:00
ehci-dbg.c
ehci-fsl.c USB: EHCI: update toggle state for linked QHs 2009-06-15 21:44:46 -07:00
ehci-fsl.h
ehci-hcd.c USB: EHCI: update toggle state for linked QHs 2009-06-15 21:44:46 -07:00
ehci-hub.c USB: EHCI: create sysfs companion files directly in the controller device 2009-06-15 21:44:43 -07:00
ehci-ixp4xx.c USB: EHCI: update toggle state for linked QHs 2009-06-15 21:44:46 -07:00
ehci-mem.c
ehci-orion.c USB: EHCI: update toggle state for linked QHs 2009-06-15 21:44:46 -07:00
ehci-pci.c USB: EHCI: update toggle state for linked QHs 2009-06-15 21:44:46 -07:00
ehci-ppc-of.c USB: EHCI: update toggle state for linked QHs 2009-06-15 21:44:46 -07:00
ehci-ps3.c USB: EHCI: update toggle state for linked QHs 2009-06-15 21:44:46 -07:00
ehci-q.c USB: EHCI: update toggle state for linked QHs 2009-06-15 21:44:46 -07:00
ehci-sched.c USB: EHCI: stagger frames for interrupt transfers 2009-06-15 21:44:46 -07:00
ehci.h USB: EHCI: stagger frames for interrupt transfers 2009-06-15 21:44:46 -07:00
fhci-dbg.c USB: FHCI: use the new usb debugfs directory 2009-06-15 21:44:43 -07:00
fhci-hcd.c
fhci-hub.c
fhci-mem.c
fhci-q.c
fhci-sched.c
fhci-tds.c
fhci.h
hwa-hc.c wusb: hwa-hc: Drop unused pci_suspend/resume hooks. 2009-06-15 21:44:44 -07:00
isp116x-hcd.c
isp116x.h
isp1760-hcd.c USB: isp1760: urb_dequeue doesn't always find the urbs 2009-05-28 13:54:43 -07:00
isp1760-hcd.h
isp1760-if.c
Kconfig
Makefile
ohci-at91.c [ARM] 5446/1: ohci-at91: Limit vbus_pin assignment to the size of the array 2009-04-08 20:36:18 +01:00
ohci-au1xxx.c
ohci-dbg.c USB: OHCI: use the ohci structure directly in debugfs files. 2009-06-15 21:44:43 -07:00
ohci-ep93xx.c [ARM] 5526/1: ep93xx: usb driver cleanup 2009-05-29 20:16:29 +01:00
ohci-hcd.c USB: OHCI: use the new usb debugfs directory 2009-06-15 21:44:43 -07:00
ohci-hub.c
ohci-lh7a404.c
ohci-mem.c
ohci-omap.c
ohci-pci.c USB: new flag for resume-from-hibernation 2009-06-15 21:44:44 -07:00
ohci-pnx4008.c
ohci-pnx8550.c
ohci-ppc-of.c
ohci-ppc-soc.c
ohci-ps3.c dma-mapping: replace all DMA_32BIT_MASK macro with DMA_BIT_MASK(32) 2009-04-07 08:31:11 -07:00
ohci-pxa27x.c
ohci-q.c
ohci-s3c2410.c
ohci-sa1111.c
ohci-sh.c
ohci-sm501.c
ohci-ssb.c
ohci-tmio.c
ohci.h
oxu210hp-hcd.c
oxu210hp.h
pci-quirks.c USB: xhci: BIOS handoff and HW initialization. 2009-06-15 21:44:48 -07:00
pci-quirks.h
r8a66597-hcd.c USB: r8a66597-hcd: use platform_data instead of module_param 2009-06-15 21:44:46 -07:00
r8a66597.h USB: r8a66597-hcd: use platform_data instead of module_param 2009-06-15 21:44:46 -07:00
sl811_cs.c
sl811-hcd.c
sl811.h
u132-hcd.c
uhci-debug.c
uhci-hcd.c USB: new flag for resume-from-hibernation 2009-06-15 21:44:44 -07:00
uhci-hcd.h
uhci-hub.c
uhci-q.c USB: UHCI queue: use usb_endpoint_type() 2009-06-15 21:44:42 -07:00
xhci-dbg.c USB: xhci: Allocate and address USB devices 2009-06-15 21:44:49 -07:00
xhci-ext-caps.h USB: xhci: Support xHCI host controllers and USB 3.0 devices. 2009-06-15 21:44:48 -07:00
xhci-hcd.c USB: xhci: URB cancellation support. 2009-06-15 21:44:49 -07:00
xhci-hub.c USB: xhci: Root hub support. 2009-06-15 21:44:48 -07:00
xhci-mem.c USB: xhci: URB cancellation support. 2009-06-15 21:44:49 -07:00
xhci-pci.c USB: xhci: Bandwidth allocation support 2009-06-15 21:44:49 -07:00
xhci-ring.c USB: xhci: URB cancellation support. 2009-06-15 21:44:49 -07:00
xhci.h USB: xhci: URB cancellation support. 2009-06-15 21:44:49 -07:00