diff options
Diffstat (limited to 'drivers/usb')
-rw-r--r-- | drivers/usb/core/devio.c | 17 | ||||
-rw-r--r-- | drivers/usb/host/xhci.c | 2 |
2 files changed, 19 insertions, 0 deletions
diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c index 62679bc031fb..0b387c1a8b7e 100644 --- a/drivers/usb/core/devio.c +++ b/drivers/usb/core/devio.c | |||
@@ -1824,6 +1824,20 @@ static int proc_release_port(struct dev_state *ps, void __user *arg) | |||
1824 | return usb_hub_release_port(ps->dev, portnum, ps); | 1824 | return usb_hub_release_port(ps->dev, portnum, ps); |
1825 | } | 1825 | } |
1826 | 1826 | ||
1827 | static int proc_get_capabilities(struct dev_state *ps, void __user *arg) | ||
1828 | { | ||
1829 | __u32 caps; | ||
1830 | |||
1831 | caps = USBDEVFS_CAP_ZERO_PACKET | USBDEVFS_CAP_NO_PACKET_SIZE_LIM; | ||
1832 | if (!ps->dev->bus->no_stop_on_short) | ||
1833 | caps |= USBDEVFS_CAP_BULK_CONTINUATION; | ||
1834 | |||
1835 | if (put_user(caps, (__u32 __user *)arg)) | ||
1836 | return -EFAULT; | ||
1837 | |||
1838 | return 0; | ||
1839 | } | ||
1840 | |||
1827 | /* | 1841 | /* |
1828 | * NOTE: All requests here that have interface numbers as parameters | 1842 | * NOTE: All requests here that have interface numbers as parameters |
1829 | * are assuming that somehow the configuration has been prevented from | 1843 | * are assuming that somehow the configuration has been prevented from |
@@ -1994,6 +2008,9 @@ static long usbdev_do_ioctl(struct file *file, unsigned int cmd, | |||
1994 | snoop(&dev->dev, "%s: RELEASE_PORT\n", __func__); | 2008 | snoop(&dev->dev, "%s: RELEASE_PORT\n", __func__); |
1995 | ret = proc_release_port(ps, p); | 2009 | ret = proc_release_port(ps, p); |
1996 | break; | 2010 | break; |
2011 | case USBDEVFS_GET_CAPABILITIES: | ||
2012 | ret = proc_get_capabilities(ps, p); | ||
2013 | break; | ||
1997 | } | 2014 | } |
1998 | usb_unlock_device(dev); | 2015 | usb_unlock_device(dev); |
1999 | if (ret >= 0) | 2016 | if (ret >= 0) |
diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c index a979cd0dbe0f..7648b2d4b268 100644 --- a/drivers/usb/host/xhci.c +++ b/drivers/usb/host/xhci.c | |||
@@ -4450,6 +4450,8 @@ int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks) | |||
4450 | 4450 | ||
4451 | /* Accept arbitrarily long scatter-gather lists */ | 4451 | /* Accept arbitrarily long scatter-gather lists */ |
4452 | hcd->self.sg_tablesize = ~0; | 4452 | hcd->self.sg_tablesize = ~0; |
4453 | /* XHCI controllers don't stop the ep queue on short packets :| */ | ||
4454 | hcd->self.no_stop_on_short = 1; | ||
4453 | 4455 | ||
4454 | if (usb_hcd_is_primary_hcd(hcd)) { | 4456 | if (usb_hcd_is_primary_hcd(hcd)) { |
4455 | xhci = kzalloc(sizeof(struct xhci_hcd), GFP_KERNEL); | 4457 | xhci = kzalloc(sizeof(struct xhci_hcd), GFP_KERNEL); |