usbuser.h 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345
  1. /**
  2. * usbuser.h
  3. *
  4. * USB user mode IOCTL interface
  5. *
  6. * This file is part of the mingw-w64 runtime package.
  7. * No warranty is given; refer to the file DISCLAIMER within this package.
  8. *
  9. * This file is based on the ReactOS PSDK file usbuser.h.
  10. * Original contributed by Casper S. Hornstrup <chorns@users.sourceforge.net>
  11. */
  12. #ifndef __USBUSER_H__
  13. #define __USBUSER_H__
  14. #include <winapifamily.h>
  15. #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
  16. #include "usbiodef.h"
  17. #ifdef __cplusplus
  18. extern "C" {
  19. #endif
  20. #include <pshpack1.h>
  21. #define USBUSER_VERSION 0x00000004
  22. #define IOCTL_USB_USER_REQUEST USB_CTL (HCD_USER_REQUEST)
  23. #ifndef IOCTL_USB_DIAGNOSTIC_MODE_ON
  24. #define IOCTL_USB_DIAGNOSTIC_MODE_ON USB_CTL (HCD_DIAGNOSTIC_MODE_ON)
  25. #endif
  26. #ifndef IOCTL_USB_DIAGNOSTIC_MODE_OFF
  27. #define IOCTL_USB_DIAGNOSTIC_MODE_OFF USB_CTL (HCD_DIAGNOSTIC_MODE_OFF)
  28. #endif
  29. #ifndef IOCTL_USB_GET_ROOT_HUB_NAME
  30. #define IOCTL_USB_GET_ROOT_HUB_NAME USB_CTL (HCD_GET_ROOT_HUB_NAME)
  31. #endif
  32. #ifndef IOCTL_GET_HCD_DRIVERKEY_NAME
  33. #define IOCTL_GET_HCD_DRIVERKEY_NAME USB_CTL (HCD_GET_DRIVERKEY_NAME)
  34. #endif
  35. typedef enum _USB_USER_ERROR_CODE {
  36. UsbUserSuccess = 0,
  37. UsbUserNotSupported,
  38. UsbUserInvalidRequestCode,
  39. UsbUserFeatureDisabled,
  40. UsbUserInvalidHeaderParameter,
  41. UsbUserInvalidParameter,
  42. UsbUserMiniportError,
  43. UsbUserBufferTooSmall,
  44. UsbUserErrorNotMapped,
  45. UsbUserDeviceNotStarted,
  46. UsbUserNoDeviceConnected
  47. } USB_USER_ERROR_CODE;
  48. #define USBUSER_GET_CONTROLLER_INFO_0 0x00000001
  49. #define USBUSER_GET_CONTROLLER_DRIVER_KEY 0x00000002
  50. #define USBUSER_PASS_THRU 0x00000003
  51. #define USBUSER_GET_POWER_STATE_MAP 0x00000004
  52. #define USBUSER_GET_BANDWIDTH_INFORMATION 0x00000005
  53. #define USBUSER_GET_BUS_STATISTICS_0 0x00000006
  54. #define USBUSER_GET_ROOTHUB_SYMBOLIC_NAME 0x00000007
  55. #define USBUSER_GET_USB_DRIVER_VERSION 0x00000008
  56. #define USBUSER_GET_USB2_HW_VERSION 0x00000009
  57. #define USBUSER_USB_REFRESH_HCT_REG 0x0000000a
  58. #define USBUSER_OP_SEND_ONE_PACKET 0x10000001
  59. #define USBUSER_OP_RAW_RESET_PORT 0x20000001
  60. #define USBUSER_OP_OPEN_RAW_DEVICE 0x20000002
  61. #define USBUSER_OP_CLOSE_RAW_DEVICE 0x20000003
  62. #define USBUSER_OP_SEND_RAW_COMMAND 0x20000004
  63. #define USBUSER_SET_ROOTPORT_FEATURE 0x20000005
  64. #define USBUSER_CLEAR_ROOTPORT_FEATURE 0x20000006
  65. #define USBUSER_GET_ROOTPORT_STATUS 0x20000007
  66. #define USBUSER_INVALID_REQUEST 0xfffffff0
  67. #define USBUSER_OP_MASK_DEVONLY_API 0x10000000
  68. #define USBUSER_OP_MASK_HCTEST_API 0x20000000
  69. #define USB_PACKETFLAG_LOW_SPEED 0x00000001
  70. #define USB_PACKETFLAG_FULL_SPEED 0x00000002
  71. #define USB_PACKETFLAG_HIGH_SPEED 0x00000004
  72. #define USB_PACKETFLAG_ASYNC_IN 0x00000008
  73. #define USB_PACKETFLAG_ASYNC_OUT 0x00000010
  74. #define USB_PACKETFLAG_ISO_IN 0x00000020
  75. #define USB_PACKETFLAG_ISO_OUT 0x00000040
  76. #define USB_PACKETFLAG_SETUP 0x00000080
  77. #define USB_PACKETFLAG_TOGGLE0 0x00000100
  78. #define USB_PACKETFLAG_TOGGLE1 0x00000200
  79. typedef struct _USBUSER_REQUEST_HEADER {
  80. ULONG UsbUserRequest;
  81. USB_USER_ERROR_CODE UsbUserStatusCode;
  82. ULONG RequestBufferLength;
  83. ULONG ActualBufferLength;
  84. } USBUSER_REQUEST_HEADER, *PUSBUSER_REQUEST_HEADER;
  85. typedef struct _PACKET_PARAMETERS {
  86. UCHAR DeviceAddress;
  87. UCHAR EndpointAddress;
  88. USHORT MaximumPacketSize;
  89. ULONG Timeout;
  90. ULONG Flags;
  91. ULONG DataLength;
  92. USHORT HubDeviceAddress;
  93. USHORT PortTTNumber;
  94. UCHAR ErrorCount;
  95. UCHAR Pad[3];
  96. USBD_STATUS UsbdStatusCode;
  97. UCHAR Data[4];
  98. } PACKET_PARAMETERS, *PPACKET_PARAMETERS;
  99. typedef struct _USBUSER_SEND_ONE_PACKET {
  100. USBUSER_REQUEST_HEADER Header;
  101. PACKET_PARAMETERS PacketParameters;
  102. } USBUSER_SEND_ONE_PACKET, *PUSBUSER_SEND_ONE_PACKET;
  103. typedef struct _RAW_RESET_PORT_PARAMETERS {
  104. USHORT PortNumber;
  105. USHORT PortStatus;
  106. } RAW_RESET_PORT_PARAMETERS, *PRAW_RESET_PORT_PARAMETERS;
  107. typedef struct _USBUSER_RAW_RESET_ROOT_PORT {
  108. USBUSER_REQUEST_HEADER Header;
  109. RAW_RESET_PORT_PARAMETERS Parameters;
  110. } USBUSER_RAW_RESET_ROOT_PORT, *PUSBUSER_RAW_RESET_ROOT_PORT;
  111. typedef struct _RAW_ROOTPORT_FEATURE {
  112. USHORT PortNumber;
  113. USHORT PortFeature;
  114. USHORT PortStatus;
  115. } RAW_ROOTPORT_FEATURE, *PRAW_ROOTPORT_FEATURE;
  116. typedef struct _USBUSER_ROOTPORT_FEATURE_REQUEST {
  117. USBUSER_REQUEST_HEADER Header;
  118. RAW_ROOTPORT_FEATURE Parameters;
  119. } USBUSER_ROOTPORT_FEATURE_REQUEST, *PUSBUSER_ROOTPORT_FEATURE_REQUEST;
  120. typedef struct _RAW_ROOTPORT_PARAMETERS {
  121. USHORT PortNumber;
  122. USHORT PortStatus;
  123. } RAW_ROOTPORT_PARAMETERS, *PRAW_ROOTPORT_PARAMETERS;
  124. typedef struct _USBUSER_ROOTPORT_PARAMETERS {
  125. USBUSER_REQUEST_HEADER Header;
  126. RAW_ROOTPORT_PARAMETERS Parameters;
  127. } USBUSER_ROOTPORT_PARAMETERS, *PUSBUSER_ROOTPORT_PARAMETERS;
  128. #define USB_HC_FEATURE_FLAG_PORT_POWER_SWITCHING 0x00000001
  129. #define USB_HC_FEATURE_FLAG_SEL_SUSPEND 0x00000002
  130. #define USB_HC_FEATURE_LEGACY_BIOS 0x00000004
  131. typedef struct _USB_CONTROLLER_INFO_0 {
  132. ULONG PciVendorId;
  133. ULONG PciDeviceId;
  134. ULONG PciRevision;
  135. ULONG NumberOfRootPorts;
  136. USB_CONTROLLER_FLAVOR ControllerFlavor;
  137. ULONG HcFeatureFlags;
  138. } USB_CONTROLLER_INFO_0, *PUSB_CONTROLLER_INFO_0;
  139. typedef struct _USBUSER_CONTROLLER_INFO_0 {
  140. USBUSER_REQUEST_HEADER Header;
  141. USB_CONTROLLER_INFO_0 Info0;
  142. } USBUSER_CONTROLLER_INFO_0, *PUSBUSER_CONTROLLER_INFO_0;
  143. typedef struct _USB_UNICODE_NAME {
  144. ULONG Length;
  145. WCHAR String[1];
  146. } USB_UNICODE_NAME, *PUSB_UNICODE_NAME;
  147. typedef struct _USBUSER_CONTROLLER_UNICODE_NAME {
  148. USBUSER_REQUEST_HEADER Header;
  149. USB_UNICODE_NAME UnicodeName;
  150. } USBUSER_CONTROLLER_UNICODE_NAME, *PUSBUSER_CONTROLLER_UNICODE_NAME;
  151. typedef struct _USB_PASS_THRU_PARAMETERS {
  152. GUID FunctionGUID;
  153. ULONG ParameterLength;
  154. UCHAR Parameters[4];
  155. } USB_PASS_THRU_PARAMETERS, *PUSB_PASS_THRU_PARAMETERS;
  156. typedef struct _USBUSER_PASS_THRU_REQUEST {
  157. USBUSER_REQUEST_HEADER Header;
  158. USB_PASS_THRU_PARAMETERS PassThru;
  159. } USBUSER_PASS_THRU_REQUEST, *PUSBUSER_PASS_THRU_REQUEST;
  160. typedef enum _WDMUSB_POWER_STATE {
  161. WdmUsbPowerNotMapped = 0,
  162. WdmUsbPowerSystemUnspecified = 100,
  163. WdmUsbPowerSystemWorking,
  164. WdmUsbPowerSystemSleeping1,
  165. WdmUsbPowerSystemSleeping2,
  166. WdmUsbPowerSystemSleeping3,
  167. WdmUsbPowerSystemHibernate,
  168. WdmUsbPowerSystemShutdown,
  169. WdmUsbPowerDeviceUnspecified = 200,
  170. WdmUsbPowerDeviceD0,
  171. WdmUsbPowerDeviceD1,
  172. WdmUsbPowerDeviceD2,
  173. WdmUsbPowerDeviceD3
  174. } WDMUSB_POWER_STATE;
  175. typedef struct _USB_POWER_INFO {
  176. WDMUSB_POWER_STATE SystemState;
  177. WDMUSB_POWER_STATE HcDevicePowerState;
  178. WDMUSB_POWER_STATE HcDeviceWake;
  179. WDMUSB_POWER_STATE HcSystemWake;
  180. WDMUSB_POWER_STATE RhDevicePowerState;
  181. WDMUSB_POWER_STATE RhDeviceWake;
  182. WDMUSB_POWER_STATE RhSystemWake;
  183. WDMUSB_POWER_STATE LastSystemSleepState;
  184. BOOLEAN CanWakeup;
  185. BOOLEAN IsPowered;
  186. } USB_POWER_INFO, *PUSB_POWER_INFO;
  187. typedef struct _USBUSER_POWER_INFO_REQUEST {
  188. USBUSER_REQUEST_HEADER Header;
  189. USB_POWER_INFO PowerInformation;
  190. } USBUSER_POWER_INFO_REQUEST, *PUSBUSER_POWER_INFO_REQUEST;
  191. typedef struct _USB_OPEN_RAW_DEVICE_PARAMETERS {
  192. USHORT PortStatus;
  193. USHORT MaxPacketEp0;
  194. } USB_OPEN_RAW_DEVICE_PARAMETERS, *PUSB_OPEN_RAW_DEVICE_PARAMETERS;
  195. typedef struct _USBUSER_OPEN_RAW_DEVICE {
  196. USBUSER_REQUEST_HEADER Header;
  197. USB_OPEN_RAW_DEVICE_PARAMETERS Parameters;
  198. } USBUSER_OPEN_RAW_DEVICE, *PUSBUSER_OPEN_RAW_DEVICE;
  199. typedef struct _USB_CLOSE_RAW_DEVICE_PARAMETERS {
  200. ULONG xxx;
  201. } USB_CLOSE_RAW_DEVICE_PARAMETERS, *PUSB_CLOSE_RAW_DEVICE_PARAMETERS;
  202. typedef struct _USBUSER_CLOSE_RAW_DEVICE {
  203. USBUSER_REQUEST_HEADER Header;
  204. USB_CLOSE_RAW_DEVICE_PARAMETERS Parameters;
  205. } USBUSER_CLOSE_RAW_DEVICE, *PUSBUSER_CLOSE_RAW_DEVICE;
  206. typedef struct _USB_SEND_RAW_COMMAND_PARAMETERS {
  207. UCHAR Usb_bmRequest;
  208. UCHAR Usb_bRequest;
  209. USHORT Usb_wVlaue;
  210. USHORT Usb_wIndex;
  211. USHORT Usb_wLength;
  212. USHORT DeviceAddress;
  213. USHORT MaximumPacketSize;
  214. ULONG Timeout;
  215. ULONG DataLength;
  216. USBD_STATUS UsbdStatusCode;
  217. UCHAR Data[4];
  218. } USB_SEND_RAW_COMMAND_PARAMETERS, *PUSB_SEND_RAW_COMMAND_PARAMETERS;
  219. typedef struct _USBUSER_SEND_RAW_COMMAND {
  220. USBUSER_REQUEST_HEADER Header;
  221. USB_SEND_RAW_COMMAND_PARAMETERS Parameters;
  222. } USBUSER_SEND_RAW_COMMAND, *PUSBUSER_SEND_RAW_COMMAND;
  223. typedef struct _USB_BANDWIDTH_INFO {
  224. ULONG DeviceCount;
  225. ULONG TotalBusBandwidth;
  226. ULONG Total32secBandwidth;
  227. ULONG AllocedBulkAndControl;
  228. ULONG AllocedIso;
  229. ULONG AllocedInterrupt_1ms;
  230. ULONG AllocedInterrupt_2ms;
  231. ULONG AllocedInterrupt_4ms;
  232. ULONG AllocedInterrupt_8ms;
  233. ULONG AllocedInterrupt_16ms;
  234. ULONG AllocedInterrupt_32ms;
  235. } USB_BANDWIDTH_INFO, *PUSB_BANDWIDTH_INFO;
  236. typedef struct _USBUSER_BANDWIDTH_INFO_REQUEST {
  237. USBUSER_REQUEST_HEADER Header;
  238. USB_BANDWIDTH_INFO BandwidthInformation;
  239. } USBUSER_BANDWIDTH_INFO_REQUEST, *PUSBUSER_BANDWIDTH_INFO_REQUEST;
  240. typedef struct _USB_BUS_STATISTICS_0 {
  241. ULONG DeviceCount;
  242. LARGE_INTEGER CurrentSystemTime;
  243. ULONG CurrentUsbFrame;
  244. ULONG BulkBytes;
  245. ULONG IsoBytes;
  246. ULONG InterruptBytes;
  247. ULONG ControlDataBytes;
  248. ULONG PciInterruptCount;
  249. ULONG HardResetCount;
  250. ULONG WorkerSignalCount;
  251. ULONG CommonBufferBytes;
  252. ULONG WorkerIdleTimeMs;
  253. BOOLEAN RootHubEnabled;
  254. UCHAR RootHubDevicePowerState;
  255. UCHAR Unused;
  256. UCHAR NameIndex;
  257. } USB_BUS_STATISTICS_0, *PUSB_BUS_STATISTICS_0;
  258. typedef struct _USBUSER_BUS_STATISTICS_0_REQUEST {
  259. USBUSER_REQUEST_HEADER Header;
  260. USB_BUS_STATISTICS_0 BusStatistics0;
  261. } USBUSER_BUS_STATISTICS_0_REQUEST, *PUSBUSER_BUS_STATISTICS_0_REQUEST;
  262. typedef struct _USB_DRIVER_VERSION_PARAMETERS {
  263. ULONG DriverTrackingCode;
  264. ULONG USBDI_Version;
  265. ULONG USBUSER_Version;
  266. BOOLEAN CheckedPortDriver;
  267. BOOLEAN CheckedMiniportDriver;
  268. USHORT USB_Version;
  269. } USB_DRIVER_VERSION_PARAMETERS, *PUSB_DRIVER_VERSION_PARAMETERS;
  270. typedef struct _USBUSER_GET_DRIVER_VERSION {
  271. USBUSER_REQUEST_HEADER Header;
  272. USB_DRIVER_VERSION_PARAMETERS Parameters;
  273. } USBUSER_GET_DRIVER_VERSION, *PUSBUSER_GET_DRIVER_VERSION;
  274. typedef struct _USB_USB2HW_VERSION_PARAMETERS {
  275. UCHAR Usb2HwRevision;
  276. } USB_USB2HW_VERSION_PARAMETERS, *PUSB_USB2HW_VERSION_PARAMETERS;
  277. typedef struct _USBUSER_GET_USB2HW_VERSION {
  278. USBUSER_REQUEST_HEADER Header;
  279. USB_USB2HW_VERSION_PARAMETERS Parameters;
  280. } USBUSER_GET_USB2HW_VERSION, *PUSBUSER_GET_USB2HW_VERSION;
  281. typedef struct _USBUSER_REFRESH_HCT_REG {
  282. USBUSER_REQUEST_HEADER Header;
  283. ULONG Flags;
  284. } USBUSER_REFRESH_HCT_REG, *PUSBUSER_REFRESH_HCT_REG;
  285. #include <poppack.h>
  286. #ifdef __cplusplus
  287. }
  288. #endif
  289. #endif
  290. #endif