ReactOS 0.4.17-dev-1281-g065abb3
hubsvc.h
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS SuperSpeed USB Hub Driver
3 * LICENSE: MIT (https://spdx.org/licenses/MIT)
4 * PURPOSE: Services one module of the driver offers the others
5 * COPYRIGHT: Copyright 2026 Justin Miller <justin.miller@reactos.org>
6 */
7
8#pragma once
9
10/* Hub numbers from usbd.sys, shown to users in the port location string */
11
15HubAllocateHubNumber(
16 _Out_ PULONG HubNumber);
17
19VOID
21HubReleaseHubNumber(
22 _In_ ULONG HubNumber);
23
24/* Registry module */
25
27VOID
29HubReadHubRegistryValues(
30 _In_ HubFdo* Hub);
31
33VOID
35HubUxdShutdownCleanup(
36 _In_ HubFdo* Hub);
37
39VOID
41HubReadUsb4HostName(
42 _In_ HubFdo* Hub);
43
44/* ACPI, connector map and WMI modules */
45
50HubAcpiReadPortAttributes(
51 _In_ HubFdo* Hub);
52
54VOID
56HubConnectorMapPorts(
57 _In_ HubFdo* Hub);
58
60VOID
62HubConnectorUnmapPorts(
63 _In_ HubFdo* Hub);
64
66VOID
68HubWmiRegister(
69 _In_ HubFdo* Hub);
70
71/* USB4 router DROM */
72
74VOID
76HubDromReportFirmwareUpdateDevice(
77 _In_ HubFdo* Hub);
78
79/* USB4 host routers */
80
84HubUsb4Initialize(
85 _In_ HubFdo* Hub);
86
90HubUsb4BindPort(
93 _In_ WDFSTRING Name);
94
96VOID
98HubUsb4MapDvsecHosts(
99 _In_ HubFdo* Hub);
100
103NTAPI
104HubUsb4AssignPortMappings(
105 _In_ HubFdo* Hub);
106
108NTAPI
111
113VOID
114NTAPI
115HubUsb4AcquireHostPower(
116 _In_ HubPort* Port);
117
119VOID
120NTAPI
121HubUsb4ReleaseHostPower(
122 _In_ HubPort* Port);
123
125VOID
126NTAPI
127HubUsb4RegisterNotification(
128 _In_ HubFdo* Hub);
129
131VOID
132NTAPI
133HubUsb4UnregisterNotification(
134 _In_ HubFdo* Hub);
135
137VOID
138NTAPI
139HubUsb4CloseAllHosts(
140 _In_ HubFdo* Hub);
141
142/* UCX module */
143
145VOID
146NTAPI
147HubRequestReservedIo(
148 _In_ HubFdo* Hub);
149
150/* Diagnostics */
151
153VOID
154NTAPI
155HubReportPnpProblem(
156 _In_ WDFDEVICE Device,
158
159/* Callbacks handed to ucx01000 in the stack interface */
160
161VOID
162NTAPI
164 _In_ UCXHUB_HUB_CONTEXT HubContext,
165 _In_ UCXHUB_DEVICE_CONTEXT DeviceContext,
166 _In_ UCXENDPOINT Endpoint,
169
170VOID
171NTAPI
173 _In_ UCXHUB_HUB_CONTEXT HubContext,
174 _In_ UCXHUB_DEVICE_CONTEXT DeviceContext);
175
176/* Descriptor validation, with the hub flavored loggers */
177
179NTAPI
181 _In_ HubFdo* Hub,
184
186NTAPI
188 _In_ HubFdo* Hub,
191
193NTAPI
195 _In_ HubFdo* Hub,
198
199VOID
200NTAPI
202 _In_ HubFdo* Hub);
203
204/* WMI module */
205
206VOID
207NTAPI
209 _In_ HubFdo* Hub,
211
212/* Child PDO module */
213
215
216/* integrator */
217
219PVOID
220NTAPI
222 _In_ HubPort* Port);
223
225VOID
226NTAPI
229 _In_ ULONG Code);
230
231/* identity */
232
235NTAPI
238 _In_ USHORT Language);
239
243NTAPI
244HubIdAssignPdoIds(
247
250NTAPI
254 _Out_opt_ PUSB_ID_STRING Ids);
255
258NTAPI
262 _Out_opt_ PUSB_ID_STRING Ids);
263
266NTAPI
268 _Out_ PUSB_ID_STRING Destination,
269 _In_ const USB_ID_STRING* Source);
270
272VOID
273NTAPI
275 _Inout_ PUSB_ID_STRING Ids);
276
280NTAPI
281HubIdQueryDeviceText(
284
287NTAPI
291
294NTAPI
299
301VOID
302NTAPI
305
308VOID
309NTAPI
310HubConnectorLock(VOID);
311
313VOID
314NTAPI
315HubConnectorUnlock(VOID);
316
318HubPort*
319NTAPI
323
324/* registry */
325
326/* Why a device's UXD settings may be deleted */
327enum class HubUxdEvent : ULONG
328{
329 Disable = 1,
330 Disconnect = 2
331};
332
335VOID
336NTAPI
337HubNoteHubOverCurrent(
338 _In_ HubFdo* Hub);
339
343NTAPI
346
349NTAPI
356
359NTAPI
360HubWriteDeviceString(
363 _In_ WDFSTRING Value);
364
367VOID
368NTAPI
371
374VOID
375NTAPI
378
382NTAPI
384 _In_ HubFdo* Hub,
387
390NTAPI
391HubPurgeUxdState(
394
398NTAPI
399HubQueryUxdDeviceValue(
401 _In_ WDFSTRING String);
402
405VOID
406NTAPI
409
411VOID
412NTAPI
413HubWriteEnumerationFailureCode(
415
418VOID
419NTAPI
420HubRecordSelectiveSuspend(
422
425VOID
426NTAPI
427HubBumpBootSurpriseRemovalCount(VOID);
428
431VOID
432NTAPI
433HubQueryLocalDualRoleFeatures(
435
437VOID
438NTAPI
441
442/* devucx */
443
446VOID
447NTAPI
448HubChildSetPdo(
451
453VOID
454NTAPI
457
461NTAPI
462HubQueryControllerName(
463 _In_ HubFdo* Hub,
466
470NTAPI
471HubQueryDeviceBusInfo(
474
475/* devxfer */
476
478VOID
479NTAPI
482
484VOID
485NTAPI
488
490HubPipe*
491NTAPI
495
496/* wmi */
497
500VOID
501NTAPI
502HubWmiRegisterDevice(
503 _In_ WDFDEVICE Pdo);
504
507VOID
508NTAPI
509HubWmiRegisterBootSurpriseRemoval(
510 _In_ WDFDEVICE Pdo);
511
514VOID
515NTAPI
516HubWmiNotifyBootSurpriseRemoval(VOID);
517
520VOID
521NTAPI
522HubWmiNotifyEnumerationFailure(
523 _In_ HubFdo* Hub,
525
528VOID
529NTAPI
530HubWmiNotifyHubNestedTooDeeply(
531 _In_ HubFdo* Hub,
533
536VOID
537NTAPI
538HubWmiNotifyInsufficientPower(
539 _In_ HubFdo* Hub,
541
544VOID
545NTAPI
546HubWmiNotifyInsufficientBandwidth(
547 _In_ HubFdo* Hub,
549
551VOID
552NTAPI
554 _In_ HubFdo* Hub,
Type
Definition: Type.h:7
unsigned char BOOLEAN
Definition: actypes.h:127
LONG NTSTATUS
Definition: precomp.h:26
HubFdo * Hub
Definition: bootdev.cpp:261
HubWriteEnumerationData(Child)
HubCacheMsOs20SetInfo(Child)
HubReadDeviceHardwareValues(Child)
HubFlushSqmFlags(Child)
Definition: fdo.h:132
_In_ BOOLEAN _In_ ULONG Features
Definition: devdesc.cpp:445
_Check_return_ _In_ DXGK_EVENT_TYPE _In_ ULONG Event
Definition: dispmprt.h:1287
_Check_return_ _In_ ULONG _Inout_ PDXGK_CHILD_CONTAINER_ID ContainerId
Definition: dispmprt.h:1484
#define _IRQL_requires_max_(irql)
Definition: driverspecs.h:230
#define _IRQL_requires_(irql)
Definition: driverspecs.h:229
#define PASSIVE_LEVEL
Definition: env_spec_w32.h:693
#define DISPATCH_LEVEL
Definition: env_spec_w32.h:696
ULONG Handle
Definition: gdb_input.c:15
HubSaveUxdState(Child->m_Hub, Child, NULL)
return HubWriteDeviceValue(Child, &ValueName, Property->wPropertyDataType, DataLength,(PVOID)(Tail+sizeof(DataLength)))
_In_ const HubIdStrings * Ids
BOOLEAN NTAPI HubValidateHubConfiguration(_In_ HubFdo *Hub, _In_reads_bytes_(Length) PUSB_CONFIGURATION_DESCRIPTOR Descriptor, _In_ ULONG Length)
Definition: hubdescval.cpp:46
VOID NTAPI HubNoPingResponse(_In_ UCXHUB_HUB_CONTEXT HubContext, _In_ UCXHUB_DEVICE_CONTEXT DeviceContext)
Definition: childpdo.cpp:2955
VOID NTAPI HubLogDeviceValidationError(_In_ HubChild *Child, _In_ ULONG Code)
Definition: devmisc.cpp:483
_In_ HubPort * Port
Definition: hubsvc.h:92
BOOLEAN NTAPI HubCheckUsb2HubDescriptor(_In_ HubFdo *Hub, _In_reads_bytes_(Length) PUSB_HUB_DESCRIPTOR Descriptor, _In_ ULONG Length)
Definition: hubdescval.cpp:59
BOOLEAN NTAPI HubIdLanguageSupported(_In_ HubChild *Child, _In_ USHORT Language)
Definition: hubid.cpp:911
VOID NTAPI HubMakeUsb2StyleDescriptor(_In_ HubFdo *Hub, _Out_ PUSB_HUB_DESCRIPTOR Descriptor)
Definition: hubwmi.cpp:135
NTSTATUS NTAPI HubIdBuildCompatibleIds(_In_ HubChild *Child, _In_opt_ PWDFDEVICE_INIT DeviceInit, _Out_opt_ PUSB_ID_STRING Ids)
Definition: hubid.cpp:597
VOID NTAPI HubWmiNotifyOverCurrent(_In_ HubFdo *Hub, _In_ ULONG PortNumber)
Definition: hubwmi.cpp:750
NTSTATUS NTAPI HubIdBuildHardwareIds(_In_ HubChild *Child, _In_opt_ PWDFDEVICE_INIT DeviceInit, _Out_opt_ PUSB_ID_STRING Ids)
Definition: hubid.cpp:381
HubUxdEvent
Definition: hubsvc.h:328
BOOLEAN NTAPI HubUsb4NeedsHostPower(_In_ HubChild *Child)
Definition: hubtunnel.cpp:587
VOID NTAPI HubClearTtBuffer(_In_ UCXHUB_HUB_CONTEXT HubContext, _In_ UCXHUB_DEVICE_CONTEXT DeviceContext, _In_ UCXENDPOINT Endpoint, _In_ ULONG EndpointNumber, _In_ ULONG TtPortNumber)
Definition: hubreq.cpp:220
VOID NTAPI HubLogConfigTotalLengthMismatch(_In_ HubFdo *Hub)
Definition: hubdescval.cpp:85
EVT_WDF_TIMER HubEvtBandwidthRetryTimer
Definition: hubsvc.h:214
VOID NTAPI HubChildForwardToController(_In_ HubChild *Child)
Definition: devhcd.cpp:1352
VOID NTAPI HubReleaseTransferState(_In_ HubChild *Child)
Definition: devdesc.cpp:973
BOOLEAN NTAPI HubCheckUsb3HubDescriptor(_In_ HubFdo *Hub, _In_reads_bytes_(Length) PUSB_30_HUB_DESCRIPTOR Descriptor, _In_ ULONG Length)
Definition: hubdescval.cpp:72
VOID NTAPI HubIdListFree(_Inout_ PUSB_ID_STRING Ids)
Definition: hubid.cpp:159
VOID NTAPI HubReleaseRegistryState(_In_ HubChild *Child)
VOID NTAPI HubIdFreeDeviceIds(_In_ HubChild *Child)
Definition: hubid.cpp:813
_In_ ULONG MessageId
Definition: hubsvc.h:157
VOID NTAPI HubFreeBillboardInfo(_In_ HubChild *Child)
Definition: devdesc.cpp:348
PVOID NTAPI HubConnectorNodeForPort(_In_ HubPort *Port)
Definition: portconn.cpp:320
HubPipe *NTAPI HubFindPipeByHandle(_In_opt_ HubConfiguration *Config, _In_ USBD_PIPE_HANDLE Handle)
Definition: devreq.cpp:858
_In_ HubChild _Out_opt_ PBOOLEAN UpdateRequired
Definition: hubsvc.h:386
_In_ HubPort _In_ WDFSTRING Name
Definition: hubsvc.h:93
BOOLEAN NTAPI HubIdGetContainerId(_In_ HubChild *Child, _Out_ GUID *ContainerId)
Definition: hubid.cpp:749
NTSTATUS NTAPI HubIdListCopy(_Out_ PUSB_ID_STRING Destination, _In_ const USB_ID_STRING *Source)
Definition: hubid.cpp:173
BOOLEAN NTAPI HubIdGetSerialNumberText(_In_ HubChild *Child, _Outptr_result_bytebuffer_(*Length) PCWSTR *Text, _Out_ PULONG Length)
Definition: hubid.cpp:1111
HubPort *NTAPI HubConnectorFindCompanion(_In_ HubPort *Port, _In_ ULONG Index)
Definition: portconn.cpp:287
_In_ UCXHUB_DEVICE_CONTEXT _In_ UCXENDPOINT _In_ ULONG _In_ ULONG TtPortNumber
Definition: hubucx.h:240
_Must_inspect_result_ _In_ PUCXHUB_DEVICE_CREATE_INFO _Out_ UCXUSBDEVICE * Device
Definition: hubucx.h:258
_In_ UCXHUB_DEVICE_CONTEXT DeviceContext
Definition: hubucx.h:237
_In_ UCXHUB_DEVICE_CONTEXT _In_ UCXENDPOINT Endpoint
Definition: hubucx.h:238
_In_ UCXHUB_DEVICE_CONTEXT _In_ UCXENDPOINT _In_ ULONG EndpointNumber
Definition: hubucx.h:239
_In_ ULONG PortNumber
Definition: hubucx.h:272
_In_ UCXUSBDEVICE _In_ PDEVICE_OBJECT Pdo
Definition: hubucx.h:280
_In_ PIRP Irp
Definition: kse.h:79
_In_ UINT _In_ UINT _In_ PNDIS_PACKET Source
Definition: ndis.h:3169
_In_ PUNICODE_STRING _Inout_ PUNICODE_STRING Destination
Definition: rtlfuncs.h:3051
#define _In_reads_bytes_(s)
Definition: no_sal2.h:170
#define _Outptr_result_bytebuffer_(s)
Definition: no_sal2.h:288
#define _Out_opt_
Definition: no_sal2.h:214
#define _Inout_
Definition: no_sal2.h:162
#define _Out_
Definition: no_sal2.h:160
#define _In_
Definition: no_sal2.h:158
#define _In_opt_
Definition: no_sal2.h:212
#define _Out_writes_bytes_(s)
Definition: no_sal2.h:178
_In_ ULONG _In_ ULONG _In_ ULONG Length
Definition: ntddpcm.h:102
unsigned short USHORT
Definition: pedump.c:61
uint32_t * PULONG
Definition: typedefs.h:59
const uint16_t * PCWSTR
Definition: typedefs.h:57
unsigned char * PBOOLEAN
Definition: typedefs.h:53
#define NTAPI
Definition: typedefs.h:36
uint32_t ULONG
Definition: typedefs.h:59
_Must_inspect_result_ _In_ WDFDEVICE _In_ PUCX_CONTROLLER_CONFIG Config
_In_opt_ PVOID HubContext
Definition: usbdhub.h:41
UNICODE_STRING Text
Definition: userreq.cpp:261
_In_ WDFCOLLECTION _In_ ULONG Index
_In_ PWDFDEVICE_INIT DeviceInit
Definition: wdfcontrol.h:113
_In_ PWDFDEVICE_INIT _In_ PFN_WDF_DEVICE_SHUTDOWN_NOTIFICATION Notification
Definition: wdfcontrol.h:115
_In_ UCHAR _In_ UCHAR _In_ ULONG Code
Definition: wdfdevice.h:1707
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
Definition: wdfdevice.h:2439
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFDEVICE Child
Definition: wdffdo.h:536
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
Definition: wdfregistry.h:413
_Must_inspect_result_ _In_ WDFIORESLIST _In_ PIO_RESOURCE_DESCRIPTOR Descriptor
Definition: wdfresource.h:342