ReactOS 0.4.17-dev-1281-g065abb3
rhub.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: UCXROOTHUB object and the root hub PDO
5 * COPYRIGHT: Copyright 2026 Justin Miller <justin.miller@reactos.org>
6 */
7
8#pragma once
9
10/* Port change bookkeeping behind the root hub interrupt (status change) endpoint */
12{
14
15 /* 16 bit generations, only compared for equality */
18
19 /* The status change transfer UCX holds instead of passing it to the HCD */
20 WDFREQUEST HeldTransfer;
22
23 /* S0 idle: port changes must wake the root hub PDO */
26
28};
29
31
33{
35};
36
38
40{
43};
44
46
48{
49public:
50 /* Exports */
51
53 static
55 Create(
56 _In_ UCXCONTROLLER Controller,
59 _Out_ UCXROOTHUB* RootHub);
60
62 VOID
64
65 static
68 _In_ UCXROOTHUB Handle);
69
71 Device() const
72 {
73 return m_Device;
74 }
75
76 /* Controller reset hooks */
77
78 VOID
79 FailIo();
80
81 VOID
82 ResumeIo();
83
84 VOID
87
88 /* Forward progress for the root hub needs nothing, its queues reserve a request */
91 {
92 return STATUS_SUCCESS;
93 }
94
95 /* UCX default queue, ROOTHUB_GET_INFO */
96 VOID
98 _In_ WDFREQUEST Request,
100
101 /* PDO state readers, for the user mode IOCTLs */
102
105 _Out_ WDFSTRING* Name);
106
107 WDFDEVICE
108 Pdo() const
109 {
110 return m_Pdo;
111 }
112
113public:
114 UCXROOTHUB m_Handle;
117
118 /* The root hub as a USB device, the second context on the UCXROOTHUB */
120
126
129
132
133 /* Guards the PDO handle, the started flag and the symbolic name */
135 WDFDEVICE m_Pdo;
137 WDFSTRING m_SymbolicName;
138
139 /* At most one IOCTL_UCXHUB_RESET_PORT_ASYNC */
141
144
145private:
150
154
156 CreatePdo();
157
158 VOID
160
163
164 static
165 EVT_WDF_OBJECT_CONTEXT_CLEANUP EvtCleanup;
166
167 friend class UcxRootHubPdo;
168};
169
171
172/* Root hub queues, rhub.cpp */
173EVT_WDF_IO_QUEUE_IO_INTERNAL_DEVICE_CONTROL UcxEvtRootHubInterruptTransfer;
174EVT_WDF_IO_QUEUE_IO_INTERNAL_DEVICE_CONTROL UcxEvtRootHubControlTransfer;
175EVT_WDF_REQUEST_CANCEL UcxEvtRootHubHeldTransferCancel;
176
177/* Root hub PDO callbacks, rhubpdo.cpp */
178EVT_WDF_DEVICE_PREPARE_HARDWARE UcxEvtRootHubPrepareHardware;
179EVT_WDF_DEVICE_RELEASE_HARDWARE UcxEvtRootHubReleaseHardware;
180EVT_WDF_DEVICE_D0_ENTRY UcxEvtRootHubD0Entry;
181EVT_WDF_DEVICE_D0_EXIT UcxEvtRootHubD0Exit;
182EVT_WDF_DEVICE_ENABLE_WAKE_AT_BUS UcxEvtRootHubEnableWakeAtBus;
183EVT_WDF_DEVICE_DISABLE_WAKE_AT_BUS UcxEvtRootHubDisableWakeAtBus;
184EVT_WDFDEVICE_WDM_IRP_PREPROCESS UcxEvtRootHubPreprocessInternalIoctl;
185EVT_WDFDEVICE_WDM_IRP_PREPROCESS UcxEvtRootHubPreprocessQueryInterface;
186EVT_WDFDEVICE_WDM_IRP_PREPROCESS UcxEvtRootHubPreprocessSetPower;
187EVT_WDF_IO_QUEUE_IO_DEVICE_CONTROL UcxEvtRootHubPdoIoDeviceControl;
188
189/* Query interfaces, hubinterface.cpp */
190EVT_WDF_DEVICE_PROCESS_QUERY_INTERFACE_REQUEST UcxEvtQueryParentInterface;
191EVT_WDF_DEVICE_PROCESS_QUERY_INTERFACE_REQUEST UcxEvtQueryStackInterface;
192EVT_WDF_DEVICE_PROCESS_QUERY_INTERFACE_REQUEST UcxEvtQueryUsbdiInterface;
193EVT_WDF_DEVICE_PROCESS_QUERY_INTERFACE_REQUEST UcxEvtQueryUsbdClientInterface;
unsigned char BOOLEAN
Definition: actypes.h:127
LONG NTSTATUS
Definition: precomp.h:26
@ Create
Definition: registry.c:563
UcxUsbDevice * Device() const
Definition: rhub.h:71
UcxEndpoint * m_ControlEndpoint
Definition: rhub.h:121
WDF_DEVICE_PNP_CAPABILITIES m_PnpCaps
Definition: rhub.h:130
SYSTEM_POWER_STATE m_LastSystemSleepState
Definition: rhub.h:142
VOID FailIo()
Definition: rhub.cpp:477
WDFSTRING m_SymbolicName
Definition: rhub.h:137
VOID BuildPowerCapabilities()
Definition: rhubpdo.cpp:87
WDFDEVICE m_Pdo
Definition: rhub.h:135
WDFQUEUE m_InterruptQueue
Definition: rhub.h:124
USHORT m_NumberOf20Ports
Definition: rhub.h:127
static UcxRootHub * FromHandle(_In_ UCXROOTHUB Handle)
Definition: rhub.cpp:14
WDFQUEUE m_ControlQueue
Definition: rhub.h:123
VOID DispatchGetInfo(_In_ WDFREQUEST Request, _Inout_ PUCXHUB_ROOTHUB_INFO Info)
Definition: rhub.cpp:526
NTSTATUS CreatePdo()
Definition: rhubpdo.cpp:129
KSPIN_LOCK m_PdoInfoLock
Definition: rhub.h:134
UcxInterruptQueueState * m_InterruptState
Definition: rhub.h:125
VOID PortChanged()
Definition: rhub.cpp:227
static EVT_WDF_OBJECT_CONTEXT_CLEANUP EvtCleanup
Definition: rhub.h:165
WDF_DEVICE_POWER_CAPABILITIES m_PowerCaps
Definition: rhub.h:131
UCX_ROOTHUB_CONFIG m_Config
Definition: rhub.h:116
POWER_ACTION m_SystemPowerAction
Definition: rhub.h:143
UcxController * m_Controller
Definition: rhub.h:115
UcxEndpoint * m_InterruptEndpoint
Definition: rhub.h:122
VOID FinishPortResetRequest(_In_ BOOLEAN Succeeded)
Definition: rhub.cpp:500
NTSTATUS AddQueryInterfaces()
UCXROOTHUB m_Handle
Definition: rhub.h:114
USHORT m_NumberOf30Ports
Definition: rhub.h:128
BOOLEAN m_PdoStarted
Definition: rhub.h:136
NTSTATUS ReferenceSymbolicName(_Out_ WDFSTRING *Name)
Definition: rhub.cpp:540
VOID ResumeIo()
Definition: rhub.cpp:485
UcxUsbDevice * m_Device
Definition: rhub.h:119
PIRP m_PendingAsyncReset
Definition: rhub.h:140
NTSTATUS CreateEndpoint(_In_ BOOLEAN Interrupt)
Definition: rhub.cpp:121
NTSTATUS EnableForwardProgress()
Definition: rhub.h:90
friend class UcxRootHubPdo
Definition: rhub.h:167
WDFDEVICE Pdo() const
Definition: rhub.h:108
LPWSTR Name
Definition: desk.c:124
_In_ ULONG Attributes
Definition: dispmprt.h:1077
ULONG KSPIN_LOCK
Definition: env_spec_w32.h:72
ULONG Handle
Definition: gdb_input.c:15
#define _Inout_
Definition: no_sal2.h:162
#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
POWER_ACTION
Definition: ntpoapi.h:122
enum _SYSTEM_POWER_STATE SYSTEM_POWER_STATE
unsigned short USHORT
Definition: pedump.c:61
EVT_WDF_DEVICE_PROCESS_QUERY_INTERFACE_REQUEST UcxEvtQueryParentInterface
Definition: rhub.h:190
EVT_WDFDEVICE_WDM_IRP_PREPROCESS UcxEvtRootHubPreprocessInternalIoctl
Definition: rhub.h:184
EVT_WDF_DEVICE_PREPARE_HARDWARE UcxEvtRootHubPrepareHardware
Definition: rhub.h:178
EVT_WDF_DEVICE_PROCESS_QUERY_INTERFACE_REQUEST UcxEvtQueryStackInterface
Definition: rhub.h:191
EVT_WDF_DEVICE_RELEASE_HARDWARE UcxEvtRootHubReleaseHardware
Definition: rhub.h:179
EVT_WDF_DEVICE_DISABLE_WAKE_AT_BUS UcxEvtRootHubDisableWakeAtBus
Definition: rhub.h:183
EVT_WDF_IO_QUEUE_IO_DEVICE_CONTROL UcxEvtRootHubPdoIoDeviceControl
Definition: rhub.h:187
EVT_WDF_DEVICE_PROCESS_QUERY_INTERFACE_REQUEST UcxEvtQueryUsbdClientInterface
Definition: rhub.h:193
EVT_WDF_DEVICE_D0_ENTRY UcxEvtRootHubD0Entry
Definition: rhub.h:180
EVT_WDF_DEVICE_ENABLE_WAKE_AT_BUS UcxEvtRootHubEnableWakeAtBus
Definition: rhub.h:182
EVT_WDF_DEVICE_D0_EXIT UcxEvtRootHubD0Exit
Definition: rhub.h:181
EVT_WDFDEVICE_WDM_IRP_PREPROCESS UcxEvtRootHubPreprocessSetPower
Definition: rhub.h:186
EVT_WDF_REQUEST_CANCEL UcxEvtRootHubHeldTransferCancel
Definition: rhub.h:175
EVT_WDFDEVICE_WDM_IRP_PREPROCESS UcxEvtRootHubPreprocessQueryInterface
Definition: rhub.h:185
EVT_WDF_IO_QUEUE_IO_INTERNAL_DEVICE_CONTROL UcxEvtRootHubControlTransfer
Definition: rhub.h:174
EVT_WDF_IO_QUEUE_IO_INTERNAL_DEVICE_CONTROL UcxEvtRootHubInterruptTransfer
Definition: rhub.h:173
EVT_WDF_DEVICE_PROCESS_QUERY_INTERFACE_REQUEST UcxEvtQueryUsbdiInterface
Definition: rhub.h:192
#define STATUS_SUCCESS
Definition: shellext.h:65
UcxRootHub * RootHub
Definition: rhub.h:34
BOOLEAN IndicateWakeEnabled
Definition: rhub.h:24
BOOLEAN LastTransferCanceled
Definition: rhub.h:21
KEVENT NoIndicateWakeInProgress
Definition: rhub.h:25
UcxRootHub * RootHub
Definition: rhub.h:27
KSPIN_LOCK PortChangeLock
Definition: rhub.h:13
USHORT PortChangeGenerationProcessed
Definition: rhub.h:17
WDFREQUEST HeldTransfer
Definition: rhub.h:20
USHORT PortChangeGeneration
Definition: rhub.h:16
UcxController * Controller
Definition: rhub.h:42
UcxRootHub * RootHub
Definition: rhub.h:41
_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
_Must_inspect_result_ _In_ UCXCONTROLLER _In_ PUCX_ROOTHUB_CONFIG _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ UCXROOTHUB * RootHub
Definition: ucxroothub.h:299
_Must_inspect_result_ _In_ WDFCHILDLIST _In_ PWDF_CHILD_LIST_ITERATOR _Out_ WDFDEVICE _Inout_opt_ PWDF_CHILD_RETRIEVE_INFO Info
Definition: wdfchildlist.h:690
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_INTERRUPT_CONFIG _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFINTERRUPT * Interrupt
Definition: wdfinterrupt.h:379
#define WDF_DECLARE_CONTEXT_TYPE_WITH_NAME(_contexttype, _castingfunction)
Definition: wdfobject.h:350
static void Initialize()
Definition: xlate.c:212