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