usb: Make USB 3.0 roothub have a SS EP comp descriptor.
authorSarah Sharp <sarah.a.sharp@linux.intel.com>
Mon, 13 Sep 2010 19:01:02 +0000 (12:01 -0700)
committerSarah Sharp <sarah.a.sharp@linux.intel.com>
Mon, 14 Mar 2011 01:07:12 +0000 (18:07 -0700)
Make the USB 3.0 roothub registered by the USB core have a SuperSpeed
Endpoint Companion Descriptor after the interrupt endpoint.  All USB 3.0
devices are required to have this, and the USB 3.0 bus specification
(section 10.13.1) says which values the descriptor should have.

Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
drivers/usb/core/hcd.c

index a97ed6d293e915509f97495dc02c05b09394e2bb..93c0b92ae402f07f9ba2801e68bfdfeeb67efd08 100644 (file)
@@ -297,7 +297,7 @@ static const u8 ss_rh_config_descriptor[] = {
        /* one configuration */
        0x09,       /*  __u8  bLength; */
        0x02,       /*  __u8  bDescriptorType; Configuration */
-       0x19, 0x00, /*  __le16 wTotalLength; FIXME */
+       0x1f, 0x00, /*  __le16 wTotalLength; */
        0x01,       /*  __u8  bNumInterfaces; (1) */
        0x01,       /*  __u8  bConfigurationValue; */
        0x00,       /*  __u8  iConfiguration; */
@@ -327,11 +327,14 @@ static const u8 ss_rh_config_descriptor[] = {
                    /* __le16 ep_wMaxPacketSize; 1 + (MAX_ROOT_PORTS / 8)
                     * see hub.c:hub_configure() for details. */
        (USB_MAXCHILDREN + 1 + 7) / 8, 0x00,
-       0x0c        /*  __u8  ep_bInterval; (256ms -- usb 2.0 spec) */
-       /*
-        * All 3.0 hubs should have an endpoint companion descriptor,
-        * but we're ignoring that for now.  FIXME?
-        */
+       0x0c,       /*  __u8  ep_bInterval; (256ms -- usb 2.0 spec) */
+
+       /* one SuperSpeed endpoint companion descriptor */
+       0x06,        /* __u8 ss_bLength */
+       0x30,        /* __u8 ss_bDescriptorType; SuperSpeed EP Companion */
+       0x00,        /* __u8 ss_bMaxBurst; allows 1 TX between ACKs */
+       0x00,        /* __u8 ss_bmAttributes; 1 packet per service interval */
+       0x02, 0x00   /* __le16 ss_wBytesPerInterval; 15 bits for max 15 ports */
 };
 
 /*-------------------------------------------------------------------------*/