ReactOS 0.4.17-dev-1281-g065abb3
crsm.h
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS USB Controller Extension
3 * LICENSE: MIT (https://spdx.org/licenses/MIT)
4 * PURPOSE: Controller reset state machine
5 * COPYRIGHT: Copyright 2026 Justin Miller <justin.miller@reactos.org>
6 */
7
8#pragma once
9
11
12class UcxController;
13
14enum class CrEvent : UCHAR
15{
16 /* Root hub and failure notifications, wait until the machine is idle */
21
22 /* From the controller driver, a second copy is refused while one is queued */
25
26 /* Completions of work the machine started */
29
30 Count
31};
32
33class ControllerResetMachine : public SmMachine<ControllerResetMachine, CrEvent>
34{
36
37public:
38 VOID
41
43 Controller() const
44 {
45 return m_Controller;
46 }
47
48 static const SM_EVENT_INFO EventInfo[];
49
50private:
51 /* States */
52 static const State RootHubOn;
53 static const State RootHubOff;
55 static const State Resetting;
57 static const State PreparingDevices;
60 static const State AwaitingHubReset;
61 static const State Failed;
62 static const State FailedOn;
63 static const State FailedOff;
64
65 /* Engine hooks */
66 VOID
68
69 VOID
71
72 VOID
74
75 /* Handlers */
104 OnFailed(
112
113 /* Entry actions */
117
118 /* Helpers */
121 _In_ BOOLEAN ForHub);
122
125
127 PowerDown(
128 _In_ BOOLEAN ResetSeen);
129
130 /* Actions, implemented by the controller object */
144 VOID
151
156};
unsigned char BOOLEAN
Definition: actypes.h:127
SM_RESULT OnRootHubOff(_In_ CrEvent Event)
m_ResetSeen: a reset done while off was caught up. m_ResetPending: a reset is owed.
Definition: crsm.cpp:138
SM_RESULT OnDrainingReferences(_In_ CrEvent Event)
Definition: crsm.cpp:207
SM_RESULT OnResettingController(_In_ CrEvent Event)
Definition: crsm.cpp:241
static const State RootHubOn
Definition: crsm.h:52
SM_RESULT OnFailedOff(_In_ CrEvent Event)
Definition: crsm.cpp:330
BOOLEAN m_ResetPending
Definition: crsm.h:154
static const State RootHubOff
Definition: crsm.h:53
SM_RESULT OnPreparingDevices(_In_ CrEvent Event)
Definition: crsm.cpp:224
SM_RESULT OnAwaitingHubReset(_In_ CrEvent Event)
Definition: crsm.cpp:273
SM_RESULT EndResetForHub()
Definition: crsm.cpp:357
static const State FailedOff
Definition: crsm.h:63
static const SM_EVENT_INFO EventInfo[]
Definition: crsm.h:48
SM_RESULT OnRootHubOn(_In_ CrEvent Event)
Definition: crsm.cpp:110
VOID SmDereference()
Definition: crsm.cpp:98
static const State DrainingReferences
Definition: crsm.h:56
static const State PreparingDevicesOff
Definition: crsm.h:54
SM_RESULT EnterPreparingDevices()
Definition: crsm.cpp:217
SM_RESULT StartReset(_In_ BOOLEAN ForHub)
Definition: crsm.cpp:349
BOOLEAN m_ForHub
Definition: crsm.h:153
VOID CompleteHubReset(_In_ BOOLEAN Succeeded)
Definition: hostreset.cpp:228
UcxController * m_Controller
Definition: crsm.h:152
UcxController * Controller() const
Definition: crsm.h:43
BOOLEAN m_ResetSeen
Definition: crsm.h:155
static const State Resetting
Definition: crsm.h:55
SM_RESULT EnterDrainingReferences()
Definition: crsm.cpp:197
SM_RESULT OnResetting(_In_ CrEvent Event)
Definition: crsm.cpp:186
SM_RESULT OnPreparingDevicesOff(_In_ CrEvent Event)
Definition: crsm.cpp:173
static const State AwaitingHubReset
Definition: crsm.h:60
static const State AwaitingResetDone
Definition: crsm.h:59
SM_RESULT EnterResettingController()
Definition: crsm.cpp:234
static const State Failed
Definition: crsm.h:61
SM_RESULT OnFailed(_In_ CrEvent Event)
Definition: crsm.cpp:301
SM_RESULT OnAwaitingResetDone(_In_ CrEvent Event)
Definition: crsm.cpp:263
VOID ReleaseResetCompleteWaiter()
Definition: hostreset.cpp:255
static const State ResettingController
Definition: crsm.h:58
VOID LetResetCompletionProceed()
Definition: hostreset.cpp:249
SM_RESULT OnFailedOn(_In_ CrEvent Event)
Definition: crsm.cpp:311
static const State FailedOn
Definition: crsm.h:62
static const State PreparingDevices
Definition: crsm.h:57
Run to completion engine. The first thread to post into an idle machine drains the queue; everyone el...
Definition: smengine.h:114
CrEvent
Definition: crsm.h:15
@ RootHubPoweredUp
@ DevicesReady
@ ControllerLost
@ ControllerNeedsReset
@ ControllerResetDone
Definition: epctx.cpp:1259
@ ResetBlocksCleared
@ HubRequestsReset
@ RootHubPoweringDown
_Check_return_ _In_ DXGK_EVENT_TYPE _In_ ULONG Event
Definition: dispmprt.h:1287
#define _In_
Definition: no_sal2.h:158
One state. Handler gets every event the state sees.
Definition: smengine.h:93
unsigned char UCHAR
Definition: typedefs.h:53
_Must_inspect_result_ _In_ WDFDEVICE _In_ PUCX_CONTROLLER_CONFIG _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ UCXCONTROLLER * Controller
static void Initialize()
Definition: xlate.c:212