Home | History | Annotate | Download | only in include
      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