329 lines
		
	
	
		
			9.9 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			329 lines
		
	
	
		
			9.9 KiB
		
	
	
	
		
			C
		
	
	
	
| /*
 | |
|  * usbuser.h
 | |
|  *
 | |
|  * USB user mode IOCTL interface
 | |
|  *
 | |
|  * This file is part of the w32api package.
 | |
|  *
 | |
|  * Contributors:
 | |
|  *   Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
 | |
|  *
 | |
|  * THIS SOFTWARE IS NOT COPYRIGHTED
 | |
|  *
 | |
|  * This source code is offered for use in the public domain. You may
 | |
|  * use, modify or distribute it freely.
 | |
|  *
 | |
|  * This code is distributed in the hope that it will be useful but
 | |
|  * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
 | |
|  * DISCLAIMED. This includes but is not limited to warranties of
 | |
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 | |
|  *
 | |
|  */
 | |
| 
 | |
| #ifndef __USBUSER_H
 | |
| #define __USBUSER_H
 | |
| 
 | |
| #if __GNUC__ >=3
 | |
| #pragma GCC system_header
 | |
| #endif
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| extern "C" {
 | |
| #endif
 | |
| 
 | |
| #include "ntddk.h"
 | |
| #include "usb.h"
 | |
| #include "usbiodef.h"
 | |
| 
 | |
| #include <pshpack1.h>
 | |
| 
 | |
| #define USBUSER_VERSION                   0x0004
 | |
| 
 | |
| #define IOCTL_USB_USER_REQUEST            USB_CTL(HCD_USER_REQUEST)
 | |
| 
 | |
| #ifndef IOCTL_USB_DIAGNOSTIC_MODE_ON
 | |
| #define IOCTL_USB_DIAGNOSTIC_MODE_ON      USB_CTL(HCD_DIAGNOSTIC_MODE_ON) 
 | |
| #endif
 | |
| #ifndef IOCTL_USB_DIAGNOSTIC_MODE_OFF
 | |
| #define IOCTL_USB_DIAGNOSTIC_MODE_OFF     USB_CTL(HCD_DIAGNOSTIC_MODE_OFF) 
 | |
| #endif
 | |
| 
 | |
| #ifndef IOCTL_USB_GET_ROOT_HUB_NAME
 | |
| #define IOCTL_USB_GET_ROOT_HUB_NAME       USB_CTL(HCD_GET_ROOT_HUB_NAME) 
 | |
| #endif
 | |
| #ifndef IOCTL_GET_HCD_DRIVERKEY_NAME
 | |
| #define IOCTL_GET_HCD_DRIVERKEY_NAME      USB_CTL(HCD_GET_DRIVERKEY_NAME) 
 | |
| #endif
 | |
| 
 | |
| typedef enum _USB_USER_ERROR_CODE {
 | |
| 	UsbUserSuccess = 0,
 | |
| 	UsbUserNotSupported,
 | |
| 	UsbUserInvalidRequestCode,
 | |
| 	UsbUserFeatureDisabled,
 | |
| 	UsbUserInvalidHeaderParameter,
 | |
| 	UsbUserInvalidParameter,
 | |
| 	UsbUserMiniportError,
 | |
| 	UsbUserBufferTooSmall,
 | |
| 	UsbUserErrorNotMapped,
 | |
| 	UsbUserDeviceNotStarted,
 | |
| 	UsbUserNoDeviceConnected
 | |
| } USB_USER_ERROR_CODE;
 | |
| 
 | |
| #define USBUSER_GET_CONTROLLER_INFO_0     0x00000001
 | |
| #define USBUSER_GET_CONTROLLER_DRIVER_KEY 0x00000002
 | |
| #define USBUSER_PASS_THRU                 0x00000003
 | |
| #define USBUSER_GET_POWER_STATE_MAP       0x00000004
 | |
| #define USBUSER_GET_BANDWIDTH_INFORMATION 0x00000005
 | |
| #define USBUSER_GET_BUS_STATISTICS_0      0x00000006
 | |
| #define USBUSER_GET_ROOTHUB_SYMBOLIC_NAME 0x00000007
 | |
| #define USBUSER_GET_USB_DRIVER_VERSION    0x00000008
 | |
| #define USBUSER_GET_USB2_HW_VERSION       0x00000009
 | |
| #define USBUSER_OP_SEND_ONE_PACKET        0x10000001
 | |
| #define USBUSER_OP_RAW_RESET_PORT         0x20000001
 | |
| #define USBUSER_OP_OPEN_RAW_DEVICE        0x20000002
 | |
| #define USBUSER_OP_CLOSE_RAW_DEVICE       0x20000003
 | |
| #define USBUSER_OP_SEND_RAW_COMMAND       0x20000004
 | |
| #define USBUSER_INVALID_REQUEST           0xFFFFFFF0
 | |
| #define USBUSER_OP_MASK_DEVONLY_API       0x10000000
 | |
| #define USBUSER_OP_MASK_HCTEST_API        0x20000000
 | |
| 
 | |
| #define USB_PACKETFLAG_LOW_SPEED          0x00000001
 | |
| #define USB_PACKETFLAG_FULL_SPEED         0x00000002
 | |
| #define USB_PACKETFLAG_HIGH_SPEED         0x00000004
 | |
| #define USB_PACKETFLAG_ASYNC_IN           0x00000008
 | |
| #define USB_PACKETFLAG_ASYNC_OUT          0x00000010
 | |
| #define USB_PACKETFLAG_ISO_IN             0x00000020
 | |
| #define USB_PACKETFLAG_ISO_OUT            0x00000040
 | |
| #define USB_PACKETFLAG_SETUP              0x00000080
 | |
| #define USB_PACKETFLAG_TOGGLE0            0x00000100
 | |
| #define USB_PACKETFLAG_TOGGLE1            0x00000200
 | |
| 
 | |
| typedef struct _PACKET_PARAMETERS {
 | |
| 	UCHAR  DeviceAddress;
 | |
| 	UCHAR  EndpointAddress;
 | |
| 	USHORT  MaximumPacketSize;
 | |
| 	ULONG  Timeout;
 | |
| 	ULONG  Flags;
 | |
| 	ULONG  DataLength;
 | |
| 	USHORT  HubDeviceAddress;
 | |
| 	USHORT  PortTTNumber;
 | |
| 	UCHAR  ErrorCount;
 | |
| 	UCHAR  Pad[3];
 | |
| 	USBD_STATUS  UsbdStatusCode;
 | |
| 	UCHAR  Data[4];
 | |
| } PACKET_PARAMETERS, *PPACKET_PARAMETERS;
 | |
| 
 | |
| typedef struct _RAW_RESET_PORT_PARAMETERS {
 | |
| 	USHORT  PortNumber;
 | |
| 	USHORT  PortStatus;
 | |
| } RAW_RESET_PORT_PARAMETERS, *PRAW_RESET_PORT_PARAMETERS;
 | |
| 
 | |
| typedef struct _USB_BANDWIDTH_INFO {
 | |
| 	ULONG  DeviceCount;
 | |
| 	ULONG  TotalBusBandwidth;
 | |
| 	ULONG  Total32secBandwidth;
 | |
| 	ULONG  AllocedBulkAndControl;
 | |
| 	ULONG  AllocedIso;
 | |
| 	ULONG  AllocedInterrupt_1ms;
 | |
| 	ULONG  AllocedInterrupt_2ms;
 | |
| 	ULONG  AllocedInterrupt_4ms;
 | |
| 	ULONG  AllocedInterrupt_8ms;
 | |
| 	ULONG  AllocedInterrupt_16ms;
 | |
| 	ULONG  AllocedInterrupt_32ms;
 | |
| } USB_BANDWIDTH_INFO, *PUSB_BANDWIDTH_INFO;
 | |
| 
 | |
| typedef struct _USBUSER_REQUEST_HEADER {
 | |
| 	ULONG  UsbUserRequest;
 | |
| 	USB_USER_ERROR_CODE  UsbUserStatusCode;
 | |
| 	ULONG  RequestBufferLength;
 | |
| 	ULONG  ActualBufferLength;
 | |
| } USBUSER_REQUEST_HEADER, *PUSBUSER_REQUEST_HEADER;
 | |
| 
 | |
| typedef struct _USBUSER_BANDWIDTH_INFO_REQUEST {
 | |
| 	USBUSER_REQUEST_HEADER  Header;
 | |
| 	USB_BANDWIDTH_INFO  BandwidthInformation;
 | |
| } USBUSER_BANDWIDTH_INFO_REQUEST, *PUSBUSER_BANDWIDTH_INFO_REQUEST;
 | |
| 
 | |
| typedef struct _USB_BUS_STATISTICS_0 {
 | |
| 	ULONG  DeviceCount;
 | |
| 	LARGE_INTEGER  CurrentSystemTime;
 | |
| 	ULONG  CurrentUsbFrame;
 | |
| 	ULONG  BulkBytes;
 | |
| 	ULONG  IsoBytes;
 | |
| 	ULONG  InterruptBytes;
 | |
| 	ULONG  ControlDataBytes;
 | |
| 	ULONG  PciInterruptCount;
 | |
| 	ULONG  HardResetCount;
 | |
| 	ULONG  WorkerSignalCount;
 | |
| 	ULONG  CommonBufferBytes;
 | |
| 	ULONG  WorkerIdleTimeMs;
 | |
| 	BOOLEAN  RootHubEnabled;
 | |
| 	UCHAR  RootHubDevicePowerState;
 | |
| 	UCHAR  Unused;
 | |
| 	UCHAR  NameIndex;
 | |
| } USB_BUS_STATISTICS_0, *PUSB_BUS_STATISTICS_0;
 | |
| 
 | |
| typedef struct _USBUSER_BUS_STATISTICS_0_REQUEST {
 | |
| 	USBUSER_REQUEST_HEADER  Header;
 | |
| 	USB_BUS_STATISTICS_0  BusStatistics0;
 | |
| } USBUSER_BUS_STATISTICS_0_REQUEST, *PUSBUSER_BUS_STATISTICS_0_REQUEST;
 | |
| 
 | |
| /* USB_CONTROLLER_INFO_0.HcFeatureFlags constants */
 | |
| #define USB_HC_FEATURE_FLAG_PORT_POWER_SWITCHING  0x00000001
 | |
| #define USB_HC_FEATURE_FLAG_SEL_SUSPEND           0x00000002
 | |
| #define USB_HC_FEATURE_LEGACY_BIOS                0x00000004
 | |
| 
 | |
| typedef struct _USB_CLOSE_RAW_DEVICE_PARAMETERS {
 | |
|   ULONG  xxx;
 | |
| } USB_CLOSE_RAW_DEVICE_PARAMETERS , *PUSB_CLOSE_RAW_DEVICE_PARAMETERS;
 | |
| 
 | |
| typedef struct _USBUSER_CLOSE_RAW_DEVICE {
 | |
| 	USBUSER_REQUEST_HEADER  Header;
 | |
| 	USB_CLOSE_RAW_DEVICE_PARAMETERS  Parameters;
 | |
| } USBUSER_CLOSE_RAW_DEVICE, *PUSBUSER_CLOSE_RAW_DEVICE;
 | |
| 
 | |
| typedef struct _USB_CONTROLLER_INFO_0 {
 | |
|   ULONG  PciVendorId;
 | |
|   ULONG  PciDeviceId;
 | |
|   ULONG  PciRevision;
 | |
|   ULONG  NumberOfRootPorts;
 | |
|   USB_CONTROLLER_FLAVOR  ControllerFlavor;
 | |
|   ULONG  HcFeatureFlags;
 | |
| } USB_CONTROLLER_INFO_0 , *PUSB_CONTROLLER_INFO_0;
 | |
| 
 | |
| typedef struct _USBUSER_CONTROLLER_INFO_0 {
 | |
|   USBUSER_REQUEST_HEADER  Header;
 | |
|   USB_CONTROLLER_INFO_0  Info0;    
 | |
| } USBUSER_CONTROLLER_INFO_0, *PUSBUSER_CONTROLLER_INFO_0;
 | |
| 
 | |
| typedef struct _USB_DRIVER_VERSION_PARAMETERS {
 | |
| 	ULONG  DriverTrackingCode;
 | |
| 	ULONG  USBDI_Version;
 | |
| 	ULONG  USBUSER_Version;
 | |
| 	BOOLEAN  CheckedPortDriver;
 | |
| 	BOOLEAN  CheckedMiniportDriver;
 | |
| 	USHORT  USB_Version;
 | |
| } USB_DRIVER_VERSION_PARAMETERS , *PUSB_DRIVER_VERSION_PARAMETERS;
 | |
| 
 | |
| typedef struct _USBUSER_GET_DRIVER_VERSION {
 | |
| 	USBUSER_REQUEST_HEADER  Header;
 | |
| 	USB_DRIVER_VERSION_PARAMETERS  Parameters;    
 | |
| } USBUSER_GET_DRIVER_VERSION, *PUSBUSER_GET_DRIVER_VERSION;
 | |
| 
 | |
| typedef struct _USB_OPEN_RAW_DEVICE_PARAMETERS {
 | |
| 	USHORT  PortStatus;
 | |
| 	USHORT  MaxPacketEp0;
 | |
| } USB_OPEN_RAW_DEVICE_PARAMETERS , *PUSB_OPEN_RAW_DEVICE_PARAMETERS;
 | |
| 
 | |
| typedef struct _USBUSER_OPEN_RAW_DEVICE {
 | |
| 	USBUSER_REQUEST_HEADER  Header;
 | |
| 	USB_OPEN_RAW_DEVICE_PARAMETERS  Parameters;    
 | |
| } USBUSER_OPEN_RAW_DEVICE, *PUSBUSER_OPEN_RAW_DEVICE;
 | |
| 
 | |
| typedef enum _WDMUSB_POWER_STATE {
 | |
| 	WdmUsbPowerNotMapped = 0,
 | |
| 	WdmUsbPowerSystemUnspecified = 100,
 | |
| 	WdmUsbPowerSystemWorking,
 | |
| 	WdmUsbPowerSystemSleeping1,
 | |
| 	WdmUsbPowerSystemSleeping2,
 | |
| 	WdmUsbPowerSystemSleeping3,
 | |
| 	WdmUsbPowerSystemHibernate,
 | |
| 	WdmUsbPowerSystemShutdown,
 | |
| 	WdmUsbPowerDeviceUnspecified = 200,
 | |
| 	WdmUsbPowerDeviceD0,
 | |
| 	WdmUsbPowerDeviceD1,
 | |
| 	WdmUsbPowerDeviceD2,
 | |
| 	WdmUsbPowerDeviceD3
 | |
| } WDMUSB_POWER_STATE;
 | |
| 
 | |
| typedef struct _USB_POWER_INFO {
 | |
| 	WDMUSB_POWER_STATE  SystemState;
 | |
| 	WDMUSB_POWER_STATE  HcDevicePowerState;
 | |
| 	WDMUSB_POWER_STATE  HcDeviceWake;
 | |
| 	WDMUSB_POWER_STATE  HcSystemWake; 
 | |
| 	WDMUSB_POWER_STATE  RhDevicePowerState;
 | |
| 	WDMUSB_POWER_STATE  RhDeviceWake;
 | |
| 	WDMUSB_POWER_STATE  RhSystemWake; 
 | |
| 	WDMUSB_POWER_STATE  LastSystemSleepState; 
 | |
| 	BOOLEAN  CanWakeup;
 | |
| 	BOOLEAN  IsPowered;
 | |
| } USB_POWER_INFO, *PUSB_POWER_INFO;
 | |
| 
 | |
| typedef struct _USBUSER_POWER_INFO_REQUEST {
 | |
| 	USBUSER_REQUEST_HEADER  Header;
 | |
| 	USB_POWER_INFO  PowerInformation;
 | |
| } USBUSER_POWER_INFO_REQUEST, *PUSBUSER_POWER_INFO_REQUEST;
 | |
| 
 | |
| typedef struct _USB_UNICODE_NAME {
 | |
| 	ULONG  Length;
 | |
| 	WCHAR  String[1];
 | |
| } USB_UNICODE_NAME, *PUSB_UNICODE_NAME;
 | |
| 
 | |
| typedef struct _USBUSER_CONTROLLER_UNICODE_NAME {
 | |
| 	USBUSER_REQUEST_HEADER  Header;
 | |
|   USB_UNICODE_NAME  UnicodeName;
 | |
| } USBUSER_CONTROLLER_UNICODE_NAME, *PUSBUSER_CONTROLLER_UNICODE_NAME;
 | |
| 
 | |
| typedef struct _USB_PASS_THRU_PARAMETERS {
 | |
| 	GUID  FunctionGUID;
 | |
| 	ULONG  ParameterLength;
 | |
| 	UCHAR  Parameters[4];
 | |
| } USB_PASS_THRU_PARAMETERS, *PUSB_PASS_THRU_PARAMETERS;
 | |
| 
 | |
| typedef struct _USBUSER_PASS_THRU_REQUEST {
 | |
| 	USBUSER_REQUEST_HEADER  Header;
 | |
| 	USB_PASS_THRU_PARAMETERS  PassThru;
 | |
| } USBUSER_PASS_THRU_REQUEST, *PUSBUSER_PASS_THRU_REQUEST;
 | |
| 
 | |
| typedef struct _USBUSER_RAW_RESET_ROOT_PORT {
 | |
| 	USBUSER_REQUEST_HEADER  Header;
 | |
| 	RAW_RESET_PORT_PARAMETERS  Parameters;
 | |
| } USBUSER_RAW_RESET_ROOT_PORT, *PUSBUSER_RAW_RESET_ROOT_PORT;
 | |
| 
 | |
| typedef struct _USBUSER_SEND_ONE_PACKET {
 | |
| 	USBUSER_REQUEST_HEADER  Header;
 | |
| 	PACKET_PARAMETERS  PacketParameters;
 | |
| } USBUSER_SEND_ONE_PACKET, *PUSBUSER_SEND_ONE_PACKET;
 | |
| 
 | |
| typedef struct _USB_SEND_RAW_COMMAND_PARAMETERS {
 | |
| 	UCHAR  Usb_bmRequest;
 | |
| 	UCHAR  Usb_bRequest;
 | |
| 	USHORT  Usb_wVlaue;
 | |
| 	USHORT  Usb_wIndex;
 | |
| 	USHORT  Usb_wLength;
 | |
| 	USHORT  DeviceAddress;
 | |
| 	USHORT  MaximumPacketSize;
 | |
| 	ULONG  Timeout;
 | |
| 	ULONG  DataLength;
 | |
| 	USBD_STATUS  UsbdStatusCode;
 | |
| 	UCHAR  Data[4];
 | |
| } USB_SEND_RAW_COMMAND_PARAMETERS, *PUSB_SEND_RAW_COMMAND_PARAMETERS;
 | |
| 
 | |
| typedef struct _USBUSER_SEND_RAW_COMMAND {
 | |
| 	USBUSER_REQUEST_HEADER  Header;
 | |
| 	USB_SEND_RAW_COMMAND_PARAMETERS  Parameters;
 | |
| } USBUSER_SEND_RAW_COMMAND, *PUSBUSER_SEND_RAW_COMMAND;
 | |
| 
 | |
| /* USB_USB2HW_VERSION_PARAMETERS.Usb2HwRevision constants */
 | |
| #define USB2HW_UNKNOWN                    0x00
 | |
| #define USB2HW_A0                         0xA0
 | |
| #define USB2HW_A1                         0xA1
 | |
| #define USB2HW_B0                         0xB0
 | |
| 
 | |
| typedef struct _USB_USB2HW_VERSION_PARAMETERS {
 | |
|   UCHAR  Usb2HwRevision;
 | |
| } USB_USB2HW_VERSION_PARAMETERS, *PUSB_USB2HW_VERSION_PARAMETERS;
 | |
| 
 | |
| typedef struct _USBUSER_GET_USB2HW_VERSION {
 | |
| 	USBUSER_REQUEST_HEADER  Header;
 | |
| 	USB_USB2HW_VERSION_PARAMETERS  Parameters;
 | |
| } USBUSER_GET_USB2HW_VERSION, *PUSBUSER_GET_USB2HW_VERSION;
 | |
| 
 | |
| #include <poppack.h>
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| }
 | |
| #endif
 | |
| 
 | |
| #endif /* __USBUSER_H */
 |