diff options
| author | Craig W. Nadler <craig@nadler.us> | 2007-06-15 23:14:35 -0400 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@suse.de> | 2007-07-12 19:34:40 -0400 |
| commit | 165fe97ed6107d3cde63592d5ac36400a5eb9f6f (patch) | |
| tree | 824bb475b4f36af465989c5dac62f4097a1bd01c /include/linux | |
| parent | 50d2dc7266573dfbdc84fc207494dd21315782ef (diff) | |
USB: add IAD support to usbfs and sysfs
USB_IAD: Adds support for USB Interface Association Descriptors.
This patch adds support to the USB host stack for parsing, storing, and
displaying Interface Association Descriptors. In /proc/bus/usb/devices
lines starting with A: show the fields in an IAD. In sysfs if an
interface on a USB device is referenced by an IAD the following files
will be added to the sysfs directory for that interface:
iad_bFirstInterface, iad_bInterfaceCount, iad_bFunctionClass, and
iad_bFunctionSubClass, iad_bFunctionProtocol
Signed-off-by: Craig W. Nadler <craig@nadler.us>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/usb.h | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/include/linux/usb.h b/include/linux/usb.h index 533c32374e01..7a60946df3b6 100644 --- a/include/linux/usb.h +++ b/include/linux/usb.h | |||
| @@ -146,6 +146,10 @@ struct usb_interface { | |||
| 146 | * active alternate setting */ | 146 | * active alternate setting */ |
| 147 | unsigned num_altsetting; /* number of alternate settings */ | 147 | unsigned num_altsetting; /* number of alternate settings */ |
| 148 | 148 | ||
| 149 | /* If there is an interface association descriptor then it will list | ||
| 150 | * the associated interfaces */ | ||
| 151 | struct usb_interface_assoc_descriptor *intf_assoc; | ||
| 152 | |||
| 149 | int minor; /* minor number this interface is | 153 | int minor; /* minor number this interface is |
| 150 | * bound to */ | 154 | * bound to */ |
| 151 | enum usb_interface_condition condition; /* state of binding */ | 155 | enum usb_interface_condition condition; /* state of binding */ |
| @@ -175,6 +179,7 @@ void usb_put_intf(struct usb_interface *intf); | |||
| 175 | 179 | ||
| 176 | /* this maximum is arbitrary */ | 180 | /* this maximum is arbitrary */ |
| 177 | #define USB_MAXINTERFACES 32 | 181 | #define USB_MAXINTERFACES 32 |
| 182 | #define USB_MAXIADS USB_MAXINTERFACES/2 | ||
| 178 | 183 | ||
| 179 | /** | 184 | /** |
| 180 | * struct usb_interface_cache - long-term representation of a device interface | 185 | * struct usb_interface_cache - long-term representation of a device interface |
| @@ -245,6 +250,11 @@ struct usb_host_config { | |||
| 245 | struct usb_config_descriptor desc; | 250 | struct usb_config_descriptor desc; |
| 246 | 251 | ||
| 247 | char *string; /* iConfiguration string, if present */ | 252 | char *string; /* iConfiguration string, if present */ |
| 253 | |||
| 254 | /* List of any Interface Association Descriptors in this | ||
| 255 | * configuration. */ | ||
| 256 | struct usb_interface_assoc_descriptor *intf_assoc[USB_MAXIADS]; | ||
| 257 | |||
| 248 | /* the interfaces associated with this configuration, | 258 | /* the interfaces associated with this configuration, |
| 249 | * stored in no particular order */ | 259 | * stored in no particular order */ |
| 250 | struct usb_interface *interface[USB_MAXINTERFACES]; | 260 | struct usb_interface *interface[USB_MAXINTERFACES]; |
