1 /** 2 * This file is part of the mingw-w64 runtime package. 3 * No warranty is given; refer to the file DISCLAIMER within this package. 4 */ 5 6 #ifndef __USBSPEC_H__ 7 #define __USBSPEC_H__ 8 9 #include <winapifamily.h> 10 11 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP) 12 #include <pshpack1.h> 13 14 typedef enum _USB_DEVICE_SPEED { 15 UsbLowSpeed = 0, 16 UsbFullSpeed, 17 UsbHighSpeed, 18 UsbSuperSpeed 19 } USB_DEVICE_SPEED; 20 21 typedef enum _USB_DEVICE_TYPE { 22 Usb11Device = 0, 23 Usb20Device 24 } USB_DEVICE_TYPE; 25 26 typedef union _BM_REQUEST_TYPE { 27 __C89_NAMELESS struct _BM { 28 UCHAR Recipient:2; 29 UCHAR Reserved:3; 30 UCHAR Type:2; 31 UCHAR Dir:1; 32 }; 33 UCHAR B; 34 } BM_REQUEST_TYPE,*PBM_REQUEST_TYPE; 35 36 typedef struct _USB_DEFAULT_PIPE_SETUP_PACKET { 37 BM_REQUEST_TYPE bmRequestType; 38 UCHAR bRequest; 39 union _wValue { 40 __C89_NAMELESS struct { 41 UCHAR LowByte; 42 UCHAR HiByte; 43 }; 44 USHORT W; 45 } wValue; 46 union _wIndex { 47 __C89_NAMELESS struct { 48 UCHAR LowByte; 49 UCHAR HiByte; 50 }; 51 USHORT W; 52 } wIndex; 53 USHORT wLength; 54 } USB_DEFAULT_PIPE_SETUP_PACKET,*PUSB_DEFAULT_PIPE_SETUP_PACKET; 55 56 #define BMREQUEST_HOST_TO_DEVICE 0 57 #define BMREQUEST_DEVICE_TO_HOST 1 58 59 #define BMREQUEST_STANDARD 0 60 #define BMREQUEST_CLASS 1 61 #define BMREQUEST_VENDOR 2 62 63 #define BMREQUEST_TO_DEVICE 0 64 #define BMREQUEST_TO_INTERFACE 1 65 #define BMREQUEST_TO_ENDPOINT 2 66 #define BMREQUEST_TO_OTHER 3 67 68 #define USB_DESCRIPTOR_MAKE_TYPE_AND_INDEX(d, i) ((USHORT) (((USHORT) d) << 8 | i)) 69 70 #define USB_REQUEST_GET_STATUS 0x00 71 #define USB_REQUEST_CLEAR_FEATURE 0x01 72 #define USB_REQUEST_SET_FEATURE 0x03 73 #define USB_REQUEST_SET_ADDRESS 0x05 74 #define USB_REQUEST_GET_DESCRIPTOR 0x06 75 #define USB_REQUEST_SET_DESCRIPTOR 0x07 76 #define USB_REQUEST_GET_CONFIGURATION 0x08 77 #define USB_REQUEST_SET_CONFIGURATION 0x09 78 #define USB_REQUEST_GET_INTERFACE 0x0a 79 #define USB_REQUEST_SET_INTERFACE 0x0b 80 #define USB_REQUEST_SYNC_FRAME 0x0c 81 82 #define USB_REQUEST_SET_SEL 0x30 83 #define USB_REQUEST_ISOCH_DELAY 0x31 84 85 #define USB_DEVICE_DESCRIPTOR_TYPE 0x01 86 #define USB_CONFIGURATION_DESCRIPTOR_TYPE 0x02 87 #define USB_STRING_DESCRIPTOR_TYPE 0x03 88 #define USB_INTERFACE_DESCRIPTOR_TYPE 0x04 89 #define USB_ENDPOINT_DESCRIPTOR_TYPE 0x05 90 #define USB_DEVICE_QUALIFIER_DESCRIPTOR_TYPE 0x06 91 #define USB_OTHER_SPEED_CONFIGURATION_DESCRIPTOR_TYPE 0x07 92 #define USB_INTERFACE_POWER_DESCRIPTOR_TYPE 0x08 93 #define USB_OTG_DESCRIPTOR_TYPE 0x09 94 #define USB_DEBUG_DESCRIPTOR_TYPE 0x0a 95 #define USB_INTERFACE_ASSOCIATION_DESCRIPTOR_TYPE 0x0b 96 #define USB_BOS_DESCRIPTOR_TYPE 0x0f 97 #define USB_DEVICE_CAPABILITY_DESCRIPTOR_TYPE 0x10 98 #define USB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR_TYPE 0x30 99 #define USB_SUPERSPEEDPLUS_ISOCH_ENDPOINT_COMPANION_DESCRIPTOR_TYPE 0x31 100 101 #define USB_RESERVED_DESCRIPTOR_TYPE 0x06 102 #define USB_CONFIG_POWER_DESCRIPTOR_TYPE 0x07 103 104 #define USB_FEATURE_ENDPOINT_STALL 0x00 105 #define USB_FEATURE_REMOTE_WAKEUP 0x01 106 #define USB_FEATURE_TEST_MODE 0x02 107 108 #define USB_FEATURE_FUNCTION_SUSPEND 0x00 109 #define USB_FEATURE_U1_ENABLE 0x30 110 #define USB_FEATURE_U2_ENABLE 0x31 111 #define USB_FEATURE_LTM_ENABLE 0x32 112 #define USB_FEATURE_LDM_ENABLE 0x35 113 114 #define USB_FEATURE_BATTERY_WAKE_MASK 0x28 115 #define USB_FEATURE_OS_IS_PD_AWARE 0x29 116 #define USB_FEATURE_POLICY_MODE 0x2A 117 #define USB_FEATURE_CHARGING_POLICY 0x36 118 119 #define USB_CHARGING_POLICY_DEFAULT 0x00 120 #define USB_CHARGING_POLICY_ICCHPF 0x01 121 #define USB_CHARGING_POLICY_ICCLPF 0x02 122 #define USB_CHARGING_POLICY_NO_POWER 0x03 123 124 #define USB_STATUS_PORT_STATUS 0x00 125 #define USB_STATUS_PD_STATUS 0x01 126 #define USB_STATUS_EXT_PORT_STATUS 0x02 127 128 #define USB_GETSTATUS_SELF_POWERED 0x01 129 #define USB_GETSTATUS_REMOTE_WAKEUP_ENABLED 0x02 130 131 #define USB_GETSTATUS_U1_ENABLE 0x04 132 #define USB_GETSTATUS_U2_ENABLE 0x08 133 #define USB_GETSTATUS_LTM_ENABLE 0x10 134 135 typedef union _USB_DEVICE_STATUS { 136 USHORT AsUshort16; 137 __C89_NAMELESS struct { 138 USHORT SelfPowered : 1; 139 USHORT RemoteWakeup : 1; 140 USHORT U1Enable : 1; 141 USHORT U2Enable : 1; 142 USHORT LtmEnable : 1; 143 USHORT Reserved : 11; 144 }; 145 } USB_DEVICE_STATUS,*PUSB_DEVICE_STATUS; 146 147 typedef union _USB_INTERFACE_STATUS { 148 USHORT AsUshort16; 149 __C89_NAMELESS struct { 150 USHORT RemoteWakeupCapable : 1; 151 USHORT RemoteWakeupEnabled : 1; 152 USHORT Reserved : 14; 153 }; 154 } USB_INTERFACE_STATUS,*PUSB_INTERFACE_STATUS; 155 156 typedef union _USB_ENDPOINT_STATUS { 157 USHORT AsUshort16; 158 __C89_NAMELESS struct { 159 USHORT Halt : 1; 160 USHORT Reserved : 15; 161 }; 162 } USB_ENDPOINT_STATUS,*PUSB_ENDPOINT_STATUS; 163 164 typedef struct _USB_COMMON_DESCRIPTOR { 165 UCHAR bLength; 166 UCHAR bDescriptorType; 167 } USB_COMMON_DESCRIPTOR,*PUSB_COMMON_DESCRIPTOR; 168 169 typedef struct _USB_DEVICE_DESCRIPTOR { 170 UCHAR bLength; 171 UCHAR bDescriptorType; 172 USHORT bcdUSB; 173 UCHAR bDeviceClass; 174 UCHAR bDeviceSubClass; 175 UCHAR bDeviceProtocol; 176 UCHAR bMaxPacketSize0; 177 USHORT idVendor; 178 USHORT idProduct; 179 USHORT bcdDevice; 180 UCHAR iManufacturer; 181 UCHAR iProduct; 182 UCHAR iSerialNumber; 183 UCHAR bNumConfigurations; 184 } USB_DEVICE_DESCRIPTOR,*PUSB_DEVICE_DESCRIPTOR; 185 186 #define USB_DEVICE_CLASS_RESERVED 0x00 187 #define USB_DEVICE_CLASS_AUDIO 0x01 188 #define USB_DEVICE_CLASS_COMMUNICATIONS 0x02 189 #define USB_DEVICE_CLASS_HUMAN_INTERFACE 0x03 190 #define USB_DEVICE_CLASS_MONITOR 0x04 191 #define USB_DEVICE_CLASS_PHYSICAL_INTERFACE 0x05 192 #define USB_DEVICE_CLASS_POWER 0x06 193 #define USB_DEVICE_CLASS_IMAGE 0x06 194 #define USB_DEVICE_CLASS_PRINTER 0x07 195 #define USB_DEVICE_CLASS_STORAGE 0x08 196 #define USB_DEVICE_CLASS_HUB 0x09 197 #define USB_DEVICE_CLASS_CDC_DATA 0x0a 198 #define USB_DEVICE_CLASS_SMART_CARD 0x0b 199 #define USB_DEVICE_CLASS_CONTENT_SECURITY 0x0d 200 #define USB_DEVICE_CLASS_VIDEO 0x0e 201 #define USB_DEVICE_CLASS_PERSONAL_HEALTHCARE 0x0f 202 #define USB_DEVICE_CLASS_AUDIO_VIDEO 0x10 203 #define USB_DEVICE_CLASS_BILLBOARD 0x11 204 #define USB_DEVICE_CLASS_DIAGNOSTIC_DEVICE 0xdc 205 #define USB_DEVICE_CLASS_WIRELESS_CONTROLLER 0xe0 206 #define USB_DEVICE_CLASS_MISCELLANEOUS 0xef 207 #define USB_DEVICE_CLASS_APPLICATION_SPECIFIC 0xfe 208 #define USB_DEVICE_CLASS_VENDOR_SPECIFIC 0xff 209 210 typedef struct _USB_DEVICE_QUALIFIER_DESCRIPTOR { 211 UCHAR bLength; 212 UCHAR bDescriptorType; 213 USHORT bcdUSB; 214 UCHAR bDeviceClass; 215 UCHAR bDeviceSubClass; 216 UCHAR bDeviceProtocol; 217 UCHAR bMaxPacketSize0; 218 UCHAR bNumConfigurations; 219 UCHAR bReserved; 220 } USB_DEVICE_QUALIFIER_DESCRIPTOR,*PUSB_DEVICE_QUALIFIER_DESCRIPTOR; 221 222 typedef struct _USB_BOS_DESCRIPTOR { 223 UCHAR bLength; 224 UCHAR bDescriptorType; 225 USHORT wTotalLength; 226 UCHAR bNumDeviceCaps; 227 } USB_BOS_DESCRIPTOR,*PUSB_BOS_DESCRIPTOR; 228 229 #define USB_DEVICE_CAPABILITY_WIRELESS_USB 0x01 230 #define USB_DEVICE_CAPABILITY_USB20_EXTENSION 0x02 231 #define USB_DEVICE_CAPABILITY_SUPERSPEED_USB 0x03 232 #define USB_DEVICE_CAPABILITY_CONTAINER_ID 0x04 233 #define USB_DEVICE_CAPABILITY_PLATFORM 0x05 234 #define USB_DEVICE_CAPABILITY_POWER_DELIVERY 0x06 235 #define USB_DEVICE_CAPABILITY_BATTERY_INFO 0x07 236 #define USB_DEVICE_CAPABILITY_PD_CONSUMER_PORT 0x08 237 #define USB_DEVICE_CAPABILITY_PD_PROVIDER_PORT 0x09 238 #define USB_DEVICE_CAPABILITY_SUPERSPEEDPLUS_USB 0x0A 239 #define USB_DEVICE_CAPABILITY_PRECISION_TIME_MEASUREMENT 0x0B 240 #define USB_DEVICE_CAPABILITY_BILLBOARD 0x0D 241 242 typedef struct _USB_DEVICE_CAPABILITY_USB20_EXTENSION_DESCRIPTOR { 243 UCHAR bLength; 244 UCHAR bDescriptorType; 245 UCHAR bDevCapabilityType; 246 union { 247 ULONG AsUlong; 248 __C89_NAMELESS struct { 249 ULONG Reserved:1; 250 ULONG LPMCapable:1; 251 ULONG BESLAndAlternateHIRDSupported:1; 252 ULONG BaselineBESLValid:1; 253 ULONG DeepBESLValid:1; 254 ULONG Reserved1:3; 255 ULONG BaselineBESL:4; 256 ULONG DeepBESL:4; 257 ULONG Reserved2:16; 258 }; 259 } bmAttributes; 260 } USB_DEVICE_CAPABILITY_USB20_EXTENSION_DESCRIPTOR,*PUSB_DEVICE_CAPABILITY_USB20_EXTENSION_DESCRIPTOR; 261 262 #define USB_DEVICE_CAPABILITY_USB20_EXTENSION_BMATTRIBUTES_RESERVED_MASK 0xffff00e1 263 264 typedef struct _USB_DEVICE_CAPABILITY_POWER_DELIVERY_DESCRIPTOR { 265 UCHAR bLength; 266 UCHAR bDescriptorType; 267 UCHAR bDevCapabilityType; 268 UCHAR bReserved; 269 union { 270 ULONG AsUlong; 271 __C89_NAMELESS struct { 272 ULONG Reserved1:1; 273 ULONG BatteryCharging:1; 274 ULONG USBPowerDelivery:1; 275 ULONG Provider:1; 276 ULONG Consumer:1; 277 ULONG ChargingPolicy:1; 278 ULONG TypeCCurrent:1; 279 ULONG Reserved2:1; 280 ULONG ACSupply:1; 281 ULONG Battery:1; 282 ULONG Other:1; 283 ULONG NumBatteries:3; 284 ULONG UsesVbus:1; 285 ULONG Reserved3:17; 286 }; 287 } bmAttributes; 288 USHORT bmProviderPorts; 289 USHORT bmConsumerPorts; 290 USHORT bcdBCVersion; 291 USHORT bcdPDVersion; 292 USHORT bcdUSBTypeCVersion; 293 } USB_DEVICE_CAPABILITY_POWER_DELIVERY_DESCRIPTOR,*PUSB_DEVICE_CAPABILITY_POWER_DELIVERY_DESCRIPTOR; 294 295 typedef struct _USB_DEVICE_CAPABILITY_PD_CONSUMER_PORT_DESCRIPTOR { 296 UCHAR bLength; 297 UCHAR bDescriptorType; 298 UCHAR bDevCapabilityType; 299 UCHAR bReserved; 300 union { 301 USHORT AsUshort; 302 __C89_NAMELESS struct { 303 USHORT BatteryCharging:1; 304 USHORT USBPowerDelivery:1; 305 USHORT USBTypeCCurrent:1; 306 USHORT Reserved:13; 307 }; 308 } bmCapabilities; 309 USHORT wMinVoltage; 310 USHORT wMaxVoltage; 311 USHORT wReserved; 312 ULONG dwMaxOperatingPower; 313 ULONG dwMaxPeakPower; 314 ULONG dwMaxPeakPowerTime; 315 } USB_DEVICE_CAPABILITY_PD_CONSUMER_PORT_DESCRIPTOR,*PUSB_DEVICE_CAPABILITY_PD_CONSUMER_PORT_DESCRIPTOR; 316 317 typedef struct _USB_DEVICE_CAPABILITY_SUPERSPEED_USB_DESCRIPTOR { 318 UCHAR bLength; 319 UCHAR bDescriptorType; 320 UCHAR bDevCapabilityType; 321 UCHAR bmAttributes; 322 USHORT wSpeedsSupported; 323 UCHAR bFunctionalitySupport; 324 UCHAR bU1DevExitLat; 325 USHORT wU2DevExitLat; 326 } USB_DEVICE_CAPABILITY_SUPERSPEED_USB_DESCRIPTOR,*PUSB_DEVICE_CAPABILITY_SUPERSPEED_USB_DESCRIPTOR; 327 328 #define USB_DEVICE_CAPABILITY_SUPERSPEED_BMATTRIBUTES_RESERVED_MASK 0xfd 329 #define USB_DEVICE_CAPABILITY_SUPERSPEED_BMATTRIBUTES_LTM_CAPABLE 0x02 330 331 #define USB_DEVICE_CAPABILITY_SUPERSPEED_SPEEDS_SUPPORTED_RESERVED_MASK 0xfff0 332 #define USB_DEVICE_CAPABILITY_SUPERSPEED_SPEEDS_SUPPORTED_LOW 0x0001 333 #define USB_DEVICE_CAPABILITY_SUPERSPEED_SPEEDS_SUPPORTED_FULL 0x0002 334 #define USB_DEVICE_CAPABILITY_SUPERSPEED_SPEEDS_SUPPORTED_HIGH 0x0004 335 #define USB_DEVICE_CAPABILITY_SUPERSPEED_SPEEDS_SUPPORTED_SUPER 0x0008 336 337 #define USB_DEVICE_CAPABILITY_SUPERSPEED_SPEEDS_SUPPORTED_LOW 0x0001 338 #define USB_DEVICE_CAPABILITY_SUPERSPEED_SPEEDS_SUPPORTED_FULL 0x0002 339 #define USB_DEVICE_CAPABILITY_SUPERSPEED_SPEEDS_SUPPORTED_HIGH 0x0004 340 #define USB_DEVICE_CAPABILITY_SUPERSPEED_SPEEDS_SUPPORTED_SUPER 0x0008 341 342 #define USB_DEVICE_CAPABILITY_SUPERSPEED_U1_DEVICE_EXIT_MAX_VALUE 0x0a 343 344 #define USB_DEVICE_CAPABILITY_SUPERSPEED_U2_DEVICE_EXIT_MAX_VALUE 0x07ff 345 346 #define USB_DEVICE_CAPABILITY_MAX_U1_LATENCY 0x0a 347 #define USB_DEVICE_CAPABILITY_MAX_U2_LATENCY 0x07ff 348 349 #define USB_DEVICE_CAPABILITY_SUPERSPEEDPLUS_SPEED_LSE_BPS 0 350 #define USB_DEVICE_CAPABILITY_SUPERSPEEDPLUS_SPEED_LSE_KBPS 1 351 #define USB_DEVICE_CAPABILITY_SUPERSPEEDPLUS_SPEED_LSE_MBPS 2 352 #define USB_DEVICE_CAPABILITY_SUPERSPEEDPLUS_SPEED_LSE_GBPS 3 353 354 #define USB_DEVICE_CAPABILITY_SUPERSPEEDPLUS_SPEED_MODE_SYMMETRIC 0 355 #define USB_DEVICE_CAPABILITY_SUPERSPEEDPLUS_SPEED_MODE_ASYMMETRIC 1 356 #define USB_DEVICE_CAPABILITY_SUPERSPEEDPLUS_SPEED_DIR_RX 0 357 #define USB_DEVICE_CAPABILITY_SUPERSPEEDPLUS_SPEED_DIR_TX 1 358 359 #define USB_DEVICE_CAPABILITY_SUPERSPEEDPLUS_SPEED_PROTOCOL_SS 0 360 #define USB_DEVICE_CAPABILITY_SUPERSPEEDPLUS_SPEED_PROTOCOL_SSP 1 361 362 typedef union _USB_DEVICE_CAPABILITY_SUPERSPEEDPLUS_SPEED { 363 ULONG AsUlong32; 364 __C89_NAMELESS struct { 365 ULONG SublinkSpeedAttrID:4; 366 ULONG LaneSpeedExponent:2; 367 ULONG SublinkTypeMode:1; 368 ULONG SublinkTypeDir:1; 369 ULONG Reserved:6; 370 ULONG LinkProtocol:2; 371 ULONG LaneSpeedMantissa:16; 372 }; 373 } USB_DEVICE_CAPABILITY_SUPERSPEEDPLUS_SPEED,*PUSB_DEVICE_CAPABILITY_SUPERSPEEDPLUS_SPEED; 374 375 typedef struct _USB_DEVICE_CAPABILITY_SUPERSPEEDPLUS_USB_DESCRIPTOR { 376 UCHAR bLength; 377 UCHAR bDescriptorType; 378 UCHAR bDevCapabilityType; 379 UCHAR bReserved; 380 union { 381 ULONG AsUlong; 382 __C89_NAMELESS struct { 383 ULONG SublinkSpeedAttrCount:5; 384 ULONG SublinkSpeedIDCount:4; 385 ULONG Reserved:23; 386 }; 387 } bmAttributes; 388 union { 389 USHORT AsUshort; 390 __C89_NAMELESS struct { 391 USHORT SublinkSpeedAttrID:4; 392 USHORT Reserved:4; 393 USHORT MinRxLaneCount:4; 394 USHORT MinTxLaneCount:4; 395 }; 396 } wFunctionalitySupport; 397 USHORT wReserved; 398 USB_DEVICE_CAPABILITY_SUPERSPEEDPLUS_SPEED bmSublinkSpeedAttr[1]; 399 } USB_DEVICE_CAPABILITY_SUPERSPEEDPLUS_USB_DESCRIPTOR,*PUSB_DEVICE_CAPABILITY_SUPERSPEEDPLUS_USB_DESCRIPTOR; 400 401 typedef struct _USB_DEVICE_CAPABILITY_CONTAINER_ID_DESCRIPTOR { 402 UCHAR bLength; 403 UCHAR bDescriptorType; 404 UCHAR bDevCapabilityType; 405 UCHAR bReserved; 406 UCHAR ContainerID[16]; 407 } USB_DEVICE_CAPABILITY_CONTAINER_ID_DESCRIPTOR,*PUSB_DEVICE_CAPABILITY_CONTAINER_ID_DESCRIPTOR; 408 409 typedef struct _USB_DEVICE_CAPABILITY_PLATFORM_DESCRIPTOR { 410 UCHAR bLength; 411 UCHAR bDescriptorType; 412 UCHAR bDevCapabilityType; 413 UCHAR bReserved; 414 GUID PlatformCapabilityUuid; 415 UCHAR CapabililityData[1]; 416 } USB_DEVICE_CAPABILITY_PLATFORM_DESCRIPTOR,*PUSB_DEVICE_CAPABILITY_PLATFORM_DESCRIPTOR; 417 418 typedef struct _USB_DEVICE_CAPABILITY_BILLBOARD_DESCRIPTOR { 419 UCHAR bLength; 420 UCHAR bDescriptorType; 421 UCHAR bDevCapabilityType; 422 UCHAR iAddtionalInfoURL; 423 UCHAR bNumberOfAlternateModes; 424 UCHAR bPreferredAlternateMode; 425 union { 426 USHORT AsUshort; 427 __C89_NAMELESS struct { 428 USHORT VConnPowerNeededForFullFunctionality:3; 429 USHORT Reserved:12; 430 USHORT NoVconnPowerRequired:1; 431 }; 432 } VconnPower; 433 UCHAR bmConfigured[32]; 434 ULONG bReserved; 435 __C89_NAMELESS struct { 436 USHORT wSVID; 437 UCHAR bAlternateMode; 438 UCHAR iAlternateModeSetting; 439 } AlternateMode[1]; 440 } USB_DEVICE_CAPABILITY_BILLBOARD_DESCRIPTOR,*PUSB_DEVICE_CAPABILITY_BILLBOARD_DESCRIPTOR; 441 442 DEFINE_GUID(GUID_USB_MSOS20_PLATFORM_CAPABILITY_ID, 0xD8DD60DF, 0x4589, 0x4CC7, 0x9C, 0xD2, 0x65, 0x9D, 0x9E, 0x64, 0x8A, 0x9F); 443 444 typedef struct _USB_DEVICE_CAPABILITY_DESCRIPTOR { 445 UCHAR bLength; 446 UCHAR bDescriptorType; 447 UCHAR bDevCapabilityType; 448 } USB_DEVICE_CAPABILITY_DESCRIPTOR,*PUSB_DEVICE_CAPABILITY_DESCRIPTOR; 449 450 typedef struct _USB_CONFIGURATION_DESCRIPTOR { 451 UCHAR bLength; 452 UCHAR bDescriptorType; 453 USHORT wTotalLength; 454 UCHAR bNumInterfaces; 455 UCHAR bConfigurationValue; 456 UCHAR iConfiguration; 457 UCHAR bmAttributes; 458 UCHAR MaxPower; 459 } USB_CONFIGURATION_DESCRIPTOR,*PUSB_CONFIGURATION_DESCRIPTOR; 460 461 #define USB_CONFIG_POWERED_MASK 0xc0 462 #define USB_CONFIG_BUS_POWERED 0x80 463 #define USB_CONFIG_SELF_POWERED 0x40 464 #define USB_CONFIG_REMOTE_WAKEUP 0x20 465 #define USB_CONFIG_RESERVED 0x1f 466 467 typedef struct _USB_INTERFACE_ASSOCIATION_DESCRIPTOR { 468 UCHAR bLength; 469 UCHAR bDescriptorType; 470 UCHAR bFirstInterface; 471 UCHAR bInterfaceCount; 472 UCHAR bFunctionClass; 473 UCHAR bFunctionSubClass; 474 UCHAR bFunctionProtocol; 475 UCHAR iFunction; 476 } USB_INTERFACE_ASSOCIATION_DESCRIPTOR,*PUSB_INTERFACE_ASSOCIATION_DESCRIPTOR; 477 478 typedef struct _USB_INTERFACE_DESCRIPTOR { 479 UCHAR bLength; 480 UCHAR bDescriptorType; 481 UCHAR bInterfaceNumber; 482 UCHAR bAlternateSetting; 483 UCHAR bNumEndpoints; 484 UCHAR bInterfaceClass; 485 UCHAR bInterfaceSubClass; 486 UCHAR bInterfaceProtocol; 487 UCHAR iInterface; 488 } USB_INTERFACE_DESCRIPTOR,*PUSB_INTERFACE_DESCRIPTOR; 489 490 typedef struct _USB_ENDPOINT_DESCRIPTOR { 491 UCHAR bLength; 492 UCHAR bDescriptorType; 493 UCHAR bEndpointAddress; 494 UCHAR bmAttributes; 495 USHORT wMaxPacketSize; 496 UCHAR bInterval; 497 } USB_ENDPOINT_DESCRIPTOR,*PUSB_ENDPOINT_DESCRIPTOR; 498 499 #define USB_ENDPOINT_DIRECTION_MASK 0x80 500 #define USB_ENDPOINT_DIRECTION_OUT(addr) (! ((addr) & USB_ENDPOINT_DIRECTION_MASK)) 501 #define USB_ENDPOINT_DIRECTION_IN(addr) ((addr) & USB_ENDPOINT_DIRECTION_MASK) 502 503 #define USB_ENDPOINT_ADDRESS_MASK 0x0f 504 505 #define USB_ENDPOINT_TYPE_MASK 0x03 506 #define USB_ENDPOINT_TYPE_CONTROL 0x00 507 #define USB_ENDPOINT_TYPE_ISOCHRONOUS 0x01 508 #define USB_ENDPOINT_TYPE_BULK 0x02 509 #define USB_ENDPOINT_TYPE_INTERRUPT 0x03 510 511 #define USB_ENDPOINT_TYPE_BULK_RESERVED_MASK 0xfc 512 #define USB_ENDPOINT_TYPE_CONTROL_RESERVED_MASK 0xfc 513 #define USB_20_ENDPOINT_TYPE_INTERRUPT_RESERVED_MASK 0xfc 514 #define USB_30_ENDPOINT_TYPE_INTERRUPT_RESERVED_MASK 0xcc 515 #define USB_ENDPOINT_TYPE_ISOCHRONOUS_RESERVED_MASK 0xc0 516 517 #define USB_30_ENDPOINT_TYPE_INTERRUPT_USAGE_MASK 0x30 518 #define USB_30_ENDPOINT_TYPE_INTERRUPT_USAGE_PERIODIC 0x00 519 #define USB_30_ENDPOINT_TYPE_INTERRUPT_USAGE_NOTIFICATION 0x10 520 #define USB_30_ENDPOINT_TYPE_INTERRUPT_USAGE_RESERVED10 0x20 521 #define USB_30_ENDPOINT_TYPE_INTERRUPT_USAGE_RESERVED11 0x30 522 #define USB_30_ENDPOINT_TYPE_INTERRUPT_USAGE(bmAttr) (bmAttr &USB_30_ENDPOINT_TYPE_INTERRUPT_USAGE_MASK) 523 524 #define USB_ENDPOINT_TYPE_ISOCHRONOUS_SYNCHRONIZATION_MASK 0x0c 525 #define USB_ENDPOINT_TYPE_ISOCHRONOUS_SYNCHRONIZATION_NO_SYNCHRONIZATION 0x00 526 #define USB_ENDPOINT_TYPE_ISOCHRONOUS_SYNCHRONIZATION_ASYNCHRONOUS 0x04 527 #define USB_ENDPOINT_TYPE_ISOCHRONOUS_SYNCHRONIZATION_ADAPTIVE 0x08 528 #define USB_ENDPOINT_TYPE_ISOCHRONOUS_SYNCHRONIZATION_SYNCHRONOUS 0x0c 529 #define USB_ENDPOINT_TYPE_ISOCHRONOUS_SYNCHRONIZATION(bmAttr) (bmAttr &USB_ENDPOINT_TYPE_ISOCHRONOUS_SYNCHRONIZATION_MASK) 530 531 #define USB_ENDPOINT_TYPE_ISOCHRONOUS_USAGE_MASK 0x30 532 #define USB_ENDPOINT_TYPE_ISOCHRONOUS_USAGE_DATA_ENDOINT 0x00 533 #define USB_ENDPOINT_TYPE_ISOCHRONOUS_USAGE_FEEDBACK_ENDPOINT 0x10 534 #define USB_ENDPOINT_TYPE_ISOCHRONOUS_USAGE_IMPLICIT_FEEDBACK_DATA_ENDPOINT 0x20 535 #define USB_ENDPOINT_TYPE_ISOCHRONOUS_USAGE_RESERVED 0x30 536 #define USB_ENDPOINT_TYPE_ISOCHRONOUS_USAGE(bmAttr) (bmAttr &USB_ENDPOINT_TYPE_ISOCHRONOUS_USAGE_MASK) 537 538 typedef union _USB_HIGH_SPEED_MAXPACKET { 539 __C89_NAMELESS struct _MP { 540 USHORT MaxPacket : 11; 541 USHORT HSmux : 2; 542 USHORT Reserved : 3; 543 }; 544 USHORT us; 545 } USB_HIGH_SPEED_MAXPACKET,*PUSB_HIGH_SPEED_MAXPACKET; 546 547 #define USB_ENDPOINT_SUPERSPEED_BULK_MAX_PACKET_SIZE 1024 548 #define USB_ENDPOINT_SUPERSPEED_CONTROL_MAX_PACKET_SIZE 512 549 #define USB_ENDPOINT_SUPERSPEED_ISO_MAX_PACKET_SIZE 1024 550 #define USB_ENDPOINT_SUPERSPEED_INTERRUPT_MAX_PACKET_SIZE 1024 551 552 typedef struct _USB_STRING_DESCRIPTOR { 553 UCHAR bLength; 554 UCHAR bDescriptorType; 555 WCHAR bString[1]; 556 } USB_STRING_DESCRIPTOR,*PUSB_STRING_DESCRIPTOR; 557 558 #define MAXIMUM_USB_STRING_LENGTH 255 559 560 typedef struct _USB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR { 561 UCHAR bLength; 562 UCHAR bDescriptorType; 563 UCHAR bMaxBurst; 564 union { 565 UCHAR AsUchar; 566 struct { 567 UCHAR MaxStreams:5; 568 UCHAR Reserved1:3; 569 } Bulk; 570 struct { 571 UCHAR Mult:2; 572 UCHAR Reserved2:5; 573 UCHAR SspCompanion:1; 574 } Isochronous; 575 } bmAttributes; 576 USHORT wBytesPerInterval; 577 } USB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR,*PUSB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR; 578 579 #define USB_SUPERSPEED_ISOCHRONOUS_MAX_MULTIPLIER 2 580 581 typedef struct _USB_SUPERSPEEDPLUS_ISOCH_ENDPOINT_COMPANION_DESCRIPTOR { 582 UCHAR bLength; 583 UCHAR bDescriptorType; 584 USHORT wReserved; 585 ULONG dwBytesPerInterval; 586 } USB_SUPERSPEEDPLUS_ISOCH_ENDPOINT_COMPANION_DESCRIPTOR,*PUSB_SUPERSPEEDPLUS_ISOCH_ENDPOINT_COMPANION_DESCRIPTOR; 587 588 #define USB_SUPERSPEEDPLUS_ISOCHRONOUS_MIN_BYTESPERINTERVAL 0xc001 589 #define USB_SUPERSPEEDPLUS_ISOCHRONOUS_MAX_BYTESPERINTERVAL 0xffffff 590 591 typedef struct _USB_HUB_DESCRIPTOR { 592 UCHAR bDescriptorLength; 593 UCHAR bDescriptorType; 594 UCHAR bNumberOfPorts; 595 USHORT wHubCharacteristics; 596 UCHAR bPowerOnToPowerGood; 597 UCHAR bHubControlCurrent; 598 UCHAR bRemoveAndPowerMask[64]; 599 } USB_HUB_DESCRIPTOR,*PUSB_HUB_DESCRIPTOR; 600 601 #define USB_20_HUB_DESCRIPTOR_TYPE 0x29 602 603 typedef struct _USB_30_HUB_DESCRIPTOR { 604 UCHAR bLength; 605 UCHAR bDescriptorType; 606 UCHAR bNumberOfPorts; 607 USHORT wHubCharacteristics; 608 UCHAR bPowerOnToPowerGood; 609 UCHAR bHubControlCurrent; 610 UCHAR bHubHdrDecLat; 611 USHORT wHubDelay; 612 USHORT DeviceRemovable; 613 } USB_30_HUB_DESCRIPTOR,*PUSB_30_HUB_DESCRIPTOR; 614 615 #define USB_30_HUB_DESCRIPTOR_TYPE 0x2a 616 617 #define USB_REQUEST_GET_STATE 0x02 618 619 #define USB_REQUEST_CLEAR_TT_BUFFER 0x08 620 #define USB_REQUEST_RESET_TT 0x09 621 #define USB_REQUEST_GET_TT_STATE 0x0a 622 #define USB_REQUEST_STOP_TT 0x0b 623 624 #define USB_REQUEST_SET_HUB_DEPTH 0x0c 625 #define USB_REQUEST_GET_PORT_ERR_COUNT 0x0d 626 627 typedef union _USB_HUB_STATUS { 628 USHORT AsUshort16; 629 __C89_NAMELESS struct { 630 USHORT LocalPowerLost:1; 631 USHORT OverCurrent:1; 632 USHORT Reserved:14; 633 }; 634 } USB_HUB_STATUS,*PUSB_HUB_STATUS; 635 636 typedef union _USB_HUB_CHANGE { 637 USHORT AsUshort16; 638 __C89_NAMELESS struct { 639 USHORT LocalPowerChange:1; 640 USHORT OverCurrentChange:1; 641 USHORT Reserved:14; 642 }; 643 } USB_HUB_CHANGE,*PUSB_HUB_CHANGE; 644 645 typedef union _USB_HUB_STATUS_AND_CHANGE { 646 ULONG AsUlong32; 647 __C89_NAMELESS struct { 648 USB_HUB_STATUS HubStatus; 649 USB_HUB_CHANGE HubChange; 650 }; 651 } USB_HUB_STATUS_AND_CHANGE,*PUSB_HUB_STATUS_AND_CHANGE; 652 653 typedef union _USB_20_PORT_STATUS { 654 USHORT AsUshort16; 655 __C89_NAMELESS struct { 656 USHORT CurrentConnectStatus:1; 657 USHORT PortEnabledDisabled:1; 658 USHORT Suspend:1; 659 USHORT OverCurrent:1; 660 USHORT Reset:1; 661 USHORT Reserved0:3; 662 USHORT PortPower:1; 663 USHORT LowSpeedDeviceAttached:1; 664 USHORT HighSpeedDeviceAttached:1; 665 USHORT PortTestMode:1; 666 USHORT PortIndicatorControl:1; 667 USHORT Reserved1:3; 668 }; 669 } USB_20_PORT_STATUS,*PUSB_20_PORT_STATUS; 670 671 #define USB_PORT_STATUS_CONNECT 0x0001 672 #define USB_PORT_STATUS_ENABLE 0x0002 673 #define USB_PORT_STATUS_SUSPEND 0x0004 674 #define USB_PORT_STATUS_OVER_CURRENT 0x0008 675 #define USB_PORT_STATUS_RESET 0x0010 676 #define USB_PORT_STATUS_POWER 0x0100 677 #define USB_PORT_STATUS_LOW_SPEED 0x0200 678 #define USB_PORT_STATUS_HIGH_SPEED 0x0400 679 680 typedef union _USB_20_PORT_CHANGE { 681 USHORT AsUshort16; 682 __C89_NAMELESS struct { 683 USHORT ConnectStatusChange:1; 684 USHORT PortEnableDisableChange:1; 685 USHORT SuspendChange:1; 686 USHORT OverCurrentIndicatorChange:1; 687 USHORT ResetChange:1; 688 USHORT Reserved2:11; 689 }; 690 } USB_20_PORT_CHANGE,*PUSB_20_PORT_CHANGE; 691 692 typedef union _USB_30_PORT_STATUS { 693 USHORT AsUshort16; 694 __C89_NAMELESS struct { 695 USHORT CurrentConnectStatus:1; 696 USHORT PortEnabledDisabled:1; 697 USHORT Reserved0:1; 698 USHORT OverCurrent:1; 699 USHORT Reset:1; 700 USHORT PortLinkState:4; 701 USHORT PortPower:1; 702 USHORT NegotiatedDeviceSpeed:3; 703 USHORT Reserved1:3; 704 }; 705 } USB_30_PORT_STATUS,*PUSB_30_PORT_STATUS; 706 707 #define PORT_LINK_STATE_U0 0 708 #define PORT_LINK_STATE_U1 1 709 #define PORT_LINK_STATE_U2 2 710 #define PORT_LINK_STATE_U3 3 711 #define PORT_LINK_STATE_DISABLED 4 712 #define PORT_LINK_STATE_RX_DETECT 5 713 #define PORT_LINK_STATE_INACTIVE 6 714 #define PORT_LINK_STATE_POLLING 7 715 #define PORT_LINK_STATE_RECOVERY 8 716 #define PORT_LINK_STATE_HOT_RESET 9 717 #define PORT_LINK_STATE_COMPLIANCE_MODE 10 718 #define PORT_LINK_STATE_LOOPBACK 11 719 #define PORT_LINK_STATE_TEST_MODE 11 720 721 typedef union _USB_30_PORT_CHANGE { 722 USHORT AsUshort16; 723 __C89_NAMELESS struct { 724 USHORT ConnectStatusChange:1; 725 USHORT Reserved2:2; 726 USHORT OverCurrentIndicatorChange:1; 727 USHORT ResetChange:1; 728 USHORT BHResetChange:1; 729 USHORT PortLinkStateChange:1; 730 USHORT PortConfigErrorChange:1; 731 USHORT Reserved3:8; 732 }; 733 } USB_30_PORT_CHANGE,*PUSB_30_PORT_CHANGE; 734 735 typedef union _USB_PORT_STATUS { 736 USHORT AsUshort16; 737 USB_20_PORT_STATUS Usb20PortStatus; 738 USB_30_PORT_STATUS Usb30PortStatus; 739 } USB_PORT_STATUS,*PUSB_PORT_STATUS; 740 741 typedef union _USB_PORT_CHANGE { 742 USHORT AsUshort16; 743 USB_20_PORT_CHANGE Usb20PortChange; 744 USB_30_PORT_CHANGE Usb30PortChange; 745 } USB_PORT_CHANGE,*PUSB_PORT_CHANGE; 746 747 typedef union _USB_PORT_EXT_STATUS { 748 ULONG AsUlong32; 749 __C89_NAMELESS struct { 750 ULONG RxSublinkSpeedID:4; 751 ULONG TxSublinkSpeedID:4; 752 ULONG RxLaneCount:4; 753 ULONG TxLaneCount:4; 754 ULONG Reserved:16; 755 }; 756 } USB_PORT_EXT_STATUS,*PUSB_PORT_EXT_STATUS; 757 758 typedef union _USB_PORT_STATUS_AND_CHANGE { 759 ULONG AsUlong32; 760 __C89_NAMELESS struct { 761 USB_PORT_STATUS PortStatus; 762 USB_PORT_CHANGE PortChange; 763 }; 764 } USB_PORT_STATUS_AND_CHANGE,*PUSB_PORT_STATUS_AND_CHANGE; 765 766 typedef union _USB_PORT_EXT_STATUS_AND_CHANGE { 767 ULONG64 AsUlong64; 768 __C89_NAMELESS struct { 769 USB_PORT_STATUS_AND_CHANGE PortStatusChange; 770 USB_PORT_EXT_STATUS PortExtStatus; 771 }; 772 } USB_PORT_EXT_STATUS_AND_CHANGE,*PUSB_PORT_EXT_STATUS_AND_CHANGE; 773 774 typedef union _USB_HUB_30_PORT_REMOTE_WAKE_MASK { 775 UCHAR AsUchar8; 776 __C89_NAMELESS struct { 777 UCHAR ConnectRemoteWakeEnable:1; 778 UCHAR DisconnectRemoteWakeEnable:1; 779 UCHAR OverCurrentRemoteWakeEnable:1; 780 UCHAR Reserved0:5; 781 }; 782 } USB_HUB_30_PORT_REMOTE_WAKE_MASK,*PUSB_HUB_30_PORT_REMOTE_WAKE_MASK; 783 784 typedef union _USB_FUNCTION_SUSPEND_OPTIONS { 785 UCHAR AsUchar; 786 __C89_NAMELESS struct { 787 UCHAR PowerState:1; 788 UCHAR RemoteWakeEnabled:1; 789 UCHAR Reserved:6; 790 }; 791 } USB_FUNCTION_SUSPEND_OPTIONS,*PUSB_FUNCTION_SUSPEND_OPTIONS; 792 793 #define USB_FEATURE_INTERFACE_POWER_D0 0x0002 794 #define USB_FEATURE_INTERFACE_POWER_D1 0x0003 795 #define USB_FEATURE_INTERFACE_POWER_D2 0x0004 796 #define USB_FEATURE_INTERFACE_POWER_D3 0x0005 797 798 #define USB_SUPPORT_D0_COMMAND 0x01 799 #define USB_SUPPORT_D1_COMMAND 0x02 800 #define USB_SUPPORT_D2_COMMAND 0x04 801 #define USB_SUPPORT_D3_COMMAND 0x08 802 #define USB_SUPPORT_D1_WAKEUP 0x10 803 #define USB_SUPPORT_D2_WAKEUP 0x20 804 805 typedef struct _USB_CONFIGURATION_POWER_DESCRIPTOR { 806 UCHAR bLength; 807 UCHAR bDescriptorType; 808 UCHAR SelfPowerConsumedD0[3]; 809 UCHAR bPowerSummaryId; 810 UCHAR bBusPowerSavingD1; 811 UCHAR bSelfPowerSavingD1; 812 UCHAR bBusPowerSavingD2; 813 UCHAR bSelfPowerSavingD2; 814 UCHAR bBusPowerSavingD3; 815 UCHAR bSelfPowerSavingD3; 816 USHORT TransitionTimeFromD1; 817 USHORT TransitionTimeFromD2; 818 USHORT TransitionTimeFromD3; 819 } USB_CONFIGURATION_POWER_DESCRIPTOR,*PUSB_CONFIGURATION_POWER_DESCRIPTOR; 820 821 typedef struct _USB_INTERFACE_POWER_DESCRIPTOR { 822 UCHAR bLength; 823 UCHAR bDescriptorType; 824 UCHAR bmCapabilitiesFlags; 825 UCHAR bBusPowerSavingD1; 826 UCHAR bSelfPowerSavingD1; 827 UCHAR bBusPowerSavingD2; 828 UCHAR bSelfPowerSavingD2; 829 UCHAR bBusPowerSavingD3; 830 UCHAR bSelfPowerSavingD3; 831 USHORT TransitionTimeFromD1; 832 USHORT TransitionTimeFromD2; 833 USHORT TransitionTimeFromD3; 834 } USB_INTERFACE_POWER_DESCRIPTOR,*PUSB_INTERFACE_POWER_DESCRIPTOR; 835 836 #include <poppack.h> 837 838 #endif 839 #endif 840