1*232c150aSwdenk /* 2*232c150aSwdenk * (C) Copyright 2003 3*232c150aSwdenk * Gerry Hamel, geh@ti.com, Texas Instruments 4*232c150aSwdenk * 5*232c150aSwdenk * Based on 6*232c150aSwdenk * linux/drivers/usbd/usb-function.h - USB Function 7*232c150aSwdenk * 8*232c150aSwdenk * Copyright (c) 2000, 2001, 2002 Lineo 9*232c150aSwdenk * Copyright (c) 2001 Hewlett Packard 10*232c150aSwdenk * 11*232c150aSwdenk * By: 12*232c150aSwdenk * Stuart Lynne <sl@lineo.com>, 13*232c150aSwdenk * Tom Rushworth <tbr@lineo.com>, 14*232c150aSwdenk * Bruce Balden <balden@lineo.com> 15*232c150aSwdenk * 16*232c150aSwdenk * This program is free software; you can redistribute it and/or modify 17*232c150aSwdenk * it under the terms of the GNU General Public License as published by 18*232c150aSwdenk * the Free Software Foundation; either version 2 of the License, or 19*232c150aSwdenk * (at your option) any later version. 20*232c150aSwdenk * 21*232c150aSwdenk * This program is distributed in the hope that it will be useful, 22*232c150aSwdenk * but WITHOUT ANY WARRANTY; without even the implied warranty of 23*232c150aSwdenk * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 24*232c150aSwdenk * GNU General Public License for more details. 25*232c150aSwdenk * 26*232c150aSwdenk * You should have received a copy of the GNU General Public License 27*232c150aSwdenk * along with this program; if not, write to the Free Software 28*232c150aSwdenk * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 29*232c150aSwdenk * 30*232c150aSwdenk */ 31*232c150aSwdenk 32*232c150aSwdenk /* USB Descriptors - Create a complete description of all of the 33*232c150aSwdenk * function driver capabilities. These map directly to the USB descriptors. 34*232c150aSwdenk * 35*232c150aSwdenk * This heirarchy is created by the functions drivers and is passed to the 36*232c150aSwdenk * usb-device driver when the function driver is registered. 37*232c150aSwdenk * 38*232c150aSwdenk * device 39*232c150aSwdenk * configuration 40*232c150aSwdenk * interface 41*232c150aSwdenk * alternate 42*232c150aSwdenk * class 43*232c150aSwdenk * class 44*232c150aSwdenk * alternate 45*232c150aSwdenk * endpoint 46*232c150aSwdenk * endpoint 47*232c150aSwdenk * interface 48*232c150aSwdenk * alternate 49*232c150aSwdenk * endpoint 50*232c150aSwdenk * endpoint 51*232c150aSwdenk * configuration 52*232c150aSwdenk * interface 53*232c150aSwdenk * alternate 54*232c150aSwdenk * endpoint 55*232c150aSwdenk * endpoint 56*232c150aSwdenk * 57*232c150aSwdenk * 58*232c150aSwdenk * The configuration structures refer to the USB Configurations that will be 59*232c150aSwdenk * made available to a USB HOST during the enumeration process. 60*232c150aSwdenk * 61*232c150aSwdenk * The USB HOST will select a configuration and optionally an interface with 62*232c150aSwdenk * the usb set configuration and set interface commands. 63*232c150aSwdenk * 64*232c150aSwdenk * The selected interface (or the default interface if not specifically 65*232c150aSwdenk * selected) will define the list of endpoints that will be used. 66*232c150aSwdenk * 67*232c150aSwdenk * The configuration and interfaces are stored in an array that is indexed 68*232c150aSwdenk * by the specified configuratin or interface number minus one. 69*232c150aSwdenk * 70*232c150aSwdenk * A configuration number of zero is used to specify a return to the unconfigured 71*232c150aSwdenk * state. 72*232c150aSwdenk * 73*232c150aSwdenk */ 74*232c150aSwdenk 75*232c150aSwdenk 76*232c150aSwdenk #ifndef __USBDESCRIPTORS_H__ 77*232c150aSwdenk #define __USBDESCRIPTORS_H__ 78*232c150aSwdenk 79*232c150aSwdenk #include <asm/types.h> 80*232c150aSwdenk 81*232c150aSwdenk /* 82*232c150aSwdenk * communications class types 83*232c150aSwdenk * 84*232c150aSwdenk * c.f. CDC USB Class Definitions for Communications Devices 85*232c150aSwdenk * c.f. WMCD USB CDC Subclass Specification for Wireless Mobile Communications Devices 86*232c150aSwdenk * 87*232c150aSwdenk */ 88*232c150aSwdenk 89*232c150aSwdenk #define CLASS_BCD_VERSION 0x0110 90*232c150aSwdenk 91*232c150aSwdenk /* c.f. CDC 4.1 Table 14 */ 92*232c150aSwdenk #define COMMUNICATIONS_DEVICE_CLASS 0x02 93*232c150aSwdenk 94*232c150aSwdenk /* c.f. CDC 4.2 Table 15 */ 95*232c150aSwdenk #define COMMUNICATIONS_INTERFACE_CLASS 0x02 96*232c150aSwdenk 97*232c150aSwdenk /* c.f. CDC 4.3 Table 16 */ 98*232c150aSwdenk #define COMMUNICATIONS_NO_SUBCLASS 0x00 99*232c150aSwdenk #define COMMUNICATIONS_DLCM_SUBCLASS 0x01 100*232c150aSwdenk #define COMMUNICATIONS_ACM_SUBCLASS 0x02 101*232c150aSwdenk #define COMMUNICATIONS_TCM_SUBCLASS 0x03 102*232c150aSwdenk #define COMMUNICATIONS_MCCM_SUBCLASS 0x04 103*232c150aSwdenk #define COMMUNICATIONS_CCM_SUBCLASS 0x05 104*232c150aSwdenk #define COMMUNICATIONS_ENCM_SUBCLASS 0x06 105*232c150aSwdenk #define COMMUNICATIONS_ANCM_SUBCLASS 0x07 106*232c150aSwdenk 107*232c150aSwdenk /* c.f. WMCD 5.1 */ 108*232c150aSwdenk #define COMMUNICATIONS_WHCM_SUBCLASS 0x08 109*232c150aSwdenk #define COMMUNICATIONS_DMM_SUBCLASS 0x09 110*232c150aSwdenk #define COMMUNICATIONS_MDLM_SUBCLASS 0x0a 111*232c150aSwdenk #define COMMUNICATIONS_OBEX_SUBCLASS 0x0b 112*232c150aSwdenk 113*232c150aSwdenk /* c.f. CDC 4.6 Table 18 */ 114*232c150aSwdenk #define DATA_INTERFACE_CLASS 0x0a 115*232c150aSwdenk 116*232c150aSwdenk /* c.f. CDC 4.7 Table 19 */ 117*232c150aSwdenk #define COMMUNICATIONS_NO_PROTOCOL 0x00 118*232c150aSwdenk 119*232c150aSwdenk 120*232c150aSwdenk /* c.f. CDC 5.2.3 Table 24 */ 121*232c150aSwdenk #define CS_INTERFACE 0x24 122*232c150aSwdenk #define CS_ENDPOINT 0x25 123*232c150aSwdenk 124*232c150aSwdenk /* 125*232c150aSwdenk * bDescriptorSubtypes 126*232c150aSwdenk * 127*232c150aSwdenk * c.f. CDC 5.2.3 Table 25 128*232c150aSwdenk * c.f. WMCD 5.3 Table 5.3 129*232c150aSwdenk */ 130*232c150aSwdenk 131*232c150aSwdenk #define USB_ST_HEADER 0x00 132*232c150aSwdenk #define USB_ST_CMF 0x01 133*232c150aSwdenk #define USB_ST_ACMF 0x02 134*232c150aSwdenk #define USB_ST_DLMF 0x03 135*232c150aSwdenk #define USB_ST_TRF 0x04 136*232c150aSwdenk #define USB_ST_TCLF 0x05 137*232c150aSwdenk #define USB_ST_UF 0x06 138*232c150aSwdenk #define USB_ST_CSF 0x07 139*232c150aSwdenk #define USB_ST_TOMF 0x08 140*232c150aSwdenk #define USB_ST_USBTF 0x09 141*232c150aSwdenk #define USB_ST_NCT 0x0a 142*232c150aSwdenk #define USB_ST_PUF 0x0b 143*232c150aSwdenk #define USB_ST_EUF 0x0c 144*232c150aSwdenk #define USB_ST_MCMF 0x0d 145*232c150aSwdenk #define USB_ST_CCMF 0x0e 146*232c150aSwdenk #define USB_ST_ENF 0x0f 147*232c150aSwdenk #define USB_ST_ATMNF 0x10 148*232c150aSwdenk 149*232c150aSwdenk #define USB_ST_WHCM 0x11 150*232c150aSwdenk #define USB_ST_MDLM 0x12 151*232c150aSwdenk #define USB_ST_MDLMD 0x13 152*232c150aSwdenk #define USB_ST_DMM 0x14 153*232c150aSwdenk #define USB_ST_OBEX 0x15 154*232c150aSwdenk #define USB_ST_CS 0x16 155*232c150aSwdenk #define USB_ST_CSD 0x17 156*232c150aSwdenk #define USB_ST_TCM 0x18 157*232c150aSwdenk 158*232c150aSwdenk /* endpoint modifiers 159*232c150aSwdenk * static struct usb_endpoint_description function_default_A_1[] = { 160*232c150aSwdenk * 161*232c150aSwdenk * {this_endpoint: 0, attributes: CONTROL, max_size: 8, polling_interval: 0 }, 162*232c150aSwdenk * {this_endpoint: 1, attributes: BULK, max_size: 64, polling_interval: 0, direction: IN}, 163*232c150aSwdenk * {this_endpoint: 2, attributes: BULK, max_size: 64, polling_interval: 0, direction: OUT}, 164*232c150aSwdenk * {this_endpoint: 3, attributes: INTERRUPT, max_size: 8, polling_interval: 0}, 165*232c150aSwdenk * 166*232c150aSwdenk * 167*232c150aSwdenk */ 168*232c150aSwdenk #define OUT 0x00 169*232c150aSwdenk #define IN 0x80 170*232c150aSwdenk 171*232c150aSwdenk #define CONTROL 0x00 172*232c150aSwdenk #define ISOCHRONOUS 0x01 173*232c150aSwdenk #define BULK 0x02 174*232c150aSwdenk #define INTERRUPT 0x03 175*232c150aSwdenk 176*232c150aSwdenk 177*232c150aSwdenk /* configuration modifiers 178*232c150aSwdenk */ 179*232c150aSwdenk #define BMATTRIBUTE_RESERVED 0x80 180*232c150aSwdenk #define BMATTRIBUTE_SELF_POWERED 0x40 181*232c150aSwdenk 182*232c150aSwdenk /* 183*232c150aSwdenk * standard usb descriptor structures 184*232c150aSwdenk */ 185*232c150aSwdenk 186*232c150aSwdenk struct usb_endpoint_descriptor { 187*232c150aSwdenk u8 bLength; 188*232c150aSwdenk u8 bDescriptorType; /* 0x5 */ 189*232c150aSwdenk u8 bEndpointAddress; 190*232c150aSwdenk u8 bmAttributes; 191*232c150aSwdenk u16 wMaxPacketSize; 192*232c150aSwdenk u8 bInterval; 193*232c150aSwdenk } __attribute__ ((packed)); 194*232c150aSwdenk 195*232c150aSwdenk struct usb_interface_descriptor { 196*232c150aSwdenk u8 bLength; 197*232c150aSwdenk u8 bDescriptorType; /* 0x04 */ 198*232c150aSwdenk u8 bInterfaceNumber; 199*232c150aSwdenk u8 bAlternateSetting; 200*232c150aSwdenk u8 bNumEndpoints; 201*232c150aSwdenk u8 bInterfaceClass; 202*232c150aSwdenk u8 bInterfaceSubClass; 203*232c150aSwdenk u8 bInterfaceProtocol; 204*232c150aSwdenk u8 iInterface; 205*232c150aSwdenk } __attribute__ ((packed)); 206*232c150aSwdenk 207*232c150aSwdenk struct usb_configuration_descriptor { 208*232c150aSwdenk u8 bLength; 209*232c150aSwdenk u8 bDescriptorType; /* 0x2 */ 210*232c150aSwdenk u16 wTotalLength; 211*232c150aSwdenk u8 bNumInterfaces; 212*232c150aSwdenk u8 bConfigurationValue; 213*232c150aSwdenk u8 iConfiguration; 214*232c150aSwdenk u8 bmAttributes; 215*232c150aSwdenk u8 bMaxPower; 216*232c150aSwdenk } __attribute__ ((packed)); 217*232c150aSwdenk 218*232c150aSwdenk struct usb_device_descriptor { 219*232c150aSwdenk u8 bLength; 220*232c150aSwdenk u8 bDescriptorType; /* 0x01 */ 221*232c150aSwdenk u16 bcdUSB; 222*232c150aSwdenk u8 bDeviceClass; 223*232c150aSwdenk u8 bDeviceSubClass; 224*232c150aSwdenk u8 bDeviceProtocol; 225*232c150aSwdenk u8 bMaxPacketSize0; 226*232c150aSwdenk u16 idVendor; 227*232c150aSwdenk u16 idProduct; 228*232c150aSwdenk u16 bcdDevice; 229*232c150aSwdenk u8 iManufacturer; 230*232c150aSwdenk u8 iProduct; 231*232c150aSwdenk u8 iSerialNumber; 232*232c150aSwdenk u8 bNumConfigurations; 233*232c150aSwdenk } __attribute__ ((packed)); 234*232c150aSwdenk 235*232c150aSwdenk struct usb_string_descriptor { 236*232c150aSwdenk u8 bLength; 237*232c150aSwdenk u8 bDescriptorType; /* 0x03 */ 238*232c150aSwdenk u16 wData[0]; 239*232c150aSwdenk } __attribute__ ((packed)); 240*232c150aSwdenk 241*232c150aSwdenk struct usb_generic_descriptor { 242*232c150aSwdenk u8 bLength; 243*232c150aSwdenk u8 bDescriptorType; 244*232c150aSwdenk u8 bDescriptorSubtype; 245*232c150aSwdenk } __attribute__ ((packed)); 246*232c150aSwdenk 247*232c150aSwdenk 248*232c150aSwdenk /* 249*232c150aSwdenk * communications class descriptor structures 250*232c150aSwdenk * 251*232c150aSwdenk * c.f. CDC 5.2 Table 25c 252*232c150aSwdenk */ 253*232c150aSwdenk 254*232c150aSwdenk struct usb_class_function_descriptor { 255*232c150aSwdenk u8 bFunctionLength; 256*232c150aSwdenk u8 bDescriptorType; 257*232c150aSwdenk u8 bDescriptorSubtype; 258*232c150aSwdenk } __attribute__ ((packed)); 259*232c150aSwdenk 260*232c150aSwdenk struct usb_class_function_descriptor_generic { 261*232c150aSwdenk u8 bFunctionLength; 262*232c150aSwdenk u8 bDescriptorType; 263*232c150aSwdenk u8 bDescriptorSubtype; 264*232c150aSwdenk u8 bmCapabilities; 265*232c150aSwdenk } __attribute__ ((packed)); 266*232c150aSwdenk 267*232c150aSwdenk struct usb_class_header_function_descriptor { 268*232c150aSwdenk u8 bFunctionLength; 269*232c150aSwdenk u8 bDescriptorType; 270*232c150aSwdenk u8 bDescriptorSubtype; /* 0x00 */ 271*232c150aSwdenk u16 bcdCDC; 272*232c150aSwdenk } __attribute__ ((packed)); 273*232c150aSwdenk 274*232c150aSwdenk struct usb_class_call_management_descriptor { 275*232c150aSwdenk u8 bFunctionLength; 276*232c150aSwdenk u8 bDescriptorType; 277*232c150aSwdenk u8 bDescriptorSubtype; /* 0x01 */ 278*232c150aSwdenk u8 bmCapabilities; 279*232c150aSwdenk u8 bDataInterface; 280*232c150aSwdenk } __attribute__ ((packed)); 281*232c150aSwdenk 282*232c150aSwdenk struct usb_class_abstract_control_descriptor { 283*232c150aSwdenk u8 bFunctionLength; 284*232c150aSwdenk u8 bDescriptorType; 285*232c150aSwdenk u8 bDescriptorSubtype; /* 0x02 */ 286*232c150aSwdenk u8 bmCapabilities; 287*232c150aSwdenk } __attribute__ ((packed)); 288*232c150aSwdenk 289*232c150aSwdenk struct usb_class_direct_line_descriptor { 290*232c150aSwdenk u8 bFunctionLength; 291*232c150aSwdenk u8 bDescriptorType; 292*232c150aSwdenk u8 bDescriptorSubtype; /* 0x03 */ 293*232c150aSwdenk } __attribute__ ((packed)); 294*232c150aSwdenk 295*232c150aSwdenk struct usb_class_telephone_ringer_descriptor { 296*232c150aSwdenk u8 bFunctionLength; 297*232c150aSwdenk u8 bDescriptorType; 298*232c150aSwdenk u8 bDescriptorSubtype; /* 0x04 */ 299*232c150aSwdenk u8 bRingerVolSeps; 300*232c150aSwdenk u8 bNumRingerPatterns; 301*232c150aSwdenk } __attribute__ ((packed)); 302*232c150aSwdenk 303*232c150aSwdenk struct usb_class_telephone_call_descriptor { 304*232c150aSwdenk u8 bFunctionLength; 305*232c150aSwdenk u8 bDescriptorType; 306*232c150aSwdenk u8 bDescriptorSubtype; /* 0x05 */ 307*232c150aSwdenk u8 bmCapabilities; 308*232c150aSwdenk } __attribute__ ((packed)); 309*232c150aSwdenk 310*232c150aSwdenk struct usb_class_union_function_descriptor { 311*232c150aSwdenk u8 bFunctionLength; 312*232c150aSwdenk u8 bDescriptorType; 313*232c150aSwdenk u8 bDescriptorSubtype; /* 0x06 */ 314*232c150aSwdenk u8 bMasterInterface; 315*232c150aSwdenk u8 bSlaveInterface0[0]; 316*232c150aSwdenk } __attribute__ ((packed)); 317*232c150aSwdenk 318*232c150aSwdenk struct usb_class_country_selection_descriptor { 319*232c150aSwdenk u8 bFunctionLength; 320*232c150aSwdenk u8 bDescriptorType; 321*232c150aSwdenk u8 bDescriptorSubtype; /* 0x07 */ 322*232c150aSwdenk u8 iCountryCodeRelDate; 323*232c150aSwdenk u16 wCountryCode0[0]; 324*232c150aSwdenk } __attribute__ ((packed)); 325*232c150aSwdenk 326*232c150aSwdenk 327*232c150aSwdenk struct usb_class_telephone_operational_descriptor { 328*232c150aSwdenk u8 bFunctionLength; 329*232c150aSwdenk u8 bDescriptorType; 330*232c150aSwdenk u8 bDescriptorSubtype; /* 0x08 */ 331*232c150aSwdenk u8 bmCapabilities; 332*232c150aSwdenk } __attribute__ ((packed)); 333*232c150aSwdenk 334*232c150aSwdenk 335*232c150aSwdenk struct usb_class_usb_terminal_descriptor { 336*232c150aSwdenk u8 bFunctionLength; 337*232c150aSwdenk u8 bDescriptorType; 338*232c150aSwdenk u8 bDescriptorSubtype; /* 0x09 */ 339*232c150aSwdenk u8 bEntityId; 340*232c150aSwdenk u8 bInterfaceNo; 341*232c150aSwdenk u8 bOutInterfaceNo; 342*232c150aSwdenk u8 bmOptions; 343*232c150aSwdenk u8 bChild0[0]; 344*232c150aSwdenk } __attribute__ ((packed)); 345*232c150aSwdenk 346*232c150aSwdenk struct usb_class_network_channel_descriptor { 347*232c150aSwdenk u8 bFunctionLength; 348*232c150aSwdenk u8 bDescriptorType; 349*232c150aSwdenk u8 bDescriptorSubtype; /* 0x0a */ 350*232c150aSwdenk u8 bEntityId; 351*232c150aSwdenk u8 iName; 352*232c150aSwdenk u8 bChannelIndex; 353*232c150aSwdenk u8 bPhysicalInterface; 354*232c150aSwdenk } __attribute__ ((packed)); 355*232c150aSwdenk 356*232c150aSwdenk struct usb_class_protocol_unit_function_descriptor { 357*232c150aSwdenk u8 bFunctionLength; 358*232c150aSwdenk u8 bDescriptorType; 359*232c150aSwdenk u8 bDescriptorSubtype; /* 0x0b */ 360*232c150aSwdenk u8 bEntityId; 361*232c150aSwdenk u8 bProtocol; 362*232c150aSwdenk u8 bChild0[0]; 363*232c150aSwdenk } __attribute__ ((packed)); 364*232c150aSwdenk 365*232c150aSwdenk struct usb_class_extension_unit_descriptor { 366*232c150aSwdenk u8 bFunctionLength; 367*232c150aSwdenk u8 bDescriptorType; 368*232c150aSwdenk u8 bDescriptorSubtype; /* 0x0c */ 369*232c150aSwdenk u8 bEntityId; 370*232c150aSwdenk u8 bExtensionCode; 371*232c150aSwdenk u8 iName; 372*232c150aSwdenk u8 bChild0[0]; 373*232c150aSwdenk } __attribute__ ((packed)); 374*232c150aSwdenk 375*232c150aSwdenk struct usb_class_multi_channel_descriptor { 376*232c150aSwdenk u8 bFunctionLength; 377*232c150aSwdenk u8 bDescriptorType; 378*232c150aSwdenk u8 bDescriptorSubtype; /* 0x0d */ 379*232c150aSwdenk u8 bmCapabilities; 380*232c150aSwdenk } __attribute__ ((packed)); 381*232c150aSwdenk 382*232c150aSwdenk struct usb_class_capi_control_descriptor { 383*232c150aSwdenk u8 bFunctionLength; 384*232c150aSwdenk u8 bDescriptorType; 385*232c150aSwdenk u8 bDescriptorSubtype; /* 0x0e */ 386*232c150aSwdenk u8 bmCapabilities; 387*232c150aSwdenk } __attribute__ ((packed)); 388*232c150aSwdenk 389*232c150aSwdenk struct usb_class_ethernet_networking_descriptor { 390*232c150aSwdenk u8 bFunctionLength; 391*232c150aSwdenk u8 bDescriptorType; 392*232c150aSwdenk u8 bDescriptorSubtype; /* 0x0f */ 393*232c150aSwdenk u8 iMACAddress; 394*232c150aSwdenk u32 bmEthernetStatistics; 395*232c150aSwdenk u16 wMaxSegmentSize; 396*232c150aSwdenk u16 wNumberMCFilters; 397*232c150aSwdenk u8 bNumberPowerFilters; 398*232c150aSwdenk } __attribute__ ((packed)); 399*232c150aSwdenk 400*232c150aSwdenk struct usb_class_atm_networking_descriptor { 401*232c150aSwdenk u8 bFunctionLength; 402*232c150aSwdenk u8 bDescriptorType; 403*232c150aSwdenk u8 bDescriptorSubtype; /* 0x10 */ 404*232c150aSwdenk u8 iEndSystermIdentifier; 405*232c150aSwdenk u8 bmDataCapabilities; 406*232c150aSwdenk u8 bmATMDeviceStatistics; 407*232c150aSwdenk u16 wType2MaxSegmentSize; 408*232c150aSwdenk u16 wType3MaxSegmentSize; 409*232c150aSwdenk u16 wMaxVC; 410*232c150aSwdenk } __attribute__ ((packed)); 411*232c150aSwdenk 412*232c150aSwdenk 413*232c150aSwdenk struct usb_class_mdlm_descriptor { 414*232c150aSwdenk u8 bFunctionLength; 415*232c150aSwdenk u8 bDescriptorType; 416*232c150aSwdenk u8 bDescriptorSubtype; /* 0x12 */ 417*232c150aSwdenk u16 bcdVersion; 418*232c150aSwdenk u8 bGUID[16]; 419*232c150aSwdenk } __attribute__ ((packed)); 420*232c150aSwdenk 421*232c150aSwdenk struct usb_class_mdlmd_descriptor { 422*232c150aSwdenk u8 bFunctionLength; 423*232c150aSwdenk u8 bDescriptorType; 424*232c150aSwdenk u8 bDescriptorSubtype; /* 0x13 */ 425*232c150aSwdenk u8 bGuidDescriptorType; 426*232c150aSwdenk u8 bDetailData[0]; 427*232c150aSwdenk 428*232c150aSwdenk } __attribute__ ((packed)); 429*232c150aSwdenk 430*232c150aSwdenk /* 431*232c150aSwdenk * HID class descriptor structures 432*232c150aSwdenk * 433*232c150aSwdenk * c.f. HID 6.2.1 434*232c150aSwdenk */ 435*232c150aSwdenk 436*232c150aSwdenk struct usb_class_hid_descriptor { 437*232c150aSwdenk u8 bLength; 438*232c150aSwdenk u8 bDescriptorType; 439*232c150aSwdenk u16 bcdCDC; 440*232c150aSwdenk u8 bCountryCode; 441*232c150aSwdenk u8 bNumDescriptors; /* 0x01 */ 442*232c150aSwdenk u8 bDescriptorType0; 443*232c150aSwdenk u16 wDescriptorLength0; 444*232c150aSwdenk /* optional descriptors are not supported. */ 445*232c150aSwdenk } __attribute__((packed)); 446*232c150aSwdenk 447*232c150aSwdenk struct usb_class_report_descriptor { 448*232c150aSwdenk u8 bLength; /* dummy */ 449*232c150aSwdenk u8 bDescriptorType; 450*232c150aSwdenk u16 wLength; 451*232c150aSwdenk u8 bData[0]; 452*232c150aSwdenk } __attribute__((packed)); 453*232c150aSwdenk 454*232c150aSwdenk /* 455*232c150aSwdenk * descriptor union structures 456*232c150aSwdenk */ 457*232c150aSwdenk 458*232c150aSwdenk struct usb_descriptor { 459*232c150aSwdenk union { 460*232c150aSwdenk struct usb_generic_descriptor generic; 461*232c150aSwdenk struct usb_endpoint_descriptor endpoint; 462*232c150aSwdenk struct usb_interface_descriptor interface; 463*232c150aSwdenk struct usb_configuration_descriptor configuration; 464*232c150aSwdenk struct usb_device_descriptor device; 465*232c150aSwdenk struct usb_string_descriptor string; 466*232c150aSwdenk } descriptor; 467*232c150aSwdenk 468*232c150aSwdenk } __attribute__ ((packed)); 469*232c150aSwdenk 470*232c150aSwdenk struct usb_class_descriptor { 471*232c150aSwdenk union { 472*232c150aSwdenk struct usb_class_function_descriptor function; 473*232c150aSwdenk struct usb_class_function_descriptor_generic generic; 474*232c150aSwdenk struct usb_class_header_function_descriptor header_function; 475*232c150aSwdenk struct usb_class_call_management_descriptor call_management; 476*232c150aSwdenk struct usb_class_abstract_control_descriptor abstract_control; 477*232c150aSwdenk struct usb_class_direct_line_descriptor direct_line; 478*232c150aSwdenk struct usb_class_telephone_ringer_descriptor telephone_ringer; 479*232c150aSwdenk struct usb_class_telephone_operational_descriptor telephone_operational; 480*232c150aSwdenk struct usb_class_telephone_call_descriptor telephone_call; 481*232c150aSwdenk struct usb_class_union_function_descriptor union_function; 482*232c150aSwdenk struct usb_class_country_selection_descriptor country_selection; 483*232c150aSwdenk struct usb_class_usb_terminal_descriptor usb_terminal; 484*232c150aSwdenk struct usb_class_network_channel_descriptor network_channel; 485*232c150aSwdenk struct usb_class_extension_unit_descriptor extension_unit; 486*232c150aSwdenk struct usb_class_multi_channel_descriptor multi_channel; 487*232c150aSwdenk struct usb_class_capi_control_descriptor capi_control; 488*232c150aSwdenk struct usb_class_ethernet_networking_descriptor ethernet_networking; 489*232c150aSwdenk struct usb_class_atm_networking_descriptor atm_networking; 490*232c150aSwdenk struct usb_class_mdlm_descriptor mobile_direct; 491*232c150aSwdenk struct usb_class_mdlmd_descriptor mobile_direct_detail; 492*232c150aSwdenk struct usb_class_hid_descriptor hid; 493*232c150aSwdenk } descriptor; 494*232c150aSwdenk 495*232c150aSwdenk } __attribute__ ((packed)); 496*232c150aSwdenk 497*232c150aSwdenk #endif 498