From 9616878a7025435c6e88f9c6f45280ff8f115789 Mon Sep 17 00:00:00 2001 From: David Brownell Date: Sun, 14 Dec 2003 21:38:28 -0800 Subject: [PATCH] [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 --git a/drivers/usb/class/audio.h b/drivers/usb/class/audio.h index bb51e468bac6c..45916eb12103e 100644 --- a/drivers/usb/class/audio.h +++ b/drivers/usb/class/audio.h @@ -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 --git a/drivers/usb/class/usb-midi.h b/drivers/usb/class/usb-midi.h index 1e99c991de5b0..0e6eac11602ae 100644 --- a/drivers/usb/class/usb-midi.h +++ b/drivers/usb/class/usb-midi.h @@ -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 --git a/drivers/usb/net/usbnet.c b/drivers/usb/net/usbnet.c index 25d5b21f77a60..e3447d092f5f6 100644 --- a/drivers/usb/net/usbnet.c +++ b/drivers/usb/net/usbnet.c @@ -923,8 +923,7 @@ static int cdc_bind (struct usbnet *dev, struct usb_interface *intf) 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 --git a/include/linux/usb_ch9.h b/include/linux/usb_ch9.h index 916378f747c17..682e951148700 100644 --- a/include/linux/usb_ch9.h +++ b/include/linux/usb_ch9.h @@ -116,6 +116,17 @@ struct usb_ctrlrequest { #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 @@ struct usb_device_descriptor { #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 @@ -281,6 +293,36 @@ struct usb_qualifier_descriptor { } __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)); + + /*-------------------------------------------------------------------------*/ /* USB 2.0 defines three speeds, here's how Linux identifies them */ diff --git a/sound/usb/usbaudio.h b/sound/usb/usbaudio.h index 2420cabba0114..1706a1be5ec87 100644 --- a/sound/usb/usbaudio.h +++ b/sound/usb/usbaudio.h @@ -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 -- 2.53.0