ReactOS 0.4.17-dev-1281-g065abb3
mmio.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: Register block mapping, capability parsing and halt/reset/run
5 * COPYRIGHT: Copyright 2026 Justin Miller <justin.miller@reactos.org>
6 */
7
8#pragma once
9
10class XhciController;
11
14{
15public:
16 /* Lifetime, called by the controller in PrepareHardware order */
18 Prepare(
20 _In_ WDFCMRESLIST Translated);
21 VOID Release();
22
23 /* Sequences */
26 NTSTATUS Stop();
28 NTSTATUS Run();
31
32 /* Raw access. 64 bit writes split into two 32 bit writes when the errata asks for it. */
33 ULONG
35 _In_ ULONG Offset) const;
36 ULONG
38 _In_ ULONG Offset) const;
39 VOID
45 _In_ ULONG Offset) const;
46 VOID
50 ULONG
52 _In_ ULONG Offset) const;
53 VOID
59 _In_ ULONG Offset) const;
60 VOID
64 VOID
68
70 ULONG
73 _In_ ULONG Offset) const;
74 VOID
79
81 ULONG
84 _In_ ULONG Start) const;
85 ULONG
87 _In_ ULONG Offset) const;
88 VOID
92
93 /* Parsed capability values */
94 ULONG MaxSlots() const;
95 ULONG MaxInterrupters() const;
96 ULONG MaxPorts() const;
98 ULONG ScratchpadCount() const;
99 ULONG ContextSize() const;
100 ULONG PageSize() const;
101 USHORT InterfaceVersion() const;
102 BOOLEAN Addressing64() const;
104 ULONG SupportedStreams() const;
105 ULONG Hcsparams3() const;
106
107
108 /*
109 * Extended capability offsets taken and returned above are byte offsets from
110 * the BAR, so 0 never names a capability.
111 */
112
116 _In_ BOOLEAN AllowRunning);
117
118 BOOLEAN IsMapped() const;
119 ULONG CapLength() const;
120 ULONG Hccparams1() const;
121 ULONG Hccparams2() const;
122 UCHAR VersionMajor() const;
123 UCHAR VersionMinor() const;
124 BOOLEAN MseLengthUsable() const;
128
130 ULONG
132 _In_ ULONG Increment) const;
133
134 /* Vendor sequences */
135 VOID
141
142private:
145 _In_ WDFCMRESLIST Translated);
148
149 BOOLEAN
150 InRange(
152 _In_ ULONG Size) const;
153
154 UCHAR
155 ReadByte(
156 _In_ ULONG Offset) const;
157 VOID
158 WriteByte(
161 VOID
165 _In_ ULONG Set);
166
167 ULONG64
168 Read64(
169 _In_ PUCHAR Address) const;
170 VOID
171 Write64(
174
178 _In_ ULONG BusyBit);
179
181
189
193
207
210};
DWORD Id
static _Out_opt_ PULONGLONG Start
unsigned char BOOLEAN
Definition: actypes.h:127
LONG NTSTATUS
Definition: precomp.h:26
NTSTATUS Stop()
Definition: mmio.cpp:775
UCHAR m_VersionMinor
Definition: mmio.h:196
ULONG ReadOperational32(_In_ ULONG Offset) const
Definition: mmio.cpp:431
ULONG m_Hccparams1
Definition: mmio.h:204
ULONG m_ExtendedList
Definition: mmio.h:190
ULONG ReadCapability32(_In_ ULONG Offset) const
Definition: mmio.cpp:421
ULONG m_VendorBits
Definition: mmio.h:209
VOID SaveVendorBits()
Definition: mmio.cpp:1019
NTSTATUS ParseCapabilities()
Definition: mmio.cpp:171
NTSTATUS RestoreState()
Definition: mmio.cpp:984
ULONG MaxSlots() const
Definition: mmio.cpp:543
BOOLEAN ContiguousFrameId() const
Definition: mmio.cpp:670
BOOLEAN Addressing64() const
Definition: mmio.cpp:663
NTSTATUS CheckStateOperationAllowed() const
Definition: mmio.cpp:914
ULONG MaxPorts() const
Definition: mmio.cpp:555
NTSTATUS Reset()
Definition: mmio.cpp:800
ULONG m_MaxInterrupters
Definition: mmio.h:199
UCHAR m_VersionMajor
Definition: mmio.h:195
UCHAR VersionMajor() const
Definition: mmio.cpp:615
ULONG DebugCapabilityOffset() const
Definition: mmio.cpp:645
NTSTATUS Run()
Definition: mmio.cpp:868
VOID Write64(_In_ PUCHAR Address, _In_ ULONG64 Value)
Definition: mmio.cpp:403
NTSTATUS ResetController(_In_ BOOLEAN AllowRunning)
Definition: mmio.cpp:806
VOID RestoreVendorBits()
Definition: mmio.cpp:1035
ULONG ReadRuntime32(_In_ ULONG Offset) const
Definition: mmio.cpp:469
NTSTATUS Prepare(_In_ XhciController *Controller, _In_ WDFCMRESLIST Translated)
Definition: mmio.cpp:92
VOID WriteRuntime64(_In_ ULONG Offset, _In_ ULONG64 Value)
Definition: mmio.cpp:498
ULONG m_Streams
Definition: mmio.h:206
ULONG ReadPort32(_In_ ULONG Port, _In_ ULONG Offset) const
Definition: mmio.cpp:516
VOID ProgramSsicPortUnused(_In_ BOOLEAN PowerDown)
Definition: mmio.cpp:1004
ULONG FindExtendedCapability(_In_ ULONG Id, _In_ ULONG Start) const
Definition: mmio.cpp:284
NTSTATUS SaveState()
Definition: mmio.cpp:968
UCHAR VersionMinor() const
Definition: mmio.cpp:621
ULONG m_LegacySupport
Definition: mmio.h:191
ULONG SupportedStreams() const
Definition: mmio.cpp:585
BOOLEAN m_MseLengthUsable
Definition: mmio.h:197
VOID Release()
Definition: mmio.cpp:126
ULONG m_Hcsparams3
Definition: mmio.h:203
ULONG LegacySupportOffset() const
Definition: mmio.cpp:639
ULONG64 Read64(_In_ PUCHAR Address) const
Definition: mmio.cpp:386
VOID WriteByte(_In_ ULONG Offset, _In_ UCHAR Value)
Definition: mmio.cpp:363
NTSTATUS WaitForStateOperation(_In_ ULONG BusyBit)
Definition: mmio.cpp:934
ULONG m_Length
Definition: mmio.h:184
ULONG m_MaxSlots
Definition: mmio.h:198
ULONG m_MaxPorts
Definition: mmio.h:200
VOID WriteExtended32(_In_ ULONG Offset, _In_ ULONG Value)
Definition: mmio.cpp:332
ULONG ScratchpadCount() const
Definition: mmio.cpp:573
USHORT InterfaceVersion() const
Definition: mmio.cpp:657
NTSTATUS WaitForReady()
Definition: mmio.cpp:690
ULONG MaxInterrupters() const
Definition: mmio.cpp:549
ULONG Hcsparams3() const
Definition: mmio.cpp:591
ULONG CurrentFrame(_In_ ULONG Increment) const
Definition: mmio.cpp:679
VOID ApplyD0Workarounds()
Definition: mmio.cpp:1052
ULONG64 ReadOperational64(_In_ ULONG Offset) const
Definition: mmio.cpp:450
UCHAR ReadByte(_In_ ULONG Offset) const
Definition: mmio.cpp:356
ULONG m_Hccparams2
Definition: mmio.h:205
ULONG EventRingSegmentTableMax() const
Definition: mmio.cpp:561
ULONG MaxEventRingSegments() const
Definition: mmio.cpp:567
ULONG Hccparams1() const
Definition: mmio.cpp:597
ULONG m_CapLength
Definition: mmio.h:194
ULONG CapLength() const
Definition: mmio.cpp:609
ULONG PageSize() const
Definition: mmio.cpp:579
NTSTATUS MapRegisters(_In_ WDFCMRESLIST Translated)
Definition: mmio.cpp:57
ULONG ReadExtended32(_In_ ULONG Offset) const
Definition: mmio.cpp:319
BOOLEAN InRange(_In_ ULONG Offset, _In_ ULONG Size) const
Definition: mmio.cpp:348
PUCHAR m_Doorbells
Definition: mmio.h:188
ULONG Hccparams2() const
Definition: mmio.cpp:603
VOID WriteOperational64(_In_ ULONG Offset, _In_ ULONG64 Value)
Definition: mmio.cpp:460
XhciController * m_Controller
Definition: mmio.h:182
VOID WriteRuntime32(_In_ ULONG Offset, _In_ ULONG Value)
Definition: mmio.cpp:479
VOID ReadFirmwareVersion()
Definition: mmio.cpp:147
VOID WritePort32(_In_ ULONG Port, _In_ ULONG Offset, _In_ ULONG Value)
Definition: mmio.cpp:528
ULONG m_MaxEventRingSegments
Definition: mmio.h:201
ULONG64 ReadRuntime64(_In_ ULONG Offset) const
Definition: mmio.cpp:488
ULONG m_DebugCapability
Definition: mmio.h:192
BOOLEAN MseLengthUsable() const
Definition: mmio.cpp:627
PUCHAR m_Runtime
Definition: mmio.h:187
BOOLEAN m_Mapped
Definition: mmio.h:185
VOID RingDoorbell(_In_ ULONG Index, _In_ ULONG Value)
Definition: mmio.cpp:507
ULONG ContextSize() const
Definition: mmio.cpp:651
VOID WriteOperational32(_In_ ULONG Offset, _In_ ULONG Value)
Definition: mmio.cpp:441
ULONG m_Scratchpads
Definition: mmio.h:202
VOID ModifyCapability32(_In_ ULONG Offset, _In_ ULONG Clear, _In_ ULONG Set)
Definition: mmio.cpp:371
BOOLEAN IsMapped() const
Definition: mmio.cpp:633
PUCHAR m_Base
Definition: mmio.h:183
PUCHAR m_Operational
Definition: mmio.h:186
NTSTATUS BiosHandoff()
Definition: mmio.cpp:712
IN OUT PLONG IN OUT PLONG Addend IN OUT PLONG IN LONG Increment
Definition: CrNtStubs.h:46
CPPORT Port[4]
Definition: headless.c:38
unsigned __int64 ULONG64
Definition: imports.h:198
static void Clear(void)
Definition: treeview.c:388
#define _In_
Definition: no_sal2.h:158
_In_ ULONG _In_ ULONG Offset
Definition: ntddpcm.h:101
static BOOL Set
Definition: pageheap.c:10
unsigned short USHORT
Definition: pedump.c:61
static WCHAR Address[46]
Definition: ping.c:68
unsigned char UCHAR
Definition: typedefs.h:53
unsigned char * PUCHAR
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
_In_ WDFCOLLECTION _In_ ULONG Index
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
Definition: wdfdevice.h:4539
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
Definition: wdfregistry.h:413