Naveen Neel / shedskin
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers usbioctl.h Source File

usbioctl.h

00001 /*
00002  * usbioctl.h
00003  *
00004  * USB 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 __USBIOCTL_H
00024 #define __USBIOCTL_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 "usb100.h"
00036 #include "usbiodef.h"
00037 
00038 #define USBD_PORT_ENABLED                 1
00039 #define USBD_PORT_CONNECTED               2
00040 
00041 #define IOCTL_INTERNAL_USB_CYCLE_PORT \
00042   CTL_CODE(FILE_DEVICE_USB, USB_CYCLE_PORT, METHOD_NEITHER, FILE_ANY_ACCESS)
00043 
00044 #define IOCTL_INTERNAL_USB_ENABLE_PORT \
00045   CTL_CODE(FILE_DEVICE_USB, USB_ENABLE_PORT, METHOD_NEITHER, FILE_ANY_ACCESS)
00046 
00047 #define IOCTL_INTERNAL_USB_GET_BUS_INFO \
00048   CTL_CODE(FILE_DEVICE_USB, USB_GET_BUS_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS)
00049 
00050 #define IOCTL_INTERNAL_USB_GET_BUSGUID_INFO \
00051   CTL_CODE(FILE_DEVICE_USB, USB_GET_BUSGUID_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS)
00052 
00053 #define IOCTL_INTERNAL_USB_GET_CONTROLLER_NAME \
00054   CTL_CODE(FILE_DEVICE_USB, USB_GET_CONTROLLER_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
00055 
00056 #define IOCTL_INTERNAL_USB_GET_DEVICE_HANDLE \
00057   CTL_CODE(FILE_DEVICE_USB, USB_GET_DEVICE_HANDLE, METHOD_NEITHER, FILE_ANY_ACCESS)
00058 
00059 #define IOCTL_INTERNAL_USB_GET_HUB_COUNT \
00060   CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_COUNT, METHOD_NEITHER, FILE_ANY_ACCESS)
00061 
00062 #define IOCTL_INTERNAL_USB_GET_HUB_NAME \
00063   CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
00064 
00065 #define IOCTL_INTERNAL_USB_GET_PARENT_HUB_INFO \
00066   CTL_CODE(FILE_DEVICE_USB, USB_GET_PARENT_HUB_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS)
00067 
00068 #define IOCTL_INTERNAL_USB_GET_PORT_STATUS \
00069   CTL_CODE(FILE_DEVICE_USB, USB_GET_PORT_STATUS, METHOD_NEITHER, FILE_ANY_ACCESS)
00070 
00071 #define IOCTL_INTERNAL_USB_RESET_PORT \
00072   CTL_CODE(FILE_DEVICE_USB, USB_RESET_PORT, METHOD_NEITHER, FILE_ANY_ACCESS)
00073 
00074 #define IOCTL_INTERNAL_USB_GET_ROOTHUB_PDO \
00075   CTL_CODE(FILE_DEVICE_USB, USB_GET_ROOTHUB_PDO, METHOD_NEITHER, FILE_ANY_ACCESS)
00076 
00077 #define IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION \
00078   CTL_CODE(FILE_DEVICE_USB, USB_IDLE_NOTIFICATION, METHOD_NEITHER, FILE_ANY_ACCESS)
00079 
00080 #define IOCTL_INTERNAL_USB_SUBMIT_URB  \
00081   CTL_CODE(FILE_DEVICE_USB, USB_SUBMIT_URB, METHOD_NEITHER, FILE_ANY_ACCESS)
00082 
00083 
00084 #define IOCTL_USB_DIAG_IGNORE_HUBS_ON \
00085   CTL_CODE(FILE_DEVICE_USB, USB_DIAG_IGNORE_HUBS_ON, METHOD_BUFFERED, FILE_ANY_ACCESS)
00086 
00087 #define IOCTL_USB_DIAG_IGNORE_HUBS_OFF \
00088   CTL_CODE(FILE_DEVICE_USB, USB_DIAG_IGNORE_HUBS_OFF, METHOD_BUFFERED, FILE_ANY_ACCESS)
00089 
00090 #define IOCTL_USB_DIAGNOSTIC_MODE_OFF \
00091   CTL_CODE(FILE_DEVICE_USB, HCD_DIAGNOSTIC_MODE_OFF, METHOD_BUFFERED, FILE_ANY_ACCESS)
00092 
00093 #define IOCTL_USB_DIAGNOSTIC_MODE_ON \
00094   CTL_CODE(FILE_DEVICE_USB, HCD_DIAGNOSTIC_MODE_ON, METHOD_BUFFERED, FILE_ANY_ACCESS)
00095 
00096 #define IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION \
00097   CTL_CODE(FILE_DEVICE_USB, USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION, METHOD_BUFFERED, FILE_ANY_ACCESS)
00098 
00099 #define IOCTL_USB_GET_HUB_CAPABILITIES \
00100   CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_CAPABILITIES, METHOD_BUFFERED, FILE_ANY_ACCESS)
00101 
00102 #define IOCTL_USB_GET_ROOT_HUB_NAME \
00103   CTL_CODE(FILE_DEVICE_USB, HCD_GET_ROOT_HUB_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
00104 
00105 #define IOCTL_GET_HCD_DRIVERKEY_NAME \
00106   CTL_CODE(FILE_DEVICE_USB, HCD_GET_DRIVERKEY_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
00107 
00108 #define IOCTL_USB_GET_NODE_INFORMATION \
00109   CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_INFORMATION, METHOD_BUFFERED, FILE_ANY_ACCESS)
00110 
00111 #define IOCTL_USB_GET_NODE_CONNECTION_INFORMATION \
00112   CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_INFORMATION, METHOD_BUFFERED, FILE_ANY_ACCESS)
00113 
00114 #define IOCTL_USB_GET_NODE_CONNECTION_ATTRIBUTES \
00115   CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_ATTRIBUTES, METHOD_BUFFERED, FILE_ANY_ACCESS)
00116 
00117 #define IOCTL_USB_GET_NODE_CONNECTION_NAME \
00118   CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
00119 
00120 #define IOCTL_USB_GET_NODE_CONNECTION_DRIVERKEY_NAME \
00121   CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_DRIVERKEY_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
00122 
00123 #define IOCTL_USB_HCD_DISABLE_PORT \
00124   CTL_CODE(FILE_DEVICE_USB, HCD_DISABLE_PORT, METHOD_BUFFERED, FILE_ANY_ACCESS)
00125 
00126 #define IOCTL_USB_HCD_ENABLE_PORT \
00127   CTL_CODE(FILE_DEVICE_USB, HCD_ENABLE_PORT, METHOD_BUFFERED, FILE_ANY_ACCESS)
00128 
00129 #define IOCTL_USB_HCD_GET_STATS_1 \
00130   CTL_CODE(FILE_DEVICE_USB, HCD_GET_STATS_1, METHOD_BUFFERED, FILE_ANY_ACCESS)
00131 
00132 #define IOCTL_USB_HCD_GET_STATS_2 \
00133   CTL_CODE(FILE_DEVICE_USB, HCD_GET_STATS_2, METHOD_BUFFERED, FILE_ANY_ACCESS)
00134 
00135 
00136 typedef struct _USB_HUB_CAPABILITIES {
00137   ULONG  HubIs2xCapable : 1;
00138 } USB_HUB_CAPABILITIES, *PUSB_HUB_CAPABILITIES;
00139 
00140 typedef enum _USB_CONNECTION_STATUS {
00141     NoDeviceConnected,
00142     DeviceConnected,
00143     DeviceFailedEnumeration,
00144     DeviceGeneralFailure,
00145     DeviceCausedOvercurrent,
00146     DeviceNotEnoughPower,
00147     DeviceNotEnoughBandwidth,
00148     DeviceHubNestedTooDeeply,
00149     DeviceInLegacyHub
00150 } USB_CONNECTION_STATUS, *PUSB_CONNECTION_STATUS;
00151 
00152 #include <pshpack1.h>
00153 
00154 typedef struct _USB_DESCRIPTOR_REQUEST {
00155     ULONG  ConnectionIndex;
00156     struct {
00157         UCHAR  bmRequest;
00158         UCHAR  bRequest;
00159         USHORT  wValue;
00160         USHORT  wIndex;
00161         USHORT  wLength;
00162     } SetupPacket;
00163     UCHAR  Data[0];
00164 } USB_DESCRIPTOR_REQUEST, *PUSB_DESCRIPTOR_REQUEST;
00165 
00166 typedef struct _USB_HCD_DRIVERKEY_NAME {
00167     ULONG  ActualLength;
00168     WCHAR  DriverKeyName[1];
00169 } USB_HCD_DRIVERKEY_NAME, *PUSB_HCD_DRIVERKEY_NAME;
00170 
00171 typedef struct _HCD_ISO_STAT_COUNTERS {
00172     USHORT  LateUrbs;
00173     USHORT  DoubleBufferedPackets;
00174     USHORT  TransfersCF_5ms;
00175     USHORT  TransfersCF_2ms;
00176     USHORT  TransfersCF_1ms;
00177     USHORT  MaxInterruptLatency;
00178     USHORT  BadStartFrame;
00179     USHORT  StaleUrbs;
00180     USHORT  IsoPacketNotAccesed;
00181     USHORT  IsoPacketHWError;
00182     USHORT  SmallestUrbPacketCount;
00183     USHORT  LargestUrbPacketCount;
00184     USHORT  IsoCRC_Error;
00185     USHORT  IsoOVERRUN_Error;
00186     USHORT  IsoINTERNAL_Error;
00187     USHORT  IsoUNKNOWN_Error;
00188     ULONG  IsoBytesTransferred;
00189     USHORT  LateMissedCount;
00190     USHORT  HWIsoMissedCount;
00191     ULONG  Reserved7[8];
00192 } HCD_ISO_STAT_COUNTERS, *PHCD_ISO_STAT_COUNTERS;
00193 
00194 typedef struct _HCD_STAT_COUNTERS {
00195     ULONG  BytesTransferred;
00196     USHORT  IsoMissedCount;
00197     USHORT  DataOverrunErrorCount;
00198     USHORT  CrcErrorCount;
00199     USHORT  ScheduleOverrunCount;
00200     USHORT  TimeoutErrorCount;
00201     USHORT  InternalHcErrorCount;
00202     USHORT  BufferOverrunErrorCount;
00203     USHORT  SWErrorCount;
00204     USHORT  StallPidCount;
00205     USHORT  PortDisableCount;
00206 } HCD_STAT_COUNTERS, *PHCD_STAT_COUNTERS;
00207 
00208 typedef struct _HCD_STAT_INFORMATION_1 {
00209     ULONG  Reserved1;
00210     ULONG  Reserved2;
00211     ULONG  ResetCounters;
00212     LARGE_INTEGER  TimeRead;
00213     HCD_STAT_COUNTERS  Counters;
00214 } HCD_STAT_INFORMATION_1, *PHCD_STAT_INFORMATION_1;
00215 
00216 typedef struct _HCD_STAT_INFORMATION_2 {
00217     ULONG  Reserved1;
00218     ULONG  Reserved2;
00219     ULONG  ResetCounters;
00220     LARGE_INTEGER  TimeRead;
00221     LONG  LockedMemoryUsed;
00222     HCD_STAT_COUNTERS  Counters;
00223     HCD_ISO_STAT_COUNTERS  IsoCounters;
00224 } HCD_STAT_INFORMATION_2, *PHCD_STAT_INFORMATION_2;
00225 
00226 typedef struct _USB_HUB_INFORMATION {
00227     USB_HUB_DESCRIPTOR  HubDescriptor;
00228     BOOLEAN  HubIsBusPowered;
00229 } USB_HUB_INFORMATION, *PUSB_HUB_INFORMATION;
00230 
00231 typedef struct _USB_HUB_NAME {
00232     ULONG  ActualLength;
00233     WCHAR  HubName[1];
00234 } USB_HUB_NAME, *PUSB_HUB_NAME;
00235 
00236 typedef enum _USB_HUB_NODE {
00237     UsbHub,
00238     UsbMIParent
00239 } USB_HUB_NODE;
00240 
00241 typedef VOID STDCALL
00242 (*USB_IDLE_CALLBACK)(
00243   PVOID  Context);
00244 
00245 typedef struct _USB_IDLE_CALLBACK_INFO {
00246     USB_IDLE_CALLBACK  IdleCallback;
00247     PVOID  IdleContext;
00248 } USB_IDLE_CALLBACK_INFO, *PUSB_IDLE_CALLBACK_INFO;
00249 
00250 typedef struct _USB_NODE_CONNECTION_ATTRIBUTES {
00251     ULONG  ConnectionIndex;
00252     USB_CONNECTION_STATUS  ConnectionStatus;
00253     ULONG  PortAttributes;
00254 } USB_NODE_CONNECTION_ATTRIBUTES, *PUSB_NODE_CONNECTION_ATTRIBUTES;
00255 
00256 typedef struct _USB_NODE_CONNECTION_DRIVERKEY_NAME {
00257     ULONG  ConnectionIndex;
00258     ULONG  ActualLength;
00259     WCHAR  DriverKeyName[1];
00260 } USB_NODE_CONNECTION_DRIVERKEY_NAME, *PUSB_NODE_CONNECTION_DRIVERKEY_NAME;
00261 
00262 typedef struct _USB_PIPE_INFO {
00263     USB_ENDPOINT_DESCRIPTOR  EndpointDescriptor;
00264     ULONG  ScheduleOffset;
00265 } USB_PIPE_INFO, *PUSB_PIPE_INFO;
00266 
00267 typedef struct _USB_NODE_CONNECTION_INFORMATION {
00268     ULONG  ConnectionIndex;
00269     USB_DEVICE_DESCRIPTOR  DeviceDescriptor;
00270     UCHAR  CurrentConfigurationValue;
00271     BOOLEAN  LowSpeed;
00272     BOOLEAN  DeviceIsHub;
00273     USHORT  DeviceAddress;
00274     ULONG  NumberOfOpenPipes;
00275     USB_CONNECTION_STATUS  ConnectionStatus;
00276     USB_PIPE_INFO  PipeList[0];
00277 } USB_NODE_CONNECTION_INFORMATION, *PUSB_NODE_CONNECTION_INFORMATION;
00278 
00279 typedef struct _USB_NODE_CONNECTION_NAME {
00280     ULONG  ConnectionIndex;
00281     ULONG  ActualLength;
00282     WCHAR  NodeName[1];
00283 } USB_NODE_CONNECTION_NAME, *PUSB_NODE_CONNECTION_NAME;
00284 
00285 typedef struct _USB_MI_PARENT_INFORMATION {
00286   ULONG  NumberOfInterfaces;
00287 } USB_MI_PARENT_INFORMATION, *PUSB_MI_PARENT_INFORMATION;
00288 
00289 typedef struct _USB_NODE_INFORMATION {
00290     USB_HUB_NODE  NodeType;
00291     union {
00292         USB_HUB_INFORMATION  HubInformation;
00293         USB_MI_PARENT_INFORMATION  MiParentInformation;
00294     } u;
00295 } USB_NODE_INFORMATION, *PUSB_NODE_INFORMATION;
00296 
00297 #define WMI_USB_DRIVER_INFORMATION        0
00298 #define WMI_USB_DRIVER_NOTIFICATION       1
00299 #define WMI_USB_POWER_DEVICE_ENABLE       2
00300 
00301 typedef enum _USB_NOTIFICATION_TYPE {
00302     EnumerationFailure = 0,
00303     InsufficentBandwidth,
00304     InsufficentPower,
00305     OverCurrent,
00306     ResetOvercurrent,
00307     AcquireBusInfo,
00308     AcquireHubName,
00309     AcquireControllerName,
00310     HubOvercurrent,
00311     HubPowerChange,
00312     HubNestedTooDeeply,
00313     ModernDeviceInLegacyHub
00314 } USB_NOTIFICATION_TYPE;
00315 
00316 typedef struct _USB_ACQUIRE_INFO {
00317     USB_NOTIFICATION_TYPE  NotificationType;
00318     ULONG  TotalSize;
00319     WCHAR  Buffer[1];
00320 } USB_ACQUIRE_INFO, *PUSB_ACQUIRE_INFO;
00321 
00322 typedef struct _USB_NOTIFICATION {
00323   USB_NOTIFICATION_TYPE  NotificationType;
00324 } USB_NOTIFICATION, *PUSB_NOTIFICATION;
00325 
00326 typedef struct _USB_BUS_NOTIFICATION {
00327     USB_NOTIFICATION_TYPE  NotificationType;
00328     ULONG  TotalBandwidth;
00329     ULONG  ConsumedBandwidth;
00330     ULONG  ControllerNameLength;
00331 } USB_BUS_NOTIFICATION, *PUSB_BUS_NOTIFICATION;
00332 
00333 typedef struct _USB_CONNECTION_NOTIFICATION {
00334     USB_NOTIFICATION_TYPE  NotificationType;
00335     ULONG  ConnectionNumber;
00336     ULONG  RequestedBandwidth;     
00337     ULONG  EnumerationFailReason;
00338     ULONG  PowerRequested;
00339     ULONG  HubNameLength;
00340 } USB_CONNECTION_NOTIFICATION, *PUSB_CONNECTION_NOTIFICATION;
00341 
00342 typedef struct _USB_ROOT_HUB_NAME {
00343     ULONG  ActualLength;
00344     WCHAR  RootHubName[1];
00345 } USB_ROOT_HUB_NAME, *PUSB_ROOT_HUB_NAME;
00346 
00347 #include <poppack.h>
00348 
00349 #ifdef __cplusplus
00350 }
00351 #endif
00352 
00353 #endif /* __USBIOCTL_H */