1 //<MStar Software> 2 //****************************************************************************** 3 // MStar Software 4 // Copyright (c) 2010 - 2012 MStar Semiconductor, Inc. All rights reserved. 5 // All software, firmware and related documentation herein ("MStar Software") are 6 // intellectual property of MStar Semiconductor, Inc. ("MStar") and protected by 7 // law, including, but not limited to, copyright law and international treaties. 8 // Any use, modification, reproduction, retransmission, or republication of all 9 // or part of MStar Software is expressly prohibited, unless prior written 10 // permission has been granted by MStar. 11 // 12 // By accessing, browsing and/or using MStar Software, you acknowledge that you 13 // have read, understood, and agree, to be bound by below terms ("Terms") and to 14 // comply with all applicable laws and regulations: 15 // 16 // 1. MStar shall retain any and all right, ownership and interest to MStar 17 // Software and any modification/derivatives thereof. 18 // No right, ownership, or interest to MStar Software and any 19 // modification/derivatives thereof is transferred to you under Terms. 20 // 21 // 2. You understand that MStar Software might include, incorporate or be 22 // supplied together with third party`s software and the use of MStar 23 // Software may require additional licenses from third parties. 24 // Therefore, you hereby agree it is your sole responsibility to separately 25 // obtain any and all third party right and license necessary for your use of 26 // such third party`s software. 27 // 28 // 3. MStar Software and any modification/derivatives thereof shall be deemed as 29 // MStar`s confidential information and you agree to keep MStar`s 30 // confidential information in strictest confidence and not disclose to any 31 // third party. 32 // 33 // 4. MStar Software is provided on an "AS IS" basis without warranties of any 34 // kind. Any warranties are hereby expressly disclaimed by MStar, including 35 // without limitation, any warranties of merchantability, non-infringement of 36 // intellectual property rights, fitness for a particular purpose, error free 37 // and in conformity with any international standard. You agree to waive any 38 // claim against MStar for any loss, damage, cost or expense that you may 39 // incur related to your use of MStar Software. 40 // In no event shall MStar be liable for any direct, indirect, incidental or 41 // consequential damages, including without limitation, lost of profit or 42 // revenues, lost or damage of data, and unauthorized system use. 43 // You agree that this Section 4 shall still apply without being affected 44 // even if MStar Software has been modified by MStar in accordance with your 45 // request or instruction for your use, except otherwise agreed by both 46 // parties in writing. 47 // 48 // 5. If requested, MStar may from time to time provide technical supports or 49 // services in relation with MStar Software to you for your use of 50 // MStar Software in conjunction with your or your customer`s product 51 // ("Services"). 52 // You understand and agree that, except otherwise agreed by both parties in 53 // writing, Services are provided on an "AS IS" basis and the warranty 54 // disclaimer set forth in Section 4 above shall apply. 55 // 56 // 6. Nothing contained herein shall be construed as by implication, estoppels 57 // or otherwise: 58 // (a) conferring any license or right to use MStar name, trademark, service 59 // mark, symbol or any other identification; 60 // (b) obligating MStar or any of its affiliates to furnish any person, 61 // including without limitation, you and your customers, any assistance 62 // of any kind whatsoever, or any information; or 63 // (c) conferring any license or right under any intellectual property right. 64 // 65 // 7. These terms shall be governed by and construed in accordance with the laws 66 // of Taiwan, R.O.C., excluding its conflict of law rules. 67 // Any and all dispute arising out hereof or related hereto shall be finally 68 // settled by arbitration referred to the Chinese Arbitration Association, 69 // Taipei in accordance with the ROC Arbitration Law and the Arbitration 70 // Rules of the Association by three (3) arbitrators appointed in accordance 71 // with the said Rules. 72 // The place of arbitration shall be in Taipei, Taiwan and the language shall 73 // be English. 74 // The arbitration award shall be final and binding to both parties. 75 // 76 //****************************************************************************** 77 //<MStar Software> 78 79 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 80 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 81 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 82 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 83 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 84 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 85 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 86 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 87 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 88 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 89 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 90 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 91 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 92 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 93 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 94 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 95 96 #ifndef __MS_USB_CH9_H 97 #define __MS_USB_CH9_H 98 99 #include "MsTypes.h" 100 #include "drvTypes.h" /* __u8 etc */ 101 102 /*-------------------------------------------------------------------------*/ 103 104 105 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 106 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 107 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 108 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 109 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 110 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 111 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 112 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 113 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 114 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 115 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 116 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 117 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 118 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 119 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 120 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 121 122 #define USB_DIR_OUT 0 /* to device */ 123 #define USB_DIR_IN 0x80 /* to host */ 124 125 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 126 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 127 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 128 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 129 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 130 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 131 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 132 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 133 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 134 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 135 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 136 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 137 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 138 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 139 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 140 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 141 #define USB_TYPE_MASK (0x03 << 5) // pipe type 142 #define USB_TYPE_STANDARD (0x00 << 5) 143 #define USB_TYPE_CLASS (0x01 << 5) 144 #define USB_TYPE_VENDOR (0x02 << 5) 145 #define USB_TYPE_RESERVED (0x03 << 5) 146 147 148 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 149 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 150 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 151 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 152 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 153 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 154 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 155 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 156 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 157 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 158 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 159 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 160 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 161 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 162 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 163 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 164 #define USB_RECIP_MASK 0x1f 165 #define USB_RECIP_DEVICE 0x00 166 #define USB_RECIP_INTERFACE 0x01 167 #define USB_RECIP_ENDPOINT 0x02 168 #define USB_RECIP_OTHER 0x03 169 170 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 171 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 172 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 173 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 174 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 175 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 176 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 177 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 178 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 179 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 180 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 181 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 182 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 183 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 184 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 185 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 186 187 #define USB_REQ_GET_STATUS 0x00 188 #define USB_REQ_CLEAR_FEATURE 0x01 189 #define USB_REQ_SET_FEATURE 0x03 190 #define USB_REQ_SET_ADDRESS 0x05 191 #define USB_REQ_GET_DESCRIPTOR 0x06 192 #define USB_REQ_SET_DESCRIPTOR 0x07 193 #define USB_REQ_GET_CONFIGURATION 0x08 194 #define USB_REQ_SET_CONFIGURATION 0x09 195 #define USB_REQ_GET_INTERFACE 0x0A 196 #define USB_REQ_SET_INTERFACE 0x0B 197 #define USB_REQ_SYNCH_FRAME 0x0C 198 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 199 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 200 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 201 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 202 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 203 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 204 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 205 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 206 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 207 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 208 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 209 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 210 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 211 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 212 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 213 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 214 215 struct usb_ctrlrequest { 216 unsigned char bRequestType; 217 unsigned char bRequest; 218 U16 wValue; 219 U16 wIndex; 220 U16 wLength; 221 } __attribute__((packed)); 222 223 /*-------------------------------------------------------------------------*/ 224 225 226 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 227 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 228 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 229 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 230 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 231 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 232 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 233 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 234 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 235 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 236 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 237 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 238 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 239 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 240 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 241 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 242 243 #define USB_DT_DEVICE 0x01 244 #define USB_DT_CONFIG 0x02 245 #define USB_DT_STRING 0x03 246 #define USB_DT_INTERFACE 0x04 247 #define USB_DT_ENDPOINT 0x05 248 #define USB_DT_DEVICE_QUALIFIER 0x06 249 #define USB_DT_OTHER_SPEED_CONFIG 0x07 250 #define USB_DT_INTERFACE_POWER 0x08 251 #define USB_DT_OTG 0x09 252 253 /* All standard descriptors have these 2 fields at the beginning */ 254 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 255 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 256 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 257 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 258 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 259 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 260 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 261 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 262 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 263 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 264 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 265 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 266 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 267 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 268 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 269 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 270 271 struct usb_descriptor_header { 272 unsigned char bLength; 273 unsigned char bDescriptorType; 274 } __attribute__((packed)); 275 276 277 /*-------------------------------------------------------------------------*/ 278 279 /* USB_DT_DEVICE: Device descriptor */ 280 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 281 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 282 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 283 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 284 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 285 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 286 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 287 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 288 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 289 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 290 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 291 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 292 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 293 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 294 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 295 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 296 297 struct usb_device_descriptor { 298 unsigned char bLength; 299 unsigned char bDescriptorType; 300 301 U16 bcdUSB; 302 unsigned char bDeviceClass; 303 unsigned char bDeviceSubClass; 304 unsigned char bDeviceProtocol; 305 unsigned char bMaxPacketSize0; 306 U16 idVendor; 307 U16 idProduct; 308 U16 bcdDevice; 309 unsigned char iManufacturer; 310 unsigned char iProduct; 311 unsigned char iSerialNumber; 312 unsigned char bNumConfigurations; 313 } __attribute__((packed)); 314 315 #define USB_DT_DEVICE_SIZE 18 316 317 318 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 319 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 320 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 321 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 322 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 323 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 324 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 325 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 326 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 327 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 328 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 329 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 330 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 331 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 332 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 333 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 334 335 #define USB_CLASS_PER_INTERFACE 0 /* for DeviceClass */ 336 #define USB_CLASS_AUDIO 1 337 #define USB_CLASS_COMM 2 338 #define USB_CLASS_HID 3 339 #define USB_CLASS_PHYSICAL 5 340 #define USB_CLASS_STILL_IMAGE 6 341 #define USB_CLASS_PRINTER 7 342 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 343 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 344 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 345 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 346 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 347 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 348 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 349 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 350 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 351 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 352 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 353 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 354 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 355 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 356 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 357 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 358 #define USB_CLASS_STORAGE 8 // supported class 359 #define USB_CLASS_HUB 9 // supported class 360 #define USB_CLASS_CDC_DATA 0x0a 361 #define USB_CLASS_CSCID 0x0b /* chip+ smart card */ 362 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 363 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 364 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 365 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 366 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 367 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 368 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 369 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 370 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 371 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 372 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 373 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 374 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 375 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 376 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 377 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 378 #define USB_CLASS_CONTENT_SEC 0x0d /* content security */ 379 #define USB_CLASS_APP_SPEC 0xfe 380 #define USB_CLASS_VENDOR_SPEC 0xff // vendor used 381 382 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 383 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 384 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 385 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 386 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 387 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 388 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 389 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 390 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 391 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 392 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 393 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 394 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 395 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 396 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 397 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 398 399 /*-------------------------------------------------------------------------*/ 400 401 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 402 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 403 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 404 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 405 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 406 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 407 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 408 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 409 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 410 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 411 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 412 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 413 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 414 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 415 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 416 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 417 418 struct usb_config_descriptor { 419 unsigned char bLength; 420 unsigned char bDescriptorType; 421 422 U16 wTotalLength; 423 unsigned char bNumInterfaces; 424 unsigned char bConfigurationValue; 425 unsigned char iConfiguration; 426 unsigned char bmAttributes; 427 unsigned char bMaxPower; 428 } __attribute__((packed)); 429 430 #define USB_DT_CONFIG_SIZE 9 431 432 /* from config descriptor bmAttributes */ 433 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 434 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 435 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 436 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 437 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 438 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 439 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 440 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 441 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 442 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 443 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 444 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 445 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 446 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 447 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 448 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 449 450 #define USB_CONFIG_ATT_ONE (1 << 7) /* must be set */ 451 #define USB_CONFIG_ATT_SELFPOWER (1 << 6) /* self powered */ 452 #define USB_CONFIG_ATT_WAKEUP (1 << 5) /* can wakeup */ 453 454 /*-------------------------------------------------------------------------*/ 455 456 /* USB_DT_STRING: String descriptor */ 457 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 458 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 459 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 460 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 461 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 462 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 463 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 464 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 465 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 466 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 467 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 468 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 469 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 470 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 471 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 472 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 473 474 struct usb_string_descriptor { 475 unsigned char bLength; 476 unsigned char bDescriptorType; 477 478 U16 wData[1]; /* UTF-16LE encoded */ 479 } __attribute__((packed)); 480 481 482 /*-------------------------------------------------------------------------*/ 483 484 /* USB_DT_INTERFACE: Interface descriptor */ 485 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 486 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 487 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 488 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 489 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 490 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 491 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 492 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 493 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 494 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 495 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 496 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 497 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 498 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 499 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 500 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 501 502 struct usb_interface_descriptor { 503 unsigned char bLength; 504 unsigned char bDescriptorType; 505 506 unsigned char bInterfaceNumber; 507 unsigned char bAlternateSetting; 508 unsigned char bNumEndpoints; 509 unsigned char bInterfaceClass; 510 unsigned char bInterfaceSubClass; 511 unsigned char bInterfaceProtocol; 512 unsigned char iInterface; 513 } __attribute__((packed)); 514 515 #define USB_DT_INTERFACE_SIZE 9 516 517 /*-------------------------------------------------------------------------*/ 518 519 /* USB_DT_ENDPOINT: Endpoint descriptor */ 520 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 521 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 522 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 523 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 524 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 525 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 526 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 527 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 528 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 529 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 530 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 531 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 532 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 533 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 534 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 535 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 536 537 struct usb_endpoint_descriptor { 538 unsigned char bLength; 539 unsigned char bDescriptorType; 540 541 unsigned char bEndpointAddress; 542 unsigned char bmAttributes; 543 U16 wMaxPacketSize; 544 unsigned char bInterval; 545 546 unsigned char bRefresh; 547 unsigned char bSynchAddress; 548 } __attribute__((packed)); 549 550 #define USB_DT_ENDPOINT_SIZE 7 551 #define USB_DT_ENDPOINT_AUDIO_SIZE 9 /* Audio extension */ 552 553 554 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 555 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 556 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 557 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 558 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 559 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 560 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 561 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 562 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 563 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 564 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 565 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 566 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 567 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 568 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 569 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 570 571 #define USB_ENDPOINT_NUMBER_MASK 0x0f /* in bEndpointAddress */ 572 #define USB_ENDPOINT_DIR_MASK 0x80 573 574 #define USB_ENDPOINT_XFERTYPE_MASK 0x03 /* in bmAttributes */ 575 #define USB_ENDPOINT_XFER_CONTROL 0 576 #define USB_ENDPOINT_XFER_ISOC 1 577 #define USB_ENDPOINT_XFER_BULK 2 578 #define USB_ENDPOINT_XFER_INT 3 579 580 581 /*-------------------------------------------------------------------------*/ 582 583 /* USB_DT_DEVICE_QUALIFIER: Device Qualifier descriptor */ 584 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 585 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 586 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 587 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 588 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 589 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 590 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 591 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 592 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 593 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 594 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 595 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 596 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 597 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 598 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 599 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 600 601 struct usb_qualifier_descriptor { 602 unsigned char bLength; 603 unsigned char bDescriptorType; 604 605 U16 bcdUSB; 606 unsigned char bDeviceClass; 607 unsigned char bDeviceSubClass; 608 unsigned char bDeviceProtocol; 609 unsigned char bMaxPacketSize0; 610 unsigned char bNumConfigurations; 611 unsigned char bRESERVED; 612 } __attribute__((packed)); 613 614 615 /*-------------------------------------------------------------------------*/ 616 617 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 618 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 619 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 620 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 621 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 622 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 623 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 624 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 625 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 626 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 627 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 628 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 629 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 630 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 631 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 632 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 633 634 enum usb_device_speed { 635 USB_SPEED_UNKNOWN = 0, /* enumerating */ 636 USB_SPEED_LOW, USB_SPEED_FULL, /* usb 1.1 */ 637 USB_SPEED_HIGH /* usb 2.0 */ 638 }; 639 640 enum usb_device_state { 641 USB_STATE_NOTATTACHED = 0, 642 643 /* the chapter 9 device states */ 644 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 645 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 646 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 647 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 648 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 649 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 650 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 651 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 652 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 653 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 654 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 655 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 656 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 657 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 658 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 659 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 660 661 USB_STATE_ATTACHED, 662 USB_STATE_POWERED, 663 USB_STATE_DEFAULT, /* limited function */ 664 USB_STATE_ADDRESS, 665 USB_STATE_CONFIGURED, /* most functions */ 666 667 USB_STATE_SUSPENDED 668 669 }; 670 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 671 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 672 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 673 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 674 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 675 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 676 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 677 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 678 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 679 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 680 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 681 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 682 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 683 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 684 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 685 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 686 687 /*-------------------------------------------------------------------------*/ 688 689 /* USB_DT_OTG: OTG descriptor */ 690 struct usb_otg_descriptor { 691 unsigned char bLength; 692 unsigned char bDescriptorType; 693 unsigned char bmAttributes; 694 } __attribute__((packed)); 695 696 #define USB_RT_OTG 0x00 697 #define OTG_B_HNP_ENABLE 0x03 698 #define OTG_A_HNP_SUPPORT 0x04 699 #define OTG_ALT_HNP_SUPPORT 0x05 700 #define OTGH_SRP_Enable 0x01 701 #define OTGH_HNP_Enable 0x02 702 #define OTGH_SRP_HNP_Enable 0x03 703 #endif 704