diff options
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/usb.h | 16 | ||||
| -rw-r--r-- | include/linux/usb/ch9.h | 16 |
2 files changed, 32 insertions, 0 deletions
diff --git a/include/linux/usb.h b/include/linux/usb.h index 112a2d6e922f..13bced521b83 100644 --- a/include/linux/usb.h +++ b/include/linux/usb.h | |||
| @@ -36,6 +36,7 @@ struct wusb_dev; | |||
| 36 | * - configs have one (often) or more interfaces; | 36 | * - configs have one (often) or more interfaces; |
| 37 | * - interfaces have one (usually) or more settings; | 37 | * - interfaces have one (usually) or more settings; |
| 38 | * - each interface setting has zero or (usually) more endpoints. | 38 | * - each interface setting has zero or (usually) more endpoints. |
| 39 | * - a SuperSpeed endpoint has a companion descriptor | ||
| 39 | * | 40 | * |
| 40 | * And there might be other descriptors mixed in with those. | 41 | * And there might be other descriptors mixed in with those. |
| 41 | * | 42 | * |
| @@ -44,6 +45,19 @@ struct wusb_dev; | |||
| 44 | 45 | ||
| 45 | struct ep_device; | 46 | struct ep_device; |
| 46 | 47 | ||
| 48 | /* For SS devices */ | ||
| 49 | /** | ||
| 50 | * struct usb_host_ep_comp - Valid for SuperSpeed devices only | ||
| 51 | * @desc: endpoint companion descriptor, wMaxPacketSize in native byteorder | ||
| 52 | * @extra: descriptors following this endpoint companion descriptor | ||
| 53 | * @extralen: how many bytes of "extra" are valid | ||
| 54 | */ | ||
| 55 | struct usb_host_ep_comp { | ||
| 56 | struct usb_ep_comp_descriptor desc; | ||
| 57 | unsigned char *extra; /* Extra descriptors */ | ||
| 58 | int extralen; | ||
| 59 | }; | ||
| 60 | |||
| 47 | /** | 61 | /** |
| 48 | * struct usb_host_endpoint - host-side endpoint descriptor and queue | 62 | * struct usb_host_endpoint - host-side endpoint descriptor and queue |
| 49 | * @desc: descriptor for this endpoint, wMaxPacketSize in native byteorder | 63 | * @desc: descriptor for this endpoint, wMaxPacketSize in native byteorder |
| @@ -51,6 +65,7 @@ struct ep_device; | |||
| 51 | * @hcpriv: for use by HCD; typically holds hardware dma queue head (QH) | 65 | * @hcpriv: for use by HCD; typically holds hardware dma queue head (QH) |
| 52 | * with one or more transfer descriptors (TDs) per urb | 66 | * with one or more transfer descriptors (TDs) per urb |
| 53 | * @ep_dev: ep_device for sysfs info | 67 | * @ep_dev: ep_device for sysfs info |
| 68 | * @ep_comp: companion descriptor information for this endpoint | ||
| 54 | * @extra: descriptors following this endpoint in the configuration | 69 | * @extra: descriptors following this endpoint in the configuration |
| 55 | * @extralen: how many bytes of "extra" are valid | 70 | * @extralen: how many bytes of "extra" are valid |
| 56 | * @enabled: URBs may be submitted to this endpoint | 71 | * @enabled: URBs may be submitted to this endpoint |
| @@ -63,6 +78,7 @@ struct usb_host_endpoint { | |||
| 63 | struct list_head urb_list; | 78 | struct list_head urb_list; |
| 64 | void *hcpriv; | 79 | void *hcpriv; |
| 65 | struct ep_device *ep_dev; /* For sysfs info */ | 80 | struct ep_device *ep_dev; /* For sysfs info */ |
| 81 | struct usb_host_ep_comp *ep_comp; /* For SS devices */ | ||
| 66 | 82 | ||
| 67 | unsigned char *extra; /* Extra descriptors */ | 83 | unsigned char *extra; /* Extra descriptors */ |
| 68 | int extralen; | 84 | int extralen; |
diff --git a/include/linux/usb/ch9.h b/include/linux/usb/ch9.h index 93bfe6352342..9e9c5c0a3d72 100644 --- a/include/linux/usb/ch9.h +++ b/include/linux/usb/ch9.h | |||
| @@ -191,6 +191,8 @@ struct usb_ctrlrequest { | |||
| 191 | #define USB_DT_WIRE_ADAPTER 0x21 | 191 | #define USB_DT_WIRE_ADAPTER 0x21 |
| 192 | #define USB_DT_RPIPE 0x22 | 192 | #define USB_DT_RPIPE 0x22 |
| 193 | #define USB_DT_CS_RADIO_CONTROL 0x23 | 193 | #define USB_DT_CS_RADIO_CONTROL 0x23 |
| 194 | /* From the USB 3.0 spec */ | ||
| 195 | #define USB_DT_SS_ENDPOINT_COMP 0x30 | ||
| 194 | 196 | ||
| 195 | /* Conventional codes for class-specific descriptors. The convention is | 197 | /* Conventional codes for class-specific descriptors. The convention is |
| 196 | * defined in the USB "Common Class" Spec (3.11). Individual class specs | 198 | * defined in the USB "Common Class" Spec (3.11). Individual class specs |
| @@ -535,6 +537,20 @@ static inline int usb_endpoint_is_isoc_out( | |||
| 535 | 537 | ||
| 536 | /*-------------------------------------------------------------------------*/ | 538 | /*-------------------------------------------------------------------------*/ |
| 537 | 539 | ||
| 540 | /* USB_DT_SS_ENDPOINT_COMP: SuperSpeed Endpoint Companion descriptor */ | ||
| 541 | struct usb_ep_comp_descriptor { | ||
| 542 | __u8 bLength; | ||
| 543 | __u8 bDescriptorType; | ||
| 544 | |||
| 545 | __u8 bMaxBurst; | ||
| 546 | __u8 bmAttributes; | ||
| 547 | __u16 wBytesPerInterval; | ||
| 548 | } __attribute__ ((packed)); | ||
| 549 | |||
| 550 | #define USB_DT_EP_COMP_SIZE 6 | ||
| 551 | |||
| 552 | /*-------------------------------------------------------------------------*/ | ||
| 553 | |||
| 538 | /* USB_DT_DEVICE_QUALIFIER: Device Qualifier descriptor */ | 554 | /* USB_DT_DEVICE_QUALIFIER: Device Qualifier descriptor */ |
| 539 | struct usb_qualifier_descriptor { | 555 | struct usb_qualifier_descriptor { |
| 540 | __u8 bLength; | 556 | __u8 bLength; |
