[RTL] Fix GCC build.
[reactos.git] / sdk / include / psdk / usbioctl.h
1 /*
2 * usbioctl.h
3 *
4 * USB IOCTL interface.
5 *
6 * This file is part of the ReactOS PSDK package.
7 *
8 * Contributors:
9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
10 *
11 * THIS SOFTWARE IS NOT COPYRIGHTED
12 *
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
15 *
16 * This code is distributed in the hope that it will be useful but
17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
18 * DISCLAIMED. This includes but is not limited to warranties of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
20 *
21 */
22
23 #pragma once
24
25 #include "usb100.h"
26 #include "usbiodef.h"
27
28 #ifdef __cplusplus
29 extern "C" {
30 #endif
31
32 #define IOCTL_INTERNAL_USB_SUBMIT_URB \
33 CTL_CODE(FILE_DEVICE_USB, USB_SUBMIT_URB, METHOD_NEITHER, FILE_ANY_ACCESS)
34
35 #define IOCTL_INTERNAL_USB_RESET_PORT \
36 CTL_CODE(FILE_DEVICE_USB, USB_RESET_PORT, METHOD_NEITHER, FILE_ANY_ACCESS)
37
38 #define IOCTL_INTERNAL_USB_GET_ROOTHUB_PDO \
39 CTL_CODE(FILE_DEVICE_USB, USB_GET_ROOTHUB_PDO, METHOD_NEITHER, FILE_ANY_ACCESS)
40
41 #define USBD_PORT_ENABLED 1
42 #define USBD_PORT_CONNECTED 2
43
44 #define IOCTL_INTERNAL_USB_GET_PORT_STATUS \
45 CTL_CODE(FILE_DEVICE_USB, USB_GET_PORT_STATUS, METHOD_NEITHER, FILE_ANY_ACCESS)
46
47 #define IOCTL_INTERNAL_USB_ENABLE_PORT \
48 CTL_CODE(FILE_DEVICE_USB, USB_ENABLE_PORT, METHOD_NEITHER, FILE_ANY_ACCESS)
49
50 #define IOCTL_INTERNAL_USB_GET_HUB_COUNT \
51 CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_COUNT, METHOD_NEITHER, FILE_ANY_ACCESS)
52
53 #define IOCTL_INTERNAL_USB_CYCLE_PORT \
54 CTL_CODE(FILE_DEVICE_USB, USB_CYCLE_PORT, METHOD_NEITHER, FILE_ANY_ACCESS)
55
56 #define IOCTL_INTERNAL_USB_GET_HUB_NAME \
57 CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
58
59 #define IOCTL_INTERNAL_USB_GET_BUS_INFO \
60 CTL_CODE(FILE_DEVICE_USB, USB_GET_BUS_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS)
61
62 #define IOCTL_INTERNAL_USB_GET_CONTROLLER_NAME \
63 CTL_CODE(FILE_DEVICE_USB, USB_GET_CONTROLLER_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
64
65 #define IOCTL_INTERNAL_USB_GET_BUSGUID_INFO \
66 CTL_CODE(FILE_DEVICE_USB, USB_GET_BUSGUID_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS)
67
68 #define IOCTL_INTERNAL_USB_GET_PARENT_HUB_INFO \
69 CTL_CODE(FILE_DEVICE_USB, USB_GET_PARENT_HUB_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS)
70
71 #if (_WIN32_WINNT >= 0x0501)
72
73 #define IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION \
74 CTL_CODE(FILE_DEVICE_USB, USB_IDLE_NOTIFICATION, METHOD_NEITHER, FILE_ANY_ACCESS)
75
76 #define IOCTL_INTERNAL_USB_GET_DEVICE_HANDLE \
77 CTL_CODE(FILE_DEVICE_USB, USB_GET_DEVICE_HANDLE, METHOD_NEITHER, FILE_ANY_ACCESS)
78
79 #endif
80
81 #if (_WIN32_WINNT >= 0x0600)
82
83 #define IOCTL_INTERNAL_USB_NOTIFY_IDLE_READY \
84 CTL_CODE(FILE_DEVICE_USB, USB_IDLE_NOTIFICATION_EX, METHOD_NEITHER, FILE_ANY_ACCESS)
85
86 #define IOCTL_INTERNAL_USB_REQ_GLOBAL_SUSPEND \
87 CTL_CODE(FILE_DEVICE_USB, USB_REQ_GLOBAL_SUSPEND, METHOD_NEITHER, FILE_ANY_ACCESS)
88
89 #define IOCTL_INTERNAL_USB_REQ_GLOBAL_RESUME \
90 CTL_CODE(FILE_DEVICE_USB, USB_REQ_GLOBAL_RESUME, METHOD_NEITHER, FILE_ANY_ACCESS)
91
92 #ifdef USB20_API
93 typedef struct _USB_START_FAILDATA {
94 ULONG LengthInBytes;
95 NTSTATUS NtStatus;
96 USBD_STATUS UsbdStatus;
97 ULONG ConnectStatus;
98 UCHAR DriverData[4];
99 } USB_START_FAILDATA, *PUSB_START_FAILDATA;
100 #endif
101
102 #define IOCTL_INTERNAL_USB_RECORD_FAILURE \
103 CTL_CODE(FILE_DEVICE_USB, USB_RECORD_FAILURE, METHOD_NEITHER, FILE_ANY_ACCESS)
104
105 #define IOCTL_INTERNAL_USB_GET_DEVICE_HANDLE_EX \
106 CTL_CODE(FILE_DEVICE_USB, USB_GET_DEVICE_HANDLE_EX, METHOD_NEITHER, FILE_ANY_ACCESS)
107
108 #define IOCTL_INTERNAL_USB_GET_TT_DEVICE_HANDLE \
109 CTL_CODE(FILE_DEVICE_USB, USB_GET_TT_DEVICE_HANDLE, METHOD_NEITHER, FILE_ANY_ACCESS)
110
111 typedef struct _USB_TOPOLOGY_ADDRESS {
112 ULONG PciBusNumber;
113 ULONG PciDeviceNumber;
114 ULONG PciFunctionNumber;
115 ULONG Reserved;
116 USHORT RootHubPortNumber;
117 USHORT HubPortNumber[5];
118 USHORT Reserved2;
119 } USB_TOPOLOGY_ADDRESS, *PUSB_TOPOLOGY_ADDRESS;
120
121 #define IOCTL_INTERNAL_USB_GET_TOPOLOGY_ADDRESS \
122 CTL_CODE(FILE_DEVICE_USB, USB_GET_TOPOLOGY_ADDRESS, METHOD_NEITHER, FILE_ANY_ACCESS)
123
124 #define IOCTL_INTERNAL_USB_GET_DEVICE_CONFIG_INFO \
125 CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_CONFIG_INFO, METHOD_NEITHER, FILE_ANY_ACCESS)
126
127 #endif
128
129 #ifndef USB_KERNEL_IOCTL
130
131 #define IOCTL_USB_HCD_GET_STATS_1 \
132 CTL_CODE(FILE_DEVICE_USB, HCD_GET_STATS_1, METHOD_BUFFERED, FILE_ANY_ACCESS)
133
134 #define IOCTL_USB_HCD_GET_STATS_2 \
135 CTL_CODE(FILE_DEVICE_USB, HCD_GET_STATS_2, METHOD_BUFFERED, FILE_ANY_ACCESS)
136
137 #define IOCTL_USB_HCD_DISABLE_PORT \
138 CTL_CODE(FILE_DEVICE_USB, HCD_DISABLE_PORT, METHOD_BUFFERED, FILE_ANY_ACCESS)
139
140 #define IOCTL_USB_HCD_ENABLE_PORT \
141 CTL_CODE(FILE_DEVICE_USB, HCD_ENABLE_PORT, METHOD_BUFFERED, FILE_ANY_ACCESS)
142
143 #define IOCTL_USB_HCD_DISABLE_PORT \
144 CTL_CODE(FILE_DEVICE_USB, HCD_DISABLE_PORT, METHOD_BUFFERED, FILE_ANY_ACCESS)
145
146 #define IOCTL_USB_HCD_ENABLE_PORT \
147 CTL_CODE(FILE_DEVICE_USB, HCD_ENABLE_PORT, METHOD_BUFFERED, FILE_ANY_ACCESS)
148
149 #ifndef IOCTL_USB_DIAGNOSTIC_MODE_OFF
150 #define IOCTL_USB_DIAGNOSTIC_MODE_OFF \
151 CTL_CODE(FILE_DEVICE_USB, HCD_DIAGNOSTIC_MODE_OFF, METHOD_BUFFERED, FILE_ANY_ACCESS)
152 #endif
153
154 #ifndef IOCTL_USB_DIAGNOSTIC_MODE_ON
155 #define IOCTL_USB_DIAGNOSTIC_MODE_ON \
156 CTL_CODE(FILE_DEVICE_USB, HCD_DIAGNOSTIC_MODE_ON, METHOD_BUFFERED, FILE_ANY_ACCESS)
157 #endif
158
159 #ifndef IOCTL_USB_GET_ROOT_HUB_NAME
160 #define IOCTL_USB_GET_ROOT_HUB_NAME \
161 CTL_CODE(FILE_DEVICE_USB, HCD_GET_ROOT_HUB_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
162 #endif
163
164 #ifndef IOCTL_GET_HCD_DRIVERKEY_NAME
165 #define IOCTL_GET_HCD_DRIVERKEY_NAME \
166 CTL_CODE(FILE_DEVICE_USB, HCD_GET_DRIVERKEY_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
167 #endif
168
169 #define IOCTL_USB_GET_NODE_INFORMATION \
170 CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_INFORMATION, METHOD_BUFFERED, FILE_ANY_ACCESS)
171
172 #define IOCTL_USB_GET_NODE_CONNECTION_INFORMATION \
173 CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_INFORMATION, METHOD_BUFFERED, FILE_ANY_ACCESS)
174
175 #define IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION \
176 CTL_CODE(FILE_DEVICE_USB, USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION, METHOD_BUFFERED, FILE_ANY_ACCESS)
177
178 #define IOCTL_USB_GET_NODE_CONNECTION_NAME \
179 CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
180
181 #define IOCTL_USB_DIAG_IGNORE_HUBS_ON \
182 CTL_CODE(FILE_DEVICE_USB, USB_DIAG_IGNORE_HUBS_ON, METHOD_BUFFERED, FILE_ANY_ACCESS)
183
184 #define IOCTL_USB_DIAG_IGNORE_HUBS_OFF \
185 CTL_CODE(FILE_DEVICE_USB, USB_DIAG_IGNORE_HUBS_OFF, METHOD_BUFFERED, FILE_ANY_ACCESS)
186
187 #define IOCTL_USB_GET_NODE_CONNECTION_DRIVERKEY_NAME \
188 CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_DRIVERKEY_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
189
190 #if (_WIN32_WINNT >= 0x0501)
191
192 #define IOCTL_USB_GET_HUB_CAPABILITIES \
193 CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_CAPABILITIES, METHOD_BUFFERED, FILE_ANY_ACCESS)
194
195 #define IOCTL_USB_HUB_CYCLE_PORT \
196 CTL_CODE(FILE_DEVICE_USB, USB_HUB_CYCLE_PORT, METHOD_BUFFERED, FILE_ANY_ACCESS)
197
198 #define IOCTL_USB_GET_NODE_CONNECTION_ATTRIBUTES \
199 CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_ATTRIBUTES, METHOD_BUFFERED, FILE_ANY_ACCESS)
200
201 #define IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX \
202 CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_INFORMATION_EX, METHOD_BUFFERED, FILE_ANY_ACCESS)
203
204 #endif
205
206 #if (_WIN32_WINNT >= 0x0600)
207
208 #define IOCTL_USB_RESET_HUB \
209 CTL_CODE(FILE_DEVICE_USB, USB_RESET_HUB, METHOD_BUFFERED, FILE_ANY_ACCESS)
210
211 #define IOCTL_USB_GET_HUB_CAPABILITIES_EX \
212 CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_CAPABILITIES_EX, METHOD_BUFFERED, FILE_ANY_ACCESS)
213
214 #endif
215
216 #include <pshpack1.h>
217
218 typedef enum _USB_HUB_NODE {
219 UsbHub,
220 UsbMIParent
221 } USB_HUB_NODE;
222
223 typedef struct _USB_HUB_INFORMATION {
224 USB_HUB_DESCRIPTOR HubDescriptor;
225 BOOLEAN HubIsBusPowered;
226 } USB_HUB_INFORMATION, *PUSB_HUB_INFORMATION;
227
228 typedef struct _USB_MI_PARENT_INFORMATION {
229 ULONG NumberOfInterfaces;
230 } USB_MI_PARENT_INFORMATION, *PUSB_MI_PARENT_INFORMATION;
231
232 typedef struct _USB_NODE_INFORMATION {
233 USB_HUB_NODE NodeType;
234 union {
235 USB_HUB_INFORMATION HubInformation;
236 USB_MI_PARENT_INFORMATION MiParentInformation;
237 } u;
238 } USB_NODE_INFORMATION, *PUSB_NODE_INFORMATION;
239
240 typedef struct _USB_PIPE_INFO {
241 USB_ENDPOINT_DESCRIPTOR EndpointDescriptor;
242 ULONG ScheduleOffset;
243 } USB_PIPE_INFO, *PUSB_PIPE_INFO;
244
245 #if (_WIN32_WINNT >= 0x0600)
246
247 typedef enum _USB_CONNECTION_STATUS {
248 NoDeviceConnected,
249 DeviceConnected,
250 DeviceFailedEnumeration,
251 DeviceGeneralFailure,
252 DeviceCausedOvercurrent,
253 DeviceNotEnoughPower,
254 DeviceNotEnoughBandwidth,
255 DeviceHubNestedTooDeeply,
256 DeviceInLegacyHub,
257 DeviceEnumerating,
258 DeviceReset
259 } USB_CONNECTION_STATUS, *PUSB_CONNECTION_STATUS;
260
261 #elif (_WIN32_WINNT >= 0x0501)
262
263 typedef enum _USB_CONNECTION_STATUS {
264 NoDeviceConnected,
265 DeviceConnected,
266 DeviceFailedEnumeration,
267 DeviceGeneralFailure,
268 DeviceCausedOvercurrent,
269 DeviceNotEnoughPower,
270 DeviceNotEnoughBandwidth,
271 DeviceHubNestedTooDeeply,
272 DeviceInLegacyHub
273 } USB_CONNECTION_STATUS, *PUSB_CONNECTION_STATUS;
274
275 #else
276
277 typedef enum _USB_CONNECTION_STATUS {
278 NoDeviceConnected,
279 DeviceConnected,
280 DeviceFailedEnumeration,
281 DeviceGeneralFailure,
282 DeviceCausedOvercurrent,
283 DeviceNotEnoughPower,
284 DeviceNotEnoughBandwidth
285 } USB_CONNECTION_STATUS, *PUSB_CONNECTION_STATUS;
286
287 #endif
288
289 typedef struct _USB_NODE_CONNECTION_INFORMATION {
290 ULONG ConnectionIndex;
291 USB_DEVICE_DESCRIPTOR DeviceDescriptor;
292 UCHAR CurrentConfigurationValue;
293 BOOLEAN LowSpeed;
294 BOOLEAN DeviceIsHub;
295 USHORT DeviceAddress;
296 ULONG NumberOfOpenPipes;
297 USB_CONNECTION_STATUS ConnectionStatus;
298 USB_PIPE_INFO PipeList[ANYSIZE_ARRAY];
299 } USB_NODE_CONNECTION_INFORMATION, *PUSB_NODE_CONNECTION_INFORMATION;
300
301 typedef struct _USB_NODE_CONNECTION_DRIVERKEY_NAME {
302 ULONG ConnectionIndex;
303 ULONG ActualLength;
304 WCHAR DriverKeyName[ANYSIZE_ARRAY];
305 } USB_NODE_CONNECTION_DRIVERKEY_NAME, *PUSB_NODE_CONNECTION_DRIVERKEY_NAME;
306
307 typedef struct _USB_NODE_CONNECTION_NAME {
308 ULONG ConnectionIndex;
309 ULONG ActualLength;
310 WCHAR NodeName[ANYSIZE_ARRAY];
311 } USB_NODE_CONNECTION_NAME, *PUSB_NODE_CONNECTION_NAME;
312
313 typedef struct _USB_HUB_NAME {
314 ULONG ActualLength;
315 WCHAR HubName[ANYSIZE_ARRAY];
316 } USB_HUB_NAME, *PUSB_HUB_NAME;
317
318 typedef struct _USB_ROOT_HUB_NAME {
319 ULONG ActualLength;
320 WCHAR RootHubName[ANYSIZE_ARRAY];
321 } USB_ROOT_HUB_NAME, *PUSB_ROOT_HUB_NAME;
322
323 typedef struct _USB_HCD_DRIVERKEY_NAME {
324 ULONG ActualLength;
325 WCHAR DriverKeyName[ANYSIZE_ARRAY];
326 } USB_HCD_DRIVERKEY_NAME, *PUSB_HCD_DRIVERKEY_NAME;
327
328 typedef struct _USB_DESCRIPTOR_REQUEST {
329 ULONG ConnectionIndex;
330 struct {
331 UCHAR bmRequest;
332 UCHAR bRequest;
333 USHORT wValue;
334 USHORT wIndex;
335 USHORT wLength;
336 } SetupPacket;
337 UCHAR Data[ANYSIZE_ARRAY];
338 } USB_DESCRIPTOR_REQUEST, *PUSB_DESCRIPTOR_REQUEST;
339
340 #if (_WIN32_WINNT >= 0x0501)
341
342 typedef struct _USB_HUB_CAPABILITIES {
343 ULONG HubIs2xCapable:1;
344 } USB_HUB_CAPABILITIES, *PUSB_HUB_CAPABILITIES;
345
346 typedef struct _USB_NODE_CONNECTION_ATTRIBUTES {
347 ULONG ConnectionIndex;
348 USB_CONNECTION_STATUS ConnectionStatus;
349 ULONG PortAttributes;
350 } USB_NODE_CONNECTION_ATTRIBUTES, *PUSB_NODE_CONNECTION_ATTRIBUTES;
351
352 typedef struct _USB_NODE_CONNECTION_INFORMATION_EX {
353 ULONG ConnectionIndex;
354 USB_DEVICE_DESCRIPTOR DeviceDescriptor;
355 UCHAR CurrentConfigurationValue;
356 UCHAR Speed;
357 BOOLEAN DeviceIsHub;
358 USHORT DeviceAddress;
359 ULONG NumberOfOpenPipes;
360 USB_CONNECTION_STATUS ConnectionStatus;
361 USB_PIPE_INFO PipeList[ANYSIZE_ARRAY];
362 } USB_NODE_CONNECTION_INFORMATION_EX, *PUSB_NODE_CONNECTION_INFORMATION_EX;
363
364 C_ASSERT(sizeof(USB_NODE_CONNECTION_INFORMATION_EX) == sizeof(USB_NODE_CONNECTION_INFORMATION));
365
366 #endif
367
368 #if (_WIN32_WINNT >= 0x0600)
369
370 typedef union _USB_HUB_CAP_FLAGS {
371 ULONG ul;
372 struct {
373 ULONG HubIsHighSpeedCapable:1;
374 ULONG HubIsHighSpeed:1;
375 ULONG HubIsMultiTtCapable:1;
376 ULONG HubIsMultiTt:1;
377 ULONG HubIsRoot:1;
378 ULONG HubIsArmedWakeOnConnect:1;
379 ULONG HubIsBusPowered:1;
380 ULONG ReservedMBZ:25;
381 };
382 } USB_HUB_CAP_FLAGS, *PUSB_HUB_CAP_FLAGS;
383
384 C_ASSERT(sizeof(USB_HUB_CAP_FLAGS) == sizeof(ULONG));
385
386 typedef struct _USB_HUB_CAPABILITIES_EX {
387 USB_HUB_CAP_FLAGS CapabilityFlags;
388 } USB_HUB_CAPABILITIES_EX, *PUSB_HUB_CAPABILITIES_EX;
389
390 typedef struct _USB_CYCLE_PORT_PARAMS {
391 ULONG ConnectionIndex;
392 ULONG StatusReturned;
393 } USB_CYCLE_PORT_PARAMS, *PUSB_CYCLE_PORT_PARAMS;
394
395 typedef struct _USB_ID_STRING {
396 USHORT LanguageId;
397 USHORT Pad;
398 ULONG LengthInBytes;
399 PWCHAR Buffer;
400 } USB_ID_STRING, *PUSB_ID_STRING;
401
402 typedef struct _USB_HUB_DEVICE_UXD_SETTINGS {
403 ULONG Version;
404 GUID PnpGuid;
405 GUID OwnerGuid;
406 ULONG DeleteOnShutdown;
407 ULONG DeleteOnReload;
408 ULONG DeleteOnDisconnect;
409 ULONG Reserved[5];
410 } USB_HUB_DEVICE_UXD_SETTINGS, *PUSB_HUB_DEVICE_UXD_SETTINGS;
411
412 typedef struct _HUB_DEVICE_CONFIG_INFO_V1 {
413 ULONG Version;
414 ULONG Length;
415 USB_HUB_CAP_FLAGS HubFlags;
416 USB_ID_STRING HardwareIds;
417 USB_ID_STRING CompatibleIds;
418 USB_ID_STRING DeviceDescription;
419 ULONG Reserved[19];
420 USB_HUB_DEVICE_UXD_SETTINGS UxdSettings;
421 } HUB_DEVICE_CONFIG_INFO, *PHUB_DEVICE_CONFIG_INFO;
422
423 #endif
424
425 typedef struct _HCD_ISO_STAT_COUNTERS {
426 USHORT LateUrbs;
427 USHORT DoubleBufferedPackets;
428 USHORT TransfersCF_5ms;
429 USHORT TransfersCF_2ms;
430 USHORT TransfersCF_1ms;
431 USHORT MaxInterruptLatency;
432 USHORT BadStartFrame;
433 USHORT StaleUrbs;
434 USHORT IsoPacketNotAccesed;
435 USHORT IsoPacketHWError;
436 USHORT SmallestUrbPacketCount;
437 USHORT LargestUrbPacketCount;
438 USHORT IsoCRC_Error;
439 USHORT IsoOVERRUN_Error;
440 USHORT IsoINTERNAL_Error;
441 USHORT IsoUNKNOWN_Error;
442 ULONG IsoBytesTransferred;
443 USHORT LateMissedCount;
444 USHORT HWIsoMissedCount;
445 ULONG Reserved7[8];
446 } HCD_ISO_STAT_COUNTERS, *PHCD_ISO_STAT_COUNTERS;
447
448 typedef struct _HCD_STAT_COUNTERS {
449 ULONG BytesTransferred;
450 USHORT IsoMissedCount;
451 USHORT DataOverrunErrorCount;
452 USHORT CrcErrorCount;
453 USHORT ScheduleOverrunCount;
454 USHORT TimeoutErrorCount;
455 USHORT InternalHcErrorCount;
456 USHORT BufferOverrunErrorCount;
457 USHORT SWErrorCount;
458 USHORT StallPidCount;
459 USHORT PortDisableCount;
460 } HCD_STAT_COUNTERS, *PHCD_STAT_COUNTERS;
461
462 typedef struct _HCD_STAT_INFORMATION_1 {
463 ULONG Reserved1;
464 ULONG Reserved2;
465 ULONG ResetCounters;
466 LARGE_INTEGER TimeRead;
467 HCD_STAT_COUNTERS Counters;
468 } HCD_STAT_INFORMATION_1, *PHCD_STAT_INFORMATION_1;
469
470 typedef struct _HCD_STAT_INFORMATION_2 {
471 ULONG Reserved1;
472 ULONG Reserved2;
473 ULONG ResetCounters;
474 LARGE_INTEGER TimeRead;
475 LONG LockedMemoryUsed;
476 HCD_STAT_COUNTERS Counters;
477 HCD_ISO_STAT_COUNTERS IsoCounters;
478 } HCD_STAT_INFORMATION_2, *PHCD_STAT_INFORMATION_2;
479
480 #define WMI_USB_DRIVER_INFORMATION 0
481 #define WMI_USB_DRIVER_NOTIFICATION 1
482 #define WMI_USB_POWER_DEVICE_ENABLE 2
483 #define WMI_USB_HUB_NODE_INFORMATION 4
484
485 #define WMI_USB_PERFORMANCE_INFORMATION 1
486 #define WMI_USB_DEVICE_NODE_INFORMATION 2
487
488 #if (_WIN32_WINNT >= 0x0501)
489
490 typedef enum _USB_NOTIFICATION_TYPE {
491 EnumerationFailure = 0,
492 InsufficentBandwidth,
493 InsufficentPower,
494 OverCurrent,
495 ResetOvercurrent,
496 AcquireBusInfo,
497 AcquireHubName,
498 AcquireControllerName,
499 HubOvercurrent,
500 HubPowerChange,
501 HubNestedTooDeeply,
502 ModernDeviceInLegacyHub
503 } USB_NOTIFICATION_TYPE;
504
505 #else
506
507 typedef enum _USB_NOTIFICATION_TYPE {
508 EnumerationFailure = 0,
509 InsufficentBandwidth,
510 InsufficentPower,
511 OverCurrent,
512 ResetOvercurrent,
513 AcquireBusInfo,
514 AcquireHubName,
515 AcquireControllerName,
516 HubOvercurrent,
517 HubPowerChange
518 } USB_NOTIFICATION_TYPE;
519
520 #endif
521
522 typedef struct _USB_NOTIFICATION {
523 USB_NOTIFICATION_TYPE NotificationType;
524 } USB_NOTIFICATION, *PUSB_NOTIFICATION;
525
526 typedef struct _USB_CONNECTION_NOTIFICATION {
527 USB_NOTIFICATION_TYPE NotificationType;
528 ULONG ConnectionNumber;
529 ULONG RequestedBandwidth;
530 ULONG EnumerationFailReason;
531 ULONG PowerRequested;
532 ULONG HubNameLength;
533 } USB_CONNECTION_NOTIFICATION, *PUSB_CONNECTION_NOTIFICATION;
534
535 typedef struct _USB_BUS_NOTIFICATION {
536 USB_NOTIFICATION_TYPE NotificationType;
537 ULONG TotalBandwidth;
538 ULONG ConsumedBandwidth;
539 ULONG ControllerNameLength;
540 } USB_BUS_NOTIFICATION, *PUSB_BUS_NOTIFICATION;
541
542 typedef struct _USB_ACQUIRE_INFO {
543 USB_NOTIFICATION_TYPE NotificationType;
544 ULONG TotalSize;
545 WCHAR Buffer[ANYSIZE_ARRAY];
546 } USB_ACQUIRE_INFO, *PUSB_ACQUIRE_INFO;
547
548 #if (_WIN32_WINNT >= 0x0600)
549
550 #define USB_NODE_INFO_SIG 'USBN'
551
552 typedef enum _USB_WMI_DEVICE_NODE_TYPE {
553 UsbDevice,
554 HubDevice,
555 CompositeDevice,
556 UsbController
557 } USB_WMI_DEVICE_NODE_TYPE, *PUSB_WMI_DEVICE_NODE_TYPE;
558
559 typedef struct _USB_DEVICE_STATE {
560 ULONG DeviceConnected:1;
561 ULONG DeviceStarted:1;
562 } USB_DEVICE_STATE, *PUSB_DEVICE_STATE;
563
564 typedef struct _USB_HUB_PORT_INFORMATION {
565 USB_DEVICE_STATE DeviceState;
566 USHORT PortNumber;
567 USHORT DeviceAddress;
568 ULONG ConnectionIndex;
569 USB_CONNECTION_STATUS ConnectionStatus;
570 } USB_HUB_PORT_INFORMATION, *PUSB_HUB_PORT_INFORMATION;
571
572 typedef struct _USB_HUB_DEVICE_INFO {
573 USB_HUB_DESCRIPTOR HubDescriptor;
574 ULONG HubNumber;
575 USHORT DeviceAddress;
576 BOOLEAN HubIsSelfPowered;
577 BOOLEAN HubIsRootHub;
578 USB_HUB_CAPABILITIES HubCapabilities;
579 ULONG NumberOfHubPorts;
580 USB_HUB_PORT_INFORMATION PortInfo[ANYSIZE_ARRAY];
581 } USB_HUB_DEVICE_INFO, *PUSB_HUB_DEVICE_INFO;
582
583 typedef struct _USB_COMPOSITE_FUNCTION_INFO {
584 UCHAR FunctionNumber;
585 UCHAR BaseInterfaceNumber;
586 UCHAR NumberOfInterfaces;
587 BOOLEAN FunctionIsIdle;
588 } USB_COMPOSITE_FUNCTION_INFO, *PUSB_COMPOSITE_FUNCTION_INFO;
589
590 typedef struct _USB_COMPOSITE_DEVICE_INFO {
591 USB_DEVICE_DESCRIPTOR DeviceDescriptor;
592 USB_CONFIGURATION_DESCRIPTOR CurrentConfigDescriptor;
593 UCHAR CurrentConfigurationValue;
594 UCHAR NumberOfFunctions;
595 USB_COMPOSITE_FUNCTION_INFO FunctionInfo[ANYSIZE_ARRAY];
596 } USB_COMPOSITE_DEVICE_INFO, *PUSB_COMPOSITE_DEVICE_INFO;
597
598 typedef struct _USB_CONTROLLER_DEVICE_INFO {
599 ULONG PciVendorId;
600 ULONG PciDeviceId;
601 ULONG PciRevision;
602 ULONG NumberOfRootPorts;
603 ULONG HcFeatureFlags;
604 } USB_CONTROLLER_DEVICE_INFO, *PUSB_CONTROLLER_DEVICE_INFO;
605
606 typedef struct _USB_DEVICE_INFO {
607 USB_DEVICE_STATE DeviceState;
608 USHORT PortNumber;
609 USB_DEVICE_DESCRIPTOR DeviceDescriptor;
610 UCHAR CurrentConfigurationValue;
611 USB_DEVICE_SPEED Speed;
612 USHORT DeviceAddress;
613 ULONG ConnectionIndex;
614 USB_CONNECTION_STATUS ConnectionStatus;
615 WCHAR PnpHardwareId[128];
616 WCHAR PnpCompatibleId[128];
617 WCHAR SerialNumberId[128];
618 WCHAR PnpDeviceDescription[128];
619 ULONG NumberOfOpenPipes;
620 USB_PIPE_INFO PipeList[ANYSIZE_ARRAY];
621 } USB_DEVICE_INFO, *PUSB_DEVICE_INFO;
622
623 typedef struct _USB_DEVICE_NODE_INFO {
624 ULONG Sig;
625 ULONG LengthInBytes;
626 WCHAR DeviceDescription[40];
627 USB_WMI_DEVICE_NODE_TYPE NodeType;
628 USB_TOPOLOGY_ADDRESS BusAddress;
629 union{
630 USB_DEVICE_INFO UsbDeviceInfo;
631 USB_HUB_DEVICE_INFO HubDeviceInfo;
632 USB_COMPOSITE_DEVICE_INFO CompositeDeviceInfo;
633 USB_CONTROLLER_DEVICE_INFO ControllerDeviceInfo;
634 UCHAR DeviceInformation[4];
635 };
636 } USB_DEVICE_NODE_INFO, *PUSB_DEVICE_NODE_INFO;
637
638 typedef struct _USB_DEVICE_PERFORMANCE_INFO {
639 ULONG BulkBytes;
640 ULONG ControlDataBytes;
641 ULONG IsoBytes;
642 ULONG InterruptBytes;
643 ULONG BulkUrbCount;
644 ULONG ControlUrbCount;
645 ULONG IsoUrbCount;
646 ULONG InterruptUrbCount;
647 ULONG AllocedInterrupt[6];
648 ULONG AllocedIso;
649 ULONG Total32secBandwidth;
650 ULONG TotalTtBandwidth;
651 WCHAR DeviceDescription[60];
652 USB_DEVICE_SPEED DeviceSpeed;
653 ULONG TotalIsoLatency;
654 ULONG DroppedIsoPackets;
655 ULONG TransferErrors;
656 ULONG PciInterruptCount;
657 ULONG HcIdleState;
658 ULONG HcAsyncIdleState;
659 ULONG HcAsyncCacheFlushCount;
660 ULONG HcPeriodicIdleState;
661 ULONG HcPeriodicCacheFlushCount;
662 } USB_DEVICE_PERFORMANCE_INFO, *PUSB_DEVICE_PERFORMANCE_INFO;
663
664 #endif
665
666 #include <poppack.h>
667
668 #endif /* USB_KERNEL_IOCTL */
669
670 #ifdef __cplusplus
671 }
672 #endif