8 //BROKEN: #include <usbprotocoldefs.h>
10 #define USB_HUB_TAG 'hbsu'
11 #define USB_MAXCHILDREN 127
13 // Lifted from broken header above
14 #define C_HUB_LOCAL_POWER 0
15 #define C_HUB_OVER_CURRENT 1
16 #define PORT_CONNECTION 0
18 #define PORT_SUSPEND 2
19 #define PORT_OVER_CURRENT 3
22 #define PORT_LOW_SPEED 9
23 #define C_PORT_CONNECTION 16
24 #define C_PORT_ENABLE 17
25 #define C_PORT_SUSPEND 18
26 #define C_PORT_OVER_CURRENT 19
27 #define C_PORT_RESET 20
29 #define PORT_INDICATOR 22
31 typedef struct _PORT_STATUS_CHANGE
35 } PORT_STATUS_CHANGE
, *PPORT_STATUS_CHANGE
;
37 typedef struct _WORK_ITEM_DATA
39 WORK_QUEUE_ITEM WorkItem
;
41 } WORK_ITEM_DATA
, *PWORK_ITEM_DATA
;
46 } COMMON_DEVICE_EXTENSION
, *PCOMMON_DEVICE_EXTENSION
;
48 typedef struct _HUB_CHILDDEVICE_EXTENSION
50 COMMON_DEVICE_EXTENSION Common
;
51 PDEVICE_OBJECT ParentDeviceObject
;
52 PUSB_DEVICE_HANDLE UsbDeviceHandle
;
54 UNICODE_STRING usDeviceId
;
55 UNICODE_STRING usInstanceId
;
56 UNICODE_STRING usHardwareIds
;
57 UNICODE_STRING usCompatibleIds
;
58 UNICODE_STRING usTextDescription
;
59 UNICODE_STRING usLocationInformation
;
60 USB_DEVICE_DESCRIPTOR DeviceDesc
;
61 PUSB_CONFIGURATION_DESCRIPTOR FullConfigDesc
;
62 UNICODE_STRING SymbolicLinkName
;
63 USB_BUS_INTERFACE_USBDI_V2 DeviceInterface
;
64 USB_DEVICE_INFORMATION_0 DeviceInformation
;
65 } HUB_CHILDDEVICE_EXTENSION
, *PHUB_CHILDDEVICE_EXTENSION
;
67 typedef struct _HUB_DEVICE_EXTENSION
69 COMMON_DEVICE_EXTENSION Common
;
70 PDEVICE_OBJECT LowerDeviceObject
;
72 PDEVICE_OBJECT ChildDeviceObject
[USB_MAXCHILDREN
];
73 PDEVICE_OBJECT RootHubPhysicalDeviceObject
;
74 PDEVICE_OBJECT RootHubFunctionalDeviceObject
;
79 PORT_STATUS_CHANGE
*PortStatusChange
;
83 USB_BUS_INTERFACE_HUB_V5 HubInterface
;
84 USB_BUS_INTERFACE_USBDI_V2 UsbDInterface
;
86 USB_HUB_DESCRIPTOR HubDescriptor
;
87 USB_DEVICE_DESCRIPTOR HubDeviceDescriptor
;
88 USB_CONFIGURATION_DESCRIPTOR HubConfigDescriptor
;
89 USB_INTERFACE_DESCRIPTOR HubInterfaceDescriptor
;
90 USB_ENDPOINT_DESCRIPTOR HubEndPointDescriptor
;
92 USB_EXTHUB_INFORMATION_0 UsbExtHubInfo
;
93 USB_DEVICE_INFORMATION_0 DeviceInformation
;
95 USBD_CONFIGURATION_HANDLE ConfigurationHandle
;
96 USBD_PIPE_HANDLE PipeHandle
;
98 USB_BUS_INTERFACE_USBDI_V2 DeviceInterface
;
100 UNICODE_STRING SymbolicLinkName
;
103 } HUB_DEVICE_EXTENSION
, *PHUB_DEVICE_EXTENSION
;
108 IN PDEVICE_OBJECT DeviceObject
,
113 IN PDEVICE_OBJECT DeviceObject
,
118 IN PDEVICE_OBJECT DeviceObject
,
123 USBHUB_FdoHandleDeviceControl(
124 PDEVICE_OBJECT DeviceObject
,
129 PDEVICE_OBJECT DeviceObject
,
135 IN PDEVICE_OBJECT DeviceObject
,
140 IN PDEVICE_OBJECT DeviceObject
,
144 SubmitRequestToRootHub(
145 IN PDEVICE_OBJECT RootHubDeviceObject
,
146 IN ULONG IoControlCode
,
147 OUT PVOID OutParameter1
,
148 OUT PVOID OutParameter2
);
152 IN PDEVICE_OBJECT DeviceObject
,
153 IN OUT PUSB_BUS_INTERFACE_USBDI_V2 Interface
);
158 PDEVICE_OBJECT DeviceObject
,
162 USBHUB_PdoHandleInternalDeviceControl(
163 PDEVICE_OBJECT DeviceObject
,
167 DumpDeviceDescriptor(
168 PUSB_DEVICE_DESCRIPTOR DeviceDescriptor
);
171 DumpConfigurationDescriptor(
172 PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor
);
175 DumpFullConfigurationDescriptor(
176 PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor
);
179 GetPortStatusAndChange(
180 IN PDEVICE_OBJECT RootHubDeviceObject
,
182 OUT PPORT_STATUS_CHANGE StatusChange
);
187 USBHUB_ParentFDOStartDevice(
188 IN PDEVICE_OBJECT DeviceObject
,