Move more stuff to wdm.h
[reactos.git] / include / ddk / usbioctl.h
1 /*
2 * usbioctl.h
3 *
4 * USB IOCTL interface.
5 *
6 * This file is part of the w32api 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 #ifndef __USBIOCTL_H
24 #define __USBIOCTL_H
25
26 #include "usb100.h"
27 #include "usbiodef.h"
28
29 #ifdef __cplusplus
30 extern "C" {
31 #endif
32
33 #define USBD_PORT_ENABLED 1
34 #define USBD_PORT_CONNECTED 2
35
36 #define IOCTL_INTERNAL_USB_CYCLE_PORT \
37 CTL_CODE(FILE_DEVICE_USB, USB_CYCLE_PORT, METHOD_NEITHER, FILE_ANY_ACCESS)
38
39 #define IOCTL_INTERNAL_USB_ENABLE_PORT \
40 CTL_CODE(FILE_DEVICE_USB, USB_ENABLE_PORT, METHOD_NEITHER, FILE_ANY_ACCESS)
41
42 #define IOCTL_INTERNAL_USB_GET_BUS_INFO \
43 CTL_CODE(FILE_DEVICE_USB, USB_GET_BUS_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS)
44
45 #define IOCTL_INTERNAL_USB_GET_BUSGUID_INFO \
46 CTL_CODE(FILE_DEVICE_USB, USB_GET_BUSGUID_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS)
47
48 #define IOCTL_INTERNAL_USB_GET_CONTROLLER_NAME \
49 CTL_CODE(FILE_DEVICE_USB, USB_GET_CONTROLLER_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
50
51 #define IOCTL_INTERNAL_USB_GET_DEVICE_HANDLE \
52 CTL_CODE(FILE_DEVICE_USB, USB_GET_DEVICE_HANDLE, METHOD_NEITHER, FILE_ANY_ACCESS)
53
54 #define IOCTL_INTERNAL_USB_GET_HUB_COUNT \
55 CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_COUNT, METHOD_NEITHER, FILE_ANY_ACCESS)
56
57 #define IOCTL_INTERNAL_USB_GET_HUB_NAME \
58 CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
59
60 #define IOCTL_INTERNAL_USB_GET_PARENT_HUB_INFO \
61 CTL_CODE(FILE_DEVICE_USB, USB_GET_PARENT_HUB_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS)
62
63 #define IOCTL_INTERNAL_USB_GET_PORT_STATUS \
64 CTL_CODE(FILE_DEVICE_USB, USB_GET_PORT_STATUS, METHOD_NEITHER, FILE_ANY_ACCESS)
65
66 #define IOCTL_INTERNAL_USB_RESET_PORT \
67 CTL_CODE(FILE_DEVICE_USB, USB_RESET_PORT, METHOD_NEITHER, FILE_ANY_ACCESS)
68
69 #define IOCTL_INTERNAL_USB_GET_ROOTHUB_PDO \
70 CTL_CODE(FILE_DEVICE_USB, USB_GET_ROOTHUB_PDO, METHOD_NEITHER, FILE_ANY_ACCESS)
71
72 #define IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION \
73 CTL_CODE(FILE_DEVICE_USB, USB_IDLE_NOTIFICATION, METHOD_NEITHER, FILE_ANY_ACCESS)
74
75 #define IOCTL_INTERNAL_USB_SUBMIT_URB \
76 CTL_CODE(FILE_DEVICE_USB, USB_SUBMIT_URB, METHOD_NEITHER, FILE_ANY_ACCESS)
77
78
79 #define IOCTL_USB_DIAG_IGNORE_HUBS_ON \
80 CTL_CODE(FILE_DEVICE_USB, USB_DIAG_IGNORE_HUBS_ON, METHOD_BUFFERED, FILE_ANY_ACCESS)
81
82 #define IOCTL_USB_DIAG_IGNORE_HUBS_OFF \
83 CTL_CODE(FILE_DEVICE_USB, USB_DIAG_IGNORE_HUBS_OFF, METHOD_BUFFERED, FILE_ANY_ACCESS)
84
85 #define IOCTL_USB_DIAGNOSTIC_MODE_OFF \
86 CTL_CODE(FILE_DEVICE_USB, HCD_DIAGNOSTIC_MODE_OFF, METHOD_BUFFERED, FILE_ANY_ACCESS)
87
88 #define IOCTL_USB_DIAGNOSTIC_MODE_ON \
89 CTL_CODE(FILE_DEVICE_USB, HCD_DIAGNOSTIC_MODE_ON, METHOD_BUFFERED, FILE_ANY_ACCESS)
90
91 #define IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION \
92 CTL_CODE(FILE_DEVICE_USB, USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION, METHOD_BUFFERED, FILE_ANY_ACCESS)
93
94 #define IOCTL_USB_GET_HUB_CAPABILITIES \
95 CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_CAPABILITIES, METHOD_BUFFERED, FILE_ANY_ACCESS)
96
97 #define IOCTL_USB_GET_ROOT_HUB_NAME \
98 CTL_CODE(FILE_DEVICE_USB, HCD_GET_ROOT_HUB_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
99
100 #define IOCTL_GET_HCD_DRIVERKEY_NAME \
101 CTL_CODE(FILE_DEVICE_USB, HCD_GET_DRIVERKEY_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
102
103 #define IOCTL_USB_GET_NODE_INFORMATION \
104 CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_INFORMATION, METHOD_BUFFERED, FILE_ANY_ACCESS)
105
106 #define IOCTL_USB_GET_NODE_CONNECTION_INFORMATION \
107 CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_INFORMATION, METHOD_BUFFERED, FILE_ANY_ACCESS)
108
109 #define IOCTL_USB_GET_NODE_CONNECTION_ATTRIBUTES \
110 CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_ATTRIBUTES, METHOD_BUFFERED, FILE_ANY_ACCESS)
111
112 #define IOCTL_USB_GET_NODE_CONNECTION_NAME \
113 CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
114
115 #define IOCTL_USB_GET_NODE_CONNECTION_DRIVERKEY_NAME \
116 CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_DRIVERKEY_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS)
117
118 #define IOCTL_USB_HCD_DISABLE_PORT \
119 CTL_CODE(FILE_DEVICE_USB, HCD_DISABLE_PORT, METHOD_BUFFERED, FILE_ANY_ACCESS)
120
121 #define IOCTL_USB_HCD_ENABLE_PORT \
122 CTL_CODE(FILE_DEVICE_USB, HCD_ENABLE_PORT, METHOD_BUFFERED, FILE_ANY_ACCESS)
123
124 #define IOCTL_USB_HCD_GET_STATS_1 \
125 CTL_CODE(FILE_DEVICE_USB, HCD_GET_STATS_1, METHOD_BUFFERED, FILE_ANY_ACCESS)
126
127 #define IOCTL_USB_HCD_GET_STATS_2 \
128 CTL_CODE(FILE_DEVICE_USB, HCD_GET_STATS_2, METHOD_BUFFERED, FILE_ANY_ACCESS)
129
130
131 typedef struct _USB_HUB_CAPABILITIES {
132 ULONG HubIs2xCapable : 1;
133 } USB_HUB_CAPABILITIES, *PUSB_HUB_CAPABILITIES;
134
135 typedef enum _USB_CONNECTION_STATUS {
136 NoDeviceConnected,
137 DeviceConnected,
138 DeviceFailedEnumeration,
139 DeviceGeneralFailure,
140 DeviceCausedOvercurrent,
141 DeviceNotEnoughPower,
142 DeviceNotEnoughBandwidth,
143 DeviceHubNestedTooDeeply,
144 DeviceInLegacyHub
145 } USB_CONNECTION_STATUS, *PUSB_CONNECTION_STATUS;
146
147 #include <pshpack1.h>
148
149 typedef struct _USB_DESCRIPTOR_REQUEST {
150 ULONG ConnectionIndex;
151 struct {
152 UCHAR bmRequest;
153 UCHAR bRequest;
154 USHORT wValue;
155 USHORT wIndex;
156 USHORT wLength;
157 } SetupPacket;
158 UCHAR Data[0];
159 } USB_DESCRIPTOR_REQUEST, *PUSB_DESCRIPTOR_REQUEST;
160
161 typedef struct _USB_HCD_DRIVERKEY_NAME {
162 ULONG ActualLength;
163 WCHAR DriverKeyName[1];
164 } USB_HCD_DRIVERKEY_NAME, *PUSB_HCD_DRIVERKEY_NAME;
165
166 typedef struct _HCD_ISO_STAT_COUNTERS {
167 USHORT LateUrbs;
168 USHORT DoubleBufferedPackets;
169 USHORT TransfersCF_5ms;
170 USHORT TransfersCF_2ms;
171 USHORT TransfersCF_1ms;
172 USHORT MaxInterruptLatency;
173 USHORT BadStartFrame;
174 USHORT StaleUrbs;
175 USHORT IsoPacketNotAccesed;
176 USHORT IsoPacketHWError;
177 USHORT SmallestUrbPacketCount;
178 USHORT LargestUrbPacketCount;
179 USHORT IsoCRC_Error;
180 USHORT IsoOVERRUN_Error;
181 USHORT IsoINTERNAL_Error;
182 USHORT IsoUNKNOWN_Error;
183 ULONG IsoBytesTransferred;
184 USHORT LateMissedCount;
185 USHORT HWIsoMissedCount;
186 ULONG Reserved7[8];
187 } HCD_ISO_STAT_COUNTERS, *PHCD_ISO_STAT_COUNTERS;
188
189 typedef struct _HCD_STAT_COUNTERS {
190 ULONG BytesTransferred;
191 USHORT IsoMissedCount;
192 USHORT DataOverrunErrorCount;
193 USHORT CrcErrorCount;
194 USHORT ScheduleOverrunCount;
195 USHORT TimeoutErrorCount;
196 USHORT InternalHcErrorCount;
197 USHORT BufferOverrunErrorCount;
198 USHORT SWErrorCount;
199 USHORT StallPidCount;
200 USHORT PortDisableCount;
201 } HCD_STAT_COUNTERS, *PHCD_STAT_COUNTERS;
202
203 typedef struct _HCD_STAT_INFORMATION_1 {
204 ULONG Reserved1;
205 ULONG Reserved2;
206 ULONG ResetCounters;
207 LARGE_INTEGER TimeRead;
208 HCD_STAT_COUNTERS Counters;
209 } HCD_STAT_INFORMATION_1, *PHCD_STAT_INFORMATION_1;
210
211 typedef struct _HCD_STAT_INFORMATION_2 {
212 ULONG Reserved1;
213 ULONG Reserved2;
214 ULONG ResetCounters;
215 LARGE_INTEGER TimeRead;
216 LONG LockedMemoryUsed;
217 HCD_STAT_COUNTERS Counters;
218 HCD_ISO_STAT_COUNTERS IsoCounters;
219 } HCD_STAT_INFORMATION_2, *PHCD_STAT_INFORMATION_2;
220
221 typedef struct _USB_HUB_INFORMATION {
222 USB_HUB_DESCRIPTOR HubDescriptor;
223 BOOLEAN HubIsBusPowered;
224 } USB_HUB_INFORMATION, *PUSB_HUB_INFORMATION;
225
226 typedef struct _USB_HUB_NAME {
227 ULONG ActualLength;
228 WCHAR HubName[1];
229 } USB_HUB_NAME, *PUSB_HUB_NAME;
230
231 typedef enum _USB_HUB_NODE {
232 UsbHub,
233 UsbMIParent
234 } USB_HUB_NODE;
235
236 typedef VOID NTAPI
237 (*USB_IDLE_CALLBACK)(
238 PVOID Context);
239
240 typedef struct _USB_IDLE_CALLBACK_INFO {
241 USB_IDLE_CALLBACK IdleCallback;
242 PVOID IdleContext;
243 } USB_IDLE_CALLBACK_INFO, *PUSB_IDLE_CALLBACK_INFO;
244
245 typedef struct _USB_NODE_CONNECTION_ATTRIBUTES {
246 ULONG ConnectionIndex;
247 USB_CONNECTION_STATUS ConnectionStatus;
248 ULONG PortAttributes;
249 } USB_NODE_CONNECTION_ATTRIBUTES, *PUSB_NODE_CONNECTION_ATTRIBUTES;
250
251 typedef struct _USB_NODE_CONNECTION_DRIVERKEY_NAME {
252 ULONG ConnectionIndex;
253 ULONG ActualLength;
254 WCHAR DriverKeyName[1];
255 } USB_NODE_CONNECTION_DRIVERKEY_NAME, *PUSB_NODE_CONNECTION_DRIVERKEY_NAME;
256
257 typedef struct _USB_PIPE_INFO {
258 USB_ENDPOINT_DESCRIPTOR EndpointDescriptor;
259 ULONG ScheduleOffset;
260 } USB_PIPE_INFO, *PUSB_PIPE_INFO;
261
262 typedef struct _USB_NODE_CONNECTION_INFORMATION {
263 ULONG ConnectionIndex;
264 USB_DEVICE_DESCRIPTOR DeviceDescriptor;
265 UCHAR CurrentConfigurationValue;
266 BOOLEAN LowSpeed;
267 BOOLEAN DeviceIsHub;
268 USHORT DeviceAddress;
269 ULONG NumberOfOpenPipes;
270 USB_CONNECTION_STATUS ConnectionStatus;
271 USB_PIPE_INFO PipeList[0];
272 } USB_NODE_CONNECTION_INFORMATION, *PUSB_NODE_CONNECTION_INFORMATION;
273
274 typedef struct _USB_NODE_CONNECTION_NAME {
275 ULONG ConnectionIndex;
276 ULONG ActualLength;
277 WCHAR NodeName[1];
278 } USB_NODE_CONNECTION_NAME, *PUSB_NODE_CONNECTION_NAME;
279
280 typedef struct _USB_MI_PARENT_INFORMATION {
281 ULONG NumberOfInterfaces;
282 } USB_MI_PARENT_INFORMATION, *PUSB_MI_PARENT_INFORMATION;
283
284 typedef struct _USB_NODE_INFORMATION {
285 USB_HUB_NODE NodeType;
286 union {
287 USB_HUB_INFORMATION HubInformation;
288 USB_MI_PARENT_INFORMATION MiParentInformation;
289 } u;
290 } USB_NODE_INFORMATION, *PUSB_NODE_INFORMATION;
291
292 #define WMI_USB_DRIVER_INFORMATION 0
293 #define WMI_USB_DRIVER_NOTIFICATION 1
294 #define WMI_USB_POWER_DEVICE_ENABLE 2
295
296 typedef enum _USB_NOTIFICATION_TYPE {
297 EnumerationFailure = 0,
298 InsufficentBandwidth,
299 InsufficentPower,
300 OverCurrent,
301 ResetOvercurrent,
302 AcquireBusInfo,
303 AcquireHubName,
304 AcquireControllerName,
305 HubOvercurrent,
306 HubPowerChange,
307 HubNestedTooDeeply,
308 ModernDeviceInLegacyHub
309 } USB_NOTIFICATION_TYPE;
310
311 typedef struct _USB_ACQUIRE_INFO {
312 USB_NOTIFICATION_TYPE NotificationType;
313 ULONG TotalSize;
314 WCHAR Buffer[1];
315 } USB_ACQUIRE_INFO, *PUSB_ACQUIRE_INFO;
316
317 typedef struct _USB_NOTIFICATION {
318 USB_NOTIFICATION_TYPE NotificationType;
319 } USB_NOTIFICATION, *PUSB_NOTIFICATION;
320
321 typedef struct _USB_BUS_NOTIFICATION {
322 USB_NOTIFICATION_TYPE NotificationType;
323 ULONG TotalBandwidth;
324 ULONG ConsumedBandwidth;
325 ULONG ControllerNameLength;
326 } USB_BUS_NOTIFICATION, *PUSB_BUS_NOTIFICATION;
327
328 typedef struct _USB_CONNECTION_NOTIFICATION {
329 USB_NOTIFICATION_TYPE NotificationType;
330 ULONG ConnectionNumber;
331 ULONG RequestedBandwidth;
332 ULONG EnumerationFailReason;
333 ULONG PowerRequested;
334 ULONG HubNameLength;
335 } USB_CONNECTION_NOTIFICATION, *PUSB_CONNECTION_NOTIFICATION;
336
337 typedef struct _USB_ROOT_HUB_NAME {
338 ULONG ActualLength;
339 WCHAR RootHubName[1];
340 } USB_ROOT_HUB_NAME, *PUSB_ROOT_HUB_NAME;
341
342 #include <poppack.h>
343
344 #ifdef __cplusplus
345 }
346 #endif
347
348 #endif /* __USBIOCTL_H */