Create a branch for work on porting an alternate TCP library with the main focus...
[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
65 } USB_DEVICE, *PUSB_DEVICE;
66
67 typedef struct _HUB_DEVICE_EXTENSION
68 {
69 BOOLEAN IsFDO;
70 USB_DEVICE* dev;
71 PDEVICE_OBJECT LowerDevice;
72 ULONG ChildCount;
73 PDEVICE_OBJECT Children[USB_MAXCHILDREN];
74
75 PUSB_DEVICE RootHubUsbDevice;
76
77 PDEVICE_OBJECT RootHubPdo;
78 PDEVICE_OBJECT RootHubFdo;
79
80 ULONG HubCount;
81
82 USB_BUS_INTERFACE_HUB_V5 HubInterface;
83 USB_BUS_INTERFACE_USBDI_V2 UsbDInterface;
84
85 USB_HUB_DESCRIPTOR HubDescriptor;
86 USB_DEVICE_DESCRIPTOR HubDeviceDescriptor;
87 USB_CONFIGURATION_DESCRIPTOR HubConfig;
88 USB_EXTHUB_INFORMATION_0 UsbExtHubInfo;
89
90 /* Fields valid only when IsFDO == FALSE */
91 UNICODE_STRING DeviceId; // REG_SZ
92 UNICODE_STRING InstanceId; // REG_SZ
93 UNICODE_STRING HardwareIds; // REG_MULTI_SZ
94 UNICODE_STRING CompatibleIds; // REG_MULTI_SZ
95 UNICODE_STRING SymbolicLinkName;
96 } HUB_DEVICE_EXTENSION, *PHUB_DEVICE_EXTENSION;
97
98 /* createclose.c */
99 NTSTATUS NTAPI
100 UsbhubCreate(
101 IN PDEVICE_OBJECT DeviceObject,
102 IN PIRP Irp);
103
104 NTSTATUS NTAPI
105 UsbhubClose(
106 IN PDEVICE_OBJECT DeviceObject,
107 IN PIRP Irp);
108
109 NTSTATUS NTAPI
110 UsbhubCleanup(
111 IN PDEVICE_OBJECT DeviceObject,
112 IN PIRP Irp);
113
114 /* fdo.c */
115 NTSTATUS NTAPI
116 UsbhubPnpFdo(
117 IN PDEVICE_OBJECT DeviceObject,
118 IN PIRP Irp);
119
120 NTSTATUS
121 UsbhubDeviceControlFdo(
122 IN PDEVICE_OBJECT DeviceObject,
123 IN PIRP Irp);
124
125 /* misc.c */
126 NTSTATUS
127 ForwardIrpAndWait(
128 IN PDEVICE_OBJECT DeviceObject,
129 IN PIRP Irp);
130
131 NTSTATUS NTAPI
132 ForwardIrpAndForget(
133 IN PDEVICE_OBJECT DeviceObject,
134 IN PIRP Irp);
135
136 NTSTATUS
137 UsbhubDuplicateUnicodeString(
138 OUT PUNICODE_STRING Destination,
139 IN PUNICODE_STRING Source,
140 IN POOL_TYPE PoolType);
141
142 NTSTATUS
143 UsbhubInitMultiSzString(
144 OUT PUNICODE_STRING Destination,
145 ... /* list of PCSZ */);
146
147 /* pdo.c */
148 NTSTATUS NTAPI
149 UsbhubPnpPdo(
150 IN PDEVICE_OBJECT DeviceObject,
151 IN PIRP Irp);
152
153 NTSTATUS
154 UsbhubInternalDeviceControlPdo(
155 IN PDEVICE_OBJECT DeviceObject,
156 IN PIRP Irp);