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