ChangeSet 1.1515.1.5, 2003/12/15 13:38:28-08:00, david-b@pacbell.net [PATCH] USB: new descriptor codes, types This patch adds definitions: - New "video" class, for video cameras and more complicated devices; - New "Interface association" descriptor type, used by video class, along with two other assigned desciptor type codes (OTG, "debug") listed in the same ECN to the USB 2.0 spec; - Type declarations for "Interface association" and OTG descriptors. It also replaces three copies of USB_DT_CS_* declarations in audio support with one in , and uses the newly exposed symbol in "usbnet". (Near as I can tell, the convention for those "class specific" descriptor types started with audio, and was then adopted by several other class specifications.) drivers/usb/class/audio.h | 6 ------ drivers/usb/class/usb-midi.h | 6 ------ drivers/usb/net/usbnet.c | 3 +-- include/linux/usb_ch9.h | 42 ++++++++++++++++++++++++++++++++++++++++++ sound/usb/usbaudio.h | 6 ------ 5 files changed, 43 insertions(+), 20 deletions(-) diff -Nru a/drivers/usb/class/audio.h b/drivers/usb/class/audio.h --- a/drivers/usb/class/audio.h Mon Dec 29 14:21:09 2003 +++ b/drivers/usb/class/audio.h Mon Dec 29 14:21:09 2003 @@ -1,9 +1,3 @@ -#define USB_DT_CS_DEVICE 0x21 -#define USB_DT_CS_CONFIG 0x22 -#define USB_DT_CS_STRING 0x23 -#define USB_DT_CS_INTERFACE 0x24 -#define USB_DT_CS_ENDPOINT 0x25 - #define CS_AUDIO_UNDEFINED 0x20 #define CS_AUDIO_DEVICE 0x21 #define CS_AUDIO_CONFIGURATION 0x22 diff -Nru a/drivers/usb/class/usb-midi.h b/drivers/usb/class/usb-midi.h --- a/drivers/usb/class/usb-midi.h Mon Dec 29 14:21:09 2003 +++ b/drivers/usb/class/usb-midi.h Mon Dec 29 14:21:09 2003 @@ -28,12 +28,6 @@ #define USB_SUBCLASS_MIDISTREAMING 3 #endif -#define USB_DT_CS_DEVICE 0x21 -#define USB_DT_CS_CONFIG 0x22 -#define USB_DT_CS_STRING 0x23 -#define USB_DT_CS_INTERFACE 0x24 -#define USB_DT_CS_ENDPOINT 0x25 - /* ------------------------------------------------------------------------- */ /* Roland MIDI Devices */ diff -Nru a/drivers/usb/net/usbnet.c b/drivers/usb/net/usbnet.c --- a/drivers/usb/net/usbnet.c Mon Dec 29 14:21:09 2003 +++ b/drivers/usb/net/usbnet.c Mon Dec 29 14:21:09 2003 @@ -923,8 +923,7 @@ memset (info, 0, sizeof *info); info->control = intf; while (len > 3) { - /* ignore bDescriptorType != CS_INTERFACE */ - if (buf [1] != 0x24) + if (buf [1] != USB_DT_CS_INTERFACE) goto next_desc; /* bDescriptorSubType identifies three "must have" descriptors; diff -Nru a/include/linux/usb_ch9.h b/include/linux/usb_ch9.h --- a/include/linux/usb_ch9.h Mon Dec 29 14:21:09 2003 +++ b/include/linux/usb_ch9.h Mon Dec 29 14:21:09 2003 @@ -116,6 +116,17 @@ #define USB_DT_DEVICE_QUALIFIER 0x06 #define USB_DT_OTHER_SPEED_CONFIG 0x07 #define USB_DT_INTERFACE_POWER 0x08 +/* these are from a minor usb 2.0 revision (ECN) */ +#define USB_DT_OTG 0x09 +#define USB_DT_DEBUG 0x0a +#define USB_DT_INTERFACE_ASSOCIATION 0x0b + +/* conventional codes for class-specific descriptors */ +#define USB_DT_CS_DEVICE 0x21 +#define USB_DT_CS_CONFIG 0x22 +#define USB_DT_CS_STRING 0x23 +#define USB_DT_CS_INTERFACE 0x24 +#define USB_DT_CS_ENDPOINT 0x25 /* All standard descriptors have these 2 fields at the beginning */ struct usb_descriptor_header { @@ -165,6 +176,7 @@ #define USB_CLASS_CDC_DATA 0x0a #define USB_CLASS_CSCID 0x0b /* chip+ smart card */ #define USB_CLASS_CONTENT_SEC 0x0d /* content security */ +#define USB_CLASS_VIDEO 0x0e #define USB_CLASS_APP_SPEC 0xfe #define USB_CLASS_VENDOR_SPEC 0xff @@ -278,6 +290,36 @@ __u8 bMaxPacketSize0; __u8 bNumConfigurations; __u8 bRESERVED; +} __attribute__ ((packed)); + + +/*-------------------------------------------------------------------------*/ + +/* USB_DT_OTG (from OTG 1.0a supplement) */ +struct usb_otg_descriptor { + __u8 bLength; + __u8 bDescriptorType; + + __u8 bmAttributes; /* support for HNP, SRP, etc */ +} __attribute__ ((packed)); + +/* from usb_otg_descriptor.bmAttributes */ +#define USB_OTG_SRP (1 << 0) +#define USB_OTG_HNP (1 << 1) /* swap host/device roles */ + +/*-------------------------------------------------------------------------*/ + +/* USB_DT_INTERFACE_ASSOCIATION: groups interfaces */ +struct usb_interface_assoc_descriptor { + __u8 bLength; + __u8 bDescriptorType; + + __u8 bFirstInterface; + __u8 bInterfaceCount; + __u8 bFunctionClass; + __u8 bFunctionSubClass; + __u8 bFunctionProtocol; + __u8 iFunction; } __attribute__ ((packed)); diff -Nru a/sound/usb/usbaudio.h b/sound/usb/usbaudio.h --- a/sound/usb/usbaudio.h Mon Dec 29 14:21:09 2003 +++ b/sound/usb/usbaudio.h Mon Dec 29 14:21:09 2003 @@ -30,12 +30,6 @@ #define USB_SUBCLASS_MIDI_STREAMING 0x03 #define USB_SUBCLASS_VENDOR_SPEC 0xff -#define USB_DT_CS_DEVICE 0x21 -#define USB_DT_CS_CONFIG 0x22 -#define USB_DT_CS_STRING 0x23 -#define USB_DT_CS_INTERFACE 0x24 -#define USB_DT_CS_ENDPOINT 0x25 - #define CS_AUDIO_UNDEFINED 0x20 #define CS_AUDIO_DEVICE 0x21 #define CS_AUDIO_CONFIGURATION 0x22