usbspec.h 25 KB

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