[LICCPA] Fix translation and align dialog controls
[reactos.git] / drivers / usb / usbhub / usbhub.h
1 #ifndef _USBHUB_H_
2 #define _USBHUB_H_
3
4 #include <wdm.h>
5 #include <hubbusif.h>
6 #include <usbbusif.h>
7 #include <usbdlib.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 _PORT_STATUS_CHANGE
31 {
32 USHORT Status;
33 USHORT Change;
34 } PORT_STATUS_CHANGE, *PPORT_STATUS_CHANGE;
35
36 typedef struct _WORK_ITEM_DATA
37 {
38 WORK_QUEUE_ITEM WorkItem;
39 PVOID Context;
40 } WORK_ITEM_DATA, *PWORK_ITEM_DATA;
41
42
43 //
44 // Definitions for device's PnP state tracking, all this states are described
45 // in PnP Device States diagram of DDK documentation.
46 //
47 typedef enum _DEVICE_PNP_STATE {
48
49 NotStarted = 0, // Not started
50 Started, // After handling of START_DEVICE IRP
51 StopPending, // After handling of QUERY_STOP IRP
52 Stopped, // After handling of STOP_DEVICE IRP
53 RemovePending, // After handling of QUERY_REMOVE IRP
54 SurpriseRemovePending, // After handling of SURPRISE_REMOVE IRP
55 Deleted, // After handling of REMOVE_DEVICE IRP
56 UnKnown // Unknown state
57
58 } DEVICE_PNP_STATE;
59
60 #define INITIALIZE_PNP_STATE(Data) \
61 (Data).PnPState = NotStarted;\
62 (Data).PreviousPnPState = NotStarted;
63
64 #define SET_NEW_PNP_STATE(Data, state) \
65 (Data).PreviousPnPState = (Data).PnPState;\
66 (Data).PnPState = (state);
67
68 #define RESTORE_PREVIOUS_PNP_STATE(Data) \
69 (Data).PnPState = (Data).PreviousPnPState;
70
71 typedef struct
72 {
73 BOOLEAN IsFDO;
74 // We'll track device PnP state via this variables
75 DEVICE_PNP_STATE PnPState;
76 DEVICE_PNP_STATE PreviousPnPState;
77 // Remove lock
78 IO_REMOVE_LOCK RemoveLock;
79 } COMMON_DEVICE_EXTENSION, *PCOMMON_DEVICE_EXTENSION;
80
81 typedef struct _HUB_CHILDDEVICE_EXTENSION
82 {
83 COMMON_DEVICE_EXTENSION Common;
84 PDEVICE_OBJECT ParentDeviceObject;
85 PUSB_DEVICE_HANDLE UsbDeviceHandle;
86 ULONG PortNumber;
87 UNICODE_STRING usDeviceId;
88 UNICODE_STRING usInstanceId;
89 UNICODE_STRING usHardwareIds;
90 UNICODE_STRING usCompatibleIds;
91 UNICODE_STRING usTextDescription;
92 UNICODE_STRING usLocationInformation;
93 USB_DEVICE_DESCRIPTOR DeviceDesc;
94 PUSB_CONFIGURATION_DESCRIPTOR FullConfigDesc;
95 UNICODE_STRING SymbolicLinkName;
96 USB_BUS_INTERFACE_USBDI_V2 DeviceInterface;
97 USB_DEVICE_INFORMATION_0 DeviceInformation;
98 } HUB_CHILDDEVICE_EXTENSION, *PHUB_CHILDDEVICE_EXTENSION;
99
100 typedef struct _HUB_DEVICE_EXTENSION
101 {
102 COMMON_DEVICE_EXTENSION Common;
103 PDEVICE_OBJECT LowerDeviceObject;
104 ULONG ChildCount;
105 PDEVICE_OBJECT ChildDeviceObject[USB_MAXCHILDREN];
106 PDEVICE_OBJECT RootHubPhysicalDeviceObject;
107 PDEVICE_OBJECT RootHubFunctionalDeviceObject;
108
109 KGUARDED_MUTEX HubMutexLock;
110
111 ULONG NumberOfHubs;
112 KEVENT ResetComplete;
113
114 PORT_STATUS_CHANGE *PortStatusChange;
115 URB PendingSCEUrb;
116 PIRP PendingSCEIrp;
117
118 USB_BUS_INTERFACE_HUB_V5 HubInterface;
119 USB_BUS_INTERFACE_USBDI_V2 UsbDInterface;
120
121 USB_HUB_DESCRIPTOR HubDescriptor;
122 USB_DEVICE_DESCRIPTOR HubDeviceDescriptor;
123 USB_CONFIGURATION_DESCRIPTOR HubConfigDescriptor;
124 USB_INTERFACE_DESCRIPTOR HubInterfaceDescriptor;
125 USB_ENDPOINT_DESCRIPTOR HubEndPointDescriptor;
126
127 USB_EXTHUB_INFORMATION_0 UsbExtHubInfo;
128 USB_DEVICE_INFORMATION_0 DeviceInformation;
129
130 USBD_CONFIGURATION_HANDLE ConfigurationHandle;
131 USBD_PIPE_HANDLE PipeHandle;
132 PVOID RootHubHandle;
133
134 UNICODE_STRING SymbolicLinkName;
135 ULONG InstanceCount;
136
137 } HUB_DEVICE_EXTENSION, *PHUB_DEVICE_EXTENSION;
138
139 // createclose.c
140 NTSTATUS NTAPI
141 USBHUB_Create(
142 IN PDEVICE_OBJECT DeviceObject,
143 IN PIRP Irp);
144
145 NTSTATUS NTAPI
146 USBHUB_Close(
147 IN PDEVICE_OBJECT DeviceObject,
148 IN PIRP Irp);
149
150 NTSTATUS NTAPI
151 USBHUB_Cleanup(
152 IN PDEVICE_OBJECT DeviceObject,
153 IN PIRP Irp);
154
155 // fdo.c
156 NTSTATUS
157 USBHUB_FdoHandleDeviceControl(
158 PDEVICE_OBJECT DeviceObject,
159 PIRP Irp);
160
161 NTSTATUS
162 USBHUB_FdoHandlePnp(
163 PDEVICE_OBJECT DeviceObject,
164 PIRP Irp);
165
166 // misc.c
167 NTSTATUS
168 ForwardIrpAndWait(
169 IN PDEVICE_OBJECT DeviceObject,
170 IN PIRP Irp);
171
172 NTSTATUS
173 ForwardIrpAndForget(
174 IN PDEVICE_OBJECT DeviceObject,
175 IN PIRP Irp);
176
177 NTSTATUS
178 SubmitRequestToRootHub(
179 IN PDEVICE_OBJECT RootHubDeviceObject,
180 IN ULONG IoControlCode,
181 OUT PVOID OutParameter1,
182 OUT PVOID OutParameter2);
183
184 NTSTATUS
185 FDO_QueryInterface(
186 IN PDEVICE_OBJECT DeviceObject,
187 IN OUT PUSB_BUS_INTERFACE_USBDI_V2 Interface);
188
189 // pdo.c
190 NTSTATUS
191 USBHUB_PdoHandlePnp(
192 PDEVICE_OBJECT DeviceObject,
193 PIRP Irp);
194
195 NTSTATUS
196 USBHUB_PdoHandleInternalDeviceControl(
197 PDEVICE_OBJECT DeviceObject,
198 PIRP Irp);
199
200 VOID
201 DumpDeviceDescriptor(
202 PUSB_DEVICE_DESCRIPTOR DeviceDescriptor);
203
204 VOID
205 DumpConfigurationDescriptor(
206 PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor);
207
208 VOID
209 DumpFullConfigurationDescriptor(
210 PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor);
211
212 NTSTATUS
213 GetPortStatusAndChange(
214 IN PDEVICE_OBJECT RootHubDeviceObject,
215 IN ULONG PortId,
216 OUT PPORT_STATUS_CHANGE StatusChange);
217
218 // hub_fdo.c
219
220 NTSTATUS
221 USBHUB_ParentFDOStartDevice(
222 IN PDEVICE_OBJECT DeviceObject,
223 IN PIRP Irp);
224
225 #endif /* _USBHUB_H_ */