usbbusif.h 5.8 KB

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