linux/drivers/usb/host
Hans de Goede 19181bc50e usbdevfs: Add a USBDEVFS_GET_CAPABILITIES ioctl
There are a few (new) usbdevfs capabilities which an application cannot
discover in any other way then checking the kernel version. There are 3
problems with this:
1) It is just not very pretty.
2) Given the tendency of enterprise distros to backport stuff it is not
reliable.
3) As discussed in length on the mailinglist, USBDEVFS_URB_BULK_CONTINUATION
does not work as it should when combined with USBDEVFS_URB_SHORT_NOT_OK
(which is its intended use) on devices attached to an XHCI controller.
So the availability of these features can be host controller dependent,
making depending on them based on the kernel version not a good idea.

This patch besides adding the new ioctl also adds flags for the following
existing capabilities:

USBDEVFS_CAP_ZERO_PACKET,        available since 2.6.31
USBDEVFS_CAP_BULK_CONTINUATION,  available since 2.6.32, except for XHCI
USBDEVFS_CAP_NO_PACKET_SIZE_LIM, available since 3.3

Note that this patch only does not advertise the USBDEVFS_URB_BULK_CONTINUATION
cap for XHCI controllers, bulk transfers with this flag set will still be
accepted when submitted to XHCI controllers.

Returning -EINVAL for them would break existing apps, and in most cases the
troublesome scenario wrt USBDEVFS_URB_SHORT_NOT_OK urbs on XHCI controllers
will never get hit, so this would break working use cases.

