ReactOS 0.4.17-dev-1281-g065abb3
ctrlxfer.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: Control transfer ring type
5 * COPYRIGHT: Copyright 2026 Justin Miller <justin.miller@reactos.org>
6 */
7
8#pragma once
9
10class XhciController;
13
16{
17public:
18 static NTSTATUS
21 static VOID
22 Enable(
24 static VOID
25 Disable(
27 static NTSTATUS
31 static VOID
32 Cleanup(
34
35 static EVT_WDF_IO_QUEUE_IO_DEFAULT EvtIoDefault;
36 static EVT_WDF_IO_QUEUE_IO_CANCELED_ON_QUEUE EvtIoCanceledOnQueue;
37 static EVT_WDF_DPC EvtCompletionDpc;
38
39 static VOID
42 static VOID
45 static VOID
48 static VOID
51 static VOID
54 static BOOLEAN
56 _In_ const XhciTransferRing* Ring);
57 static BOOLEAN
59 _In_ const XhciTransferRing* Ring);
60
62 static BOOLEAN
66 _In_ const XHCI_TRB* Event);
67
68private:
73 struct DECLSPEC_ALIGN(8) EventTag
74 {
77 XhciTransferRing* Ring;
78 XhciControlTransfer* Transfer;
79 };
80
81 static const ULONG TagCount = 4;
82
83 static EVT_WDF_TIMER EvtTimeout;
84 static EVT_WDF_DPC EvtCanceledOnQueueDpc;
85 static EVT_WDF_REQUEST_CANCEL EvtRequestCancel;
86 static DRIVER_LIST_CONTROL EvtDmaReady;
87
88 VOID
90 _Out_ XhciControlTransfer* Transfer,
91 _In_ WDFREQUEST Request);
95 VOID
98 VOID
99 WriteTd(
100 _Inout_ XhciControlTransfer* Transfer);
101 VOID
103 _Inout_ XhciControlTransfer* Transfer);
105 NTSTATUS CompleteHeld();
107 VOID
108 Finish(
109 _Inout_ XhciControlTransfer* Transfer);
110 VOID
111 Abort(
113 _In_ BOOLEAN FromTimer);
114 VOID
117 VOID
118 CopyIn(
122 static EventTag*
126 BOOLEAN
128 _In_ EventTag* Tag,
130 BOOLEAN
133 BOOLEAN
134 LocateTrb(
138 _Out_ PULONG SkippedTds) const;
139
140 EventTag m_Tags[TagCount];
145 WDFTIMER m_Timer;
154};
unsigned char BOOLEAN
Definition: actypes.h:127
LONG NTSTATUS
Definition: precomp.h:26
static EventTag * TagFromEvent(_In_opt_ XhciTransferRing *Ring, _In_ const XHCI_TRB *Event)
Definition: ctrlxfer.cpp:1304
BOOLEAN m_CanceledDpcRunning
Definition: ctrlxfer.h:153
_Requires_lock_held_(m_Ring->m_Lock) NTSTATUS CompleteHeld()
static VOID RecoverTransfers(_In_ XhciTransferRing *Ring)
Definition: ctrlxfer.cpp:1258
XhciTransferRing * m_Ring
Definition: ctrlxfer.h:141
static BOOLEAN HasQueuedWork(_In_ const XhciTransferRing *Ring)
Definition: ctrlxfer.cpp:1295
BOOLEAN m_ReclaimOnCancelAllowed
Definition: ctrlxfer.h:152
static BOOLEAN OnTransferEvent(_In_opt_ XhciTransferRing *Ring, _In_ XhciController *Controller, _In_ const XHCI_TRB *Event)
Definition: ctrlxfer.cpp:1338
VOID QueueCompletion()
Definition: ctrlxfer.cpp:876
BOOLEAN OnEventDataEvent(_In_ EventTag *Tag, _In_ const XHCI_TRB *Event)
Definition: ctrlxfer.cpp:1375
EventTag m_Tags[TagCount]
Definition: ctrlxfer.h:140
static const ULONG TagCount
Definition: ctrlxfer.h:81
WDFDPC m_CanceledOnQueueDpc
Definition: ctrlxfer.h:144
static BOOLEAN DoorbellRungSinceFill(_In_ const XhciTransferRing *Ring)
Definition: ctrlxfer.cpp:1278
static EVT_WDF_DPC EvtCanceledOnQueueDpc
Definition: ctrlxfer.h:84
VOID BuildControlTd(_Inout_ XhciControlTransfer *Transfer)
Definition: ctrlxfer.cpp:530
static EVT_WDF_REQUEST_CANCEL EvtRequestCancel
Definition: ctrlxfer.h:85
VOID Abort(_Inout_ XhciControlTransfer *Transfer, _In_ BOOLEAN FromTimer)
Definition: ctrlxfer.cpp:984
VOID ReleaseResources(_Inout_ XhciControlTransfer *Transfer)
Definition: ctrlxfer.cpp:388
static EVT_WDF_IO_QUEUE_IO_CANCELED_ON_QUEUE EvtIoCanceledOnQueue
Definition: ctrlxfer.h:36
static EVT_WDF_IO_QUEUE_IO_DEFAULT EvtIoDefault
Definition: ctrlxfer.h:35
VOID WriteTd(_Inout_ XhciControlTransfer *Transfer)
Definition: ctrlxfer.cpp:624
static EVT_WDF_TIMER EvtTimeout
Definition: ctrlxfer.h:83
static VOID SuspendRingFill(_In_ XhciTransferRing *Ring)
Definition: ctrlxfer.cpp:1194
VOID InitTransfer(_Out_ XhciControlTransfer *Transfer, _In_ WDFREQUEST Request)
Definition: ctrlxfer.cpp:306
BOOLEAN LocateTrb(_In_ const XhciControlTransfer *Transfer, _In_ const XHCI_TRB *Event, _Out_ PULONG Bytes, _Out_ PULONG SkippedTds) const
Definition: ctrlxfer.cpp:1484
BOOLEAN m_ReclaimAndAcknowledge
Definition: ctrlxfer.h:150
LONG m_Outstanding
Definition: ctrlxfer.h:147
WDFTIMER m_Timer
Definition: ctrlxfer.h:145
XhciControlTransfer * m_Current
Definition: ctrlxfer.h:142
ULONG m_NextTag
Definition: ctrlxfer.h:146
static DRIVER_LIST_CONTROL EvtDmaReady
Definition: ctrlxfer.h:86
static VOID ResumeRingFill(_In_ XhciTransferRing *Ring)
Definition: ctrlxfer.cpp:1145
volatile LONG m_ReservedMdlBusy
Definition: ctrlxfer.h:148
LIST_ENTRY m_CanceledOnQueue
Definition: ctrlxfer.h:143
BOOLEAN m_ImmediateAllowed
Definition: ctrlxfer.h:149
BOOLEAN m_AcknowledgeExpectedEvents
Definition: ctrlxfer.h:151
static EVT_WDF_DPC EvtCompletionDpc
Definition: ctrlxfer.h:37
static NTSTATUS EnableForwardProgress(_In_ XhciTransferRing *Ring, _In_ ULONG MaxTransferSize)
Definition: ctrlxfer.cpp:260
_In_ ULONG Bytes
Definition: ctrlxfer.h:120
BOOLEAN OnTrbEvent(_In_ const XHCI_TRB *Event)
Definition: ctrlxfer.cpp:1572
static VOID AllowReclaimOnCancel(_In_ XhciTransferRing *Ring)
Definition: ctrlxfer.cpp:1221
static VOID ConsumePendingEvents(_In_ XhciTransferRing *Ring)
Definition: ctrlxfer.cpp:1240
NTSTATUS PrepareTransfer(_Inout_ XhciControlTransfer *Transfer)
Definition: ctrlxfer.cpp:425
KSPIN_LOCK m_Lock
Definition: xferring.h:177
#define _Requires_lock_held_(lock)
_Check_return_ _In_ DXGK_EVENT_TYPE _In_ ULONG Event
Definition: dispmprt.h:1287
#define DECLSPEC_ALIGN(x)
Definition: corecrt.h:141
static const WCHAR Signature[]
Definition: parser.c:141
static const WCHAR Cleanup[]
Definition: register.c:80
#define _Inout_
Definition: no_sal2.h:162
#define _Out_
Definition: no_sal2.h:160
#define _In_
Definition: no_sal2.h:158
#define _In_opt_
Definition: no_sal2.h:212
_In_ ULONGLONG _In_ ULONGLONG _In_ BOOLEAN Enable
Definition: ntddpcm.h:142
long LONG
Definition: pedump.c:60
_In_ ULONG MaxTransferSize
Definition: pipe.h:72
#define volatile
Definition: prototyp.h:117
Definition: typedefs.h:120
uint32_t * PULONG
Definition: typedefs.h:59
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_ WDFREQUEST Request
_Must_inspect_result_ _In_ UCXENDPOINT _In_ PVOID Tag
Definition: ucxendpoint.h:325
_In_ WDFCOLLECTION _In_ ULONG Index
static void Initialize()
Definition: xlate.c:212
#define const
Definition: zconf.h:233