Sync with trunk revision r58045 to bring the corrections on configure.cmd and on...
[reactos.git] / include / ddk / usbbusif.h
1 #pragma once
2
3 #define _USBBUSIF_
4
5 #ifndef USB_BUSIFFN
6 #define USB_BUSIFFN __stdcall
7 #endif
8
9 #if (NTDDI_VERSION >= NTDDI_WINXP)
10
11 #if !defined(_HUBBUSIF_)
12 typedef PVOID PUSB_DEVICE_HANDLE;
13 #endif
14
15 _Must_inspect_result_
16 typedef NTSTATUS
17 (USB_BUSIFFN *PUSB_BUSIFFN_SUBMIT_ISO_OUT_URB) (
18 _In_ PVOID,
19 _In_ PURB);
20
21 #define USB_HCD_CAPS_SUPPORTS_RT_THREADS 0x00000001
22
23 typedef VOID
24 (USB_BUSIFFN *PUSB_BUSIFFN_GETUSBDI_VERSION) (
25 _In_ PVOID,
26 _Out_opt_ PUSBD_VERSION_INFORMATION,
27 _Out_opt_ PULONG);
28
29 _Must_inspect_result_
30 typedef NTSTATUS
31 (USB_BUSIFFN *PUSB_BUSIFFN_QUERY_BUS_TIME) (
32 _In_ PVOID,
33 _Out_opt_ PULONG);
34
35 typedef NTSTATUS
36 (USB_BUSIFFN *PUSB_BUSIFFN_ENUM_LOG_ENTRY) (
37 _In_ PVOID,
38 _In_ ULONG,
39 _In_ ULONG,
40 _In_ ULONG,
41 _In_ ULONG);
42
43 typedef struct _USB_BUS_INFORMATION_LEVEL_0 {
44 ULONG TotalBandwidth;
45 ULONG ConsumedBandwidth;
46 } USB_BUS_INFORMATION_LEVEL_0, *PUSB_BUS_INFORMATION_LEVEL_0;
47
48 typedef struct _USB_BUS_INFORMATION_LEVEL_1 {
49 ULONG TotalBandwidth;
50 ULONG ConsumedBandwidth;
51 ULONG ControllerNameLength;
52 WCHAR ControllerNameUnicodeString[1];
53 } USB_BUS_INFORMATION_LEVEL_1, *PUSB_BUS_INFORMATION_LEVEL_1;
54
55 _Must_inspect_result_
56 typedef NTSTATUS
57 (USB_BUSIFFN *PUSB_BUSIFFN_QUERY_BUS_INFORMATION) (
58 _In_ PVOID,
59 _In_ ULONG,
60 _Inout_ PVOID,
61 _Out_ PULONG,
62 _Out_opt_ PULONG);
63
64 _Must_inspect_result_
65 typedef BOOLEAN
66 (USB_BUSIFFN *PUSB_BUSIFFN_IS_DEVICE_HIGH_SPEED) (
67 _In_opt_ PVOID);
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 _Must_inspect_result_
121 typedef NTSTATUS
122 (USB_BUSIFFN *PUSB_BUSIFFN_QUERY_BUS_TIME_EX) (
123 _In_opt_ PVOID,
124 _Out_opt_ PULONG);
125
126 _Must_inspect_result_
127 typedef NTSTATUS
128 (USB_BUSIFFN *PUSB_BUSIFFN_QUERY_CONTROLLER_TYPE) (
129 _In_opt_ PVOID,
130 _Out_opt_ PULONG,
131 _Out_opt_ PUSHORT,
132 _Out_opt_ PUSHORT,
133 _Out_opt_ PUCHAR,
134 _Out_opt_ PUCHAR,
135 _Out_opt_ PUCHAR,
136 _Out_opt_ PUCHAR);
137
138 typedef struct _USB_BUS_INTERFACE_USBDI_V3 {
139 USHORT Size;
140 USHORT Version;
141 PVOID BusContext;
142 PINTERFACE_REFERENCE InterfaceReference;
143 PINTERFACE_DEREFERENCE InterfaceDereference;
144 PUSB_BUSIFFN_GETUSBDI_VERSION GetUSBDIVersion;
145 PUSB_BUSIFFN_QUERY_BUS_TIME QueryBusTime;
146 PUSB_BUSIFFN_SUBMIT_ISO_OUT_URB SubmitIsoOutUrb;
147 PUSB_BUSIFFN_QUERY_BUS_INFORMATION QueryBusInformation;
148 PUSB_BUSIFFN_IS_DEVICE_HIGH_SPEED IsDeviceHighSpeed;
149 PUSB_BUSIFFN_ENUM_LOG_ENTRY EnumLogEntry;
150 PUSB_BUSIFFN_QUERY_BUS_TIME_EX QueryBusTimeEx;
151 PUSB_BUSIFFN_QUERY_CONTROLLER_TYPE QueryControllerType;
152 } USB_BUS_INTERFACE_USBDI_V3, *PUSB_BUS_INTERFACE_USBDI_V3;
153
154 DEFINE_GUID(USB_BUS_INTERFACE_USBC_CONFIGURATION_GUID,
155 0x893b6a96, 0xb7f, 0x4d4d, 0xbd, 0xb4, 0xbb, 0xd4, 0xce, 0xeb, 0xb3, 0x1c);
156
157 #define USBC_FUNCTION_FLAG_APPEND_ID 0x1
158
159 typedef struct _USBC_FUNCTION_DESCRIPTOR{
160 UCHAR FunctionNumber;
161 UCHAR NumberOfInterfaces;
162 PUSB_INTERFACE_DESCRIPTOR *InterfaceDescriptorList;
163 UNICODE_STRING HardwareId;
164 UNICODE_STRING CompatibleId;
165 UNICODE_STRING FunctionDescription;
166 ULONG FunctionFlags;
167 PVOID Reserved;
168 } USBC_FUNCTION_DESCRIPTOR, *PUSBC_FUNCTION_DESCRIPTOR;
169
170 _Must_inspect_result_
171 typedef NTSTATUS
172 (USB_BUSIFFN *USBC_START_DEVICE_CALLBACK)(
173 _In_ PUSB_DEVICE_DESCRIPTOR DeviceDescriptor,
174 _In_ PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor,
175 _Outptr_result_bytebuffer_maybenull_(*FunctionDescriptorBufferLength)
176 PUSBC_FUNCTION_DESCRIPTOR *FunctionDescriptorBuffer,
177 _Out_ PULONG FunctionDescriptorBufferLength,
178 _In_ PDEVICE_OBJECT FdoDeviceObject,
179 _In_ PDEVICE_OBJECT PdoDeviceObject);
180
181 _Must_inspect_result_
182 typedef BOOLEAN
183 (USB_BUSIFFN *USBC_PDO_ENABLE_CALLBACK)(
184 _In_ PVOID Context,
185 _In_ USHORT FirstInterfaceNumber,
186 _In_ USHORT NumberOfInterfaces,
187 _In_ UCHAR FunctionClass,
188 _In_ UCHAR FunctionSubClass,
189 _In_ UCHAR FunctionProtocol);
190
191 #define USBC_DEVICE_CONFIGURATION_INTERFACE_VERSION_1 0x0001
192
193 typedef struct _USBC_DEVICE_CONFIGURATION_INTERFACE_V1 {
194 USHORT Size;
195 USHORT Version;
196 PVOID Context;
197 PINTERFACE_REFERENCE InterfaceReference;
198 PINTERFACE_DEREFERENCE InterfaceDereference;
199 USBC_START_DEVICE_CALLBACK StartDeviceCallback;
200 USBC_PDO_ENABLE_CALLBACK PdoEnableCallback;
201 PVOID Reserved[7];
202 } USBC_DEVICE_CONFIGURATION_INTERFACE_V1, *PUSBC_DEVICE_CONFIGURATION_INTERFACE_V1;
203
204 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
205