ReactOS 0.4.17-dev-1281-g065abb3
xhciutil.h
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS xHCI Host Controller Driver
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 tags, as they show up in a pool dump */
11#define XHCI_TAG_DRIVER 'dHCX'
12#define XHCI_TAG_CONTROLLER 'cHCX'
13#define XHCI_TAG_BUFFER 'bHCX'
14#define XHCI_TAG_COMMAND 'mHCX'
15#define XHCI_TAG_INTERRUPTER 'iHCX'
16#define XHCI_TAG_ROOTHUB 'rHCX'
17#define XHCI_TAG_SLOT 'sHCX'
18
19/* Objects live in WDF context memory; this builds them in place */
20inline
22operator new(
23 _In_ size_t Size,
24 _In_ PVOID Where) noexcept
25{
27 return Where;
28}
29
30inline
31VOID
32operator delete(
34 _In_ PVOID Where) noexcept
35{
38}
39
42{
43public:
44 explicit
47 : m_Lock(Lock)
48 {
50 }
51
53 {
55 }
56
59
60private:
63};
64
67{
68public:
69 explicit
71 _In_ WDFSPINLOCK Lock)
72 : m_Lock(Lock)
73 {
74 WdfSpinLockAcquire(m_Lock);
75 }
76
78 {
79 WdfSpinLockRelease(m_Lock);
80 }
81
84
85private:
86 WDFSPINLOCK m_Lock;
87};
88
91{
92public:
93 explicit
95 _In_ WDFWAITLOCK Lock)
96 : m_Lock(Lock)
97 {
99 }
100
102 {
103 WdfWaitLockRelease(m_Lock);
104 }
105
108
109private:
110 WDFWAITLOCK m_Lock;
111};
112
113/* A LIST_ENTRY with NULL links means "not on any list" throughout this driver */
115VOID
116NTAPI
119{
120 Entry->Flink = NULL;
121 Entry->Blink = NULL;
122}
123
126NTAPI
128 _In_ const LIST_ENTRY* Entry)
129{
130 return Entry->Flink != NULL;
131}
132
136NTAPI
138 _In_ ULONG Milliseconds)
139{
141
142 Interval.QuadPart = -10000LL * Milliseconds;
143 return Interval;
144}
unsigned char BOOLEAN
Definition: actypes.h:127
PKSPIN_LOCK m_Lock
Definition: xhciutil.h:61
XhciSpinLockGuard(_Inout_ PKSPIN_LOCK Lock)
Definition: xhciutil.h:45
XhciSpinLockGuard & operator=(const XhciSpinLockGuard &)=delete
XhciSpinLockGuard(const XhciSpinLockGuard &)=delete
XhciWaitLockGuard(_In_ WDFWAITLOCK Lock)
Definition: xhciutil.h:94
XhciWaitLockGuard(const XhciWaitLockGuard &)=delete
WDFWAITLOCK m_Lock
Definition: xhciutil.h:110
XhciWaitLockGuard & operator=(const XhciWaitLockGuard &)=delete
XhciWdfLockGuard & operator=(const XhciWdfLockGuard &)=delete
WDFSPINLOCK m_Lock
Definition: xhciutil.h:86
XhciWdfLockGuard(const XhciWdfLockGuard &)=delete
XhciWdfLockGuard(_In_ WDFSPINLOCK Lock)
Definition: xhciutil.h:70
PLIST_ENTRY Entry
Definition: devhcd.cpp:1262
#define NULL
Definition: types.h:112
UCHAR KIRQL
Definition: env_spec_w32.h:591
KSPIN_LOCK * PKSPIN_LOCK
Definition: env_spec_w32.h:73
#define KeReleaseSpinLock(sl, irql)
Definition: env_spec_w32.h:627
#define KeAcquireSpinLock(sl, irql)
Definition: env_spec_w32.h:609
DWORD Interval
Definition: netstat.c:28
#define _Inout_
Definition: no_sal2.h:162
#define _Out_
Definition: no_sal2.h:160
#define _In_
Definition: no_sal2.h:158
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:329
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_ 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
_Must_inspect_result_ FORCEINLINE NTSTATUS WdfWaitLockAcquire(_In_ _Requires_lock_not_held_(_Curr_) WDFWAITLOCK Lock, _In_opt_ PLONGLONG Timeout)
Definition: wdfsync.h:173
_Must_inspect_result_ _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFWAITLOCK * Lock
Definition: wdfsync.h:127
#define FORCEINLINE
Definition: wdftypes.h:67
FORCEINLINE LARGE_INTEGER NTAPI XhciRelativeMs(_In_ ULONG Milliseconds)
Definition: xhciutil.h:137
FORCEINLINE BOOLEAN NTAPI XhciIsListEntryLinked(_In_ const LIST_ENTRY *Entry)
Definition: xhciutil.h:127
FORCEINLINE VOID NTAPI XhciClearListEntry(_Out_ PLIST_ENTRY Entry)
Definition: xhciutil.h:117