Naveen Neel / shedskin
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers usbuser.h Source File

usbuser.h

00001 /*
00002  * usbuser.h
00003  *
00004  * USB user mode IOCTL interface
00005  *
00006  * This file is part of the w32api package.
00007  *
00008  * Contributors:
00009  *   Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
00010  *
00011  * THIS SOFTWARE IS NOT COPYRIGHTED
00012  *
00013  * This source code is offered for use in the public domain. You may
00014  * use, modify or distribute it freely.
00015  *
00016  * This code is distributed in the hope that it will be useful but
00017  * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
00018  * DISCLAIMED. This includes but is not limited to warranties of
00019  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
00020  *
00021  */
00022 
00023 #ifndef __USBUSER_H
00024 #define __USBUSER_H
00025 
00026 #if __GNUC__ >=3
00027 #pragma GCC system_header
00028 #endif
00029 
00030 #ifdef __cplusplus
00031 extern "C" {
00032 #endif
00033 
00034 #include "ntddk.h"
00035 #include "usb.h"
00036 #include "usbiodef.h"
00037 
00038 #include <pshpack1.h>
00039 
00040 #define USBUSER_VERSION                   0x0004
00041 
00042 #define IOCTL_USB_USER_REQUEST            USB_CTL(HCD_USER_REQUEST)
00043 
00044 #ifndef IOCTL_USB_DIAGNOSTIC_MODE_ON
00045 #define IOCTL_USB_DIAGNOSTIC_MODE_ON      USB_CTL(HCD_DIAGNOSTIC_MODE_ON) 
00046 #endif
00047 #ifndef IOCTL_USB_DIAGNOSTIC_MODE_OFF
00048 #define IOCTL_USB_DIAGNOSTIC_MODE_OFF     USB_CTL(HCD_DIAGNOSTIC_MODE_OFF) 
00049 #endif
00050 
00051 #ifndef IOCTL_USB_GET_ROOT_HUB_NAME
00052 #define IOCTL_USB_GET_ROOT_HUB_NAME       USB_CTL(HCD_GET_ROOT_HUB_NAME) 
00053 #endif
00054 #ifndef IOCTL_GET_HCD_DRIVERKEY_NAME
00055 #define IOCTL_GET_HCD_DRIVERKEY_NAME      USB_CTL(HCD_GET_DRIVERKEY_NAME) 
00056 #endif
00057 
00058 typedef enum _USB_USER_ERROR_CODE {
00059     UsbUserSuccess = 0,
00060     UsbUserNotSupported,
00061     UsbUserInvalidRequestCode,
00062     UsbUserFeatureDisabled,
00063     UsbUserInvalidHeaderParameter,
00064     UsbUserInvalidParameter,
00065     UsbUserMiniportError,
00066     UsbUserBufferTooSmall,
00067     UsbUserErrorNotMapped,
00068     UsbUserDeviceNotStarted,
00069     UsbUserNoDeviceConnected
00070 } USB_USER_ERROR_CODE;
00071 
00072 #define USBUSER_GET_CONTROLLER_INFO_0     0x00000001
00073 #define USBUSER_GET_CONTROLLER_DRIVER_KEY 0x00000002
00074 #define USBUSER_PASS_THRU                 0x00000003
00075 #define USBUSER_GET_POWER_STATE_MAP       0x00000004
00076 #define USBUSER_GET_BANDWIDTH_INFORMATION 0x00000005
00077 #define USBUSER_GET_BUS_STATISTICS_0      0x00000006
00078 #define USBUSER_GET_ROOTHUB_SYMBOLIC_NAME 0x00000007
00079 #define USBUSER_GET_USB_DRIVER_VERSION    0x00000008
00080 #define USBUSER_GET_USB2_HW_VERSION       0x00000009
00081 #define USBUSER_OP_SEND_ONE_PACKET        0x10000001
00082 #define USBUSER_OP_RAW_RESET_PORT         0x20000001
00083 #define USBUSER_OP_OPEN_RAW_DEVICE        0x20000002
00084 #define USBUSER_OP_CLOSE_RAW_DEVICE       0x20000003
00085 #define USBUSER_OP_SEND_RAW_COMMAND       0x20000004
00086 #define USBUSER_INVALID_REQUEST           0xFFFFFFF0
00087 #define USBUSER_OP_MASK_DEVONLY_API       0x10000000
00088 #define USBUSER_OP_MASK_HCTEST_API        0x20000000
00089 
00090 #define USB_PACKETFLAG_LOW_SPEED          0x00000001
00091 #define USB_PACKETFLAG_FULL_SPEED         0x00000002
00092 #define USB_PACKETFLAG_HIGH_SPEED         0x00000004
00093 #define USB_PACKETFLAG_ASYNC_IN           0x00000008
00094 #define USB_PACKETFLAG_ASYNC_OUT          0x00000010
00095 #define USB_PACKETFLAG_ISO_IN             0x00000020
00096 #define USB_PACKETFLAG_ISO_OUT            0x00000040
00097 #define USB_PACKETFLAG_SETUP              0x00000080
00098 #define USB_PACKETFLAG_TOGGLE0            0x00000100
00099 #define USB_PACKETFLAG_TOGGLE1            0x00000200
00100 
00101 typedef struct _PACKET_PARAMETERS {
00102     UCHAR  DeviceAddress;
00103     UCHAR  EndpointAddress;
00104     USHORT  MaximumPacketSize;
00105     ULONG  Timeout;
00106     ULONG  Flags;
00107     ULONG  DataLength;
00108     USHORT  HubDeviceAddress;
00109     USHORT  PortTTNumber;
00110     UCHAR  ErrorCount;
00111     UCHAR  Pad[3];
00112     USBD_STATUS  UsbdStatusCode;
00113     UCHAR  Data[4];
00114 } PACKET_PARAMETERS, *PPACKET_PARAMETERS;
00115 
00116 typedef struct _RAW_RESET_PORT_PARAMETERS {
00117     USHORT  PortNumber;
00118     USHORT  PortStatus;
00119 } RAW_RESET_PORT_PARAMETERS, *PRAW_RESET_PORT_PARAMETERS;
00120 
00121 typedef struct _USB_BANDWIDTH_INFO {
00122     ULONG  DeviceCount;
00123     ULONG  TotalBusBandwidth;
00124     ULONG  Total32secBandwidth;
00125     ULONG  AllocedBulkAndControl;
00126     ULONG  AllocedIso;
00127     ULONG  AllocedInterrupt_1ms;
00128     ULONG  AllocedInterrupt_2ms;
00129     ULONG  AllocedInterrupt_4ms;
00130     ULONG  AllocedInterrupt_8ms;
00131     ULONG  AllocedInterrupt_16ms;
00132     ULONG  AllocedInterrupt_32ms;
00133 } USB_BANDWIDTH_INFO, *PUSB_BANDWIDTH_INFO;
00134 
00135 typedef struct _USBUSER_REQUEST_HEADER {
00136     ULONG  UsbUserRequest;
00137     USB_USER_ERROR_CODE  UsbUserStatusCode;
00138     ULONG  RequestBufferLength;
00139     ULONG  ActualBufferLength;
00140 } USBUSER_REQUEST_HEADER, *PUSBUSER_REQUEST_HEADER;
00141 
00142 typedef struct _USBUSER_BANDWIDTH_INFO_REQUEST {
00143     USBUSER_REQUEST_HEADER  Header;
00144     USB_BANDWIDTH_INFO  BandwidthInformation;
00145 } USBUSER_BANDWIDTH_INFO_REQUEST, *PUSBUSER_BANDWIDTH_INFO_REQUEST;
00146 
00147 typedef struct _USB_BUS_STATISTICS_0 {
00148     ULONG  DeviceCount;
00149     LARGE_INTEGER  CurrentSystemTime;
00150     ULONG  CurrentUsbFrame;
00151     ULONG  BulkBytes;
00152     ULONG  IsoBytes;
00153     ULONG  InterruptBytes;
00154     ULONG  ControlDataBytes;
00155     ULONG  PciInterruptCount;
00156     ULONG  HardResetCount;
00157     ULONG  WorkerSignalCount;
00158     ULONG  CommonBufferBytes;
00159     ULONG  WorkerIdleTimeMs;
00160     BOOLEAN  RootHubEnabled;
00161     UCHAR  RootHubDevicePowerState;
00162     UCHAR  Unused;
00163     UCHAR  NameIndex;
00164 } USB_BUS_STATISTICS_0, *PUSB_BUS_STATISTICS_0;
00165 
00166 typedef struct _USBUSER_BUS_STATISTICS_0_REQUEST {
00167     USBUSER_REQUEST_HEADER  Header;
00168     USB_BUS_STATISTICS_0  BusStatistics0;
00169 } USBUSER_BUS_STATISTICS_0_REQUEST, *PUSBUSER_BUS_STATISTICS_0_REQUEST;
00170 
00171 /* USB_CONTROLLER_INFO_0.HcFeatureFlags constants */
00172 #define USB_HC_FEATURE_FLAG_PORT_POWER_SWITCHING  0x00000001
00173 #define USB_HC_FEATURE_FLAG_SEL_SUSPEND           0x00000002
00174 #define USB_HC_FEATURE_LEGACY_BIOS                0x00000004
00175 
00176 typedef struct _USB_CLOSE_RAW_DEVICE_PARAMETERS {
00177   ULONG  xxx;
00178 } USB_CLOSE_RAW_DEVICE_PARAMETERS , *PUSB_CLOSE_RAW_DEVICE_PARAMETERS;
00179 
00180 typedef struct _USBUSER_CLOSE_RAW_DEVICE {
00181     USBUSER_REQUEST_HEADER  Header;
00182     USB_CLOSE_RAW_DEVICE_PARAMETERS  Parameters;
00183 } USBUSER_CLOSE_RAW_DEVICE, *PUSBUSER_CLOSE_RAW_DEVICE;
00184 
00185 typedef struct _USB_CONTROLLER_INFO_0 {
00186   ULONG  PciVendorId;
00187   ULONG  PciDeviceId;
00188   ULONG  PciRevision;
00189   ULONG  NumberOfRootPorts;
00190   USB_CONTROLLER_FLAVOR  ControllerFlavor;
00191   ULONG  HcFeatureFlags;
00192 } USB_CONTROLLER_INFO_0 , *PUSB_CONTROLLER_INFO_0;
00193 
00194 typedef struct _USBUSER_CONTROLLER_INFO_0 {
00195   USBUSER_REQUEST_HEADER  Header;
00196   USB_CONTROLLER_INFO_0  Info0;    
00197 } USBUSER_CONTROLLER_INFO_0, *PUSBUSER_CONTROLLER_INFO_0;
00198 
00199 typedef struct _USB_DRIVER_VERSION_PARAMETERS {
00200     ULONG  DriverTrackingCode;
00201     ULONG  USBDI_Version;
00202     ULONG  USBUSER_Version;
00203     BOOLEAN  CheckedPortDriver;
00204     BOOLEAN  CheckedMiniportDriver;
00205     USHORT  USB_Version;
00206 } USB_DRIVER_VERSION_PARAMETERS , *PUSB_DRIVER_VERSION_PARAMETERS;
00207 
00208 typedef struct _USBUSER_GET_DRIVER_VERSION {
00209     USBUSER_REQUEST_HEADER  Header;
00210     USB_DRIVER_VERSION_PARAMETERS  Parameters;    
00211 } USBUSER_GET_DRIVER_VERSION, *PUSBUSER_GET_DRIVER_VERSION;
00212 
00213 typedef struct _USB_OPEN_RAW_DEVICE_PARAMETERS {
00214     USHORT  PortStatus;
00215     USHORT  MaxPacketEp0;
00216 } USB_OPEN_RAW_DEVICE_PARAMETERS , *PUSB_OPEN_RAW_DEVICE_PARAMETERS;
00217 
00218 typedef struct _USBUSER_OPEN_RAW_DEVICE {
00219     USBUSER_REQUEST_HEADER  Header;
00220     USB_OPEN_RAW_DEVICE_PARAMETERS  Parameters;    
00221 } USBUSER_OPEN_RAW_DEVICE, *PUSBUSER_OPEN_RAW_DEVICE;
00222 
00223 typedef enum _WDMUSB_POWER_STATE {
00224     WdmUsbPowerNotMapped = 0,
00225     WdmUsbPowerSystemUnspecified = 100,
00226     WdmUsbPowerSystemWorking,
00227     WdmUsbPowerSystemSleeping1,
00228     WdmUsbPowerSystemSleeping2,
00229     WdmUsbPowerSystemSleeping3,
00230     WdmUsbPowerSystemHibernate,
00231     WdmUsbPowerSystemShutdown,
00232     WdmUsbPowerDeviceUnspecified = 200,
00233     WdmUsbPowerDeviceD0,
00234     WdmUsbPowerDeviceD1,
00235     WdmUsbPowerDeviceD2,
00236     WdmUsbPowerDeviceD3
00237 } WDMUSB_POWER_STATE;
00238 
00239 typedef struct _USB_POWER_INFO {
00240     WDMUSB_POWER_STATE  SystemState;
00241     WDMUSB_POWER_STATE  HcDevicePowerState;
00242     WDMUSB_POWER_STATE  HcDeviceWake;
00243     WDMUSB_POWER_STATE  HcSystemWake; 
00244     WDMUSB_POWER_STATE  RhDevicePowerState;
00245     WDMUSB_POWER_STATE  RhDeviceWake;
00246     WDMUSB_POWER_STATE  RhSystemWake; 
00247     WDMUSB_POWER_STATE  LastSystemSleepState; 
00248     BOOLEAN  CanWakeup;
00249     BOOLEAN  IsPowered;
00250 } USB_POWER_INFO, *PUSB_POWER_INFO;
00251 
00252 typedef struct _USBUSER_POWER_INFO_REQUEST {
00253     USBUSER_REQUEST_HEADER  Header;
00254     USB_POWER_INFO  PowerInformation;
00255 } USBUSER_POWER_INFO_REQUEST, *PUSBUSER_POWER_INFO_REQUEST;
00256 
00257 typedef struct _USB_UNICODE_NAME {
00258     ULONG  Length;
00259     WCHAR  String[1];
00260 } USB_UNICODE_NAME, *PUSB_UNICODE_NAME;
00261 
00262 typedef struct _USBUSER_CONTROLLER_UNICODE_NAME {
00263     USBUSER_REQUEST_HEADER  Header;
00264   USB_UNICODE_NAME  UnicodeName;
00265 } USBUSER_CONTROLLER_UNICODE_NAME, *PUSBUSER_CONTROLLER_UNICODE_NAME;
00266 
00267 typedef struct _USB_PASS_THRU_PARAMETERS {
00268     GUID  FunctionGUID;
00269     ULONG  ParameterLength;
00270     UCHAR  Parameters[4];
00271 } USB_PASS_THRU_PARAMETERS, *PUSB_PASS_THRU_PARAMETERS;
00272 
00273 typedef struct _USBUSER_PASS_THRU_REQUEST {
00274     USBUSER_REQUEST_HEADER  Header;
00275     USB_PASS_THRU_PARAMETERS  PassThru;
00276 } USBUSER_PASS_THRU_REQUEST, *PUSBUSER_PASS_THRU_REQUEST;
00277 
00278 typedef struct _USBUSER_RAW_RESET_ROOT_PORT {
00279     USBUSER_REQUEST_HEADER  Header;
00280     RAW_RESET_PORT_PARAMETERS  Parameters;
00281 } USBUSER_RAW_RESET_ROOT_PORT, *PUSBUSER_RAW_RESET_ROOT_PORT;
00282 
00283 typedef struct _USBUSER_SEND_ONE_PACKET {
00284     USBUSER_REQUEST_HEADER  Header;
00285     PACKET_PARAMETERS  PacketParameters;
00286 } USBUSER_SEND_ONE_PACKET, *PUSBUSER_SEND_ONE_PACKET;
00287 
00288 typedef struct _USB_SEND_RAW_COMMAND_PARAMETERS {
00289     UCHAR  Usb_bmRequest;
00290     UCHAR  Usb_bRequest;
00291     USHORT  Usb_wVlaue;
00292     USHORT  Usb_wIndex;
00293     USHORT  Usb_wLength;
00294     USHORT  DeviceAddress;
00295     USHORT  MaximumPacketSize;
00296     ULONG  Timeout;
00297     ULONG  DataLength;
00298     USBD_STATUS  UsbdStatusCode;
00299     UCHAR  Data[4];
00300 } USB_SEND_RAW_COMMAND_PARAMETERS, *PUSB_SEND_RAW_COMMAND_PARAMETERS;
00301 
00302 typedef struct _USBUSER_SEND_RAW_COMMAND {
00303     USBUSER_REQUEST_HEADER  Header;
00304     USB_SEND_RAW_COMMAND_PARAMETERS  Parameters;
00305 } USBUSER_SEND_RAW_COMMAND, *PUSBUSER_SEND_RAW_COMMAND;
00306 
00307 /* USB_USB2HW_VERSION_PARAMETERS.Usb2HwRevision constants */
00308 #define USB2HW_UNKNOWN                    0x00
00309 #define USB2HW_A0                         0xA0
00310 #define USB2HW_A1                         0xA1
00311 #define USB2HW_B0                         0xB0
00312 
00313 typedef struct _USB_USB2HW_VERSION_PARAMETERS {
00314   UCHAR  Usb2HwRevision;
00315 } USB_USB2HW_VERSION_PARAMETERS, *PUSB_USB2HW_VERSION_PARAMETERS;
00316 
00317 typedef struct _USBUSER_GET_USB2HW_VERSION {
00318     USBUSER_REQUEST_HEADER  Header;
00319     USB_USB2HW_VERSION_PARAMETERS  Parameters;
00320 } USBUSER_GET_USB2HW_VERSION, *PUSBUSER_GET_USB2HW_VERSION;
00321 
00322 #include <poppack.h>
00323 
00324 #ifdef __cplusplus
00325 }
00326 #endif
00327 
00328 #endif /* __USBUSER_H */