ReactOS 0.4.17-dev-1281-g065abb3
portsm.h
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS USB Hub Driver
3 * LICENSE: MIT (https://spdx.org/licenses/MIT)
4 * PURPOSE: Port state machine for USB 2 and USB 3 hub ports
5 * COPYRIGHT: Copyright 2026 Justin Miller <justin.miller@reactos.org>
6 */
7
8#pragma once
9
11
12class HubPort;
13
14enum class PortEvent : UCHAR
15{
16 /* Timers and port control transfers */
21
22 /* Hub machine fan out and port object lifetime */
34
35 /* From the device machine */
47
48 /* Results handed back by called states and change queries, never posted */
66 SubDone,
67
68 Count
69};
70
73{
89
91typedef enum _PSM_TIMER
92{
104
106typedef enum _PSM_PENDING
107{
112
114typedef struct _PSM_PORT_BITS
115{
121
122/* Port specific state flags, inherited from parents like the engine flags */
123#define PSM_STATE_IDLE_USB2 0x00000100
124#define PSM_STATE_IDLE_USB3 0x00000200
125#define PSM_STATE_IDLE (PSM_STATE_IDLE_USB2 | PSM_STATE_IDLE_USB3)
126
127class PortMachine : public SmMachine<PortMachine, PortEvent>
128{
129 friend class SmMachine<PortMachine, PortEvent>;
130
131public:
132 VOID
135 _In_ BOOLEAN SuperSpeed);
136
137 HubPort*
138 Port() const
139 {
140 return m_Port;
141 }
142
143 BOOLEAN
145 {
146 return m_Usb3;
147 }
148
149 BOOLEAN
151 {
152 return m_HubPowerHeld;
153 }
154
155 static const SM_EVENT_INFO EventInfo[];
156
157private:
160 {
165 };
166
169 {
173 };
174
177 {
181 };
182
185 {
191 };
192
193public:
194 /* States, defined in portsm.cpp, portsm_port.cpp and portsm_frames.cpp */
195 static const State Off;
196 static const State OffInitial;
197 static const State OffEmpty;
198 static const State OffAttached;
199 static const State OffResetNeeded;
203 static const State CleaningUp;
204 static const State Deleted;
205
206 static const State Empty;
207 static const State Disconnected;
208 static const State StartingEmpty;
209 static const State Debouncing;
210 static const State DebouncingUsb2;
211 static const State DebouncingUsb3;
212 static const State OldDeviceWait;
213 static const State OverCurrentWait;
215 static const State UserResetWait;
216 static const State TimerFlush;
220
221 static const State Attached;
222 static const State Enabled;
224 static const State Suspended;
226 static const State SuspendedD3Cold;
227 static const State ResumeAckWait;
232 static const State SystemResuming;
233 static const State ErrorRestarting;
235
236 static const State Timed;
237 static const State ResetWait;
239 static const State ResetFlush;
240 static const State ResumeWait;
241 static const State ResumeRecovery;
242 static const State ResumeFlush;
243
244 static const State HubResetIssued;
245 static const State HubResetWait;
251 static const State SsLinkDisabled;
252
253 static const State Transfer;
254 static const State PoweringPort;
256 static const State SendingReset;
258 static const State SendingResume;
259 static const State SendingSuspend;
275 static const State ArmingWake;
276
277 /* Called frames */
278 static const State ChangeIdle20;
279 static const State ChangeReading20;
280 static const State ChangeAcking20;
282 static const State ChangeParked20;
283
284 static const State ChangeIdle30;
286 static const State ResetChangeIdle;
288 static const State ResetPollWait;
292
293 static const State StatusReading;
294 static const State StatusAcking;
295 static const State StatusReporting;
296 static const State StatusFailing;
297
298 static const State DrainIdle;
301 static const State DrainReading;
302 static const State DrainAcking;
303 static const State DrainRearming;
304 static const State DrainChecking;
305
306 static const State PowerOnSending;
307 static const State PowerOnSettling;
308 static const State StartReading20;
310 static const State StartReading30;
311 static const State PowerUpResetHub;
312 static const State PowerUpRearming;
313
314 static const State ResumePowering;
315 static const State ResumeSettling;
316 static const State ResumeReading;
318 static const State ReconnectWait;
320 static const State ReconnectAcking;
322 static const State ReconnectFlush;
323 static const State ResumeRereading;
327
328 static const State SuspendIdle;
329 static const State SuspendReading;
330 static const State SuspendAcking;
331 static const State SuspendRecovery;
333 static const State D3Idle;
334 static const State D3PoweredOff;
335 static const State D3PoweringUp;
336 static const State D3Debouncing;
337 static const State D3DebounceFlush;
339 static const State D3ResumeAckWait;
340 static const State D3ReconnectWait;
342
343 static const State WakeArming;
344 static const State Returning;
345
346private:
347 /* Engine hooks */
349
354
355 VOID
358
359 /* Frame 0 handlers */
361 OnOff(
382 OnEmpty(
409 OnEnabled(
445 OnTimed(
552
553 /* Frame 0 entries */
588
589 /* Called frame handlers and entries, portsm_frames.cpp */
604
632
642
659
681
721
737 OnD3Idle(
764
770
771 /* Shared code for the previous decision and one shot states */
773 PowerDown(
774 _In_ const State* Target);
776 PowerUp(
777 _In_ const State* Target);
780 _In_ const State* Target);
791 _In_ TIMER_FOLLOW_UP FollowUp);
794 _In_ TIMER_FOLLOW_UP FollowUp);
797 _In_ const State* Stay);
800 _In_ const State* Stay,
801 _In_ BOOLEAN DuringReset);
806 _In_ OLD_DEVICE_KIND Kind);
809 _In_ OLD_DEVICE_KIND Kind);
812 _In_ OLD_DEVICE_KIND Kind);
815 _In_ const State* Start,
816 _In_ const State* Refused);
822 _In_ READ_KIND Kind);
825 _In_ const State* Acking,
826 _In_ const State* Quiet);
829 _In_ BOOLEAN ResetHub);
837 _In_ BOOLEAN AfterResume);
858 BOOLEAN
860 _In_ const State* Target) const;
861 VOID
865
866public:
867 /* Actions, implemented by the port object */
874
875 VOID
877 _In_ PSM_DEVICE_NOTICE Notice);
878 VOID
882
893
906
909 VOID SendReset();
919 VOID
922
923 /* Queries, implemented by the port object */
945 VOID
947 _Out_ PPSM_PORT_BITS Bits);
948
949private:
970};
static _Out_opt_ PULONGLONG Start
unsigned char BOOLEAN
Definition: actypes.h:127
USHORT Change
Definition: bootdev.cpp:133
SM_RESULT OnOverCurrentWait(_In_ PortEvent Event)
SM_RESULT EnterErrorRestarting()
static const State EmptyHubResetWait
Definition: portsm.h:247
SM_RESULT EnterStartingEmpty()
SM_RESULT OnSystemResumeReading(_In_ PortEvent Event)
SM_RESULT EnterDisablingOnRequest()
SM_RESULT OnHubResetTimerWait(_In_ PortEvent Event)
static const State Attached
Definition: portsm.h:221
static const State ChangeIdle30
Definition: portsm.h:284
VOID SendRemoteWake(_In_ BOOLEAN Enable)
Definition: portxfer.cpp:263
SM_RESULT EnterEnablingSuperSpeed()
VOID ReattachBootDevice()
Definition: hubport.cpp:380
SM_RESULT OnReconnectWait(_In_ PortEvent Event)
SM_RESULT EnterQuiescingForHubSuspend()
static const BOOLEAN SmCompletionsFirst
Definition: portsm.h:348
SM_RESULT OnHubResetWait(_In_ PortEvent Event)
SM_RESULT OnChangeAcking20(_In_ PortEvent Event)
static const State StartReadingFirst
Definition: portsm.h:309
static const State CleaningUp
Definition: portsm.h:203
static const State ResumeRereading
Definition: portsm.h:323
VOID UpdateHubPower(_In_ BOOLEAN Idle)
Definition: portsm.cpp:238
VOID DropInterruptReference()
Definition: fanout.cpp:1000
SM_RESULT OnStatusAcking(_In_ PortEvent Event)
static const State ResetRequestWait
Definition: portsm.h:228
SM_RESULT OnResumeAckingConnect(_In_ PortEvent Event)
SM_RESULT OnWakeArming(_In_ PortEvent Event)
static const State EmptyHubResetTimerWait
Definition: portsm.h:248
static const State TimerFlush
Definition: portsm.h:216
SM_RESULT CallStatusRead(_In_ READ_KIND Kind)
PortEvent ErrorResponseDuringReset()
Definition: portxfer.cpp:640
static const State DrainIdle
Definition: portsm.h:298
SM_RESULT EnterDisablingSuperSpeed()
static const State OffEmpty
Definition: portsm.h:197
BOOLEAN m_D3AfterResume
Definition: portsm.h:966
SM_RESULT OnResumeFlush(_In_ PortEvent Event)
@ D3PendingOverCurrentCleared
Definition: portsm.h:188
@ D3PendingStop
Definition: portsm.h:186
@ D3PendingReattach
Definition: portsm.h:189
@ D3PendingOverCurrent
Definition: portsm.h:187
@ D3PendingHubReset
Definition: portsm.h:190
static const State SuspendAcking
Definition: portsm.h:330
SM_RESULT OnArmingWake(_In_ PortEvent Event)
SM_RESULT OnQuiescingForHubSuspend(_In_ PortEvent Event)
SM_RESULT OnResumeReading(_In_ PortEvent Event)
An over-current seen now, or one that came and went while suspended, is reported.
SM_RESULT OnPoweringPort(_In_ PortEvent Event)
static const State DisablingForCycleTimed
Definition: portsm.h:264
SM_RESULT EnterResetPollChecking()
BOOLEAN OldDevicePresent()
Definition: hubport.cpp:552
static const State DisablingForCycle
Definition: portsm.h:261
SM_RESULT OnReconnectFlush(_In_ PortEvent Event)
SM_RESULT OnSuperSpeedOffWait(_In_ PortEvent Event)
static const State ResumeAckWaitStopped
Definition: portsm.h:234
VOID SendReset()
Definition: portxfer.cpp:177
SM_RESULT OnAttachFailedWait(_In_ PortEvent Event)
SM_RESULT EnterDisablingPort()
SM_RESULT ResumeReadDone()
SM_RESULT OnSystemReconnectWait(_In_ PortEvent Event)
SM_RESULT EnterSuspendedD3Cold()
TIMER_FOLLOW_UP
Definition: portsm.h:160
@ FollowOverCurrent
Definition: portsm.h:163
@ FollowOverCurrentCleared
Definition: portsm.h:164
@ FollowConnect
Definition: portsm.h:161
@ FollowCycle
Definition: portsm.h:162
SM_RESULT CheckPending20(_In_ const State *Acking, _In_ const State *Quiet)
SM_RESULT OnHubResetIssued(_In_ PortEvent Event)
SM_RESULT DetachThen(_In_ PortEvent Change)
Definition: portsm.cpp:426
SM_RESULT OnResetEnabledWait(_In_ PortEvent Event)
SM_RESULT DetachTimed(_In_ PortEvent Change)
Definition: portsm.cpp:442
SM_RESULT OnOldDeviceWait(_In_ PortEvent Event)
SM_RESULT EnterPoweringPort()
static const State ResetChangeChecking
Definition: portsm.h:287
SM_RESULT EnterResetWait()
SM_RESULT EnterSettingLpmTimeout()
SM_RESULT EnterResetTimeoutStatus()
SM_RESULT OnOff(_In_ PortEvent Event)
Definition: portsm.cpp:657
SM_RESULT OnD3DebounceFlush(_In_ PortEvent Event)
static const State DrainEmptyIdleUsb2
Definition: portsm.h:299
SM_RESULT OnResetChangeIdle(_In_ PortEvent Event)
SM_RESULT EnterReadingStatus()
static const State Returning
Definition: portsm.h:344
SM_RESULT EnterSendingSuspend()
static const State DebouncingUsb2
Definition: portsm.h:210
SM_RESULT OnDrainIdle(_In_ PortEvent Event)
SM_RESULT EnterStatusReporting()
VOID SmStateChanged()
The innermost frame that does not yield to its caller decides whether the port holds the hub awake.
Definition: portsm.cpp:227
static const State HubResetTimerWait
Definition: portsm.h:246
SM_RESULT EnterD3PoweringUp()
static const State AttachFailedWait
Definition: portsm.h:249
SM_RESULT EnterChangeReporting20()
SM_RESULT OnResetPollWait(_In_ PortEvent Event)
HubPort * m_Port
Definition: portsm.h:950
SM_RESULT OnAttached(_In_ PortEvent Event)
SM_RESULT OnResetTimeoutStatus(_In_ PortEvent Event)
SM_RESULT FailToHubReset()
Definition: portsm.cpp:648
BOOLEAN m_ParkResetsHub
Definition: portsm.h:965
SM_RESULT StatusQuiet()
SM_RESULT EnterSuspendRecovery()
static const State ResumingAttached
Definition: portsm.h:230
READ_KIND m_ReadKind
Definition: portsm.h:955
VOID RecordPortSuspended()
Definition: hubport.cpp:471
VOID SendSuspend()
Definition: portxfer.cpp:206
static const State ResetPollChecking
Definition: portsm.h:289
VOID DisconnectDevice()
Definition: hubport.cpp:369
VOID SmQueuePassive()
Definition: portsm.cpp:186
BOOLEAN OverCurrentActive()
Definition: hubport.cpp:493
static const State D3Idle
Definition: portsm.h:333
BOOLEAN m_HubPowerHeld
Definition: portsm.h:952
static const State ResumeChangeIdle
Definition: portsm.h:290
SM_RESULT EnterPowerUpResetHub()
SM_RESULT OnD3ReconnectWait(_In_ PortEvent Event)
VOID SendWarmReset()
Definition: portxfer.cpp:184
PortEvent m_SuspendReport
Definition: portsm.h:957
static const State ChangeAcking20
Definition: portsm.h:280
BOOLEAN BootDeviceReturning()
Definition: hubport.cpp:558
SM_RESULT EnterPlainStatusRead()
SM_RESULT OnDisablingSuperSpeedOnRequest(_In_ PortEvent Event)
static const State ErrorRestarting
Definition: portsm.h:233
VOID RecordPortDisabled()
Definition: hubport.cpp:465
SM_RESULT OnDrainEmptyIdle(_In_ PortEvent Event)
static const State ResumeSettling
Definition: portsm.h:315
SM_RESULT OnD3ReconnectFlush(_In_ PortEvent Event)
SM_RESULT OnChangeIdle20(_In_ PortEvent Event)
SM_RESULT OnResetChangeChecking(_In_ PortEvent Event)
SM_RESULT OnResetRequestWait(_In_ PortEvent Event)
static const State DrainEmptyIdleUsb3
Definition: portsm.h:300
SM_RESULT OnErrorRestarting(_In_ PortEvent Event)
SM_RESULT OnResumeSettling(_In_ PortEvent Event)
static const State PowerUpResetHub
Definition: portsm.h:311
SM_RESULT ReportSuspendChange(_In_ PortEvent Report)
SM_RESULT OnReadingForResume(_In_ PortEvent Event)
SM_RESULT EnterChangeParked20()
SM_RESULT ResumeConnectCheck()
static const State D3DebounceFlush
Definition: portsm.h:337
static const State PowerUpRearming
Definition: portsm.h:312
static const State QueryingOverCurrent
Definition: portsm.h:255
VOID SendAckChange()
Definition: portxfer.cpp:167
static const State D3PoweredOff
Definition: portsm.h:334
SM_RESULT OnResumingAttached(_In_ PortEvent Event)
SM_RESULT OnSuspended(_In_ PortEvent Event)
static const State DrainReading
Definition: portsm.h:301
SM_RESULT EnterNotifyingOverCurrent()
SM_RESULT StatusFailed()
SM_RESULT OnResumeChangeIdle(_In_ PortEvent Event)
BOOLEAN AllowsHubSuspend(_In_ const State *Target) const
Definition: portsm.cpp:216
SM_RESULT OnOffResetNeeded(_In_ PortEvent Event)
Definition: portsm.cpp:738
BOOLEAN LinkInU0()
Definition: hubport.cpp:510
BOOLEAN DeviceConnected()
Definition: hubport.cpp:477
BOOLEAN NeedsDebounce()
Definition: hubport.cpp:565
static const State EnablingSuperSpeedOnStop
Definition: portsm.h:272
static const State D3FlushThenReturn
Definition: portsm.h:338
HubPort * Port() const
Definition: portsm.h:138
VOID SendLinkDisable()
Definition: portxfer.cpp:215
SM_RESULT EnterWithPortChange()
SM_RESULT OnD3Idle(_In_ PortEvent Event)
BOOLEAN m_D3PowerUpWarm
Definition: portsm.h:967
SM_RESULT EnterArmingWake()
SM_RESULT EnterReconnectRearming()
BOOLEAN SuperSpeedBlocked()
Definition: portxfer.cpp:697
BOOLEAN OverCurrentPersists()
Definition: portxfer.cpp:704
SM_RESULT OnAttachedDisabled(_In_ PortEvent Event)
SM_RESULT EnterDraining()
VOID SendLinkRxDetect()
Definition: portxfer.cpp:221
SM_RESULT OnDisabledInSuspend(_In_ PortEvent Event)
BOOLEAN m_ReadFresh
Definition: portsm.h:960
VOID LogLinkStateError()
Definition: hubport.cpp:619
static const State ArmingWake
Definition: portsm.h:275
static const State ChangeChecking30
Definition: portsm.h:285
VOID SendDisable()
Definition: portxfer.cpp:191
static const State HubResetWait
Definition: portsm.h:245
static const State EnablingSuperSpeedOnTimer
Definition: portsm.h:273
static const State ResumeAckWait
Definition: portsm.h:227
SM_RESULT OnDrainAcking(_In_ PortEvent Event)
SM_RESULT OnOffSuspended(_In_ PortEvent Event)
Definition: portsm.cpp:796
static const State StartReading30
Definition: portsm.h:310
static const State Off
Definition: portsm.h:195
VOID NotifyUserOfOverCurrent()
Definition: hubport.cpp:604
SM_RESULT ResumeSucceeded()
Definition: portsm.cpp:631
SM_RESULT D3ConnectCheck(_In_ BOOLEAN AfterResume)
static const State ResumeAckingConnect
Definition: portsm.h:317
SM_RESULT DrainDone()
SM_RESULT OnSendingReset(_In_ PortEvent Event)
SM_RESULT TimedHubReset()
Definition: portsm.cpp:576
SM_RESULT TakeInterruptForReset(_In_ const State *Start, _In_ const State *Refused)
Definition: portsm.cpp:594
VOID ResetChangeAccumulator()
Definition: hubport.cpp:459
BOOLEAN StopTimer()
Definition: hubport.cpp:301
static const State OffResetNeeded
Definition: portsm.h:199
static const State StatusReporting
Definition: portsm.h:295
VOID SmOnDequeue(_In_ PortEvent Event)
Definition: portsm.cpp:192
SM_RESULT EnterReturning()
Definition: portsm.cpp:297
static const State DrainRearming
Definition: portsm.h:303
SM_RESULT EnterWakeArming()
SM_RESULT OnD3FlushThenReturn(_In_ PortEvent Event)
BOOLEAN HubArmedForWake()
Definition: fanout.cpp:1018
SM_RESULT EnterStatusFailing()
VOID ForceResetOnEnumeration()
Definition: hubport.cpp:451
static const State ReconnectRearming
Definition: portsm.h:321
static const State OffSuperSpeedDisabled
Definition: portsm.h:200
VOID FixPortStateAfterPowerUp()
Definition: portxfer.cpp:692
static const State QuiescingForHubSuspend
Definition: portsm.h:263
SM_RESULT OnSuspendReading(_In_ PortEvent Event)
An error on a port that is connected but no longer enabled counts as a connect.
PSM_PENDING PendingChange()
Definition: portxfer.cpp:301
static const State SuspendIdle
Definition: portsm.h:328
VOID ReferencePort()
Definition: hubport.cpp:176
SM_RESULT ReleaseAndStopTimer()
Definition: portsm.cpp:584
static const State D3ReconnectWait
Definition: portsm.h:340
SM_RESULT ResetSucceeded()
Definition: portsm.cpp:606
SM_RESULT FailDeviceRequest()
SM_RESULT OnStatusReading(_In_ PortEvent Event)
SM_RESULT EnterOffSuspended()
Definition: portsm.cpp:789
BOOLEAN PortPowered()
Definition: hubport.cpp:516
BOOLEAN PollResetCompletion()
Definition: hubport.cpp:545
BOOLEAN HoldsHubPower() const
Definition: portsm.h:150
static const State SendingSuspend
Definition: portsm.h:259
SM_RESULT OnSettingLpmTimeout(_In_ PortEvent Event)
static const State ReconnectAcking
Definition: portsm.h:320
SM_RESULT OnOffSuperSpeedDisabled(_In_ PortEvent Event)
Definition: portsm.cpp:763
static const State UserResetWait
Definition: portsm.h:215
SM_RESULT OnTimerFlush(_In_ PortEvent Event)
static const State OffAttached
Definition: portsm.h:198
static const State DisablingSuperSpeed
Definition: portsm.h:270
OLD_DEVICE_KIND m_OldDevice
Definition: portsm.h:954
BOOLEAN TakeInterruptReference()
Definition: fanout.cpp:994
static const State Enabled
Definition: portsm.h:222
static const State DisabledInSuspend
Definition: portsm.h:225
SM_RESULT OnEmptyHubResetTimerWait(_In_ PortEvent Event)
VOID ClearPortStatus()
Definition: portxfer.cpp:685
PortEvent m_D3FlushReturn
Definition: portsm.h:958
SM_RESULT EnterDrainingEmpty()
VOID HubPowerDrop()
Definition: hubport.cpp:218
SM_RESULT OnResumeWait(_In_ PortEvent Event)
SM_RESULT EnterDisablingSuperSpeedOnRequest()
static const State ReconnectWait
Definition: portsm.h:318
SM_RESULT EnterPowerUpRearming()
static const State D3PoweringUp
Definition: portsm.h:335
static const State SystemResuming
Definition: portsm.h:232
SM_RESULT OnStartReading30(_In_ PortEvent Event)
SM_RESULT CheckConnection()
Definition: portsm.cpp:304
SM_RESULT OnDisablingSuperSpeed(_In_ PortEvent Event)
VOID DropHubResetReference()
Definition: fanout.cpp:988
VOID DereferencePort()
Definition: hubport.cpp:182
SM_RESULT ReconnectCheck()
SM_RESULT OnDisablingOnResetTimeout(_In_ PortEvent Event)
static const State Transfer
Definition: portsm.h:253
static const State Deleted
Definition: portsm.h:204
static const State DisablingOnResetTimeout
Definition: portsm.h:266
SM_RESULT SystemResumeFailed()
BOOLEAN IsSuperSpeed() const
Definition: portsm.h:144
static const State OverCurrentWait
Definition: portsm.h:213
static const State ResetEnabledWait
Definition: portsm.h:238
static const State SuperSpeedOffWait
Definition: portsm.h:250
static const State SendingResume
Definition: portsm.h:258
static const State ReadingAfterResumeTimeout
Definition: portsm.h:268
SM_RESULT StartOverCurrentWait()
Definition: portsm.cpp:418
SM_RESULT OnSendingResume(_In_ PortEvent Event)
VOID TakePortPowerReference()
Definition: fanout.cpp:976
SM_RESULT OnStartReading20(_In_ PortEvent Event)
SM_RESULT OnPowerOnSettling(_In_ PortEvent Event)
SM_RESULT OnChangeReading20(_In_ PortEvent Event)
SM_RESULT OnDrainChecking(_In_ PortEvent Event)
static const State D3ResumeAckWait
Definition: portsm.h:339
static const State ReconnectFlush
Definition: portsm.h:322
SM_RESULT EnterSuspended()
SM_RESULT OnOffAttached(_In_ PortEvent Event)
Definition: portsm.cpp:702
SM_RESULT EnterSendingReset()
BOOLEAN m_AttachForcedReset
Definition: portsm.h:962
VOID TellDevice(_In_ PSM_DEVICE_NOTICE Notice)
Definition: hubport.cpp:309
BOOLEAN m_LpmU2
Definition: portsm.h:963
PortEvent NextChange()
Definition: portxfer.cpp:555
SM_RESULT OnEnabled(_In_ PortEvent Event)
static const State Suspended
Definition: portsm.h:224
SM_RESULT OnResumePowering(_In_ PortEvent Event)
SM_RESULT OnDisablingForCycleTimed(_In_ PortEvent Event)
SM_RESULT D3PendingDone(_In_ D3_PENDING Pending)
@ ReadPlain
Definition: portsm.h:178
@ ReadNoChange
Definition: portsm.h:179
@ ReadStartResume
Definition: portsm.h:180
static const State ResumePowering
Definition: portsm.h:314
SM_RESULT OnDisablingOnRequest(_In_ PortEvent Event)
SM_RESULT OnDisablingOnSuspendTimed(_In_ PortEvent Event)
BOOLEAN m_ArmForEmpty
Definition: portsm.h:964
SM_RESULT D3StopReconnectTimer(_In_ D3_PENDING Pending)
static const State ResumeWait
Definition: portsm.h:240
static const State StatusAcking
Definition: portsm.h:294
VOID CancelUserOverCurrentReset()
Definition: hubport.cpp:612
SM_RESULT ResetHubThen(_In_ const State *Target)
Definition: portsm.cpp:281
SM_RESULT EnterResumingAttached()
VOID SendGetStatus()
Definition: portxfer.cpp:152
static const State OffInitial
Definition: portsm.h:196
SM_RESULT OnReconnectAcking(_In_ PortEvent Event)
static const State FlushBeforeSuperSpeedOff
Definition: portsm.h:219
static const State PowerOnSending
Definition: portsm.h:306
static const State ChangeReporting20
Definition: portsm.h:281
SM_RESULT OnResumeRereading(_In_ PortEvent Event)
SM_RESULT OnPowerUpParked(_In_ PortEvent Event)
SM_RESULT OnResumeAckWaitStopped(_In_ PortEvent Event)
SM_RESULT OnDisablingBeforeConnect(_In_ PortEvent Event)
SM_RESULT OnSuspendIdle(_In_ PortEvent Event)
SM_RESULT OnOffEmpty(_In_ PortEvent Event)
Definition: portsm.cpp:672
VOID QueuePassiveWork()
Definition: hubport.cpp:188
SM_RESULT EnterHubResetIssued()
VOID MarkUsb3Device()
Definition: hubport.cpp:445
OLD_DEVICE_KIND
Definition: portsm.h:169
@ OldDeviceResetInProgress
Definition: portsm.h:172
@ OldDeviceResetNeeded
Definition: portsm.h:171
@ OldDevicePlain
Definition: portsm.h:170
SM_RESULT OnStartingAttached(_In_ PortEvent Event)
static const State AttachedDisabled
Definition: portsm.h:223
VOID ReadPortBits(_Out_ PPSM_PORT_BITS Bits)
Definition: hubport.cpp:589
SM_RESULT EnterOffEmpty()
Definition: portsm.cpp:665
static const State FlushBeforeOffEmpty
Definition: portsm.h:217
SM_RESULT HandleConnectedFault(_In_ const State *Stay)
Handles a 2.0 port status that makes no sense for an attached port.
Definition: portsm.cpp:502
static const State WakeArming
Definition: portsm.h:343
static const State ResetFlush
Definition: portsm.h:239
SM_RESULT OnSuspendRecovery(_In_ PortEvent Event)
SM_RESULT EnterAckingChange()
SM_RESULT OnEmptyHubResetWait(_In_ PortEvent Event)
static const State Timed
Definition: portsm.h:236
static const State StartReading20
Definition: portsm.h:308
static const State NotifyingOverCurrent
Definition: portsm.h:214
static const State ResetPollWait
Definition: portsm.h:288
SM_RESULT OnEmpty(_In_ PortEvent Event)
SM_RESULT CheckOldDevice(_In_ OLD_DEVICE_KIND Kind)
Definition: portsm.cpp:316
D3_PENDING m_D3Pending
Definition: portsm.h:956
SM_RESULT OnDrainReading(_In_ PortEvent Event)
static const State Empty
Definition: portsm.h:206
static const State OffSuspendedUsb3
Definition: portsm.h:201
SM_RESULT OnStartingEmpty(_In_ PortEvent Event)
static const State ChangeReading20
Definition: portsm.h:279
VOID NotifyBootDeviceRemoval()
Definition: hubport.cpp:416
SM_RESULT OnResetFlush(_In_ PortEvent Event)
SM_RESULT OnD3PoweredOff(_In_ PortEvent Event)
static const State PoweringPort
Definition: portsm.h:254
static const State StatusFailing
Definition: portsm.h:296
BOOLEAN ConnectDevice()
Definition: hubport.cpp:346
VOID MarkOverCurrentCause()
Definition: hubport.cpp:504
SM_RESULT EnterCleaningUp()
Definition: portsm.cpp:827
SM_RESULT OnDebouncing(_In_ PortEvent Event)
static const State SystemResumeReading
Definition: portsm.h:324
VOID MarkUsb2Device()
Definition: hubport.cpp:439
static const State SuspendedD3Cold
Definition: portsm.h:226
SM_RESULT ReattachOrCreate(_In_ OLD_DEVICE_KIND Kind)
Definition: portsm.cpp:381
static const State SuspendRecovery
Definition: portsm.h:331
static const State ResumeFlush
Definition: portsm.h:242
SM_RESULT EnterResetPollWait()
static const State PowerOnSettling
Definition: portsm.h:307
SM_RESULT EnterSuspendReporting()
VOID SendU2Timeout()
Definition: portxfer.cpp:250
SM_RESULT OnCleaningUp(_In_ PortEvent Event)
Definition: portsm.cpp:834
static const State SendingReset
Definition: portsm.h:256
static const State Debouncing
Definition: portsm.h:209
VOID DropPortPowerReference()
Definition: fanout.cpp:982
static const State SystemResumeRereading
Definition: portsm.h:326
SM_RESULT OnFlushBeforeOff(_In_ PortEvent Event)
static const State StartingAttached
Definition: portsm.h:229
SM_RESULT OnResetPollChecking(_In_ PortEvent Event)
static const State ResetWait
Definition: portsm.h:237
VOID SendPortPower()
Definition: portxfer.cpp:228
static const State DisablingOnSuspendTimed
Definition: portsm.h:265
PortEvent m_ReturnEvent
Definition: portsm.h:959
VOID StartTimer(_In_ PSM_TIMER Timer)
Definition: hubport.cpp:230
SM_RESULT EnterPowerOnSettling()
static const State OldDeviceWait
Definition: portsm.h:212
SM_RESULT OnDisablingForCycle(_In_ PortEvent Event)
static const State ResumeReading
Definition: portsm.h:316
VOID SmDereference()
Definition: portsm.cpp:180
BOOLEAN HubPowerTake()
Definition: hubport.cpp:198
SM_RESULT OnD3PoweringUp(_In_ PortEvent Event)
SM_RESULT DeviceArrived(_In_ OLD_DEVICE_KIND Kind)
Drops requests the previous device left behind, then reattaches or creates a device.
Definition: portsm.cpp:333
static const State DrainAcking
Definition: portsm.h:302
SM_RESULT OnEnablingSuperSpeedOnStop(_In_ PortEvent Event)
SM_RESULT OnReadingAfterResumeTimeout(_In_ PortEvent Event)
VOID SmReference()
Definition: portsm.cpp:174
SM_RESULT OnResumeAckWait(_In_ PortEvent Event)
SM_RESULT EnterResumeWait()
TIMER_FOLLOW_UP m_AfterTimer
Definition: portsm.h:953
static const State SsLinkDisabled
Definition: portsm.h:251
SM_RESULT OnReconnectReading(_In_ PortEvent Event)
SM_RESULT ResumeStateDisabled()
static const State DisablingBeforeConnect
Definition: portsm.h:262
SM_RESULT EnterDebouncing()
VOID ResumeInterruptTransfer()
Definition: fanout.cpp:1012
SM_RESULT EnterDrainRearming()
SM_RESULT EnterDisconnected()
SM_RESULT ReturnFromFrame(_In_ PortEvent Event)
Definition: portsm.cpp:289
BOOLEAN DevicePresent()
Definition: hubport.cpp:484
BOOLEAN D3ColdEnabled()
Definition: hubport.cpp:572
SM_RESULT OnSsLinkDisabled(_In_ PortEvent Event)
SM_RESULT OnTimed(_In_ PortEvent Event)
PortEvent ErrorResponse()
Definition: portxfer.cpp:673
PortEvent LostChange()
Definition: portxfer.cpp:593
BOOLEAN CreateDevice()
Definition: hubport.cpp:339
SM_RESULT CycleDetach()
Definition: portsm.cpp:466
static const State D3Debouncing
Definition: portsm.h:336
static const State DebouncingUsb3
Definition: portsm.h:211
SM_RESULT OnEnablingSuperSpeedOnTimer(_In_ PortEvent Event)
BOOLEAN m_WarmResume
Definition: portsm.h:961
SM_RESULT EnterStartingAttached()
SM_RESULT OnStartReadingFirst(_In_ PortEvent Event)
VOID SendU1Timeout()
Definition: portxfer.cpp:238
SM_RESULT ParkChange20(_In_ BOOLEAN ResetHub)
SM_RESULT OnResumeRecovery(_In_ PortEvent Event)
SM_RESULT ReconnectStatusFailed()
SM_RESULT OnD3ResumeAckWait(_In_ PortEvent Event)
static const State SuspendReading
Definition: portsm.h:329
SM_RESULT TimedError(_In_ const State *Stay, _In_ BOOLEAN DuringReset)
Definition: portsm.cpp:537
SM_RESULT ResetTransferFailed()
Definition: portsm.cpp:614
static const State DisablingSuperSpeedOnRequest
Definition: portsm.h:271
SM_RESULT OnSendingSuspend(_In_ PortEvent Event)
static const State SystemReconnectWait
Definition: portsm.h:325
SM_RESULT StopTimerThen(_In_ TIMER_FOLLOW_UP FollowUp)
Definition: portsm.cpp:474
SM_RESULT OnPowerOnSending(_In_ PortEvent Event)
SM_RESULT OnUserResetWait(_In_ PortEvent Event)
SM_RESULT OnResetWait(_In_ PortEvent Event)
SM_RESULT FollowTimer(_In_ TIMER_FOLLOW_UP FollowUp)
Definition: portsm.cpp:485
static const State ResetTimeoutStatus
Definition: portsm.h:274
BOOLEAN m_ReconnectFlushOnStop
Definition: portsm.h:968
SM_RESULT EnterSendingResume()
static const State HubResetIssued
Definition: portsm.h:244
static const State SendingWarmReset
Definition: portsm.h:257
SM_RESULT OnD3Debouncing(_In_ PortEvent Event)
SM_RESULT EnterSendingWarmReset()
static const SM_EVENT_INFO EventInfo[]
Definition: portsm.h:155
static const State ResumeRecovery
Definition: portsm.h:241
static const State D3ReconnectFlush
Definition: portsm.h:341
VOID KeepHubAwake()
Definition: portsm.cpp:257
SM_RESULT OnChangeIdle30(_In_ PortEvent Event)
SM_RESULT D3StopDebounceTimer()
static const State ChangeParked20
Definition: portsm.h:282
SM_RESULT OnQueryingOverCurrent(_In_ PortEvent Event)
static const State ReadingForResume
Definition: portsm.h:267
static const State ReconnectReading
Definition: portsm.h:319
static const State SuspendReporting
Definition: portsm.h:332
static const State ChangeIdle20
Definition: portsm.h:278
SM_RESULT OnSuspendAcking(_In_ PortEvent Event)
BOOLEAN m_Usb3
Definition: portsm.h:951
SM_RESULT EnterStatusReading()
SM_RESULT OnResumingDisabled(_In_ PortEvent Event)
VOID RequestHubReset()
Definition: fanout.cpp:1006
SM_RESULT EnterSystemResuming()
static const State ResetChangeIdle
Definition: portsm.h:286
static const State Disconnected
Definition: portsm.h:207
static const State OffSuspendedUsb2
Definition: portsm.h:202
BOOLEAN ConnectChangedOnResume()
Definition: hubport.cpp:523
static const State ResumeChangeChecking
Definition: portsm.h:291
static const State StatusReading
Definition: portsm.h:293
SM_RESULT OnSystemResuming(_In_ PortEvent Event)
static const State SettingLpmTimeout
Definition: portsm.h:269
VOID ForgetDetachedDevice()
Definition: hubport.cpp:389
SM_RESULT OnSystemResumeRereading(_In_ PortEvent Event)
SM_RESULT EnterStartResumeStatusRead()
SM_RESULT OnChangeParked20(_In_ PortEvent Event)
BOOLEAN m_DrainReturnsEmpty
Definition: portsm.h:969
static const State FlushBeforeOffAttached
Definition: portsm.h:218
static const State StartingEmpty
Definition: portsm.h:208
VOID SendResume()
Definition: portxfer.cpp:197
SM_RESULT OnChangeChecking30(_In_ PortEvent Event)
static const State DrainChecking
Definition: portsm.h:304
static const State ResumingDisabled
Definition: portsm.h:231
SM_RESULT OnResumeChangeChecking(_In_ PortEvent Event)
static const State DisablingOnRequest
Definition: portsm.h:260
Run to completion engine. The first thread to post into an idle machine drains the queue; everyone el...
Definition: smengine.h:114
_Check_return_ _In_ DXGK_EVENT_TYPE _In_ ULONG Event
Definition: dispmprt.h:1287
#define FALSE
Definition: types.h:117
@ Pending
Definition: fs_rec.h:186
static void Report(const char *msg)
Definition: glmodeswitch.c:58
#define _Out_
Definition: no_sal2.h:160
#define _In_
Definition: no_sal2.h:158
@ Idle
Definition: ntdd8042.h:62
_In_ ULONGLONG _In_ ULONGLONG _In_ BOOLEAN Enable
Definition: ntddpcm.h:142
struct _PSM_PORT_BITS * PPSM_PORT_BITS
struct _PSM_PORT_BITS PSM_PORT_BITS
enum _PSM_TIMER PSM_TIMER
PortEvent
Definition: portsm.h:15
@ ErrorEnabledOnConnect
@ HubResumedWithReset
@ ChangeOverCurrentCleared
@ ErrorDisableAndCycle
@ ChangeNeedsHubReset
@ DisableSuperSpeedRequest
@ ChangeNeedsReset
@ WarmResetRequest
@ ResetPollExpired
@ ErrorEnabledWhileReset
@ UserOverCurrentReset
@ HibernateRequest
@ ChangeOverCurrent
_PSM_DEVICE_NOTICE
Definition: portsm.h:73
@ PsmNoticeDisabled
Definition: portsm.h:75
@ PsmNoticeResumeTimedOut
Definition: portsm.h:80
@ PsmNoticeSuspended
Definition: portsm.h:78
@ PsmNoticeStateEnabled
Definition: portsm.h:82
@ PsmNoticeResetRefused
Definition: portsm.h:76
@ PsmNoticeResumeRefused
Definition: portsm.h:79
@ PsmNoticeResetTimedOut
Definition: portsm.h:84
@ PsmNoticeEnabledOnReconnect
Definition: portsm.h:87
@ PsmNoticeStateSuspended
Definition: portsm.h:83
@ PsmNoticeResumed
Definition: portsm.h:77
@ PsmNoticeFailed
Definition: portsm.h:74
@ PsmNoticeStateDisabled
Definition: portsm.h:81
@ PsmNoticeResetComplete
Definition: portsm.h:85
@ PsmNoticeTimeoutUpdated
Definition: portsm.h:86
_PSM_PENDING
Definition: portsm.h:107
@ PsmPendingNone
Definition: portsm.h:109
@ PsmPendingError
Definition: portsm.h:110
@ PsmPendingChange
Definition: portsm.h:108
_PSM_TIMER
Definition: portsm.h:92
@ PsmTimerResetPoll
Definition: portsm.h:102
@ PsmTimerResumeCompletion
Definition: portsm.h:96
@ PsmTimerReconnect
Definition: portsm.h:99
@ PsmTimerOverCurrent
Definition: portsm.h:94
@ PsmTimerResumeRecovery
Definition: portsm.h:97
@ PsmTimerPowerOn
Definition: portsm.h:98
@ PsmTimerSuperSpeedDisable
Definition: portsm.h:101
@ PsmTimerDebounce
Definition: portsm.h:93
@ PsmTimerD3ColdReconnect
Definition: portsm.h:100
@ PsmTimerResetCompletion
Definition: portsm.h:95
enum _PSM_DEVICE_NOTICE PSM_DEVICE_NOTICE
enum _PSM_PENDING PSM_PENDING
One state. Handler gets every event the state sees.
Definition: smengine.h:93
BOOLEAN OverCurrentChanged
Definition: portsm.h:119
BOOLEAN Connected
Definition: portsm.h:116
BOOLEAN Enabled
Definition: portsm.h:117
BOOLEAN OverCurrent
Definition: portsm.h:118
unsigned char UCHAR
Definition: typedefs.h:53
_In_ WDFIOTARGET Target
Definition: wdfrequest.h:306
static void Initialize()
Definition: xlate.c:212