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