ReactOS 0.4.17-dev-1281-g065abb3
ucxutil.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: Small C++ helpers shared by every part of the driver
5 * COPYRIGHT: Copyright 2026 Justin Miller <justin.miller@reactos.org>
6 */
7
8#pragma once
9
10/* Pool tag for everything ucx01000 allocates itself ("UHCD" in a pool dump) */
11#define UCX_POOL_TAG 'DCHU'
12
13/* Objects live in WDF context memory; this builds them in place */
14inline
16operator new(
17 _In_ size_t Size,
18 _In_ PVOID Where) noexcept
19{
21 return Where;
22}
23
24inline
25VOID
26operator delete(
28 _In_ PVOID Where) noexcept
29{
32}
33
36{
37public:
38 explicit
41 : m_Lock(Lock)
42 {
44 }
45
47 {
49 }
50
51 SpinLockGuard(const SpinLockGuard&) = delete;
53
54private:
57};
58
61{
62public:
64 {
66 }
67
69 {
71 }
72
75
76private:
78};
79
80/* A LIST_ENTRY with NULL links means "not on any list" throughout this driver */
82VOID
86{
87 Entry->Flink = NULL;
88 Entry->Blink = NULL;
89}
90
95 _In_ const LIST_ENTRY* Entry)
96{
97 return Entry->Flink != NULL;
98}
99
102{
106
107 explicit
109 _In_ WDFREQUEST Request)
110 {
112
114 WdfRequestGetParameters(Request, &Params);
115
116 Arg1 = Params.Parameters.Others.Arg1;
117 Arg2 = Params.Parameters.Others.Arg2;
118 Arg4 = Params.Parameters.Others.Arg4;
119 }
120};
121
125NTAPI
130
131/* Kernel routines resolved at load time; NULL when the kernel lacks them */
132typedef
139
142{
143 WDFDRIVER Driver;
144 WDFDEVICE ControlDevice;
147
148 /* Every live controller, for diagnostics */
152
153 /* usbflags Allow64KLowOrFullSpeedControlTransfers == 1 */
155
157
158 /* Seed for verifier fault injection */
160};
161
163
166VOID
167NTAPI
169 _In_ BOOLEAN Verifying)
170{
171 if (Verifying && !KdRefreshDebuggerNotPresent())
173}
174
175/* Verifier fault injection helpers, safe at DISPATCH_LEVEL */
176
177ULONG
178NTAPI
180
182NTAPI
184 _In_ ULONG Setting);
185
186ULONG
187NTAPI
189 _In_ ULONG Max);
190
192NTAPI
unsigned char BOOLEAN
Definition: actypes.h:127
LONG NTSTATUS
Definition: precomp.h:26
#define Max(a, b)
Definition: cdprocs.h:78
DispatchLevelGuard & operator=(const DispatchLevelGuard &)=delete
DispatchLevelGuard(const DispatchLevelGuard &)=delete
~SpinLockGuard()
Definition: ucxutil.h:46
PKSPIN_LOCK m_Lock
Definition: ucxutil.h:55
KIRQL m_OldIrql
Definition: ucxutil.h:56
SpinLockGuard(const SpinLockGuard &)=delete
SpinLockGuard & operator=(const SpinLockGuard &)=delete
SpinLockGuard(_Inout_ PKSPIN_LOCK Lock)
Definition: ucxutil.h:39
PLIST_ENTRY Entry
Definition: devhcd.cpp:1262
#define NULL
Definition: types.h:112
UCHAR KIRQL
Definition: env_spec_w32.h:591
ULONG KSPIN_LOCK
Definition: env_spec_w32.h:72
#define KeRaiseIrql(irql, oldIrql)
Definition: env_spec_w32.h:597
KSPIN_LOCK * PKSPIN_LOCK
Definition: env_spec_w32.h:73
#define KeReleaseSpinLock(sl, irql)
Definition: env_spec_w32.h:627
#define KeLowerIrql(oldIrql)
Definition: env_spec_w32.h:602
#define KeAcquireSpinLock(sl, irql)
Definition: env_spec_w32.h:609
#define DISPATCH_LEVEL
Definition: env_spec_w32.h:696
_Must_inspect_result_ _In_ PFLT_CALLBACK_DATA _In_ PFLT_DEFERRED_IO_WORKITEM_ROUTINE _In_ WORK_QUEUE_TYPE QueueType
Definition: fltkernel.h:1978
_Must_inspect_result_ _In_ PFLT_CALLBACK_DATA _In_ PFLT_DEFERRED_IO_WORKITEM_ROUTINE WorkerRoutine
Definition: fltkernel.h:1977
BOOLEAN NTAPI KdRefreshDebuggerNotPresent(VOID)
Definition: kdapi.c:2679
_In_ PIRP _In_ PIO_COMPLETION_ROUTINE _In_ PVOID Context
Definition: kse.h:81
#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
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:329
short WCHAR
Definition: pedump.c:58
#define BOOLEAN
Definition: pedump.c:73
WDFDEVICE ControlDevice
Definition: ucxutil.h:144
KSPIN_LOCK ControllerListLock
Definition: ucxutil.h:150
PFN_UCX_IO_TRY_QUEUE_WORKITEM IoTryQueueWorkItem
Definition: ucxutil.h:156
WCHAR ControlDeviceNameBuffer[100]
Definition: ucxutil.h:146
ULONG RandomSeed
Definition: ucxutil.h:159
BOOLEAN Allow64KLowOrFullSpeedControl
Definition: ucxutil.h:154
ULONG ControllerCount
Definition: ucxutil.h:151
UNICODE_STRING ControlDeviceName
Definition: ucxutil.h:145
LIST_ENTRY ControllerList
Definition: ucxutil.h:149
WDFDRIVER Driver
Definition: ucxutil.h:143
UcxRequestArgs(_In_ WDFREQUEST Request)
Definition: ucxutil.h:108
PVOID Arg4
Definition: ucxutil.h:105
PVOID Arg1
Definition: ucxutil.h:103
PVOID Arg2
Definition: ucxutil.h:104
Definition: typedefs.h:120
struct _LIST_ENTRY * Blink
Definition: typedefs.h:122
struct _LIST_ENTRY * Flink
Definition: typedefs.h:121
#define NTAPI
Definition: typedefs.h:36
uint32_t ULONG
Definition: typedefs.h:59
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFREQUEST Request
ULONG NTAPI UcxRandom(VOID)
Definition: ucxutil.cpp:61
UcxDriverState UcxDriver
Definition: driver.cpp:138
BOOLEAN NTAPI UcxVerifierWantsFailure(_In_ ULONG Setting)
Definition: ucxutil.cpp:71
_Must_inspect_result_ NTSTATUS NTAPI UcxCreateObjectWithTwoContexts(_In_ PWDF_OBJECT_ATTRIBUTES Primary, _In_opt_ PWDF_OBJECT_ATTRIBUTES Secondary, _Out_ WDFOBJECT *Object)
Definition: ucxutil.cpp:19
BOOLEAN(NTAPI * PFN_UCX_IO_TRY_QUEUE_WORKITEM)(_Inout_ PIO_WORKITEM IoWorkItem, _In_ PIO_WORKITEM_ROUTINE_EX WorkerRoutine, _In_ WORK_QUEUE_TYPE QueueType, _In_opt_ PVOID Context)
Definition: ucxutil.h:134
FORCEINLINE BOOLEAN NTAPI UcxIsListEntryLinked(_In_ const LIST_ENTRY *Entry)
Definition: ucxutil.h:94
FORCEINLINE VOID NTAPI UcxVerifierBreak(_In_ BOOLEAN Verifying)
Definition: ucxutil.h:168
NTSTATUS NTAPI UcxRandomErrorStatus(VOID)
Definition: ucxutil.cpp:93
FORCEINLINE VOID NTAPI UcxClearListEntry(_Out_ PLIST_ENTRY Entry)
Definition: ucxutil.h:84
ULONG NTAPI UcxRandomInRange(_In_ ULONG Max)
Definition: ucxutil.cpp:85
_Must_inspect_result_ _In_ WDFCOLLECTION _In_ WDFOBJECT Object
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
Definition: wdfdevice.h:4539
_Must_inspect_result_ _In_opt_ PWDF_OBJECT_ATTRIBUTES _In_ _Strict_type_match_ POOL_TYPE _In_opt_ ULONG _In_ _Out_ WDFMEMORY * Memory
Definition: wdfmemory.h:169
_In_ WDFIOTARGET _In_ PWDF_REQUEST_COMPLETION_PARAMS Params
Definition: wdfrequest.h:308
FORCEINLINE VOID WDF_REQUEST_PARAMETERS_INIT(_Out_ PWDF_REQUEST_PARAMETERS Parameters)
Definition: wdfrequest.h:211
_Must_inspect_result_ _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFWAITLOCK * Lock
Definition: wdfsync.h:127
#define FORCEINLINE
Definition: wdftypes.h:67
NTSYSAPI void WINAPI DbgBreakPoint(void)
_Enum_is_bitflag_ enum _WORK_QUEUE_TYPE WORK_QUEUE_TYPE
_In_opt_ PVOID _In_ PIO_WORKITEM IoWorkItem
Definition: iotypes.h:521
IO_WORKITEM_ROUTINE_EX * PIO_WORKITEM_ROUTINE_EX
Definition: iotypes.h:522