ReactOS 0.4.17-dev-1281-g065abb3
dmapool.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: DMA enabler and the pool of zeroed common buffers
5 * COPYRIGHT: Copyright 2026 Justin Miller <justin.miller@reactos.org>
6 */
7
8#pragma once
9
10class XhciController;
11
14{
21};
22
25{
26public:
31 VOID Release();
35
38
42 Acquire(
44
48 AcquireList(
52
54 VOID
55 Free(
57
59 VOID
62
63 WDFDMAENABLER DmaEnabler() const;
64
67 ULONG MaxDmaSize() const;
68 ULONG MapRegisterCount() const;
69
70 /* Work item and cleanup bodies, called only from dmapool.cpp */
72 VOID GrowthWork();
73
75 VOID ReclaimWork();
76
78
79private:
81 struct SizeClass
82 {
91 };
92
94 NTSTATUS CreateEnabler();
95
99
101 VOID
102 AddSegments(
105
107 BOOLEAN
108 Grab(
113
115 BOOLEAN
116 ReturnFree(
118
120 VOID
121 ShrinkClass(
123
125 VOID QueueGrowth();
126
128 VOID Flush();
129
131 WDFDMAENABLER m_Enabler;
137
143
146 WDFWORKITEM m_ReclaimItem;
147
148 WDFWORKITEM m_GrowthItem;
152};
void FreeList(LOCATIONITEM *pItems)
Definition: CSearchBar.cpp:95
unsigned char BOOLEAN
Definition: actypes.h:127
LONG NTSTATUS
Definition: precomp.h:26
Definition: bufpool.h:45
ULONG m_MaxDmaSize
Definition: dmapool.h:133
NTSTATUS Create(_In_ XhciController *Controller)
PDMA_ADAPTER m_Adapter
Definition: dmapool.h:132
PDMA_ADAPTER DmaAdapter() const
Definition: dmapool.cpp:738
_IRQL_requires_max_(DISPATCH_LEVEL) NTSTATUS AcquireList(_In_ ULONG Size
VOID EnablerCleanup()
Definition: dmapool.cpp:702
_In_ ULONG _Out_ PLIST_ENTRY _Out_ PBOOLEAN NeedGrow
Definition: dmapool.h:112
_IRQL_requires_(PASSIVE_LEVEL) VOID GrowthWork()
NTSTATUS Prepare()
VOID Rebalance()
Definition: dmapool.cpp:655
ULONG m_PagesInUse
Definition: dmapool.h:142
_IRQL_requires_(PASSIVE_LEVEL) VOID Flush()
WDFDMAENABLER DmaEnabler() const
Definition: dmapool.cpp:732
_In_ ULONG Count
Definition: dmapool.h:50
_IRQL_requires_max_(DISPATCH_LEVEL) VOID FreeList(_Inout_ PLIST_ENTRY List)
_IRQL_requires_max_(DISPATCH_LEVEL) BOOLEAN Grab(_Inout_ SizeClass *Class
ULONG m_ReclaimPages
Definition: dmapool.h:145
ULONG m_PagesTotal
Definition: dmapool.h:141
WDFWORKITEM m_GrowthItem
Definition: dmapool.h:148
_IRQL_requires_(PASSIVE_LEVEL) NTSTATUS CreateEnabler()
WDFWORKITEM m_ReclaimItem
Definition: dmapool.h:146
BOOLEAN m_Initialized
Definition: dmapool.h:135
LIST_ENTRY m_ReclaimList
Definition: dmapool.h:144
ULONG m_MapRegisters
Definition: dmapool.h:134
ULONG MaxDmaSize() const
Definition: dmapool.cpp:744
BOOLEAN m_GrowthQueued
Definition: dmapool.h:149
_IRQL_requires_max_(DISPATCH_LEVEL) XhciDmaBuffer *Acquire(_In_ ULONG Size)
SizeClass m_Large
Definition: dmapool.h:140
BOOLEAN m_HoldsUcxReference
Definition: dmapool.h:136
_IRQL_requires_(PASSIVE_LEVEL) VOID AddSegments(_Inout_ SizeClass *Class
SizeClass * ClassForSize(_In_ ULONG Size)
Definition: dmapool.cpp:273
WDFDMAENABLER m_Enabler
Definition: dmapool.h:131
ULONG m_GrowthOutstanding
Definition: dmapool.h:150
SizeClass m_Small
Definition: dmapool.h:139
ULONG MapRegisterCount() const
Definition: dmapool.cpp:750
XhciController * m_Controller
Definition: dmapool.h:130
_IRQL_requires_max_(DISPATCH_LEVEL) VOID Free(_In_ XhciDmaBuffer *Buffer)
KSPIN_LOCK m_Lock
Definition: dmapool.h:138
_Requires_lock_held_(m_Lock) BOOLEAN ReturnFree(_Inout_ XhciDmaBuffer *Buffer)
KEVENT m_GrowthIdle
Definition: dmapool.h:151
_Requires_lock_held_(m_Lock) VOID ShrinkClass(_Inout_ SizeClass *Class)
_IRQL_requires_max_(DISPATCH_LEVEL) VOID QueueGrowth()
_IRQL_requires_(PASSIVE_LEVEL) VOID ReclaimWork()
_In_ ULONG _Out_ PLIST_ENTRY Taken
Definition: dmapool.h:111
#define PASSIVE_LEVEL
Definition: env_spec_w32.h:693
ULONG KSPIN_LOCK
Definition: env_spec_w32.h:72
#define DISPATCH_LEVEL
Definition: env_spec_w32.h:696
@ Flush
Definition: fatprocs.h:1055
#define _Inout_
Definition: no_sal2.h:162
#define _Out_
Definition: no_sal2.h:160
#define _In_
Definition: no_sal2.h:158
LIST_ENTRY Link
Definition: dmapool.h:15
PVOID Page
Definition: dmapool.h:19
BOOLEAN Owned
Definition: dmapool.h:20
ULONG Size
Definition: dmapool.h:18
PHYSICAL_ADDRESS LogicalAddress
Definition: dmapool.h:17
PVOID VirtualAddress
Definition: dmapool.h:16
Definition: typedefs.h:120
unsigned char * PBOOLEAN
Definition: typedefs.h:53
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_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
Definition: wdfdevice.h:4539
_Must_inspect_result_ _In_ WDFCMRESLIST List
Definition: wdfresource.h:550
_In_opt_ PALLOCATE_FUNCTION _In_opt_ PFREE_FUNCTION Free
Definition: exfuncs.h:815