ac1479c9fb5e76b694591e4717441cd67c3650fe
[reactos.git] / drivers / usb / usbhub_new / usbhub.h
1 #pragma once
2
3 #include <ntifs.h>
4 #include <ntddk.h>
5 #include <wdmguid.h>
6 #include <hubbusif.h>
7 #include <usbbusif.h>
8 #include <usbioctl.h>
9 #include <usb.h>
10 #include <stdio.h>
11 #include <usbdlib.h>
12 #include <debug.h>
13 //BROKEN: #include <usbprotocoldefs.h>
14 #include <pseh/pseh2.h>
15
16 #define USB_HUB_TAG 'hbsu'
17 #define USB_MAXCHILDREN 127
18
19 // Lifted from broken header above
20 #define C_HUB_LOCAL_POWER 0
21 #define C_HUB_OVER_CURRENT 1
22 #define PORT_CONNECTION 0
23 #define PORT_ENABLE 1
24 #define PORT_SUSPEND 2
25 #define PORT_OVER_CURRENT 3
26 #define PORT_RESET 4
27 #define PORT_POWER 8
28 #define PORT_LOW_SPEED 9
29 #define C_PORT_CONNECTION 16
30 #define C_PORT_ENABLE 17
31 #define C_PORT_SUSPEND 18
32 #define C_PORT_OVER_CURRENT 19
33 #define C_PORT_RESET 20
34 #define PORT_TEST 21
35 #define PORT_INDICATOR 22
36
37 typedef struct _PORT_STATUS_CHANGE
38 {
39 USHORT Status;
40 USHORT Change;
41 } PORT_STATUS_CHANGE, *PPORT_STATUS_CHANGE;
42
43 typedef struct _WORK_ITEM_DATA
44 {
45 WORK_QUEUE_ITEM WorkItem;
46 PVOID Context;
47 } WORK_ITEM_DATA, *PWORK_ITEM_DATA;
48
49 typedef struct
50 {
51 BOOLEAN IsFDO;
52 } COMMON_DEVICE_EXTENSION, *PCOMMON_DEVICE_EXTENSION;
53
54 typedef struct _HUB_CHILDDEVICE_EXTENSION
55 {
56 COMMON_DEVICE_EXTENSION Common;
57 PDEVICE_OBJECT ParentDeviceObject;
58 PUSB_DEVICE_HANDLE UsbDeviceHandle;
59 ULONG PortNumber;
60 UNICODE_STRING usDeviceId;
61 UNICODE_STRING usInstanceId;
62 UNICODE_STRING usHardwareIds;
63 UNICODE_STRING usCompatibleIds;
64 UNICODE_STRING usTextDescription;
65 UNICODE_STRING usLocationInformation;
66 USB_DEVICE_DESCRIPTOR DeviceDesc;
67 PUSB_CONFIGURATION_DESCRIPTOR FullConfigDesc;
68 UNICODE_STRING SymbolicLinkName;
69 } HUB_CHILDDEVICE_EXTENSION, *PHUB_CHILDDEVICE_EXTENSION;
70
71 typedef struct _HUB_DEVICE_EXTENSION
72 {
73 COMMON_DEVICE_EXTENSION Common;
74 PDEVICE_OBJECT LowerDeviceObject;
75 ULONG ChildCount;
76 PDEVICE_OBJECT ChildDeviceObject[USB_MAXCHILDREN];
77 PDEVICE_OBJECT RootHubPhysicalDeviceObject;
78 PDEVICE_OBJECT RootHubFunctionalDeviceObject;
79
80 ULONG NumberOfHubs;
81
82 PORT_STATUS_CHANGE *PortStatusChange;
83 URB PendingSCEUrb;
84 PIRP PendingSCEIrp;
85
86 USB_BUS_INTERFACE_HUB_V5 HubInterface;
87 USB_BUS_INTERFACE_USBDI_V2 UsbDInterface;
88
89 USB_HUB_DESCRIPTOR HubDescriptor;
90 USB_DEVICE_DESCRIPTOR HubDeviceDescriptor;
91 USB_CONFIGURATION_DESCRIPTOR HubConfigDescriptor;
92 USB_INTERFACE_DESCRIPTOR HubInterfaceDescriptor;
93 USB_ENDPOINT_DESCRIPTOR HubEndPointDescriptor;
94
95 USB_EXTHUB_INFORMATION_0 UsbExtHubInfo;
96 USB_DEVICE_INFORMATION_0 DeviceInformation;
97
98 USBD_CONFIGURATION_HANDLE ConfigurationHandle;
99 USBD_PIPE_HANDLE PipeHandle;
100 PVOID RootHubHandle;
101
102 UNICODE_STRING SymbolicLinkName;
103 } HUB_DEVICE_EXTENSION, *PHUB_DEVICE_EXTENSION;
104
105 // createclose.c
106 NTSTATUS NTAPI
107 USBHUB_Create(
108 IN PDEVICE_OBJECT DeviceObject,
109 IN PIRP Irp);
110
111 NTSTATUS NTAPI
112 USBHUB_Close(
113 IN PDEVICE_OBJECT DeviceObject,
114 IN PIRP Irp);
115
116 NTSTATUS NTAPI
117 USBHUB_Cleanup(
118 IN PDEVICE_OBJECT DeviceObject,
119 IN PIRP Irp);
120
121 // fdo.c
122 NTSTATUS
123 USBHUB_FdoHandleDeviceControl(
124 PDEVICE_OBJECT DeviceObject,
125 PIRP Irp);
126
127 NTSTATUS
128 USBHUB_FdoHandlePnp(
129 PDEVICE_OBJECT DeviceObject,
130 PIRP Irp);
131
132 // misc.c
133 NTSTATUS
134 ForwardIrpAndWait(
135 IN PDEVICE_OBJECT DeviceObject,
136 IN PIRP Irp);
137
138 NTSTATUS
139 ForwardIrpAndForget(
140 IN PDEVICE_OBJECT DeviceObject,
141 IN PIRP Irp);
142
143 // pdo.c
144 NTSTATUS
145 USBHUB_PdoHandlePnp(
146 PDEVICE_OBJECT DeviceObject,
147 PIRP Irp);
148
149 NTSTATUS
150 USBHUB_PdoHandleInternalDeviceControl(
151 PDEVICE_OBJECT DeviceObject,
152 PIRP Irp);
153
154 VOID
155 DumpDeviceDescriptor(
156 PUSB_DEVICE_DESCRIPTOR DeviceDescriptor);
157
158 VOID
159 DumpConfigurationDescriptor(
160 PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor);
161
162 VOID
163 DumpFullConfigurationDescriptor(
164 PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor);
165
166 NTSTATUS
167 GetPortStatusAndChange(
168 IN PDEVICE_OBJECT RootHubDeviceObject,
169 IN ULONG PortId,
170 OUT PPORT_STATUS_CHANGE StatusChange);