The disadvantage of not returning -EINVAL is that cases were it is causing
real trouble may go undetected / the cause of the trouble may be unclear,
but this is the best we can do.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Alan Stern <stern@rowland.harvard.edu>
Acked-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2012-07-06 10:53:19 -07:00
..
whci Merge branch 'for-next/dwc3' of git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb into usb-next 2011-12-12 15:19:53 -08:00
Kconfig usb: correct trivial typo in drivers/usb/host/Kconfig 2012-06-15 15:05:34 -07:00
Makefile USB: Add driver for the ssb bus 2012-04-18 13:43:30 -07:00
alchemy-common.c MIPS: Alchemy: Au1300 SoC support 2011-12-07 22:02:05 +00:00
bcma-hcd.c usb/bcma: Add missing #include <linux/slab.h> 2012-04-23 13:22:00 -07:00
ehci-atmel.c USB: ehci-atmel: add needed of.h header file 2012-04-04 18:35:43 +02:00
ehci-au1xxx.c usb: Remove ehci_reset call from ehci_run 2011-12-08 09:38:53 -08:00
ehci-cns3xxx.c treewide: Convert uses of struct resource to resource_size(ptr) 2011-06-10 14:55:36 +02:00
ehci-dbg.c EHCI: maintain the ehci->command value properly 2012-04-23 12:05:44 -07:00
ehci-fsl.c usb: phy: patches for v3.6 merge window 2012-07-05 15:35:41 -07:00
ehci-fsl.h fsl/usb: Add controller version based ULPI and UTMI phy support 2012-04-18 13:46:42 -07:00
ehci-grlib.c treewide: Convert uses of struct resource to resource_size(ptr) 2011-06-10 14:55:36 +02:00
ehci-hcd.c USB: EHCI: define extension registers like normal ones 2012-06-26 19:42:11 -07:00
ehci-hub.c USB: EHCI: define extension registers like normal ones 2012-06-26 19:42:11 -07:00
ehci-ixp4xx.c treewide: Convert uses of struct resource to resource_size(ptr) 2011-06-10 14:55:36 +02:00
ehci-lpm.c USB: Mark EHCI LPM functions as __maybe_unused 2011-02-17 10:47:55 -08:00
ehci-ls1x.c USB: Add EHCI bus glue for Loongson1x SoCs (UPDATED) 2012-01-24 15:28:02 -08:00
ehci-mem.c USB: EHCI: AMD periodic frame list table quirk 2010-11-16 13:36:40 -08:00
ehci-msm.c usb: phy: fix return value check of usb_get_phy 2012-07-02 10:40:49 +03:00
ehci-mv.c usb: phy: fix return value check of usb_get_phy 2012-07-02 10:40:49 +03:00
ehci-mxc.c USB ehci mxc: sanitize clock handling 2012-04-25 17:03:41 +02:00
ehci-octeon.c usb: Remove ehci_reset call from ehci_run 2011-12-08 09:38:53 -08:00
ehci-omap.c ARM: OMAP: USB: Fixup ehci_hcd_omap_probe error path 2012-06-26 19:44:18 -07:00
ehci-orion.c ARM: Orion: EHCI: Add support for enabling clocks 2012-05-08 16:33:59 -07:00
ehci-pci.c USB: add NO_D3_DURING_SLEEP flag and revert 151b612847 2012-06-13 13:11:39 -07:00
ehci-platform.c USB: ehci-platform: remove update_device 2012-05-18 16:37:55 -07:00
ehci-pmcmsp.c treewide: Convert uses of struct resource to resource_size(ptr) 2011-06-10 14:55:36 +02:00
ehci-ppc-of.c treewide: Convert uses of struct resource to resource_size(ptr) 2011-06-10 14:55:36 +02:00
ehci-ps3.c usb: PS3 EHCI HC reset work-around 2011-12-08 09:38:53 -08:00
ehci-q.c USB: ehci-q.c: remove dbg() usage 2012-05-01 21:33:35 -07:00
ehci-s5p.c USB: ehci-s5p: use devm_ functions 2012-07-06 10:42:21 -07:00
ehci-sched.c USB: EHCI: improve full-speed isochronous scheduling routine 2012-05-14 12:50:22 -07:00
ehci-sead3.c usb: host: mips: sead3: Fix for big endian. 2012-05-11 15:17:30 -07:00
ehci-sh.c usb: ehci-sh: fix illegal phy_init() running when platform_data is NULL 2012-06-14 17:13:34 -07:00
ehci-spear.c USB: ehci: ohci: Add clk_{un}prepare() support 2012-04-18 14:33:43 -07:00
ehci-sysfs.c USB: EHCI: Allow users to override 80% max periodic bandwidth 2011-07-08 14:51:33 -07:00
ehci-tegra.c usb: phy: fix return value check of usb_get_phy 2012-07-02 10:40:49 +03:00
ehci-vt8500.c usb: Remove ehci_reset call from ehci_run 2011-12-08 09:38:53 -08:00
ehci-w90x900.c usb: Remove ehci_reset call from ehci_run 2011-12-08 09:38:53 -08:00
ehci-xilinx-of.c USB: EHCI: Fix build warning in xilinx ehci driver 2012-06-13 17:24:54 -07:00
ehci-xls.c Merge 3.2-rc3 into usb-linus 2011-11-26 19:46:48 -08:00
ehci.h USB: move transceiver from ehci_hcd and ohci_hcd to hcd and rename it as phy 2012-06-13 12:38:36 -07:00
fhci-dbg.c USB: FHCI: Reusing QUICC Engine USB Controller registers from immap_qe.h 2012-06-26 19:42:11 -07:00
fhci-hcd.c USB: FHCI: Reusing QUICC Engine USB Controller registers from immap_qe.h 2012-06-26 19:42:11 -07:00
fhci-hub.c USB: FHCI: Reusing QUICC Engine USB Controller registers from immap_qe.h 2012-06-26 19:42:11 -07:00
fhci-mem.c
fhci-q.c
fhci-sched.c USB: FHCI: Reusing QUICC Engine USB Controller registers from immap_qe.h 2012-06-26 19:42:11 -07:00
fhci-tds.c USB: FHCI: Reusing QUICC Engine USB Controller registers from immap_qe.h 2012-06-26 19:42:11 -07:00
fhci.h USB: FHCI: Reusing QUICC Engine USB Controller registers from immap_qe.h 2012-06-26 19:42:11 -07:00
fsl-mph-dr-of.c fsl/usb: Add controller version based ULPI and UTMI phy support 2012-04-18 13:46:42 -07:00
hwa-hc.c Merge branch 'usb-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb 2012-01-09 12:09:47 -08:00
imx21-dbg.c usb: Fix typo in imx21-dbg.c 2012-02-13 14:32:34 -08:00
imx21-hcd.c usb: imx21-hcd.c: Use clk_prepare_enable/clk_disable_unprepare 2012-06-12 13:31:03 +03:00
imx21-hcd.h
isp116x-hcd.c Remove all #inclusions of asm/system.h 2012-03-28 18:30:03 +01:00
isp116x.h Fix common misspellings 2011-03-31 11:26:23 -03:00
isp1362-hcd.c Remove all #inclusions of asm/system.h 2012-03-28 18:30:03 +01:00
isp1362.h
isp1760-hcd.c isp1760-hcd: fix possible memory leak if urb could not be enqueued 2012-04-18 13:51:19 -07:00
isp1760-hcd.h usb/isp1760: Allow to optionally trigger low-level chip reset via GPIOLIB. 2011-10-19 13:29:06 -07:00
isp1760-if.c isp1760-if: make module unloads correctly 2012-04-18 13:50:44 -07:00
octeon2-common.c usb: Configure octeon2 glue logic for proper uSOF cycle period. 2011-05-03 10:09:32 -07:00
ohci-at91.c USB: ohci-at91: add a reset function to fix race condition 2012-05-09 15:22:27 -07:00
ohci-au1xxx.c usb: [MIPS] fix unresolved err() reference in host/ohci-au1xxx.c 2012-05-01 18:36:09 -04:00
ohci-cns3xxx.c USB: ohci-cns3xxx.c: remove err() usage 2012-04-27 11:24:40 -07:00
ohci-da8xx.c ohci-da8xx: set MODULE_ALIAS to allow autoloading 2012-05-08 09:26:10 -07:00
ohci-dbg.c USB: ohci-dbg.c: remove dbg() usage 2012-05-01 21:33:37 -07:00
ohci-ep93xx.c USB: ohci-ep93xx.c: remove dbg() usage 2012-05-01 21:33:38 -07:00
ohci-exynos.c USB: ohci-exynos: use devm_ functions 2012-07-06 10:42:21 -07:00
ohci-hcd.c USB: OHCI: remove old SSB OHCI driver 2012-04-18 13:43:30 -07:00
ohci-hub.c USB: ohci-hub: Mark ohci_finish_controller_resume() as __maybe_unused 2012-06-13 17:26:11 -07:00
ohci-jz4740.c USB: ohci-jz4740: Fix spelling in MODULE_ALIAS 2010-11-11 07:14:07 -08:00
ohci-mem.c
ohci-nxp.c USB: ohci-nxp: add usbd and otg clock initialization 2012-06-20 16:20:24 -07:00
ohci-octeon.c USB: irq: Remove IRQF_DISABLED 2011-09-18 01:39:36 -07:00
ohci-omap.c usb: phy: patches for v3.6 merge window 2012-07-05 15:35:41 -07:00
ohci-omap3.c ARM: OMAP: USBHOST: Replace usbhs core driver APIs by Runtime pm APIs 2011-12-16 04:29:57 -07:00
ohci-pci.c usb: add support for STA2X11 host driver 2012-01-24 14:15:37 -08:00
ohci-platform.c usb: Fix various typo within usb 2012-04-18 13:57:26 -07:00
ohci-pnx8550.c usb: [MIPS] fix unresolved err() reference in host/ohci-pnx8550.c 2012-05-01 18:36:09 -04:00
ohci-ppc-of.c USB: ohci-ppc-of.c: remove err() usage 2012-04-27 11:24:42 -07:00
ohci-ppc-soc.c USB: ohci-ppc-soc.c: remove err() usage 2012-04-27 11:24:42 -07:00
ohci-ps3.c USB: ohci-ps3.c: remove err() usage 2012-04-27 11:24:43 -07:00
ohci-pxa27x.c usb: [ARM] fix unresolved err() reference in host/ohci-pxa27x.c 2012-05-01 18:36:09 -04:00
ohci-q.c OHCI: remove uses of hcd->state 2011-11-18 10:51:00 -08:00
ohci-s3c2410.c USB: ohci-s3c2410.c: remove err() usage 2012-04-27 11:24:43 -07:00
ohci-sa1111.c USB: ohci-sa1111.c: remove dbg() usage 2012-05-01 21:33:39 -07:00
ohci-sh.c USB: ohci-sh.c: remove err() usage 2012-04-27 11:24:44 -07:00
ohci-sm501.c OHCI: remove uses of hcd->state 2011-11-18 10:51:00 -08:00
ohci-spear.c USB: ehci: ohci: Add clk_{un}prepare() support 2012-04-18 14:33:43 -07:00
ohci-tmio.c USB: ohci-tmio.c: remove err() usage 2012-04-27 11:24:44 -07:00
ohci-xls.c USB: ohci-xls.c: remove err() usage 2012-04-27 11:24:45 -07:00
ohci.h USB: move transceiver from ehci_hcd and ohci_hcd to hcd and rename it as phy 2012-06-13 12:38:36 -07:00
oxu210hp-hcd.c USB: oxu210hp-hcd.c: remove dbg() usage 2012-05-01 21:33:43 -07:00
oxu210hp.h
pci-quirks.c xhci: Add Lynx Point to list of Intel switchable hosts. 2012-05-03 13:18:40 -07:00
pci-quirks.h Intel xhci: Support EHCI/xHCI port switching. 2011-05-27 12:07:36 -07:00
r8a66597-hcd.c Revert "usb: move struct usb_device->children to struct usb_hub_port->child" 2012-05-14 09:20:37 -07:00
r8a66597.h usb: r8a66597-hcd: add function for external controller 2011-07-08 14:57:11 -07:00
sl811-hcd.c Remove all #inclusions of asm/system.h 2012-03-28 18:30:03 +01:00
sl811.h
sl811_cs.c pcmcia: Convert pcmcia_device_id declarations to const 2011-05-06 07:46:22 +02:00
ssb-hcd.c usb/ssb: Add missing #include <linux/slab.h> 2012-04-23 13:22:00 -07:00
u132-hcd.c Remove all #inclusions of asm/system.h 2012-03-28 18:30:03 +01:00
uhci-debug.c USB: UHCI: Add support for big endian descriptors 2011-05-19 16:43:20 -07:00
uhci-grlib.c treewide: Convert uses of struct resource to resource_size(ptr) 2011-06-10 14:55:36 +02:00
uhci-hcd.c Remove all #inclusions of asm/system.h 2012-03-28 18:30:03 +01:00
uhci-hcd.h USB: UHCI: Add support for big endian descriptors 2011-05-19 16:43:20 -07:00
uhci-hub.c UHCI: hub_status_data should indicate if ports are resuming 2012-04-09 15:43:21 -07:00
uhci-pci.c USB: UHCI: Move PCI specific functions to uhci-pci.c 2011-05-06 18:24:00 -07:00
uhci-q.c usb: fix number of mapped SG DMA entries 2011-12-09 16:18:19 -08:00
xhci-dbg.c xHCI: correct to print the true HSEE of USBCMD 2012-04-10 15:21:52 -07:00
xhci-ext-caps.h xHCI: Correct the #define XHCI_LEGACY_DISABLE_SMI 2012-04-11 08:31:06 -07:00
xhci-hub.c xhci: Add roothub code to set U1/U2 timeouts. 2012-05-18 15:41:52 -07:00
xhci-mem.c xhci: Don't free endpoints in xhci_mem_cleanup() 2012-06-13 16:37:30 -07:00
xhci-pci.c xhci: Add Intel U1/U2 timeout policy. 2012-05-18 15:42:04 -07:00
xhci-plat.c usb: host: xhci: add platform driver support 2012-03-13 10:30:59 -07:00
xhci-ring.c xhci: Some Evaluate Context commands must succeed. 2012-05-18 15:42:00 -07:00
xhci.c usbdevfs: Add a USBDEVFS_GET_CAPABILITIES ioctl 2012-07-06 10:53:19 -07:00
xhci.h xhci: Add Intel U1/U2 timeout policy. 2012-05-18 15:42:04 -07:00