14 //BROKEN: #include <usbprotocoldefs.h>
15 #include <pseh/pseh2.h>
17 #define USB_HUB_TAG 'hbsu'
18 #define USB_MAXCHILDREN 127
20 // Lifted from broken header above
21 #define C_HUB_LOCAL_POWER 0
22 #define C_HUB_OVER_CURRENT 1
23 #define PORT_CONNECTION 0
25 #define PORT_SUSPEND 2
26 #define PORT_OVER_CURRENT 3
29 #define PORT_LOW_SPEED 9
30 #define C_PORT_CONNECTION 16
31 #define C_PORT_ENABLE 17
32 #define C_PORT_SUSPEND 18
33 #define C_PORT_OVER_CURRENT 19
34 #define C_PORT_RESET 20
36 #define PORT_INDICATOR 22
38 typedef struct _PORT_STATUS_CHANGE
42 } PORT_STATUS_CHANGE
, *PPORT_STATUS_CHANGE
;
44 typedef struct _WORK_ITEM_DATA
46 WORK_QUEUE_ITEM WorkItem
;
48 } WORK_ITEM_DATA
, *PWORK_ITEM_DATA
;
53 } COMMON_DEVICE_EXTENSION
, *PCOMMON_DEVICE_EXTENSION
;
55 typedef struct _HUB_CHILDDEVICE_EXTENSION
57 COMMON_DEVICE_EXTENSION Common
;
58 PDEVICE_OBJECT ParentDeviceObject
;
59 PUSB_DEVICE_HANDLE UsbDeviceHandle
;
61 UNICODE_STRING usDeviceId
;
62 UNICODE_STRING usInstanceId
;
63 UNICODE_STRING usHardwareIds
;
64 UNICODE_STRING usCompatibleIds
;
65 UNICODE_STRING usTextDescription
;
66 UNICODE_STRING usLocationInformation
;
67 USB_DEVICE_DESCRIPTOR DeviceDesc
;
68 PUSB_CONFIGURATION_DESCRIPTOR FullConfigDesc
;
69 UNICODE_STRING SymbolicLinkName
;
70 USB_BUS_INTERFACE_USBDI_V2 DeviceInterface
;
71 } HUB_CHILDDEVICE_EXTENSION
, *PHUB_CHILDDEVICE_EXTENSION
;
73 typedef struct _HUB_DEVICE_EXTENSION
75 COMMON_DEVICE_EXTENSION Common
;
76 PDEVICE_OBJECT LowerDeviceObject
;
78 PDEVICE_OBJECT ChildDeviceObject
[USB_MAXCHILDREN
];
79 PDEVICE_OBJECT RootHubPhysicalDeviceObject
;
80 PDEVICE_OBJECT RootHubFunctionalDeviceObject
;
85 PORT_STATUS_CHANGE
*PortStatusChange
;
89 USB_BUS_INTERFACE_HUB_V5 HubInterface
;
90 USB_BUS_INTERFACE_USBDI_V2 UsbDInterface
;
92 USB_HUB_DESCRIPTOR HubDescriptor
;
93 USB_DEVICE_DESCRIPTOR HubDeviceDescriptor
;
94 USB_CONFIGURATION_DESCRIPTOR HubConfigDescriptor
;
95 USB_INTERFACE_DESCRIPTOR HubInterfaceDescriptor
;
96 USB_ENDPOINT_DESCRIPTOR HubEndPointDescriptor
;
98 USB_EXTHUB_INFORMATION_0 UsbExtHubInfo
;
99 USB_DEVICE_INFORMATION_0 DeviceInformation
;
101 USBD_CONFIGURATION_HANDLE ConfigurationHandle
;
102 USBD_PIPE_HANDLE PipeHandle
;
104 USB_BUS_INTERFACE_USBDI_V2 DeviceInterface
;
106 UNICODE_STRING SymbolicLinkName
;
109 } HUB_DEVICE_EXTENSION
, *PHUB_DEVICE_EXTENSION
;
114 IN PDEVICE_OBJECT DeviceObject
,
119 IN PDEVICE_OBJECT DeviceObject
,
124 IN PDEVICE_OBJECT DeviceObject
,
129 USBHUB_FdoHandleDeviceControl(
130 PDEVICE_OBJECT DeviceObject
,
135 PDEVICE_OBJECT DeviceObject
,
141 IN PDEVICE_OBJECT DeviceObject
,
146 IN PDEVICE_OBJECT DeviceObject
,
150 SubmitRequestToRootHub(
151 IN PDEVICE_OBJECT RootHubDeviceObject
,
152 IN ULONG IoControlCode
,
153 OUT PVOID OutParameter1
,
154 OUT PVOID OutParameter2
);
158 IN PDEVICE_OBJECT DeviceObject
,
159 IN OUT PUSB_BUS_INTERFACE_USBDI_V2 Interface
);
164 PDEVICE_OBJECT DeviceObject
,
168 USBHUB_PdoHandleInternalDeviceControl(
169 PDEVICE_OBJECT DeviceObject
,
173 DumpDeviceDescriptor(
174 PUSB_DEVICE_DESCRIPTOR DeviceDescriptor
);
177 DumpConfigurationDescriptor(
178 PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor
);
181 DumpFullConfigurationDescriptor(
182 PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor
);
185 GetPortStatusAndChange(
186 IN PDEVICE_OBJECT RootHubDeviceObject
,
188 OUT PPORT_STATUS_CHANGE StatusChange
);
193 USBHUB_ParentFDOStartDevice(
194 IN PDEVICE_OBJECT DeviceObject
,