Home | History | Annotate | Download | only in ddk
      1 #pragma once
      2 
      3 #define _USBBUSIF_
      4 
      5 #ifndef USB_BUSIFFN
      6 #if defined(_ARM_)
      7 #define USB_BUSIFFN
      8 #else
      9 #define USB_BUSIFFN __stdcall
     10 #endif
     11 #endif
     12 
     13 #if (NTDDI_VERSION >= NTDDI_WINXP)
     14 
     15 #if !defined(_HUBBUSIF_)
     16 typedef PVOID PUSB_DEVICE_HANDLE;
     17 #endif
     18 
     19 typedef NTSTATUS
     20 (USB_BUSIFFN *PUSB_BUSIFFN_SUBMIT_ISO_OUT_URB) (
     21   IN PVOID,
     22   IN PURB);
     23 
     24 #define USB_HCD_CAPS_SUPPORTS_RT_THREADS    0x00000001
     25 
     26 typedef VOID
     27 (USB_BUSIFFN *PUSB_BUSIFFN_GETUSBDI_VERSION) (
     28   IN PVOID,
     29   OUT PUSBD_VERSION_INFORMATION OPTIONAL,
     30   OUT PULONG OPTIONAL);
     31 
     32 typedef NTSTATUS
     33 (USB_BUSIFFN *PUSB_BUSIFFN_QUERY_BUS_TIME) (
     34   IN PVOID,
     35   OUT PULONG OPTIONAL);
     36 
     37 typedef NTSTATUS
     38 (USB_BUSIFFN *PUSB_BUSIFFN_ENUM_LOG_ENTRY) (
     39   IN PVOID,
     40   IN ULONG,
     41   IN ULONG,
     42   IN ULONG,
     43   IN ULONG);
     44 
     45 typedef struct _USB_BUS_INFORMATION_LEVEL_0 {
     46   ULONG TotalBandwidth;
     47   ULONG ConsumedBandwidth;
     48 } USB_BUS_INFORMATION_LEVEL_0, *PUSB_BUS_INFORMATION_LEVEL_0;
     49 
     50 typedef struct _USB_BUS_INFORMATION_LEVEL_1 {
     51   ULONG TotalBandwidth;
     52   ULONG ConsumedBandwidth;
     53   ULONG ControllerNameLength;
     54   WCHAR ControllerNameUnicodeString[1];
     55 } USB_BUS_INFORMATION_LEVEL_1, *PUSB_BUS_INFORMATION_LEVEL_1;
     56 
     57 typedef NTSTATUS
     58 (USB_BUSIFFN *PUSB_BUSIFFN_QUERY_BUS_INFORMATION) (
     59   IN PVOID,
     60   IN ULONG,
     61   IN OUT PVOID,
     62   OUT PULONG,
     63   OUT PULONG OPTIONAL);
     64 
     65 typedef BOOLEAN
     66 (USB_BUSIFFN *PUSB_BUSIFFN_IS_DEVICE_HIGH_SPEED) (
     67   IN PVOID OPTIONAL);
     68 
     69 #define USB_BUSIF_USBDI_VERSION_0         0x0000
     70 #define USB_BUSIF_USBDI_VERSION_1         0x0001
     71 #define USB_BUSIF_USBDI_VERSION_2         0x0002
     72 #define USB_BUSIF_USBDI_VERSION_3         0x0003
     73 
     74 DEFINE_GUID(USB_BUS_INTERFACE_USBDI_GUID,
     75 0xb1a96a13, 0x3de0, 0x4574, 0x9b, 0x1, 0xc0, 0x8f, 0xea, 0xb3, 0x18, 0xd6);
     76 
     77 typedef struct _USB_BUS_INTERFACE_USBDI_V0 {
     78   USHORT Size;
     79   USHORT Version;
     80   PVOID BusContext;
     81   PINTERFACE_REFERENCE InterfaceReference;
     82   PINTERFACE_DEREFERENCE InterfaceDereference;
     83   PUSB_BUSIFFN_GETUSBDI_VERSION GetUSBDIVersion;
     84   PUSB_BUSIFFN_QUERY_BUS_TIME QueryBusTime;
     85   PUSB_BUSIFFN_SUBMIT_ISO_OUT_URB SubmitIsoOutUrb;
     86   PUSB_BUSIFFN_QUERY_BUS_INFORMATION QueryBusInformation;
     87 } USB_BUS_INTERFACE_USBDI_V0, *PUSB_BUS_INTERFACE_USBDI_V0;
     88 
     89 typedef struct _USB_BUS_INTERFACE_USBDI_V1 {
     90   USHORT Size;
     91   USHORT Version;
     92   PVOID BusContext;
     93   PINTERFACE_REFERENCE InterfaceReference;
     94   PINTERFACE_DEREFERENCE InterfaceDereference;
     95   PUSB_BUSIFFN_GETUSBDI_VERSION GetUSBDIVersion;
     96   PUSB_BUSIFFN_QUERY_BUS_TIME QueryBusTime;
     97   PUSB_BUSIFFN_SUBMIT_ISO_OUT_URB SubmitIsoOutUrb;
     98   PUSB_BUSIFFN_QUERY_BUS_INFORMATION QueryBusInformation;
     99   PUSB_BUSIFFN_IS_DEVICE_HIGH_SPEED IsDeviceHighSpeed;
    100 } USB_BUS_INTERFACE_USBDI_V1, *PUSB_BUS_INTERFACE_USBDI_V1;
    101 
    102 typedef struct _USB_BUS_INTERFACE_USBDI_V2 {
    103   USHORT Size;
    104   USHORT Version;
    105   PVOID BusContext;
    106   PINTERFACE_REFERENCE InterfaceReference;
    107   PINTERFACE_DEREFERENCE InterfaceDereference;
    108   PUSB_BUSIFFN_GETUSBDI_VERSION GetUSBDIVersion;
    109   PUSB_BUSIFFN_QUERY_BUS_TIME QueryBusTime;
    110   PUSB_BUSIFFN_SUBMIT_ISO_OUT_URB SubmitIsoOutUrb;
    111   PUSB_BUSIFFN_QUERY_BUS_INFORMATION QueryBusInformation;
    112   PUSB_BUSIFFN_IS_DEVICE_HIGH_SPEED IsDeviceHighSpeed;
    113   PUSB_BUSIFFN_ENUM_LOG_ENTRY EnumLogEntry;
    114 } USB_BUS_INTERFACE_USBDI_V2, *PUSB_BUS_INTERFACE_USBDI_V2;
    115 
    116 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
    117 
    118 #if (NTDDI_VERSION >= NTDDI_VISTA)
    119 
    120 typedef NTSTATUS
    121 (USB_BUSIFFN *PUSB_BUSIFFN_QUERY_BUS_TIME_EX) (
    122   IN PVOID OPTIONAL,
    123   OUT PULONG OPTIONAL);
    124 
    125 typedef NTSTATUS
    126 (USB_BUSIFFN *PUSB_BUSIFFN_QUERY_CONTROLLER_TYPE) (
    127   IN PVOID OPTIONAL,
    128   OUT PULONG OPTIONAL,
    129   OUT PUSHORT OPTIONAL,
    130   OUT PUSHORT OPTIONAL,
    131   OUT PUCHAR OPTIONAL,
    132   OUT PUCHAR OPTIONAL,
    133   OUT PUCHAR OPTIONAL,
    134   OUT PUCHAR OPTIONAL);
    135 
    136 typedef struct _USB_BUS_INTERFACE_USBDI_V3 {
    137   USHORT Size;
    138   USHORT Version;
    139   PVOID BusContext;
    140   PINTERFACE_REFERENCE InterfaceReference;
    141   PINTERFACE_DEREFERENCE InterfaceDereference;
    142   PUSB_BUSIFFN_GETUSBDI_VERSION GetUSBDIVersion;
    143   PUSB_BUSIFFN_QUERY_BUS_TIME QueryBusTime;
    144   PUSB_BUSIFFN_SUBMIT_ISO_OUT_URB SubmitIsoOutUrb;
    145   PUSB_BUSIFFN_QUERY_BUS_INFORMATION QueryBusInformation;
    146   PUSB_BUSIFFN_IS_DEVICE_HIGH_SPEED IsDeviceHighSpeed;
    147   PUSB_BUSIFFN_ENUM_LOG_ENTRY EnumLogEntry;
    148   PUSB_BUSIFFN_QUERY_BUS_TIME_EX QueryBusTimeEx;
    149   PUSB_BUSIFFN_QUERY_CONTROLLER_TYPE QueryControllerType;
    150 } USB_BUS_INTERFACE_USBDI_V3, *PUSB_BUS_INTERFACE_USBDI_V3;
    151 
    152 DEFINE_GUID(USB_BUS_INTERFACE_USBC_CONFIGURATION_GUID,
    153 	0x893b6a96, 0xb7f, 0x4d4d, 0xbd, 0xb4, 0xbb, 0xd4, 0xce, 0xeb, 0xb3, 0x1c);
    154 
    155 #define USBC_FUNCTION_FLAG_APPEND_ID 0x1
    156 
    157 typedef struct _USBC_FUNCTION_DESCRIPTOR{
    158   UCHAR FunctionNumber;
    159   UCHAR NumberOfInterfaces;
    160   PUSB_INTERFACE_DESCRIPTOR *InterfaceDescriptorList;
    161   UNICODE_STRING HardwareId;
    162   UNICODE_STRING CompatibleId;
    163   UNICODE_STRING FunctionDescription;
    164   ULONG FunctionFlags;
    165   PVOID Reserved;
    166 } USBC_FUNCTION_DESCRIPTOR, *PUSBC_FUNCTION_DESCRIPTOR;
    167 
    168 typedef
    169 NTSTATUS
    170 (USB_BUSIFFN *USBC_START_DEVICE_CALLBACK)(
    171   IN PUSB_DEVICE_DESCRIPTOR DeviceDescriptor,
    172   IN PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor,
    173   OUT PUSBC_FUNCTION_DESCRIPTOR *FunctionDescriptorBuffer,
    174   OUT PULONG FunctionDescriptorBufferLength,
    175   IN PDEVICE_OBJECT FdoDeviceObject,
    176   IN PDEVICE_OBJECT PdoDeviceObject);
    177 
    178 typedef
    179 BOOLEAN
    180 (USB_BUSIFFN *USBC_PDO_ENABLE_CALLBACK)(
    181   IN PVOID  Context,
    182   IN USHORT FirstInterfaceNumber,
    183   IN USHORT NumberOfInterfaces,
    184   IN UCHAR  FunctionClass,
    185   IN UCHAR  FunctionSubClass,
    186   IN UCHAR  FunctionProtocol);
    187 
    188 #define USBC_DEVICE_CONFIGURATION_INTERFACE_VERSION_1         0x0001
    189 
    190 typedef struct _USBC_DEVICE_CONFIGURATION_INTERFACE_V1 {
    191   USHORT Size;
    192   USHORT Version;
    193   PVOID Context;
    194   PINTERFACE_REFERENCE InterfaceReference;
    195   PINTERFACE_DEREFERENCE InterfaceDereference;
    196   USBC_START_DEVICE_CALLBACK StartDeviceCallback;
    197   USBC_PDO_ENABLE_CALLBACK   PdoEnableCallback;
    198   PVOID Reserved[7];
    199 } USBC_DEVICE_CONFIGURATION_INTERFACE_V1, *PUSBC_DEVICE_CONFIGURATION_INTERFACE_V1;
    200 
    201 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
    202 
    203