ReactOS 0.4.17-dev-1281-g065abb3
cmdring.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: Command ring
5 * COPYRIGHT: Copyright 2026 Justin Miller <justin.miller@reactos.org>
6 */
7
8#pragma once
9
10class XhciController;
11struct XhciCommand;
12
14
20{
30 /*
31 * Status values: STATUS_SUCCESS (code Success), STATUS_UNSUCCESSFUL (any other code),
32 * STATUS_IO_TIMEOUT (aborted), STATUS_NO_SUCH_DEVICE (controller gone or reset).
33 */
39};
40
43{
44public:
46 Create(
49 VOID Release();
52 VOID PreReset();
55 VOID FailAll();
57
60 VOID
61 Submit(
63
67 SubmitAndWait(
69
70 /* From the primary interrupter DPC */
71 VOID
73 _In_ const XHCI_TRB* Event);
74
75
76 static EVT_WDF_TIMER EvtTimer;
77
78private:
79 enum class RingState : ULONG
80 {
84 };
85
86 enum class ResetPhase : ULONG
87 {
88 Idle,
92 Failed
93 };
94
96 VOID OnTimer();
97
98 VOID
101 _In_ BOOLEAN FrontOfLine,
102 _Inout_ PLIST_ENTRY Finished);
103
104 VOID
107
108 VOID
110 _Inout_ PLIST_ENTRY Finished);
111
112 VOID
114 _In_ const XHCI_TRB* Event);
115
116 VOID
118 _Inout_ PLIST_ENTRY Finished);
119
120 VOID
122
123 ULONG64
125 _In_ ULONG Index) const
126 {
127 return m_RingAddress + Index * sizeof(XHCI_TRB);
128 }
129
131 WDFTIMER m_Timer;
148};
#define VOID
Definition: acefi.h:82
unsigned char BOOLEAN
Definition: actypes.h:127
LONG NTSTATUS
Definition: precomp.h:26
@ Create
Definition: registry.c:563
LIST_ENTRY m_Waiting
Definition: cmdring.h:143
VOID PreReset()
Definition: cmdring.cpp:732
VOID PostInterruptsEntry()
Definition: cmdring.cpp:254
VOID PostResetSuccess()
Definition: cmdring.cpp:762
static EVT_WDF_TIMER EvtTimer
Definition: cmdring.h:76
BOOLEAN m_OutOfOrderSeen
Definition: cmdring.h:144
_IRQL_requires_max_(DISPATCH_LEVEL) VOID Submit(_Inout_ XhciCommand *Command)
LONG m_AbortTicks
Definition: cmdring.h:146
VOID FailAll()
Definition: cmdring.cpp:807
ResetPhase m_Reset
Definition: cmdring.h:134
XhciDmaBuffer * m_Segment
Definition: cmdring.h:135
ULONG64 m_RingAddress
Definition: cmdring.h:137
VOID Release()
Definition: cmdring.cpp:174
WDFTIMER m_Timer
Definition: cmdring.h:131
NTSTATUS Prepare()
Definition: cmdring.cpp:144
NTSTATUS D0Entry()
Definition: cmdring.cpp:247
VOID OnTimer()
Definition: cmdring.cpp:614
VOID InitializeRing()
Definition: cmdring.cpp:214
RingState m_State
Definition: cmdring.h:133
VOID DrainAllLocked(_Inout_ PLIST_ENTRY Finished)
Definition: cmdring.cpp:350
ULONG64 m_LinkAddress
Definition: cmdring.h:138
XhciController * m_Controller
Definition: cmdring.h:130
VOID OnHostLost()
Definition: cmdring.cpp:813
VOID PlaceLocked(_Inout_ XhciCommand *Command, _In_ BOOLEAN FrontOfLine, _Inout_ PLIST_ENTRY Finished)
Definition: cmdring.cpp:303
BOOLEAN m_Aborting
Definition: cmdring.h:145
_IRQL_requires_(PASSIVE_LEVEL) NTSTATUS SubmitAndWait(_Inout_ XhciCommand *Command)
LIST_ENTRY m_Pending
Definition: cmdring.h:142
VOID FailEverything()
Definition: cmdring.cpp:787
ULONG64 TrbAddress(_In_ ULONG Index) const
Definition: cmdring.h:124
VOID PutOnRingLocked(_Inout_ XhciCommand *Command)
Definition: cmdring.cpp:260
KSPIN_LOCK m_Lock
Definition: cmdring.h:132
BOOLEAN m_DrainFromTimer
Definition: cmdring.h:147
VOID OnCompletionEvent(_In_ const XHCI_TRB *Event)
Definition: cmdring.cpp:438
ULONG m_Dequeue
Definition: cmdring.h:140
ULONG m_Enqueue
Definition: cmdring.h:139
PXHCI_TRB m_Trbs
Definition: cmdring.h:136
VOID RestartStoppedRingLocked(_Inout_ PLIST_ENTRY Finished)
Definition: cmdring.cpp:515
ULONG m_Cycle
Definition: cmdring.h:141
VOID PostReset()
Definition: cmdring.cpp:743
VOID HandleRingStopped(_In_ const XHCI_TRB *Event)
Definition: cmdring.cpp:571
VOID(NTAPI * PFN_XHCI_COMMAND_DONE)(_In_ XhciCommand *Command)
Definition: cmdring.h:13
_Check_return_ _In_ DXGK_EVENT_TYPE _In_ ULONG Event
Definition: dispmprt.h:1287
#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
unsigned __int64 ULONG64
Definition: imports.h:198
#define _Inout_
Definition: no_sal2.h:162
#define _In_
Definition: no_sal2.h:158
long LONG
Definition: pedump.c:60
Definition: shell.h:41
LIST_ENTRY Link
Definition: cmdring.h:28
PKEVENT WaiterEvent
Definition: cmdring.h:38
LONG Countdown
Definition: cmdring.h:35
PFN_XHCI_COMMAND_DONE Done
Definition: cmdring.h:22
PVOID Context
Definition: cmdring.h:23
XHCI_TRB Trb
Definition: cmdring.h:21
BOOLEAN Matched
Definition: cmdring.h:36
XhciCompletionCode Code
Definition: cmdring.h:24
NTSTATUS Status
Definition: cmdring.h:26
PFN_XHCI_COMMAND_DONE WaiterDone
Definition: cmdring.h:37
ULONG RingIndex
Definition: cmdring.h:34
BOOLEAN Internal
Definition: cmdring.h:27
XHCI_TRB Completion
Definition: cmdring.h:25
Definition: typedefs.h:120
#define NTAPI
Definition: typedefs.h:36
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
struct _XHCI_TRB XHCI_TRB
XhciCompletionCode
Definition: xhcihw.h:110