Sync with trunk head (r48786)
[reactos.git] / drivers / usb / usbhub / usbhub.h
1 #include <ntddk.h>
2 #include <hubbusif.h>
3 #include <usbbusif.h>
4 #include <usbioctl.h>
5 #include <usb.h>
6 #include <debug.h>
7 //BROKEN: #include <usbprotocoldefs.h>
8
9 #define USB_HUB_TAG 'hbsu'
10 #define USB_MAXCHILDREN 127
11
12 /* Lifted from broken header above */
13 #define C_HUB_LOCAL_POWER 0
14 #define C_HUB_OVER_CURRENT 1
15 #define PORT_CONNECTION 0
16 #define PORT_ENABLE 1
17 #define PORT_SUSPEND 2
18 #define PORT_OVER_CURRENT 3
19 #define PORT_RESET 4
20 #define PORT_POWER 8
21 #define PORT_LOW_SPEED 9
22 #define C_PORT_CONNECTION 16
23 #define C_PORT_ENABLE 17
24 #define C_PORT_SUSPEND 18
25 #define C_PORT_OVER_CURRENT 19
26 #define C_PORT_RESET 20
27 #define PORT_TEST 21
28 #define PORT_INDICATOR 22
29
30 typedef struct _USB_ENDPOINT
31 {
32 ULONG Flags;
33 LIST_ENTRY UrbList;
34 struct _USB_INTERFACE *Interface;
35 USB_ENDPOINT_DESCRIPTOR EndPointDescriptor;
36 } USB_ENDPOINT, *PUSB_ENDPOINT;
37
38 typedef struct _USB_INTERFACE
39 {
40 struct _USB_CONFIGURATION *Config;
41 USB_INTERFACE_DESCRIPTOR InterfaceDescriptor;
42 USB_ENDPOINT *EndPoints[];
43 } USB_INTERFACE, *PUSB_INTERFACE;
44
45 typedef struct _USB_CONFIGURATION
46 {
47 struct _USB_DEVICE *Device;
48 USB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor;
49 USB_INTERFACE *Interfaces[];
50 } USB_CONFIGURATION, *PUSB_CONFIGURATION;
51
52 typedef struct _USB_DEVICE
53 {
54 UCHAR Address;
55 ULONG Port;
56 PVOID ParentDevice;
57 BOOLEAN IsHub;
58 USB_DEVICE_SPEED DeviceSpeed;
59 USB_DEVICE_TYPE DeviceType;
60 USB_DEVICE_DESCRIPTOR DeviceDescriptor;
61 USB_CONFIGURATION *ActiveConfig;
62 USB_INTERFACE *ActiveInterface;
63 USB_CONFIGURATION **Configs;
64 } USB_DEVICE, *PUSB_DEVICE;
65
66 typedef struct _HUB_CHILDDEVICE_EXTENSION
67 {
68 BOOLEAN IsFDO;
69 PDEVICE_OBJECT Parent;
70 PWCHAR DeviceId; // REG_SZ
71 PWCHAR InstanceId; // REG_SZ
72 PWCHAR HardwareIds; // REG_MULTI_SZ
73 PWCHAR CompatibleIds; // REG_MULTI_SZ
74 PWCHAR TextDescription;
75 UNICODE_STRING SymbolicLinkName;
76 } HUB_CHILDDEVICE_EXTENSION, *PHUB_CHILDDEVICE_EXTENSION;
77
78 typedef struct _HUB_DEVICE_EXTENSION
79 {
80 BOOLEAN IsFDO;
81 USB_DEVICE* dev;
82 PDEVICE_OBJECT LowerDevice;
83 ULONG ChildCount;
84 PDEVICE_OBJECT Children[USB_MAXCHILDREN];
85
86 PUSB_DEVICE UsbChildren[USB_MAXCHILDREN];
87
88 PUSB_DEVICE RootHubUsbDevice;
89
90 PDEVICE_OBJECT RootHubPdo;
91 PDEVICE_OBJECT RootHubFdo;
92
93 ULONG HubCount;
94
95 USHORT PortStatus[256];
96
97 USB_BUS_INTERFACE_HUB_V5 HubInterface;
98 USB_BUS_INTERFACE_USBDI_V2 UsbDInterface;
99
100 USB_HUB_DESCRIPTOR HubDescriptor;
101 USB_DEVICE_DESCRIPTOR HubDeviceDescriptor;
102
103 USB_CONFIGURATION_DESCRIPTOR HubConfigDescriptor;
104 USB_INTERFACE_DESCRIPTOR HubInterfaceDescriptor;
105 USB_ENDPOINT_DESCRIPTOR HubEndPointDescriptor;
106
107 USB_EXTHUB_INFORMATION_0 UsbExtHubInfo;
108 USB_DEVICE_INFORMATION_0 DeviceInformation;
109
110 WORK_QUEUE_ITEM WorkItem;
111
112 USBD_CONFIGURATION_HANDLE ConfigurationHandle;
113 USBD_PIPE_HANDLE PipeHandle;
114
115 UNICODE_STRING SymbolicLinkName;
116 } HUB_DEVICE_EXTENSION, *PHUB_DEVICE_EXTENSION;
117
118 /* createclose.c */
119 NTSTATUS NTAPI
120 UsbhubCreate(
121 IN PDEVICE_OBJECT DeviceObject,
122 IN PIRP Irp);
123
124 NTSTATUS NTAPI
125 UsbhubClose(
126 IN PDEVICE_OBJECT DeviceObject,
127 IN PIRP Irp);
128
129 NTSTATUS NTAPI
130 UsbhubCleanup(
131 IN PDEVICE_OBJECT DeviceObject,
132 IN PIRP Irp);
133
134 /* fdo.c */
135 NTSTATUS NTAPI
136 UsbhubPnpFdo(
137 IN PDEVICE_OBJECT DeviceObject,
138 IN PIRP Irp);
139
140 NTSTATUS
141 UsbhubDeviceControlFdo(
142 IN PDEVICE_OBJECT DeviceObject,
143 IN PIRP Irp);
144
145 /* misc.c */
146 NTSTATUS
147 ForwardIrpAndWait(
148 IN PDEVICE_OBJECT DeviceObject,
149 IN PIRP Irp);
150
151 NTSTATUS NTAPI
152 ForwardIrpAndForget(
153 IN PDEVICE_OBJECT DeviceObject,
154 IN PIRP Irp);
155
156 NTSTATUS
157 UsbhubDuplicateUnicodeString(
158 OUT PUNICODE_STRING Destination,
159 IN PUNICODE_STRING Source,
160 IN POOL_TYPE PoolType);
161
162 NTSTATUS
163 UsbhubInitMultiSzString(
164 OUT PUNICODE_STRING Destination,
165 .../* list of PCSZ */);
166
167 /* pdo.c */
168 NTSTATUS NTAPI
169 UsbhubPnpPdo(
170 IN PDEVICE_OBJECT DeviceObject,
171 IN PIRP Irp);
172
173 NTSTATUS
174 UsbhubInternalDeviceControlPdo(
175 IN PDEVICE_OBJECT DeviceObject,
176 IN PIRP Irp);