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