[CLASSPNP] Fix MSVC build. Brought to you by Timo.
[reactos.git] / reactos / sdk / include / ddk / hubbusif.h
1 #pragma once
2
3 #define _HUBBUSIF_
4
5 #include "usbdi.h"
6
7 #if (NTDDI_VERSION >= NTDDI_WINXP)
8
9 #if !defined(_USBBUSIF_)
10 typedef PVOID PUSB_DEVICE_HANDLE;
11 #endif
12
13 typedef struct _ROOTHUB_PDO_EXTENSION {
14 ULONG Signature;
15 } ROOTHUB_PDO_EXTENSION, *PROOTHUB_PDO_EXTENSION;
16
17 #define USBD_DEVHACK_SLOW_ENUMERATION 0x00000001
18 #define USBD_DEVHACK_DISABLE_SN 0x00000002
19 #define USBD_DEVHACK_SET_DIAG_ID 0x00000004
20
21 #ifndef USB_BUSIFFN
22 #define USB_BUSIFFN __stdcall
23 #endif
24
25 #define CD_ERR_V1 0x00000001
26
27 #define ID_ERR_V1 0x00000001
28
29 #define USBD_KEEP_DEVICE_DATA 0x00000001
30 #define USBD_MARK_DEVICE_BUSY 0x00000002
31
32 #define USB_IDLE_NOT_READY 0
33 #define USB_IDLE_READY 1
34
35 _Function_class_(USB_BUSIFFN_CREATE_USB_DEVICE)
36 typedef NTSTATUS
37 USB_BUSIFFN
38 USB_BUSIFFN_CREATE_USB_DEVICE (
39 _In_ PVOID BusContext,
40 _Outptr_ PUSB_DEVICE_HANDLE *NewDeviceHandle,
41 _In_ PUSB_DEVICE_HANDLE HubDeviceHandle,
42 _In_ USHORT PortStatus,
43 _In_ USHORT PortNumber);
44 typedef USB_BUSIFFN_CREATE_USB_DEVICE *PUSB_BUSIFFN_CREATE_USB_DEVICE;
45
46 typedef enum _USBPORT_CREATEDEV_ERROR {
47 CreateDevErrNotSet = 0,
48 CreateDevBadHubDevHandle,
49 CreateDevFailedAllocDevHandle,
50 CreateDevFailedOpenEndpoint,
51 CreateDevFailedAllocDsBuff,
52 CreateDevFailedGetDs,
53 CreateDevTtNotFound,
54 CreateDevBadDevHandlePtr
55 } USBPORT_CREATEDEV_ERROR;
56
57 typedef struct _USB_CD_ERROR_INFORMATION {
58 ULONG Version;
59 USBPORT_CREATEDEV_ERROR PathError;
60 ULONG UlongArg1;
61 ULONG UlongArg2;
62 NTSTATUS NtStatus;
63 UCHAR XtraInfo[64];
64 } USB_CD_ERROR_INFORMATION, *PUSB_CD_ERROR_INFORMATION;
65
66 _Function_class_(USB_BUSIFFN_CREATE_USB_DEVICE_EX)
67 typedef NTSTATUS
68 USB_BUSIFFN
69 USB_BUSIFFN_CREATE_USB_DEVICE_EX (
70 _In_ PVOID BusContext,
71 _Outptr_ PUSB_DEVICE_HANDLE *NewDeviceHandle,
72 _In_ PUSB_DEVICE_HANDLE HsHubDeviceHandle,
73 _In_ USHORT PortStatus,
74 _In_ USHORT PortNumber,
75 _Out_ PUSB_CD_ERROR_INFORMATION CdErrorInfo,
76 _In_ USHORT TtPortNumber);
77 typedef USB_BUSIFFN_CREATE_USB_DEVICE_EX *PUSB_BUSIFFN_CREATE_USB_DEVICE_EX;
78
79 typedef struct _USB_PORT_PATH {
80 ULONG PortPathDepth;
81 ULONG PortPath[6];
82 } USB_PORT_PATH, *PUSB_PORT_PATH;
83
84 _Function_class_(USB_BUSIFFN_CREATE_USB_DEVICE_V7)
85 typedef NTSTATUS
86 USB_BUSIFFN
87 USB_BUSIFFN_CREATE_USB_DEVICE_V7 (
88 _In_ PVOID BusContext,
89 _Outptr_ PUSB_DEVICE_HANDLE *NewDeviceHandle,
90 _In_ PUSB_DEVICE_HANDLE HsHubDeviceHandle,
91 _In_ USHORT PortStatus,
92 _In_ PUSB_PORT_PATH PortPath,
93 _Out_ PUSB_CD_ERROR_INFORMATION CdErrorInfo,
94 _In_ USHORT TtPortNumber,
95 _In_ PDEVICE_OBJECT PdoDeviceObject,
96 _In_ PUNICODE_STRING PhysicalDeviceObjectName);
97 typedef USB_BUSIFFN_CREATE_USB_DEVICE_V7 *PUSB_BUSIFFN_CREATE_USB_DEVICE_V7;
98
99 typedef enum _USBPORT_INITDEV_ERROR {
100 InitDevErrNotSet = 0,
101 InitDevFailedSetAddress,
102 InitDevFailedPokeEndpoint,
103 InitDevBadDeviceDescriptor
104 } USBPORT_INITDEV_ERROR;
105
106 typedef struct _USB_ID_ERROR_INFORMATION {
107 ULONG Version;
108 USBPORT_INITDEV_ERROR PathError;
109 ULONG Arg1;
110 ULONG UsbAddress;
111 NTSTATUS NtStatus;
112 USBD_STATUS UsbdStatus;
113 UCHAR XtraInfo[64];
114 } USB_ID_ERROR_INFORMATION, *PUSB_ID_ERROR_INFORMATION;
115
116 _Function_class_(USB_BUSIFFN_INITIALIZE_USB_DEVICE)
117 typedef NTSTATUS
118 USB_BUSIFFN
119 USB_BUSIFFN_INITIALIZE_USB_DEVICE(
120 _In_ PVOID BusContext,
121 _Inout_ PUSB_DEVICE_HANDLE DeviceHandle);
122 typedef USB_BUSIFFN_INITIALIZE_USB_DEVICE *PUSB_BUSIFFN_INITIALIZE_USB_DEVICE;
123
124 _Function_class_(USB_BUSIFFN_INITIALIZE_USB_DEVICE_EX)
125 typedef NTSTATUS
126 USB_BUSIFFN
127 USB_BUSIFFN_INITIALIZE_USB_DEVICE_EX(
128 _In_ PVOID BusContext,
129 _Inout_ PUSB_DEVICE_HANDLE DeviceHandle,
130 _Out_ PUSB_ID_ERROR_INFORMATION IdErrInfo);
131 typedef USB_BUSIFFN_INITIALIZE_USB_DEVICE_EX *PUSB_BUSIFFN_INITIALIZE_USB_DEVICE_EX;
132
133 _Function_class_(USB_BUSIFFN_REMOVE_USB_DEVICE)
134 typedef NTSTATUS
135 USB_BUSIFFN
136 USB_BUSIFFN_REMOVE_USB_DEVICE(
137 _In_ PVOID BusContext,
138 _Inout_ PUSB_DEVICE_HANDLE DeviceHandle,
139 _In_ ULONG Flags);
140 typedef USB_BUSIFFN_REMOVE_USB_DEVICE *PUSB_BUSIFFN_REMOVE_USB_DEVICE;
141
142 _Function_class_(USB_BUSIFFN_GET_USB_DESCRIPTORS)
143 typedef NTSTATUS
144 USB_BUSIFFN
145 USB_BUSIFFN_GET_USB_DESCRIPTORS(
146 _In_ PVOID BusContext,
147 _Inout_ PUSB_DEVICE_HANDLE DeviceHandle,
148 _Out_writes_bytes_to_(*DeviceDescriptorBufferLength,*DeviceDescriptorBufferLength)
149 PUCHAR DeviceDescriptorBuffer,
150 _Inout_ PULONG DeviceDescriptorBufferLength,
151 _Out_writes_bytes_to_(*ConfigDescriptorBufferLength, *ConfigDescriptorBufferLength)
152 PUCHAR ConfigDescriptorBuffer,
153 _Inout_ PULONG ConfigDescriptorBufferLength);
154 typedef USB_BUSIFFN_GET_USB_DESCRIPTORS *PUSB_BUSIFFN_GET_USB_DESCRIPTORS;
155
156 _Function_class_(USB_BUSIFFN_RESTORE_DEVICE)
157 typedef NTSTATUS
158 USB_BUSIFFN
159 USB_BUSIFFN_RESTORE_DEVICE(
160 _In_ PVOID BusContext,
161 _Inout_ PUSB_DEVICE_HANDLE OldDeviceHandle,
162 _Inout_ PUSB_DEVICE_HANDLE NewDeviceHandle);
163 typedef USB_BUSIFFN_RESTORE_DEVICE *PUSB_BUSIFFN_RESTORE_DEVICE;
164
165 _Function_class_(USB_BUSIFFN_GET_POTRTHACK_FLAGS)
166 typedef NTSTATUS
167 USB_BUSIFFN
168 USB_BUSIFFN_GET_POTRTHACK_FLAGS(
169 _In_ PVOID BusContext,
170 _Inout_ PULONG Flags);
171 typedef USB_BUSIFFN_GET_POTRTHACK_FLAGS *PUSB_BUSIFFN_GET_POTRTHACK_FLAGS;
172
173 _Function_class_(USB_BUSIFFN_GET_DEVICE_INFORMATION)
174 typedef NTSTATUS
175 USB_BUSIFFN
176 USB_BUSIFFN_GET_DEVICE_INFORMATION(
177 _In_ PVOID BusContext,
178 _In_ PUSB_DEVICE_HANDLE DeviceHandle,
179 _Out_writes_bytes_to_(DeviceInformationBufferLength,*LengthOfDataCopied)
180 PVOID DeviceInformationBuffer,
181 _In_ ULONG DeviceInformationBufferLength,
182 _Inout_ PULONG LengthOfDataCopied);
183 typedef USB_BUSIFFN_GET_DEVICE_INFORMATION *PUSB_BUSIFFN_GET_DEVICE_INFORMATION;
184
185 _Function_class_(USB_BUSIFFN_GET_CONTROLLER_INFORMATION)
186 typedef NTSTATUS
187 USB_BUSIFFN
188 USB_BUSIFFN_GET_CONTROLLER_INFORMATION(
189 _In_ PVOID BusContext,
190 _Inout_updates_bytes_to_(ControllerInformationBufferLength, *LengthOfDataCopied)
191 PVOID ControllerInformationBuffer,
192 _In_ ULONG ControllerInformationBufferLength,
193 _Inout_ PULONG LengthOfDataCopied);
194 typedef USB_BUSIFFN_GET_CONTROLLER_INFORMATION *PUSB_BUSIFFN_GET_CONTROLLER_INFORMATION;
195
196 _Function_class_(USB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND)
197 typedef NTSTATUS
198 USB_BUSIFFN
199 USB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND(
200 _In_ PVOID BusContext,
201 _In_ BOOLEAN Enable);
202 typedef USB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND *PUSB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND;
203
204 _Function_class_(USB_BUSIFFN_GET_EXTENDED_HUB_INFO)
205 typedef NTSTATUS
206 USB_BUSIFFN
207 USB_BUSIFFN_GET_EXTENDED_HUB_INFO(
208 _In_ PVOID BusContext,
209 _In_ PDEVICE_OBJECT HubPhysicalDeviceObject,
210 _Inout_updates_bytes_to_(HubInformationBufferLength, *LengthOfDataCopied)
211 PVOID HubInformationBuffer,
212 _In_ ULONG HubInformationBufferLength,
213 _Out_ PULONG LengthOfDataCopied);
214 typedef USB_BUSIFFN_GET_EXTENDED_HUB_INFO *PUSB_BUSIFFN_GET_EXTENDED_HUB_INFO;
215
216 _Function_class_(USB_BUSIFFN_GET_ROOTHUB_SYM_NAME)
217 typedef NTSTATUS
218 USB_BUSIFFN
219 USB_BUSIFFN_GET_ROOTHUB_SYM_NAME(
220 _In_ PVOID BusContext,
221 _Inout_updates_bytes_to_(HubSymNameBufferLength, *HubSymNameActualLength) PVOID HubSymNameBuffer,
222 _In_ ULONG HubSymNameBufferLength,
223 _Out_ PULONG HubSymNameActualLength);
224 typedef USB_BUSIFFN_GET_ROOTHUB_SYM_NAME *PUSB_BUSIFFN_GET_ROOTHUB_SYM_NAME;
225
226 _Function_class_(USB_BUSIFFN_GET_DEVICE_BUSCONTEXT)
227 typedef PVOID
228 USB_BUSIFFN
229 USB_BUSIFFN_GET_DEVICE_BUSCONTEXT(
230 _In_ PVOID HubBusContext,
231 _In_ PVOID DeviceHandle);
232 typedef USB_BUSIFFN_GET_DEVICE_BUSCONTEXT *PUSB_BUSIFFN_GET_DEVICE_BUSCONTEXT;
233
234 _Function_class_(USB_BUSIFFN_INITIALIZE_20HUB)
235 typedef NTSTATUS
236 USB_BUSIFFN
237 USB_BUSIFFN_INITIALIZE_20HUB(
238 _In_ PVOID BusContext,
239 _In_ PUSB_DEVICE_HANDLE HubDeviceHandle,
240 _In_ ULONG TtCount);
241 typedef USB_BUSIFFN_INITIALIZE_20HUB *PUSB_BUSIFFN_INITIALIZE_20HUB;
242
243 _Function_class_(USB_BUSIFFN_IS_ROOT)
244 typedef BOOLEAN
245 USB_BUSIFFN
246 USB_BUSIFFN_IS_ROOT(
247 _In_ PVOID BusContext,
248 _In_ PVOID DeviceObject);
249 typedef USB_BUSIFFN_IS_ROOT *PUSB_BUSIFFN_IS_ROOT;
250
251 _Function_class_(USB_BUSIFFN_ACQUIRE_SEMAPHORE)
252 typedef VOID
253 USB_BUSIFFN
254 USB_BUSIFFN_ACQUIRE_SEMAPHORE(
255 _In_ PVOID BusContext);
256 typedef USB_BUSIFFN_ACQUIRE_SEMAPHORE *PUSB_BUSIFFN_ACQUIRE_SEMAPHORE;
257
258 _Function_class_(USB_BUSIFFN_RELEASE_SEMAPHORE)
259 typedef VOID
260 USB_BUSIFFN
261 USB_BUSIFFN_RELEASE_SEMAPHORE(
262 _In_ PVOID BusContext);
263 typedef USB_BUSIFFN_RELEASE_SEMAPHORE *PUSB_BUSIFFN_RELEASE_SEMAPHORE;
264
265 _Function_class_(RH_INIT_CALLBACK)
266 typedef VOID
267 __stdcall
268 RH_INIT_CALLBACK(
269 _In_ PVOID CallBackContext);
270 typedef RH_INIT_CALLBACK *PRH_INIT_CALLBACK;
271
272 _Function_class_(USB_BUSIFFN_ROOTHUB_INIT_NOTIFY)
273 typedef NTSTATUS
274 USB_BUSIFFN
275 USB_BUSIFFN_ROOTHUB_INIT_NOTIFY(
276 _In_ PVOID BusContext,
277 _In_ PVOID CallbackContext,
278 _In_ PRH_INIT_CALLBACK CallbackRoutine);
279 typedef USB_BUSIFFN_ROOTHUB_INIT_NOTIFY *PUSB_BUSIFFN_ROOTHUB_INIT_NOTIFY;
280
281 _Function_class_(USB_BUSIFFN_FLUSH_TRANSFERS)
282 typedef VOID
283 USB_BUSIFFN
284 USB_BUSIFFN_FLUSH_TRANSFERS(
285 _In_ PVOID BusContext,
286 _In_ PVOID DeviceHandle);
287 typedef USB_BUSIFFN_FLUSH_TRANSFERS *PUSB_BUSIFFN_FLUSH_TRANSFERS;
288
289 _Function_class_(USB_BUSIFFN_CALC_PIPE_BANDWIDTH)
290 typedef ULONG
291 USB_BUSIFFN
292 USB_BUSIFFN_CALC_PIPE_BANDWIDTH(
293 _In_ PVOID BusContext,
294 _In_ PUSBD_PIPE_INFORMATION PipeInfo,
295 _In_ USB_DEVICE_SPEED DeviceSpeed);
296 typedef USB_BUSIFFN_CALC_PIPE_BANDWIDTH *PUSB_BUSIFFN_CALC_PIPE_BANDWIDTH;
297
298 _Function_class_(USB_BUSIFFN_SET_BUS_WAKE_MODE)
299 typedef VOID
300 USB_BUSIFFN
301 USB_BUSIFFN_SET_BUS_WAKE_MODE(
302 _In_ PVOID BusContext,
303 _In_ ULONG Mode);
304 typedef USB_BUSIFFN_SET_BUS_WAKE_MODE *PUSB_BUSIFFN_SET_BUS_WAKE_MODE;
305
306 _Function_class_(USB_BUSIFFN_SET_DEVICE_FLAG)
307 typedef VOID
308 USB_BUSIFFN
309 USB_BUSIFFN_SET_DEVICE_FLAG(
310 _In_ PVOID BusContext,
311 _In_ GUID *DeviceFlagGuid,
312 _In_ PVOID ValueData,
313 _In_ ULONG ValueLength);
314 typedef USB_BUSIFFN_SET_DEVICE_FLAG *PUSB_BUSIFFN_SET_DEVICE_FLAG;
315
316 _Function_class_(USB_BUSIFFN_SET_DEVHANDLE_DATA)
317 typedef VOID
318 USB_BUSIFFN
319 USB_BUSIFFN_SET_DEVHANDLE_DATA(
320 _In_ PVOID BusContext,
321 _In_ PVOID DeviceHandle,
322 _In_ PDEVICE_OBJECT UsbDevicePdo);
323 typedef USB_BUSIFFN_SET_DEVHANDLE_DATA *PUSB_BUSIFFN_SET_DEVHANDLE_DATA;
324
325 _Function_class_(USB_BUSIFFN_TEST_POINT)
326 typedef NTSTATUS
327 USB_BUSIFFN
328 USB_BUSIFFN_TEST_POINT(
329 _In_ PVOID BusContext,
330 _In_ PVOID DeviceHandle,
331 _In_ ULONG Opcode,
332 _In_ PVOID TestData);
333 typedef USB_BUSIFFN_TEST_POINT *PUSB_BUSIFFN_TEST_POINT;
334
335 _Function_class_(USB_BUSIFFN_GET_DEVICE_PERFORMANCE_INFO)
336 typedef NTSTATUS
337 USB_BUSIFFN
338 USB_BUSIFFN_GET_DEVICE_PERFORMANCE_INFO(
339 _In_ PVOID BusContext,
340 _In_ PUSB_DEVICE_HANDLE DeviceHandle,
341 _Out_writes_bytes_to_(DeviceInformationBufferLength,*LengthOfDataCopied)
342 PVOID DeviceInformationBuffer,
343 _In_ ULONG DeviceInformationBufferLength,
344 _Inout_ PULONG LengthOfDataCopied);
345 typedef USB_BUSIFFN_GET_DEVICE_PERFORMANCE_INFO *PUSB_BUSIFFN_GET_DEVICE_PERFORMANCE_INFO;
346
347 _Function_class_(USB_BUSIFFN_WAIT_ASYNC_POWERUP)
348 typedef NTSTATUS
349 USB_BUSIFFN
350 USB_BUSIFFN_WAIT_ASYNC_POWERUP(
351 _In_ PVOID BusContext);
352 typedef USB_BUSIFFN_WAIT_ASYNC_POWERUP *PUSB_BUSIFFN_WAIT_ASYNC_POWERUP;
353
354 _Function_class_(USB_BUSIFFN_GET_DEVICE_ADDRESS)
355 typedef NTSTATUS
356 USB_BUSIFFN
357 USB_BUSIFFN_GET_DEVICE_ADDRESS(
358 _In_ PVOID BusContext,
359 _In_ PUSB_DEVICE_HANDLE DeviceHandle,
360 _Out_ PUSHORT DeviceAddress);
361 typedef USB_BUSIFFN_GET_DEVICE_ADDRESS *PUSB_BUSIFFN_GET_DEVICE_ADDRESS;
362
363 _Function_class_(USB_BUSIFFN_DEREF_DEVICE_HANDLE)
364 typedef VOID
365 USB_BUSIFFN
366 USB_BUSIFFN_DEREF_DEVICE_HANDLE(
367 _In_ PVOID BusContext,
368 _In_ PUSB_DEVICE_HANDLE DeviceHandle,
369 _In_ PVOID Object,
370 _In_ ULONG Tag);
371 typedef USB_BUSIFFN_DEREF_DEVICE_HANDLE *PUSB_BUSIFFN_DEREF_DEVICE_HANDLE;
372
373 _Function_class_(USB_BUSIFFN_REF_DEVICE_HANDLE)
374 typedef NTSTATUS
375 USB_BUSIFFN
376 USB_BUSIFFN_REF_DEVICE_HANDLE(
377 _In_ PVOID BusContext,
378 _In_ PUSB_DEVICE_HANDLE DeviceHandle,
379 _In_ PVOID Object,
380 _In_ ULONG Tag);
381 typedef USB_BUSIFFN_REF_DEVICE_HANDLE *PUSB_BUSIFFN_REF_DEVICE_HANDLE;
382
383 _Function_class_(USB_BUSIFFN_SET_DEVICE_HANDLE_IDLE_READY_STATE)
384 typedef ULONG
385 USB_BUSIFFN
386 USB_BUSIFFN_SET_DEVICE_HANDLE_IDLE_READY_STATE(
387 _In_ PVOID BusContext,
388 _In_ PUSB_DEVICE_HANDLE DeviceHandle,
389 _In_ ULONG NewIdleReadyState);
390 typedef USB_BUSIFFN_SET_DEVICE_HANDLE_IDLE_READY_STATE *PUSB_BUSIFFN_SET_DEVICE_HANDLE_IDLE_READY_STATE;
391
392 _Function_class_(USB_BUSIFFN_GET_CONTAINER_ID_FOR_PORT)
393 typedef NTSTATUS
394 USB_BUSIFFN
395 USB_BUSIFFN_GET_CONTAINER_ID_FOR_PORT(
396 _In_ PVOID BusContext,
397 _In_ USHORT PortNumber,
398 _Out_ LPGUID ContainerId);
399 typedef USB_BUSIFFN_GET_CONTAINER_ID_FOR_PORT *PUSB_BUSIFFN_GET_CONTAINER_ID_FOR_PORT;
400
401 _Function_class_(USB_BUSIFFN_SET_CONTAINER_ID_FOR_PORT)
402 typedef VOID
403 USB_BUSIFFN
404 USB_BUSIFFN_SET_CONTAINER_ID_FOR_PORT(
405 _In_ PVOID BusContext,
406 _In_ USHORT PortNumber,
407 _In_ LPGUID ContainerId);
408 typedef USB_BUSIFFN_SET_CONTAINER_ID_FOR_PORT *PUSB_BUSIFFN_SET_CONTAINER_ID_FOR_PORT;
409
410 _Function_class_(USB_BUSIFFN_ABORT_ALL_DEVICE_PIPES)
411 typedef NTSTATUS
412 USB_BUSIFFN
413 USB_BUSIFFN_ABORT_ALL_DEVICE_PIPES(
414 _In_ PVOID BusContext,
415 _In_ PUSB_DEVICE_HANDLE DeviceHandle);
416 typedef USB_BUSIFFN_ABORT_ALL_DEVICE_PIPES *PUSB_BUSIFFN_ABORT_ALL_DEVICE_PIPES;
417
418 #define ERRATA_FLAG_RESET_TT_ON_CANCEL 1
419 #define ERRATA_FLAG_NO_CLEAR_TT_BUFFER_ON_CANCEL 2
420
421 #define USB_BUSIF_HUB_VERSION_0 0x0000
422 #define USB_BUSIF_HUB_VERSION_1 0x0001
423 #define USB_BUSIF_HUB_VERSION_2 0x0002
424 #define USB_BUSIF_HUB_VERSION_3 0x0003
425 #define USB_BUSIF_HUB_VERSION_4 0x0004
426 #define USB_BUSIF_HUB_VERSION_5 0x0005
427 #define USB_BUSIF_HUB_VERSION_6 0x0006
428 #define USB_BUSIF_HUB_VERSION_7 0x0007
429
430 #define USB_BUSIF_HUB_MIDUMP_VERSION_0 0x0000
431
432 #define USB_BUSIF_HUB_SS_VERSION_0 0x0000
433
434 _Function_class_(USB_BUSIFFN_SET_DEVICE_ERRATA_FLAG)
435 typedef VOID
436 USB_BUSIFFN
437 USB_BUSIFFN_SET_DEVICE_ERRATA_FLAG(
438 _In_ PVOID BusContext,
439 _In_ PUSB_DEVICE_HANDLE DeviceHandle,
440 _In_ ULONG DeviceErrataFlag);
441 typedef USB_BUSIFFN_SET_DEVICE_ERRATA_FLAG *PUSB_BUSIFFN_SET_DEVICE_ERRATA_FLAG;
442
443 DEFINE_GUID(USB_BUS_INTERFACE_HUB_GUID,
444 0xb2bb8c0a, 0x5ab4, 0x11d3, 0xa8, 0xcd, 0x0, 0xc0, 0x4f, 0x68, 0x74, 0x7a);
445
446 typedef struct _USB_BUS_INTERFACE_HUB_V0 {
447 USHORT Size;
448 USHORT Version;
449 PVOID BusContext;
450 PINTERFACE_REFERENCE InterfaceReference;
451 PINTERFACE_DEREFERENCE InterfaceDereference;
452 } USB_BUS_INTERFACE_HUB_V0, *PUSB_BUS_INTERFACE_HUB_V0;
453
454 typedef struct _USB_BUS_INTERFACE_HUB_V1 {
455 USHORT Size;
456 USHORT Version;
457 PVOID BusContext;
458 PINTERFACE_REFERENCE InterfaceReference;
459 PINTERFACE_DEREFERENCE InterfaceDereference;
460 PUSB_BUSIFFN_CREATE_USB_DEVICE CreateUsbDevice;
461 PUSB_BUSIFFN_INITIALIZE_USB_DEVICE InitializeUsbDevice;
462 PUSB_BUSIFFN_GET_USB_DESCRIPTORS GetUsbDescriptors;
463 PUSB_BUSIFFN_REMOVE_USB_DEVICE RemoveUsbDevice;
464 PUSB_BUSIFFN_RESTORE_DEVICE RestoreUsbDevice;
465 PUSB_BUSIFFN_GET_POTRTHACK_FLAGS GetPortHackFlags;
466 PUSB_BUSIFFN_GET_DEVICE_INFORMATION QueryDeviceInformation;
467 } USB_BUS_INTERFACE_HUB_V1, *PUSB_BUS_INTERFACE_HUB_V1;
468
469 typedef struct _USB_BUS_INTERFACE_HUB_V2 {
470 USHORT Size;
471 USHORT Version;
472 PVOID BusContext;
473 PINTERFACE_REFERENCE InterfaceReference;
474 PINTERFACE_DEREFERENCE InterfaceDereference;
475 PUSB_BUSIFFN_CREATE_USB_DEVICE CreateUsbDevice;
476 PUSB_BUSIFFN_INITIALIZE_USB_DEVICE InitializeUsbDevice;
477 PUSB_BUSIFFN_GET_USB_DESCRIPTORS GetUsbDescriptors;
478 PUSB_BUSIFFN_REMOVE_USB_DEVICE RemoveUsbDevice;
479 PUSB_BUSIFFN_RESTORE_DEVICE RestoreUsbDevice;
480 PUSB_BUSIFFN_GET_POTRTHACK_FLAGS GetPortHackFlags;
481 PUSB_BUSIFFN_GET_DEVICE_INFORMATION QueryDeviceInformation;
482 PUSB_BUSIFFN_GET_CONTROLLER_INFORMATION GetControllerInformation;
483 PUSB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND ControllerSelectiveSuspend;
484 PUSB_BUSIFFN_GET_EXTENDED_HUB_INFO GetExtendedHubInformation;
485 PUSB_BUSIFFN_GET_ROOTHUB_SYM_NAME GetRootHubSymbolicName;
486 PUSB_BUSIFFN_GET_DEVICE_BUSCONTEXT GetDeviceBusContext;
487 PUSB_BUSIFFN_INITIALIZE_20HUB Initialize20Hub;
488 } USB_BUS_INTERFACE_HUB_V2, *PUSB_BUS_INTERFACE_HUB_V2;
489
490 typedef struct _USB_BUS_INTERFACE_HUB_V3 {
491 USHORT Size;
492 USHORT Version;
493 PVOID BusContext;
494 PINTERFACE_REFERENCE InterfaceReference;
495 PINTERFACE_DEREFERENCE InterfaceDereference;
496 PUSB_BUSIFFN_CREATE_USB_DEVICE CreateUsbDevice;
497 PUSB_BUSIFFN_INITIALIZE_USB_DEVICE InitializeUsbDevice;
498 PUSB_BUSIFFN_GET_USB_DESCRIPTORS GetUsbDescriptors;
499 PUSB_BUSIFFN_REMOVE_USB_DEVICE RemoveUsbDevice;
500 PUSB_BUSIFFN_RESTORE_DEVICE RestoreUsbDevice;
501 PUSB_BUSIFFN_GET_POTRTHACK_FLAGS GetPortHackFlags;
502 PUSB_BUSIFFN_GET_DEVICE_INFORMATION QueryDeviceInformation;
503 PUSB_BUSIFFN_GET_CONTROLLER_INFORMATION GetControllerInformation;
504 PUSB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND ControllerSelectiveSuspend;
505 PUSB_BUSIFFN_GET_EXTENDED_HUB_INFO GetExtendedHubInformation;
506 PUSB_BUSIFFN_GET_ROOTHUB_SYM_NAME GetRootHubSymbolicName;
507 PUSB_BUSIFFN_GET_DEVICE_BUSCONTEXT GetDeviceBusContext;
508 PUSB_BUSIFFN_INITIALIZE_20HUB Initialize20Hub;
509 PUSB_BUSIFFN_ROOTHUB_INIT_NOTIFY RootHubInitNotification;
510 } USB_BUS_INTERFACE_HUB_V3, *PUSB_BUS_INTERFACE_HUB_V3;
511
512 typedef struct _USB_BUS_INTERFACE_HUB_V4 {
513 USHORT Size;
514 USHORT Version;
515 PVOID BusContext;
516 PINTERFACE_REFERENCE InterfaceReference;
517 PINTERFACE_DEREFERENCE InterfaceDereference;
518 PUSB_BUSIFFN_CREATE_USB_DEVICE CreateUsbDevice;
519 PUSB_BUSIFFN_INITIALIZE_USB_DEVICE InitializeUsbDevice;
520 PUSB_BUSIFFN_GET_USB_DESCRIPTORS GetUsbDescriptors;
521 PUSB_BUSIFFN_REMOVE_USB_DEVICE RemoveUsbDevice;
522 PUSB_BUSIFFN_RESTORE_DEVICE RestoreUsbDevice;
523 PUSB_BUSIFFN_GET_POTRTHACK_FLAGS GetPortHackFlags;
524 PUSB_BUSIFFN_GET_DEVICE_INFORMATION QueryDeviceInformation;
525 PUSB_BUSIFFN_GET_CONTROLLER_INFORMATION GetControllerInformation;
526 PUSB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND ControllerSelectiveSuspend;
527 PUSB_BUSIFFN_GET_EXTENDED_HUB_INFO GetExtendedHubInformation;
528 PUSB_BUSIFFN_GET_ROOTHUB_SYM_NAME GetRootHubSymbolicName;
529 PUSB_BUSIFFN_GET_DEVICE_BUSCONTEXT GetDeviceBusContext;
530 PUSB_BUSIFFN_INITIALIZE_20HUB Initialize20Hub;
531 PUSB_BUSIFFN_ROOTHUB_INIT_NOTIFY RootHubInitNotification;
532 PUSB_BUSIFFN_FLUSH_TRANSFERS FlushTransfers;
533 } USB_BUS_INTERFACE_HUB_V4, *PUSB_BUS_INTERFACE_HUB_V4;
534
535 typedef struct _USB_BUS_INTERFACE_HUB_V5 {
536 USHORT Size;
537 USHORT Version;
538 PVOID BusContext;
539 PINTERFACE_REFERENCE InterfaceReference;
540 PINTERFACE_DEREFERENCE InterfaceDereference;
541 PUSB_BUSIFFN_CREATE_USB_DEVICE CreateUsbDevice;
542 PUSB_BUSIFFN_INITIALIZE_USB_DEVICE InitializeUsbDevice;
543 PUSB_BUSIFFN_GET_USB_DESCRIPTORS GetUsbDescriptors;
544 PUSB_BUSIFFN_REMOVE_USB_DEVICE RemoveUsbDevice;
545 PUSB_BUSIFFN_RESTORE_DEVICE RestoreUsbDevice;
546 PUSB_BUSIFFN_GET_POTRTHACK_FLAGS GetPortHackFlags;
547 PUSB_BUSIFFN_GET_DEVICE_INFORMATION QueryDeviceInformation;
548 PUSB_BUSIFFN_GET_CONTROLLER_INFORMATION GetControllerInformation;
549 PUSB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND ControllerSelectiveSuspend;
550 PUSB_BUSIFFN_GET_EXTENDED_HUB_INFO GetExtendedHubInformation;
551 PUSB_BUSIFFN_GET_ROOTHUB_SYM_NAME GetRootHubSymbolicName;
552 PUSB_BUSIFFN_GET_DEVICE_BUSCONTEXT GetDeviceBusContext;
553 PUSB_BUSIFFN_INITIALIZE_20HUB Initialize20Hub;
554 PUSB_BUSIFFN_ROOTHUB_INIT_NOTIFY RootHubInitNotification;
555 PUSB_BUSIFFN_FLUSH_TRANSFERS FlushTransfers;
556 PUSB_BUSIFFN_SET_DEVHANDLE_DATA SetDeviceHandleData;
557 } USB_BUS_INTERFACE_HUB_V5, *PUSB_BUS_INTERFACE_HUB_V5;
558
559 typedef struct _USB_BUS_INTERFACE_HUB_V6 {
560 USHORT Size;
561 USHORT Version;
562 PVOID BusContext;
563 PINTERFACE_REFERENCE InterfaceReference;
564 PINTERFACE_DEREFERENCE InterfaceDereference;
565 PUSB_BUSIFFN_CREATE_USB_DEVICE_EX CreateUsbDevice;
566 PUSB_BUSIFFN_INITIALIZE_USB_DEVICE_EX InitializeUsbDevice;
567 PUSB_BUSIFFN_GET_USB_DESCRIPTORS GetUsbDescriptors;
568 PUSB_BUSIFFN_REMOVE_USB_DEVICE RemoveUsbDevice;
569 PUSB_BUSIFFN_RESTORE_DEVICE RestoreUsbDevice;
570 PUSB_BUSIFFN_GET_POTRTHACK_FLAGS GetPortHackFlags;
571 PUSB_BUSIFFN_GET_DEVICE_INFORMATION QueryDeviceInformation;
572 PUSB_BUSIFFN_GET_CONTROLLER_INFORMATION GetControllerInformation;
573 PUSB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND ControllerSelectiveSuspend;
574 PUSB_BUSIFFN_GET_EXTENDED_HUB_INFO GetExtendedHubInformation;
575 PUSB_BUSIFFN_GET_ROOTHUB_SYM_NAME GetRootHubSymbolicName;
576 PUSB_BUSIFFN_GET_DEVICE_BUSCONTEXT GetDeviceBusContext;
577 PUSB_BUSIFFN_INITIALIZE_20HUB Initialize20Hub;
578 PUSB_BUSIFFN_ROOTHUB_INIT_NOTIFY RootHubInitNotification;
579 PUSB_BUSIFFN_FLUSH_TRANSFERS FlushTransfers;
580 PUSB_BUSIFFN_SET_DEVHANDLE_DATA SetDeviceHandleData;
581 PUSB_BUSIFFN_IS_ROOT HubIsRoot;
582 PUSB_BUSIFFN_ACQUIRE_SEMAPHORE AcquireBusSemaphore;
583 PUSB_BUSIFFN_RELEASE_SEMAPHORE ReleaseBusSemaphore;
584 PUSB_BUSIFFN_CALC_PIPE_BANDWIDTH CaculatePipeBandwidth;
585 PUSB_BUSIFFN_SET_BUS_WAKE_MODE SetBusSystemWakeMode;
586 PUSB_BUSIFFN_SET_DEVICE_FLAG SetDeviceFlag;
587 PUSB_BUSIFFN_TEST_POINT HubTestPoint;
588 PUSB_BUSIFFN_GET_DEVICE_PERFORMANCE_INFO GetDevicePerformanceInfo;
589 PUSB_BUSIFFN_WAIT_ASYNC_POWERUP WaitAsyncPowerUp;
590 PUSB_BUSIFFN_GET_DEVICE_ADDRESS GetDeviceAddress;
591 PUSB_BUSIFFN_REF_DEVICE_HANDLE RefDeviceHandle;
592 PUSB_BUSIFFN_DEREF_DEVICE_HANDLE DerefDeviceHandle;
593 PUSB_BUSIFFN_SET_DEVICE_HANDLE_IDLE_READY_STATE SetDeviceHandleIdleReadyState;
594 } USB_BUS_INTERFACE_HUB_V6, *PUSB_BUS_INTERFACE_HUB_V6;
595
596 typedef struct _USB_BUS_INTERFACE_HUB_V7 {
597 USHORT Size;
598 USHORT Version;
599 PVOID BusContext;
600 PINTERFACE_REFERENCE InterfaceReference;
601 PINTERFACE_DEREFERENCE InterfaceDereference;
602 PUSB_BUSIFFN_CREATE_USB_DEVICE_EX CreateUsbDevice;
603 PUSB_BUSIFFN_INITIALIZE_USB_DEVICE_EX InitializeUsbDevice;
604 PUSB_BUSIFFN_GET_USB_DESCRIPTORS GetUsbDescriptors;
605 PUSB_BUSIFFN_REMOVE_USB_DEVICE RemoveUsbDevice;
606 PUSB_BUSIFFN_RESTORE_DEVICE RestoreUsbDevice;
607 PUSB_BUSIFFN_GET_POTRTHACK_FLAGS GetPortHackFlags;
608 PUSB_BUSIFFN_GET_DEVICE_INFORMATION QueryDeviceInformation;
609 PUSB_BUSIFFN_GET_CONTROLLER_INFORMATION GetControllerInformation;
610 PUSB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND ControllerSelectiveSuspend;
611 PUSB_BUSIFFN_GET_EXTENDED_HUB_INFO GetExtendedHubInformation;
612 PUSB_BUSIFFN_GET_ROOTHUB_SYM_NAME GetRootHubSymbolicName;
613 PUSB_BUSIFFN_GET_DEVICE_BUSCONTEXT GetDeviceBusContext;
614 PUSB_BUSIFFN_INITIALIZE_20HUB Initialize20Hub;
615 PUSB_BUSIFFN_ROOTHUB_INIT_NOTIFY RootHubInitNotification;
616 PUSB_BUSIFFN_FLUSH_TRANSFERS FlushTransfers;
617 PUSB_BUSIFFN_SET_DEVHANDLE_DATA SetDeviceHandleData;
618 PUSB_BUSIFFN_IS_ROOT HubIsRoot;
619 PUSB_BUSIFFN_ACQUIRE_SEMAPHORE AcquireBusSemaphore;
620 PUSB_BUSIFFN_RELEASE_SEMAPHORE ReleaseBusSemaphore;
621 PUSB_BUSIFFN_CALC_PIPE_BANDWIDTH CaculatePipeBandwidth;
622 PUSB_BUSIFFN_SET_BUS_WAKE_MODE SetBusSystemWakeMode;
623 PUSB_BUSIFFN_SET_DEVICE_FLAG SetDeviceFlag;
624 PUSB_BUSIFFN_TEST_POINT HubTestPoint;
625 PUSB_BUSIFFN_GET_DEVICE_PERFORMANCE_INFO GetDevicePerformanceInfo;
626 PUSB_BUSIFFN_WAIT_ASYNC_POWERUP WaitAsyncPowerUp;
627 PUSB_BUSIFFN_GET_DEVICE_ADDRESS GetDeviceAddress;
628 PUSB_BUSIFFN_REF_DEVICE_HANDLE RefDeviceHandle;
629 PUSB_BUSIFFN_DEREF_DEVICE_HANDLE DerefDeviceHandle;
630 PUSB_BUSIFFN_SET_DEVICE_HANDLE_IDLE_READY_STATE SetDeviceHandleIdleReadyState;
631 PUSB_BUSIFFN_CREATE_USB_DEVICE_V7 CreateUsbDeviceV7;
632 PUSB_BUSIFFN_GET_CONTAINER_ID_FOR_PORT GetContainerIdForPort;
633 PUSB_BUSIFFN_SET_CONTAINER_ID_FOR_PORT SetContainerIdForPort;
634 PUSB_BUSIFFN_ABORT_ALL_DEVICE_PIPES AbortAllDevicePipes;
635 PUSB_BUSIFFN_SET_DEVICE_ERRATA_FLAG SetDeviceErrataFlag;
636 } USB_BUS_INTERFACE_HUB_V7, *PUSB_BUS_INTERFACE_HUB_V7;
637
638 DEFINE_GUID(USB_BUS_INTERFACE_HUB_MINIDUMP_GUID,
639 0xc5485f21, 0x4e81, 0x4a23, 0xa8, 0xf9, 0xd8, 0x51, 0x8a, 0xf4, 0x5c, 0x38);
640
641 typedef VOID
642 (USB_BUSIFFN *PUSB_BUSIFFN_SET_MINIDUMP_FLAGS) (
643 IN PVOID);
644
645 typedef struct _USB_BUS_INTERFACE_HUB_MINIDUMP {
646 USHORT Size;
647 USHORT Version;
648 PVOID BusContext;
649 PINTERFACE_REFERENCE InterfaceReference;
650 PINTERFACE_DEREFERENCE InterfaceDereference;
651 PUSB_BUSIFFN_SET_MINIDUMP_FLAGS SetUsbPortMiniDumpFlags;
652 } USB_BUS_INTERFACE_HUB_MINIDUMP, *PUSB_BUS_INTERFACE_HUB_MINIDUMP;
653
654 DEFINE_GUID(USB_BUS_INTERFACE_HUB_SS_GUID,
655 0xbfc3f363, 0x8ba1, 0x4c7b, 0x97, 0xba, 0x9b, 0x12, 0xb1, 0xca, 0x13, 0x2f);
656
657 typedef NTSTATUS
658 (USB_BUSIFFN *PUSB_BUSIFFN_SUSPEND_HUB) (
659 PDEVICE_OBJECT Pdo);
660
661 typedef NTSTATUS
662 (USB_BUSIFFN *PUSB_BUSIFFN_RESUME_HUB) (
663 PDEVICE_OBJECT Pdo);
664
665 typedef struct _USB_BUS_INTERFACE_HUB_SELECTIVE_SUSPEND {
666 USHORT Size;
667 USHORT Version;
668 PVOID BusContext;
669 PINTERFACE_REFERENCE InterfaceReference;
670 PINTERFACE_DEREFERENCE InterfaceDereference;
671 PUSB_BUSIFFN_SUSPEND_HUB SuspendHub;
672 PUSB_BUSIFFN_RESUME_HUB ResumeHub;
673 } USB_BUS_INTERFACE_HUB_SELECTIVE_SUSPEND, *PUSB_BUS_INTERFACE_HUB_SELECTIVE_SUSPEND;
674
675 #include <pshpack1.h>
676
677 typedef struct _USB_PIPE_INFORMATION_0 {
678 USB_ENDPOINT_DESCRIPTOR EndpointDescriptor;
679 UCHAR ED_Pad[1];
680 ULONG ScheduleOffset;
681 } USB_PIPE_INFORMATION_0, *PUSB_PIPE_INFORMATION_0;
682
683 typedef struct _USB_LEVEL_INFORMATION {
684 ULONG InformationLevel;
685 ULONG ActualLength;
686 } USB_LEVEL_INFORMATION, *PUSB_LEVEL_INFORMATION;
687
688 typedef struct _USB_DEVICE_INFORMATION_0 {
689 ULONG InformationLevel;
690 ULONG ActualLength;
691 ULONG PortNumber;
692 USB_DEVICE_DESCRIPTOR DeviceDescriptor;
693 UCHAR DD_pad[2];
694 UCHAR CurrentConfigurationValue;
695 UCHAR ReservedMBZ;
696 USHORT DeviceAddress;
697 ULONG HubAddress;
698 USB_DEVICE_SPEED DeviceSpeed;
699 USB_DEVICE_TYPE DeviceType;
700 ULONG NumberOfOpenPipes;
701 USB_PIPE_INFORMATION_0 PipeList[1];
702 } USB_DEVICE_INFORMATION_0, *PUSB_DEVICE_INFORMATION_0;
703
704 typedef struct _USB_CONTROLLER_INFORMATION_0 {
705 ULONG InformationLevel;
706 ULONG ActualLength;
707 BOOLEAN SelectiveSuspendEnabled;
708 BOOLEAN IsHighSpeedController;
709 } USB_CONTROLLER_INFORMATION_0, *PUSB_CONTROLLER_INFORMATION_0;
710
711 typedef struct _USB_CONTROLLER_INFORMATION_1 {
712 ULONG InformationLevel;
713 ULONG ActualLength;
714 BOOLEAN SelectiveSuspendEnabled;
715 BOOLEAN IsHighSpeedController;
716 ULONG HcBusNumber;
717 ULONG HcBusDevice;
718 ULONG HcBusFunction;
719 } USB_CONTROLLER_INFORMATION_1, *PUSB_CONTROLLER_INFORMATION_1;
720
721 typedef struct _USB_EXTPORT_INFORMATION_0 {
722 ULONG PhysicalPortNumber;
723 ULONG PortLabelNumber;
724 USHORT VidOverride;
725 USHORT PidOverride;
726 ULONG PortAttributes;
727 } USB_EXTPORT_INFORMATION_0, *PUSB_EXTPORT_INFORMATION;
728
729 typedef struct _USB_EXTHUB_INFORMATION_0 {
730 ULONG InformationLevel;
731 ULONG NumberOfPorts;
732 USB_EXTPORT_INFORMATION_0 Port[255];
733 } USB_EXTHUB_INFORMATION_0, *PUSB_EXTHUB_INFORMATION_0;
734
735 typedef struct _USB_DEVICE_PERFORMANCE_INFO_0 {
736 ULONG InformationLevel;
737 ULONG ActualLength;
738 ULONG BulkBytes;
739 ULONG BulkUrbCount;
740 ULONG ControlDataBytes;
741 ULONG ControlUrbCount;
742 ULONG IsoBytes;
743 ULONG IsoUrbCount;
744 ULONG InterruptBytes;
745 ULONG InterruptUrbCount;
746 ULONG AllocedInterrupt[6];
747 ULONG AllocedIso;
748 ULONG Total32secBandwidth;
749 ULONG TotalTtBandwidth;
750 ULONG TotalIsoLatency;
751 ULONG DroppedIsoPackets;
752 ULONG TransferErrors;
753 } USB_DEVICE_PERFORMANCE_INFO_0, *PUSB_DEVICE_PERFORMANCE_INFO_0;
754
755 #include <poppack.h>
756
757 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */