ReactOS 0.4.17-dev-1281-g065abb3
epstate.cpp
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: Endpoint state machine
5 * COPYRIGHT: Copyright 2026 Justin Miller <justin.miller@reactos.org>
6 */
7
8/* INCLUDES *******************************************************************/
9
10#include "xhcidrv.h"
11
12#define NDEBUG
13#include <debug.h>
14
15/* GLOBALS ********************************************************************/
16
17#define XEP_STOP_TIMEOUT_MS 2000
18#define XEP_STOP_RETRY_SHORT_MS 200
19#define XEP_STOP_RETRY_LONG_MS 500
20
22
24{
25 { "CommandSucceeded", SmEventCritical, FALSE, FALSE },
26 { "CommandFailed", SmEventCritical, FALSE, FALSE },
27 { "StreamMapStopped", SmEventCritical, FALSE, FALSE },
28 { "CancelAllowed", SmEventCritical, FALSE, FALSE },
29 { "StopFailedHalted", SmEventCritical, FALSE, FALSE },
30 { "StopFailedRunning", SmEventCritical, FALSE, FALSE },
31 { "StopFailedStopped", SmEventCritical, FALSE, FALSE },
32 { "BufferAllocFailed", SmEventCompletion, FALSE, FALSE },
33 { "ExpectedEventsDone", SmEventCompletion, FALSE, FALSE },
34 { "StoppedEventSeen", SmEventCompletion, FALSE, FALSE },
35 { "HaltReported", SmEventCompletion, FALSE, FALSE },
36 { "StreamsOff", SmEventCompletion, FALSE, FALSE },
37 { "StreamsOn", SmEventCompletion, FALSE, FALSE },
38 { "TimerFired", SmEventCompletion, FALSE, FALSE },
39 { "TransferAborted", SmEventCompletion, FALSE, FALSE },
40 { "TransfersRecovered", SmEventCompletion, FALSE, FALSE },
41 { "ControllerResetStarting", SmEventRequest, FALSE, FALSE },
42 { "ControllerResetDone", SmEventRequest, FALSE, FALSE },
43 { "ControllerRemoved", SmEventRequest, FALSE, FALSE },
44 { "Disable", SmEventRequest, FALSE, FALSE },
45 { "Enable", SmEventRequest, FALSE, FALSE },
46 { "ClientReset", SmEventRequest, FALSE, FALSE },
47};
48
50 "EventInfo must have one entry per XepEvent");
51
52static const XepEvent DisabledDiscards[] =
54
57
58static const XepEvent CancelDiscards[] =
60
63
64static const XepEvent FencedDiscards[] =
66
67/* Not programmed on the controller. Initial state */
70
71/* Everything but Disabled; Disable is only ever taken by the request states below */
73 { NULL, "Active", 0, &Xep::OnActive, NULL };
74
75/* Transfer rings are mapping, the controller reset done path acks and parks */
78
80 { &Running, "Mapping", 0, &Xep::OnMapping, NULL };
81
83 { &Running, "ResetWhileMapping", 0, NULL, NULL };
84
85/* Acked a controller reset, only a disable gets it going again */
88
89/* Stopped and waiting for outside help */
92
94 { &Parked, "AwaitingClientReset", 0, &Xep::OnAwaitingClientReset, NULL, CancelDiscards };
95
96/* A command failed, the controller has to be reset or removed */
98 { &Parked, "AwaitingRecovery", 0, NULL, NULL, AwaitingRecoveryDiscards };
99
100/* The controller is resetting or gone, client resets and halts no longer matter */
103
105 { &Fenced, "AwaitingControllerReset", 0,
107
109 { &Fenced, "Removed", 0, NULL, &Xep::EnterRemoved };
110
111/* Transfer rings stop mapping, m_AfterMapping says why */
113 { &Active, "HaltingRingFill", SM_STATE_CRITICAL_ONLY,
115
116/* UCX was asked to cancel the transfers */
118 { &Active, "AwaitingCancelOk", SM_STATE_CRITICAL_ONLY,
120
121/* A command is on the command ring */
123 { &Active, "Commanding", 0, &Xep::OnCommanding, NULL };
124
126 { &Commanding, "StoppingPipe", SM_STATE_CRITICAL_ONLY,
128
130 { &Commanding, "RebuildingContextAfterStop", SM_STATE_CRITICAL_ONLY,
132
134 { &Commanding, "UpdatingDequeue", SM_STATE_CRITICAL_ONLY,
136
138 { &Commanding, "ResettingDefaultPipe", 0,
140
141/* Commands run for a client reset; a failure completes the client's request */
143 { &Commanding, "ClientResetCommand", 0, &Xep::OnClientResetCommand, NULL };
144
146 { &ClientResetCommand, "ResettingPipe", 0,
148
150 { &ClientResetCommand, "RebuildingContextForReset", 0,
152
153/* Transfer rings hand back their transfers, m_AfterReclaim says what follows */
155 { &Active, "Reclaiming", 0, &Xep::OnReclaiming, &Xep::EnterReclaiming };
156
157/* The state timer runs; leaving for anything but its expiry stops it */
160
162 { &Timed, "AwaitingStopRetry", 0, &Xep::OnAwaitingStopRetry, &Xep::EnterAwaitingStopRetry };
163
165 { &Timed, "AwaitingHalt", 0, &Xep::OnAwaitingHalt, &Xep::EnterAwaitingHalt };
166
168 { &Timed, "AwaitingStoppedEvent", 0,
170
172 { &Timed, "Draining", 0, &Xep::OnDraining, &Xep::EnterDraining };
173
174/* Left a timed state early. Waits here when the timer could not be stopped */
176 { &Active, "LeavingTimer", 0, NULL, &Xep::EnterLeavingTimer };
177
178/* FUNCTIONS ******************************************************************/
179
180VOID
183{
190
192}
193
194VOID
196{
198}
199
200VOID
202{
204}
205
208{
209 return StopTimer();
210}
211
215{
216 switch (Event)
217 {
218 case XepEvent::ControllerResetDone:
219 /* Enter again so the discards are purged once more */
221 return SmTransition(&Disabled);
222
223 case XepEvent::Enable:
224 return Remap();
225
226 default:
227 return SmUnhandled();
228 }
229}
230
234{
235 if (Event == XepEvent::Disable)
236 return SmTransition(&Disabled);
237
238 return SmUnhandled();
239}
240
244{
245 if (Event != XepEvent::ControllerResetDone)
246 return SmUnhandled();
247
250}
251
255{
256 switch (Event)
257 {
258 case XepEvent::ControllerResetStarting:
260
261 case XepEvent::StreamsOn:
262 case XepEvent::StreamsOff:
263 return Remap();
264
265 case XepEvent::TransferAborted:
267
268 case XepEvent::HaltReported:
270
271 case XepEvent::ControllerRemoved:
273
274 case XepEvent::ClientReset:
278
280 return SmTransition(&Mapping);
281
282 default:
283 return SmUnhandled();
284 }
285}
286
290{
291 switch (Event)
292 {
293 case XepEvent::ControllerResetStarting:
295
296 case XepEvent::ControllerRemoved:
297 return SmTransition(&Removed);
298
299 default:
300 return SmUnhandled();
301 }
302}
303
307{
308 if (Event != XepEvent::ClientReset)
309 return SmUnhandled();
310
311 if (CanResetAfterHalt())
313
316}
317
320{
322 return SmHandled();
323}
324
328{
329 if (Event == XepEvent::ControllerResetDone)
331
332 return SmUnhandled();
333}
334
337{
340 return SmHandled();
341}
342
345{
348 SmDiscardQueued(XepEvent::TransferAborted);
349
350 return SmHandled();
351}
352
356{
357 if (Event != XepEvent::StreamMapStopped)
358 return SmUnhandled();
359
360 switch (m_AfterMapping)
361 {
364 return BeginStop();
365
367
369 return AfterHalt();
370
373
374 default:
375 return SmTransition(&Removed);
376 }
377}
378
381{
383 return SmHandled();
384}
385
389{
390 if (Event == XepEvent::CancelAllowed)
392
393 return SmUnhandled();
394}
395
399{
400 if (Event == XepEvent::CommandFailed)
402
403 return SmUnhandled();
404}
405
408{
411 return SmHandled();
412}
413
417{
418 switch (Event)
419 {
420 case XepEvent::CommandSucceeded:
421 return AfterStopCommand();
422
423 case XepEvent::StopFailedHalted:
424 return SmTransition(&AwaitingHalt);
425
426 case XepEvent::StopFailedRunning:
428
429 case XepEvent::StopFailedStopped:
431
432 default:
433 return SmUnhandled();
434 }
435}
436
439{
441 return SmHandled();
442}
443
447{
448 if (Event == XepEvent::CommandSucceeded)
450
451 return SmUnhandled();
452}
453
456{
458 return SmHandled();
459}
460
464{
465 if (Event == XepEvent::CommandSucceeded)
467
468 return SmUnhandled();
469}
470
473{
475 return SmHandled();
476}
477
481{
482 if (Event == XepEvent::CommandSucceeded)
484
485 return SmUnhandled();
486}
487
491{
492 if (Event != XepEvent::CommandFailed)
493 return SmUnhandled();
494
497}
498
501{
503 return SmHandled();
504}
505
509{
510 if (Event == XepEvent::CommandSucceeded)
512
513 return SmUnhandled();
514}
515
518{
520 return SmHandled();
521}
522
526{
527 if ((Event != XepEvent::CommandSucceeded) && (Event != XepEvent::BufferAllocFailed))
528 return SmUnhandled();
529
530 /* A buffer failure already set the request status, the request completes either way */
532 return Remap();
533}
534
537{
540 SmDiscardQueued(XepEvent::TransferAborted);
541
542 return SmHandled();
543}
544
548{
549 if (Event == XepEvent::TransferAborted)
551
552 if (Event != XepEvent::TransfersRecovered)
553 return SmUnhandled();
554
555 switch (m_AfterReclaim)
556 {
560 return Remap();
561
565
566 default:
567 return Remap();
568 }
569}
570
573{
575 return SmHandled();
576}
577
581{
582 switch (Event)
583 {
584 case XepEvent::TimerFired:
586 return SmTransition(&StoppingPipe);
587
588 /* Controllers with this quirk report a context error for a stopped endpoint */
590 return AfterStopCommand();
591
594
595 case XepEvent::HaltReported:
597
598 default:
599 return SmUnhandled();
600 }
601}
602
605{
607 return SmHandled();
608}
609
613{
614 switch (Event)
615 {
616 case XepEvent::TimerFired:
618 return AfterHalt();
619
620 case XepEvent::HaltReported:
622
623 default:
624 return SmUnhandled();
625 }
626}
627
630{
633 return SmHandled();
634}
635
639{
640 switch (Event)
641 {
642 case XepEvent::TimerFired:
644 return AfterStoppedEvent();
645
646 case XepEvent::StoppedEventSeen:
648
649 default:
650 return SmUnhandled();
651 }
652}
653
656{
660 SmDiscardQueued(XepEvent::TransferAborted);
661
662 return SmHandled();
663}
664
668{
669 switch (Event)
670 {
671 case XepEvent::TimerFired:
673 {
675 return AfterHaltDrained();
676 }
677
679 return AfterStopDrained();
680
681 case XepEvent::ExpectedEventsDone:
683
684 case XepEvent::TransferAborted:
686
687 default:
688 return SmUnhandled();
689 }
690}
691
698{
700}
701
704{
706 return SmTransition(&Mapping);
707}
708
712{
715}
716
720{
722 return SmTransition(&Reclaiming);
723}
724
727 _In_ ULONG Milliseconds)
728{
729 m_RetryDelay = Milliseconds;
731}
732
735 _In_ BOOLEAN AfterHalt)
736{
738 return SmTransition(&Draining);
739}
740
744{
746 return SmTransition(&LeavingTimer);
747}
748
752{
753 switch (Exit)
754 {
755 case TimerExitHalt:
756 return AfterHalt();
757
759 return AfterStoppedEvent();
760
762 return AfterStopDrained();
763
764 default:
765 return AfterHaltDrained();
766 }
767}
768
771{
773 if (DelaysFirstStop())
775
776 return SmTransition(&StoppingPipe);
777}
778
779/* Stop command done; wait for the force stopped event unless the controller cannot deliver it */
782{
785
787 return AfterStopDrained();
788}
789
792{
795
797}
798
801{
803
804 /* Control endpoints are reset here, others wait for the client */
805 if (IsControlEndpoint())
807
808 return DrainFor(TRUE);
809}
810
813{
815 return DrainFor(FALSE);
816}
817
820{
824}
#define RTL_NUMBER_OF(x)
Definition: RtlRegistry.c:12
unsigned char BOOLEAN
Definition: actypes.h:127
VOID SmDiscardQueued(_In_ XepEvent Ev)
Definition: smengine.h:522
VOID SmInitialize(_In_ const State *Initial)
Definition: smengine.h:349
static SM_RESULT SmTransition(_In_ const State *Target)
Definition: smengine.h:194
SM_RESULT OnCommanding(_In_ XepEvent Event)
Definition: epstate.cpp:397
static const State AwaitingDisable
Definition: epstate.h:105
VOID ReportStoppedEvent()
Definition: epctx.cpp:2545
SM_RESULT OnResettingDefaultPipe(_In_ XepEvent Event)
Definition: epstate.cpp:479
VOID DropStoppedEvent()
Definition: epctx.cpp:2554
SM_RESULT OnDraining(_In_ XepEvent Event)
Definition: epstate.cpp:666
static const State Commanding
Definition: epstate.h:114
SM_RESULT OnDisabled(_In_ XepEvent Event)
Definition: epstate.cpp:213
VOID ResetStopAttempts()
Definition: epctx.cpp:2560
SM_RESULT EnterReclaiming()
Definition: epstate.cpp:536
SM_RESULT LeaveTimerFor(_In_ TIMER_EXIT Exit)
Definition: epstate.cpp:742
SM_RESULT OnRebuildingContextAfterStop(_In_ XepEvent Event)
Definition: epstate.cpp:445
static const State Active
Definition: epstate.h:101
SM_RESULT AfterStoppedEvent()
Definition: epstate.cpp:812
static const State AwaitingClientReset
Definition: epstate.h:107
static const State RebuildingContextForReset
Definition: epstate.h:121
static const State UpdatingDequeue
Definition: epstate.h:117
static const State Fenced
Definition: epstate.h:109
SM_RESULT OnAwaitingStoppedEvent(_In_ XepEvent Event)
Definition: epstate.cpp:637
XhciEndpoint * Endpoint() const
Definition: epstate.h:67
VOID NotifyRingsClientReset()
Definition: epctx.cpp:2593
VOID UpdateDequeuePointers()
Definition: epctx.cpp:2716
static const State ClientResetCommand
Definition: epstate.h:119
VOID AskUcxToCancel()
Definition: epctx.cpp:2625
SM_RESULT AfterHaltDrained()
Definition: epstate.cpp:819
SM_RESULT OnReclaiming(_In_ XepEvent Event)
Definition: epstate.cpp:546
SM_RESULT OnAwaitingHalt(_In_ XepEvent Event)
Definition: epstate.cpp:611
BOOLEAN StopAttemptsExhausted()
Definition: epctx.cpp:2808
VOID StartTimer(_In_ ULONG Milliseconds)
Definition: epctx.cpp:2450
SM_RESULT OnAwaitingStopRetry(_In_ XepEvent Event)
Definition: epstate.cpp:579
SM_RESULT OnRunning(_In_ XepEvent Event)
Definition: epstate.cpp:242
BOOLEAN m_DrainAfterHalt
Definition: epstate.h:323
VOID ReportTimeout(_In_ XEP_TIMEOUT Timeout)
Definition: epctx.cpp:2458
SM_RESULT AfterHalt()
Definition: epstate.cpp:800
SM_RESULT OnMapping(_In_ XepEvent Event)
Definition: epstate.cpp:253
static const State Mapping
Definition: epstate.h:103
SM_RESULT OnAwaitingClientReset(_In_ XepEvent Event)
Definition: epstate.cpp:305
static const State Draining
Definition: epstate.h:127
VOID NotifyRingsReclaim()
Definition: epctx.cpp:2618
static const State Reclaiming
Definition: epstate.h:122
@ ReclaimAfterControllerReset
Definition: epstate.h:88
SM_RESULT EnterHaltingRingFill()
Definition: epstate.cpp:344
SM_RESULT EnterAwaitingStopRetry()
Definition: epstate.cpp:572
static const State AwaitingCancelOk
Definition: epstate.h:113
VOID ResumeRingFill()
Definition: epctx.cpp:2484
SM_RESULT OnAwaitingCancelOk(_In_ XepEvent Event)
Definition: epstate.cpp:387
VOID ReconfigureForReset()
Definition: epctx.cpp:2659
VOID AckControllerReset()
Definition: epctx.cpp:2502
VOID ResetEndpoint()
Definition: epctx.cpp:2748
static const State ResettingPipe
Definition: epstate.h:120
SM_RESULT EnterUpdatingDequeue()
Definition: epstate.cpp:455
SM_RESULT EnterResettingPipe()
Definition: epstate.cpp:500
static const State Timed
Definition: epstate.h:123
static const State StoppingPipe
Definition: epstate.h:115
VOID NotifyRingsReclaimOnCancel()
Definition: epctx.cpp:2605
SM_RESULT EnterLeavingTimer()
Runs the timer exit; the engine already stopped the timer, so it cannot fire after this.
Definition: epstate.cpp:697
VOID Initialize(_In_ XhciEndpoint *Endpoint)
Definition: epstate.cpp:181
SM_RESULT AfterStopDrained()
Definition: epstate.cpp:791
SM_RESULT RunTimerExit(_In_ TIMER_EXIT Exit)
Definition: epstate.cpp:750
VOID CompleteResetRequestIfAllowed()
Definition: epctx.cpp:2536
VOID SuspendRingFill()
Definition: epctx.cpp:2496
SM_RESULT SuspendRingFillFor(_In_ MAPPING_STOP_REASON Reason)
Definition: epstate.cpp:710
VOID CompleteResetRequest()
Definition: epctx.cpp:2511
SM_RESULT OnActive(_In_ XepEvent Event)
Definition: epstate.cpp:232
SM_RESULT EnterAwaitingStoppedEvent()
Definition: epstate.cpp:629
static const State ResetWhileMapping
Definition: epstate.h:104
RECLAIM_REASON m_AfterReclaim
Definition: epstate.h:320
BOOLEAN OnPrimaryInterrupterOnly()
Definition: epctx.cpp:2784
SM_RESULT OnHaltingRingFill(_In_ XepEvent Event)
Definition: epstate.cpp:354
SM_RESULT EnterDraining()
Definition: epstate.cpp:655
VOID SendStopCommand()
Definition: epctx.cpp:2572
static const State LeavingTimer
Definition: epstate.h:128
VOID PurgeStreamQueues()
Definition: epctx.cpp:2632
BOOLEAN CanResetAfterHalt()
Definition: epctx.cpp:2864
static const State AwaitingStoppedEvent
Definition: epstate.h:126
SM_RESULT EnterRebuildingContextAfterStop()
Definition: epstate.cpp:438
SM_RESULT EnterRemoved()
Definition: epstate.cpp:336
BOOLEAN SmCancelTimer()
Definition: epstate.cpp:207
static const State RebuildingContextAfterStop
Definition: epstate.h:116
SM_RESULT OnUpdatingDequeue(_In_ XepEvent Event)
Definition: epstate.cpp:462
VOID RequestControllerReset()
Definition: epctx.cpp:2766
SM_RESULT EnterAwaitingCancelOk()
Definition: epstate.cpp:380
SM_RESULT OnParked(_In_ XepEvent Event)
Definition: epstate.cpp:288
VOID NotifyRingsHalted()
Definition: epctx.cpp:2587
TIMER_EXIT m_AfterTimer
Definition: epstate.h:321
static const State ResettingDefaultPipe
Definition: epstate.h:118
SM_RESULT OnClientResetCommand(_In_ XepEvent Event)
Definition: epstate.cpp:489
BOOLEAN IgnoresStopContextError()
Definition: epctx.cpp:2796
SM_RESULT EnterResettingDefaultPipe()
Definition: epstate.cpp:472
VOID CountStopAttempt()
Definition: epctx.cpp:2566
SM_RESULT BeginStop()
Definition: epstate.cpp:770
static const State AwaitingHalt
Definition: epstate.h:125
static const State Removed
Definition: epstate.h:111
VOID NotifyRingsStoppedEvent()
Definition: epctx.cpp:2599
SM_RESULT AfterStopCommand()
Definition: epstate.cpp:781
MAPPING_STOP_REASON m_AfterMapping
Definition: epstate.h:319
VOID ResetDefaultPipe()
Definition: epctx.cpp:2733
static const State Disabled
Definition: epstate.h:100
SM_RESULT EnterRebuildingContextForReset()
Definition: epstate.cpp:517
SM_RESULT OnStoppingPipe(_In_ XepEvent Event)
Definition: epstate.cpp:415
static const State Parked
Definition: epstate.h:106
BOOLEAN StopTimer()
Definition: epctx.cpp:2444
static const State HaltingRingFill
Definition: epstate.h:112
BOOLEAN ReclaimIgnoresCancel() const
Definition: epstate.h:265
XhciEndpoint * m_Endpoint
Definition: epstate.h:318
static const State Running
Definition: epstate.h:102
SM_RESULT OnResettingPipe(_In_ XepEvent Event)
Definition: epstate.cpp:507
SM_RESULT OnAwaitingControllerReset(_In_ XepEvent Event)
Definition: epstate.cpp:326
BOOLEAN ShouldReconfigureForReset()
Definition: epctx.cpp:2841
static const State AwaitingRecovery
Definition: epstate.h:108
static const SM_EVENT_INFO EventInfo[]
Definition: epstate.h:72
BOOLEAN DelaysFirstStop()
Definition: epctx.cpp:2790
VOID DereferenceEndpoint()
Definition: epctx.cpp:2438
SM_RESULT DrainFor(_In_ BOOLEAN AfterHalt)
Definition: epstate.cpp:734
static const State AwaitingControllerReset
Definition: epstate.h:110
SM_RESULT Remap()
Definition: epstate.cpp:703
BOOLEAN DoorbellRungSinceFill()
Definition: epctx.cpp:2814
SM_RESULT RetryStopAfter(_In_ ULONG Milliseconds)
Definition: epstate.cpp:726
SM_RESULT EnterStoppingPipe()
Definition: epstate.cpp:407
static const State AwaitingStopRetry
Definition: epstate.h:124
VOID ReconfigureAfterStop()
Definition: epctx.cpp:2694
VOID RestartStreamQueues()
Definition: epctx.cpp:2645
BOOLEAN IsControlEndpoint()
Definition: epctx.cpp:2778
SM_RESULT ReclaimFor(_In_ RECLAIM_REASON Reason)
Definition: epstate.cpp:718
BOOLEAN NeedsContextRebuildAfterStop()
Definition: epctx.cpp:2834
VOID ReferenceEndpoint()
Definition: epctx.cpp:2432
VOID NotifyRingsDrainEvents()
Definition: epctx.cpp:2611
SM_RESULT OnRebuildingContextForReset(_In_ XepEvent Event)
Definition: epstate.cpp:524
SM_RESULT EnterAwaitingHalt()
Definition: epstate.cpp:604
SM_RESULT EnterAwaitingControllerReset()
Definition: epstate.cpp:319
_Check_return_ _In_ DXGK_EVENT_TYPE _In_ ULONG Event
Definition: dispmprt.h:1287
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
static const XepEvent FencedDiscards[]
Definition: epstate.cpp:64
#define XEP_STOP_TIMEOUT_MS
Definition: epstate.cpp:17
#define XEP_STOP_RETRY_SHORT_MS
Definition: epstate.cpp:18
#define XEP_STOP_RETRY_LONG_MS
Definition: epstate.cpp:19
static const XepEvent DisabledDiscards[]
Definition: epstate.cpp:52
static const XepEvent AwaitingRecoveryDiscards[]
Definition: epstate.cpp:61
XhciEndpointMachine Xep
Definition: epstate.cpp:21
static const XepEvent CancelDiscards[]
Definition: epstate.cpp:58
static const XepEvent AwaitingDisableDiscards[]
Definition: epstate.cpp:55
XepEvent
Definition: epstate.h:15
@ TransferAborted
@ ControllerResetStarting
@ ControllerRemoved
@ XepTimeoutStoppedEvent
Definition: epstate.h:51
@ XepTimeoutDrainAfterStop
Definition: epstate.h:52
@ XepTimeoutHalt
Definition: epstate.h:50
@ XepTimeoutDrainAfterHalt
Definition: epstate.h:53
_In_ UCXHUB_DEVICE_CONTEXT _In_ UCXENDPOINT Endpoint
Definition: hubucx.h:238
PVOID PVOID PWCHAR PVOID USHORT PULONG Reason
Definition: env.c:47
@ Running
Definition: ketypes.h:409
#define _In_
Definition: no_sal2.h:158
#define SM_STATE_TAKES_REQUESTS
Definition: smengine.h:39
#define SM_STATE_STOP_TIMER_ON_EXIT
Definition: smengine.h:43
@ SmEventRequest
Definition: smengine.h:25
@ SmEventCompletion
Definition: smengine.h:24
@ SmEventCritical
Definition: smengine.h:27
#define SM_STATE_CRITICAL_ONLY
Definition: smengine.h:41
static void Exit(void)
Definition: sock.c:1330
One state. Handler gets every event the state sees.
Definition: smengine.h:93
uint32_t ULONG
Definition: typedefs.h:59
_In_ ULONG _In_ BOOLEAN Active
Definition: potypes.h:564