ReactOS 0.4.17-dev-1037-g720d112
ucxroothub.h
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS USB Host Controller Extension
3 * LICENSE: MIT (https://spdx.org/licenses/MIT)
4 * PURPOSE: UCX root hub object interface
5 * COPYRIGHT: Copyright 2026 Justin Miller <justinmiller100@gmail.com>
6 */
7
8#pragma once
9
10#include "ucxcontroller.h"
11
13
14typedef enum _CONTROLLER_TYPE
15{
19
20typedef enum _TRISTATE
21{
24 TriStateTrue = 't'
26
28{
30 struct
31 {
36
37typedef struct _ROOTHUB_INFO
38{
46
48{
57
59{
65
67{
74
75/* 32 sublink speed IDs plus 16 default speeds */
76#define MAX_SPEEDS_COUNT (32 + 16)
77
79{
80#ifdef __cplusplus
82#else
84#endif
89
91{
97
98typedef union _PARENT_HUB_FLAGS
99{
101 struct
102 {
109
110C_ASSERT(sizeof(PARENT_HUB_FLAGS) == sizeof(ULONG));
111
113{
130
131typedef
132_Function_class_(EVT_UCX_ROOTHUB_INTERRUPT_TX)
135VOID
136NTAPI
137EVT_UCX_ROOTHUB_INTERRUPT_TX(
138 _In_ UCXROOTHUB UcxRootHub,
139 _In_ WDFREQUEST Request);
140typedef EVT_UCX_ROOTHUB_INTERRUPT_TX *PFN_UCX_ROOTHUB_INTERRUPT_TX;
141
142typedef
143_Function_class_(EVT_UCX_ROOTHUB_CONTROL_URB)
146VOID
147NTAPI
148EVT_UCX_ROOTHUB_CONTROL_URB(
149 _In_ UCXROOTHUB UcxRootHub,
150 _In_ WDFREQUEST Request);
151typedef EVT_UCX_ROOTHUB_CONTROL_URB *PFN_UCX_ROOTHUB_CONTROL_URB;
152
153typedef
154_Function_class_(EVT_UCX_ROOTHUB_GET_INFO)
157VOID
158NTAPI
159EVT_UCX_ROOTHUB_GET_INFO(
160 _In_ UCXROOTHUB UcxRootHub,
161 _In_ WDFREQUEST Request);
162typedef EVT_UCX_ROOTHUB_GET_INFO *PFN_UCX_ROOTHUB_GET_INFO;
163
164typedef
165_Function_class_(EVT_UCX_ROOTHUB_GET_20PORT_INFO)
168VOID
169NTAPI
170EVT_UCX_ROOTHUB_GET_20PORT_INFO(
171 _In_ UCXROOTHUB UcxRootHub,
172 _In_ WDFREQUEST Request);
173typedef EVT_UCX_ROOTHUB_GET_20PORT_INFO *PFN_UCX_ROOTHUB_GET_20PORT_INFO;
174
175typedef
176_Function_class_(EVT_UCX_ROOTHUB_GET_30PORT_INFO)
179VOID
180NTAPI
181EVT_UCX_ROOTHUB_GET_30PORT_INFO(
182 _In_ UCXROOTHUB UcxRootHub,
183 _In_ WDFREQUEST Request);
184typedef EVT_UCX_ROOTHUB_GET_30PORT_INFO *PFN_UCX_ROOTHUB_GET_30PORT_INFO;
185
186/* Hub class requests go either to the seven feature and status callbacks or,
187 all together, to EvtRootHubControlUrb */
189{
206
208VOID
209NTAPI
212 _In_ PFN_UCX_ROOTHUB_INTERRUPT_TX EvtRootHubInterruptTx,
213 _In_ PFN_UCX_ROOTHUB_GET_INFO EvtRootHubGetInfo,
214 _In_ PFN_UCX_ROOTHUB_GET_20PORT_INFO EvtRootHubGet20PortInfo,
215 _In_ PFN_UCX_ROOTHUB_GET_30PORT_INFO EvtRootHubGet30PortInfo)
216{
217 RtlZeroMemory(Config, sizeof(*Config));
218 Config->Size = sizeof(*Config);
219 Config->NumberOfPresentedControlUrbCallbacks = 1;
220
221 Config->EvtRootHubInterruptTx = EvtRootHubInterruptTx;
222 Config->EvtRootHubGetInfo = EvtRootHubGetInfo;
223 Config->EvtRootHubGet20PortInfo = EvtRootHubGet20PortInfo;
224 Config->EvtRootHubGet30PortInfo = EvtRootHubGet30PortInfo;
225
226 WDF_OBJECT_ATTRIBUTES_INIT(&Config->WdfRequestAttributes);
227}
228
230VOID
231NTAPI
234 _In_ PFN_UCX_ROOTHUB_CONTROL_URB EvtRootHubControlUrb,
235 _In_ PFN_UCX_ROOTHUB_INTERRUPT_TX EvtRootHubInterruptTx,
236 _In_ PFN_UCX_ROOTHUB_GET_INFO EvtRootHubGetInfo,
237 _In_ PFN_UCX_ROOTHUB_GET_20PORT_INFO EvtRootHubGet20PortInfo,
238 _In_ PFN_UCX_ROOTHUB_GET_30PORT_INFO EvtRootHubGet30PortInfo)
239{
241 EvtRootHubInterruptTx,
242 EvtRootHubGetInfo,
243 EvtRootHubGet20PortInfo,
244 EvtRootHubGet30PortInfo);
245
246 Config->EvtRootHubControlUrb = EvtRootHubControlUrb;
247}
248
250VOID
251NTAPI
254 _In_ PFN_UCX_ROOTHUB_CONTROL_URB EvtRootHubClearHubFeature,
255 _In_ PFN_UCX_ROOTHUB_CONTROL_URB EvtRootHubClearPortFeature,
256 _In_ PFN_UCX_ROOTHUB_CONTROL_URB EvtRootHubGetHubStatus,
257 _In_ PFN_UCX_ROOTHUB_CONTROL_URB EvtRootHubGetPortStatus,
258 _In_ PFN_UCX_ROOTHUB_CONTROL_URB EvtRootHubSetHubFeature,
259 _In_ PFN_UCX_ROOTHUB_CONTROL_URB EvtRootHubSetPortFeature,
260 _In_ PFN_UCX_ROOTHUB_CONTROL_URB EvtRootHubGetPortErrorCount,
261 _In_ PFN_UCX_ROOTHUB_INTERRUPT_TX EvtRootHubInterruptTx,
262 _In_ PFN_UCX_ROOTHUB_GET_INFO EvtRootHubGetInfo,
263 _In_ PFN_UCX_ROOTHUB_GET_20PORT_INFO EvtRootHubGet20PortInfo,
264 _In_ PFN_UCX_ROOTHUB_GET_30PORT_INFO EvtRootHubGet30PortInfo)
265{
267 EvtRootHubInterruptTx,
268 EvtRootHubGetInfo,
269 EvtRootHubGet20PortInfo,
270 EvtRootHubGet30PortInfo);
271
272 Config->EvtRootHubClearHubFeature = EvtRootHubClearHubFeature;
273 Config->EvtRootHubClearPortFeature = EvtRootHubClearPortFeature;
274 Config->EvtRootHubGetHubStatus = EvtRootHubGetHubStatus;
275 Config->EvtRootHubGetPortStatus = EvtRootHubGetPortStatus;
276 Config->EvtRootHubSetHubFeature = EvtRootHubSetHubFeature;
277 Config->EvtRootHubSetPortFeature = EvtRootHubSetPortFeature;
278 Config->EvtRootHubGetPortErrorCount = EvtRootHubGetPortErrorCount;
279}
280
281/* PEVT_ spellings from older headers */
287
288/* Class entry points */
289
290typedef
294(NTAPI *PFN_UCXROOTHUBCREATE)(
295 _In_ PUCX_DRIVER_GLOBALS DriverGlobals,
296 _In_ UCXCONTROLLER Controller,
299 _Out_ UCXROOTHUB *RootHub);
300
301typedef
303VOID
304(NTAPI *PFN_UCXROOTHUBPORTCHANGED)(
305 _In_ PUCX_DRIVER_GLOBALS DriverGlobals,
306 _In_ UCXROOTHUB UcxRootHub);
307
312NTAPI
313UcxRootHubCreate(
314 _In_ UCXCONTROLLER Controller,
317 _Out_ UCXROOTHUB *RootHub)
318{
319 PFN_UCXROOTHUBCREATE Create;
320
323}
324
328VOID
329NTAPI
330UcxRootHubPortChanged(
331 _In_ UCXROOTHUB UcxRootHub)
332{
333 PFN_UCXROOTHUBPORTCHANGED PortChanged;
334
335 PortChanged = UCX_BOUND_FUNCTION(PFN_UCXROOTHUBPORTCHANGED, UcxRootHubPortChangedTableIndex);
336 PortChanged(UcxDriverGlobals, UcxRootHub);
337}
338
#define VOID
Definition: acefi.h:82
LONG NTSTATUS
Definition: precomp.h:26
_CONTROLLER_TYPE
Definition: arcname.c:67
_In_ ULONG Attributes
Definition: dispmprt.h:1077
#define NTSTATUS
Definition: precomp.h:19
#define _IRQL_requires_same_
Definition: driverspecs.h:232
#define DISPATCH_LEVEL
Definition: env_spec_w32.h:696
#define C_ASSERT(e)
Definition: intsafe.h:73
#define _Must_inspect_result_
Definition: no_sal2.h:62
#define _Out_
Definition: no_sal2.h:160
#define _In_
Definition: no_sal2.h:158
#define _In_opt_
Definition: no_sal2.h:212
#define _Function_class_(n)
Definition: no_sal2.h:398
unsigned short USHORT
Definition: pedump.c:61
USHORT ExitLatencyOfSlowestLinkForU1
Definition: ucxroothub.h:118
USHORT HostInitiatedU2ExitLatency
Definition: ucxroothub.h:123
PARENT_HUB_FLAGS HubFlags
Definition: ucxroothub.h:126
USHORT ExitLatencyOfSlowestLinkForU2
Definition: ucxroothub.h:120
PUSB_DEVICE_CAPABILITY_SUPERSPEEDPLUS_SPEED SublinkSpeedAttr
Definition: ucxroothub.h:127
USHORT TotalTPPropogationDelay
Definition: ucxroothub.h:125
PDEVICE_OBJECT IoTarget
Definition: ucxroothub.h:114
USB_DEVICE_DESCRIPTOR DeviceDescriptor
Definition: ucxroothub.h:115
USHORT HostInitiatedU1ExitLatency
Definition: ucxroothub.h:122
PROOTHUB_20PORT_INFO * PortInfoArray
Definition: ucxroothub.h:63
TRISTATE DebugCapable
Definition: ucxroothub.h:54
CONTROLLER_USB_20_HARDWARE_LPM_FLAGS ControllerUsb20HardwareLpmFlags
Definition: ucxroothub.h:55
TRISTATE IntegratedHubImplemented
Definition: ucxroothub.h:53
PROOTHUB_30PORT_INFO * PortInfoArray
Definition: ucxroothub.h:95
PUSB_DEVICE_CAPABILITY_SUPERSPEEDPLUS_SPEED Speeds
Definition: ucxroothub.h:87
TRISTATE DebugCapable
Definition: ucxroothub.h:72
USHORT MaxU2ExitLatency
Definition: ucxroothub.h:44
USHORT MaxU1ExitLatency
Definition: ucxroothub.h:43
USHORT NumberOf20Ports
Definition: ucxroothub.h:41
CONTROLLER_TYPE ControllerType
Definition: ucxroothub.h:40
USHORT NumberOf30Ports
Definition: ucxroothub.h:42
PFN_UCX_ROOTHUB_CONTROL_URB EvtRootHubGetHubStatus
Definition: ucxroothub.h:194
PFN_UCX_ROOTHUB_CONTROL_URB EvtRootHubClearHubFeature
Definition: ucxroothub.h:192
PFN_UCX_ROOTHUB_CONTROL_URB EvtRootHubControlUrb
Definition: ucxroothub.h:199
PFN_UCX_ROOTHUB_CONTROL_URB EvtRootHubClearPortFeature
Definition: ucxroothub.h:193
PFN_UCX_ROOTHUB_GET_20PORT_INFO EvtRootHubGet20PortInfo
Definition: ucxroothub.h:202
ULONG NumberOfPresentedControlUrbCallbacks
Definition: ucxroothub.h:191
PFN_UCX_ROOTHUB_GET_INFO EvtRootHubGetInfo
Definition: ucxroothub.h:201
PFN_UCX_ROOTHUB_CONTROL_URB EvtRootHubSetPortFeature
Definition: ucxroothub.h:197
WDF_OBJECT_ATTRIBUTES WdfRequestAttributes
Definition: ucxroothub.h:204
PFN_UCX_ROOTHUB_CONTROL_URB EvtRootHubGetPortStatus
Definition: ucxroothub.h:195
PFN_UCX_ROOTHUB_CONTROL_URB EvtRootHubSetHubFeature
Definition: ucxroothub.h:196
PFN_UCX_ROOTHUB_GET_30PORT_INFO EvtRootHubGet30PortInfo
Definition: ucxroothub.h:203
PFN_UCX_ROOTHUB_INTERRUPT_TX EvtRootHubInterruptTx
Definition: ucxroothub.h:200
PFN_UCX_ROOTHUB_CONTROL_URB EvtRootHubGetPortErrorCount
Definition: ucxroothub.h:198
unsigned char UCHAR
Definition: typedefs.h:53
#define NTAPI
Definition: typedefs.h:36
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262
uint32_t ULONG
Definition: typedefs.h:59
_Must_inspect_result_ _In_ WDFDEVICE _In_ PUCX_CONTROLLER_CONFIG _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ UCXCONTROLLER * Controller
_Must_inspect_result_ _In_ WDFDEVICE _In_ PUCX_CONTROLLER_CONFIG Config
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFREQUEST Request
@ UcxRootHubPortChangedTableIndex
Definition: ucxfuncenum.h:19
@ UcxRootHubCreateTableIndex
Definition: ucxfuncenum.h:18
#define UCX_BOUND_FUNCTION(PfnType, Slot)
Definition: ucxfuncenum.h:40
WDF_EXTERN_C_START struct _UCX_DRIVER_GLOBALS * PUCX_DRIVER_GLOBALS
PUCX_DRIVER_GLOBALS UcxDriverGlobals
Definition: ucxstub.c:32
union _PARENT_HUB_FLAGS * PPARENT_HUB_FLAGS
_Must_inspect_result_ _IRQL_requires_max_(DISPATCH_LEVEL) NTSTATUS(NTAPI *PFN_UCXROOTHUBCREATE)(_In_ PUCX_DRIVER_GLOBALS DriverGlobals
Definition: ucxroothub.h:292
PFN_UCX_ROOTHUB_GET_30PORT_INFO PEVT_UCX_ROOTHUB_GET_30PORT_INFO
Definition: ucxroothub.h:286
_TRISTATE
Definition: ucxroothub.h:21
@ TriStateUnknown
Definition: ucxroothub.h:22
@ TriStateFalse
Definition: ucxroothub.h:23
@ TriStateTrue
Definition: ucxroothub.h:24
union _CONTROLLER_USB_20_HARDWARE_LPM_FLAGS * PCONTROLLER_USB_20_HARDWARE_LPM_FLAGS
struct _ROOTHUB_INFO * PROOTHUB_INFO
_In_ UCXROOTHUB UcxRootHub
Definition: ucxroothub.h:306
FORCEINLINE VOID NTAPI UCX_ROOTHUB_CONFIG_INIT(_Out_ PUCX_ROOTHUB_CONFIG Config, _In_ PFN_UCX_ROOTHUB_CONTROL_URB EvtRootHubClearHubFeature, _In_ PFN_UCX_ROOTHUB_CONTROL_URB EvtRootHubClearPortFeature, _In_ PFN_UCX_ROOTHUB_CONTROL_URB EvtRootHubGetHubStatus, _In_ PFN_UCX_ROOTHUB_CONTROL_URB EvtRootHubGetPortStatus, _In_ PFN_UCX_ROOTHUB_CONTROL_URB EvtRootHubSetHubFeature, _In_ PFN_UCX_ROOTHUB_CONTROL_URB EvtRootHubSetPortFeature, _In_ PFN_UCX_ROOTHUB_CONTROL_URB EvtRootHubGetPortErrorCount, _In_ PFN_UCX_ROOTHUB_INTERRUPT_TX EvtRootHubInterruptTx, _In_ PFN_UCX_ROOTHUB_GET_INFO EvtRootHubGetInfo, _In_ PFN_UCX_ROOTHUB_GET_20PORT_INFO EvtRootHubGet20PortInfo, _In_ PFN_UCX_ROOTHUB_GET_30PORT_INFO EvtRootHubGet30PortInfo)
Definition: ucxroothub.h:252
_Must_inspect_result_ _In_ UCXCONTROLLER _In_ PUCX_ROOTHUB_CONFIG Config
Definition: ucxroothub.h:297
WDF_EXTERN_C_START enum _CONTROLLER_TYPE CONTROLLER_TYPE
EVT_UCX_ROOTHUB_CONTROL_URB * PFN_UCX_ROOTHUB_CONTROL_URB
Definition: ucxroothub.h:151
struct _UCX_ROOTHUB_CONFIG UCX_ROOTHUB_CONFIG
PFN_UCX_ROOTHUB_GET_INFO PEVT_UCX_ROOTHUB_GET_INFO
Definition: ucxroothub.h:284
Create
Definition: ucxroothub.h:321
struct _ROOTHUB_30PORT_INFO_EX * PROOTHUB_30PORT_INFO_EX
struct _UCX_ROOTHUB_CONFIG * PUCX_ROOTHUB_CONFIG
struct _ROOTHUB_20PORTS_INFO * PROOTHUB_20PORTS_INFO
_Must_inspect_result_ _In_ UCXCONTROLLER _In_ PUCX_ROOTHUB_CONFIG _In_opt_ PWDF_OBJECT_ATTRIBUTES Attributes
Definition: ucxroothub.h:298
PFN_UCX_ROOTHUB_CONTROL_URB PEVT_UCX_ROOTHUB_CONTROL_URB
Definition: ucxroothub.h:283
_Must_inspect_result_ _In_ UCXCONTROLLER Controller
Definition: ucxroothub.h:296
struct _ROOTHUB_20PORT_INFO * PROOTHUB_20PORT_INFO
union _CONTROLLER_USB_20_HARDWARE_LPM_FLAGS CONTROLLER_USB_20_HARDWARE_LPM_FLAGS
FORCEINLINE VOID NTAPI UCX_ROOTHUB_CONFIG_INIT_WITH_CONTROL_URB_HANDLER(_Out_ PUCX_ROOTHUB_CONFIG Config, _In_ PFN_UCX_ROOTHUB_CONTROL_URB EvtRootHubControlUrb, _In_ PFN_UCX_ROOTHUB_INTERRUPT_TX EvtRootHubInterruptTx, _In_ PFN_UCX_ROOTHUB_GET_INFO EvtRootHubGetInfo, _In_ PFN_UCX_ROOTHUB_GET_20PORT_INFO EvtRootHubGet20PortInfo, _In_ PFN_UCX_ROOTHUB_GET_30PORT_INFO EvtRootHubGet30PortInfo)
Definition: ucxroothub.h:232
struct _HUB_INFO_FROM_PARENT HUB_INFO_FROM_PARENT
FORCEINLINE VOID NTAPI UcxpRootHubConfigInitCommon(_Out_ PUCX_ROOTHUB_CONFIG Config, _In_ PFN_UCX_ROOTHUB_INTERRUPT_TX EvtRootHubInterruptTx, _In_ PFN_UCX_ROOTHUB_GET_INFO EvtRootHubGetInfo, _In_ PFN_UCX_ROOTHUB_GET_20PORT_INFO EvtRootHubGet20PortInfo, _In_ PFN_UCX_ROOTHUB_GET_30PORT_INFO EvtRootHubGet30PortInfo)
Definition: ucxroothub.h:210
enum _TRISTATE TRISTATE
union _PARENT_HUB_FLAGS PARENT_HUB_FLAGS
EVT_UCX_ROOTHUB_GET_INFO * PFN_UCX_ROOTHUB_GET_INFO
Definition: ucxroothub.h:162
struct _ROOTHUB_30PORT_INFO ROOTHUB_30PORT_INFO
struct _ROOTHUB_30PORTS_INFO ROOTHUB_30PORTS_INFO
struct _HUB_INFO_FROM_PARENT * PHUB_INFO_FROM_PARENT
EVT_UCX_ROOTHUB_GET_20PORT_INFO * PFN_UCX_ROOTHUB_GET_20PORT_INFO
Definition: ucxroothub.h:173
EVT_UCX_ROOTHUB_INTERRUPT_TX * PFN_UCX_ROOTHUB_INTERRUPT_TX
Definition: ucxroothub.h:140
struct _ROOTHUB_30PORT_INFO_EX ROOTHUB_30PORT_INFO_EX
PFN_UCX_ROOTHUB_GET_20PORT_INFO PEVT_UCX_ROOTHUB_GET_20PORT_INFO
Definition: ucxroothub.h:285
struct _ROOTHUB_30PORT_INFO * PROOTHUB_30PORT_INFO
struct _ROOTHUB_INFO ROOTHUB_INFO
struct _ROOTHUB_30PORTS_INFO * PROOTHUB_30PORTS_INFO
EVT_UCX_ROOTHUB_GET_30PORT_INFO * PFN_UCX_ROOTHUB_GET_30PORT_INFO
Definition: ucxroothub.h:184
struct _ROOTHUB_20PORT_INFO ROOTHUB_20PORT_INFO
struct _ROOTHUB_20PORTS_INFO ROOTHUB_20PORTS_INFO
PFN_UCX_ROOTHUB_INTERRUPT_TX PEVT_UCX_ROOTHUB_INTERRUPT_TX
Definition: ucxroothub.h:282
@ ControllerTypeXhci
Definition: ucxroothub.h:16
@ ControllerTypeSoftXhci
Definition: ucxroothub.h:17
_Must_inspect_result_ _In_ UCXCONTROLLER _In_ PUCX_ROOTHUB_CONFIG _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ UCXROOTHUB * RootHub
Definition: ucxroothub.h:299
struct _CONTROLLER_USB_20_HARDWARE_LPM_FLAGS::@4580 UCX_ANONYMOUS_FLAGS
struct _PARENT_HUB_FLAGS::@4581 UCX_ANONYMOUS_FLAGS
ULONG HubIsHighSpeedCapable
Definition: ucxroothub.h:104
ULONG DisableUpdateMaxExitLatency
Definition: ucxroothub.h:105
ULONG DisableLpmForAllDownstreamDevices
Definition: ucxroothub.h:103
#define WDF_EXTERN_C_END
Definition: wdf.h:38
#define WDF_EXTERN_C_START
Definition: wdf.h:37
_Must_inspect_result_ _In_ WDFCHILDLIST _In_ PWDF_CHILD_LIST_ITERATOR _Out_ WDFDEVICE _Inout_opt_ PWDF_CHILD_RETRIEVE_INFO Info
Definition: wdfchildlist.h:690
FORCEINLINE VOID WDF_OBJECT_ATTRIBUTES_INIT(_Out_ PWDF_OBJECT_ATTRIBUTES Attributes)
Definition: wdfobject.h:147
#define FORCEINLINE
Definition: wdftypes.h:67