15#define PSM_YIELDS SM_STATE_YIELDS_TO_CALLER
16#define PSM_CRIT SM_STATE_CRITICAL_ONLY
17#define PSM_PASSIVE SM_STATE_NEEDS_PASSIVE
145 {
NULL,
"PowerOnSettling", 0,
174 {
NULL,
"ResumeSettling", 0,
231 {
NULL,
"SuspendRecovery", 0,
245 {
NULL,
"D3PoweringUp", 0,
249 {
NULL,
"D3Debouncing", 0,
263 {
NULL,
"D3ReconnectWait", 0,
288 if (
Event != PortEvent::StatusChanged)
325 if (
Event == PortEvent::TransferFailed)
328 if (
Event == PortEvent::TransferDone)
338 if (
Event == PortEvent::TransferFailed)
341 if (
Event == PortEvent::TransferDone)
374 if (
Event == PortEvent::StatusChanged)
407 if (
Event == PortEvent::StatusChanged)
419 case PortEvent::ChangeError:
420 case PortEvent::ChangeResetBusy:
421 case PortEvent::ChangeResetDone:
424 case PortEvent::ChangeLinkError:
427 case PortEvent::ChangeNone:
428 case PortEvent::ChangeResumed:
440 if (
Event == PortEvent::StatusChanged)
452 case PortEvent::ChangeNone:
453 case PortEvent::ChangeLinkError:
456 case PortEvent::ChangeResumed:
457 case PortEvent::ChangeError:
460 case PortEvent::ChangeResetBusy:
481 if (
Event == PortEvent::ResetPollExpired)
499 case PortEvent::ChangeLinkError:
500 case PortEvent::ChangeResumed:
503 case PortEvent::ChangeNone:
508 case PortEvent::ChangeResetBusy:
520 if (
Event == PortEvent::StatusChanged)
532 case PortEvent::ChangeNone:
535 case PortEvent::ChangeLinkError:
538 case PortEvent::ChangeError:
539 case PortEvent::ChangeResetBusy:
540 case PortEvent::ChangeResetDone:
595 if (
Event == PortEvent::TransferFailed)
598 if (
Event != PortEvent::TransferDone)
618 if (
Event == PortEvent::TransferFailed)
621 if (
Event != PortEvent::TransferDone)
648 return SmReturn(PortEvent::ChangeNeedsHubReset);
675 case PortEvent::DisableRequest:
676 case PortEvent::SuspendRequest:
677 case PortEvent::ResetRequest:
678 case PortEvent::ResumeRequest:
681 case PortEvent::HibernateRequest:
686 case PortEvent::WarmResetRequest:
691 case PortEvent::StatusChanged:
703 if (
Event == PortEvent::StatusChanged)
713 if (
Event == PortEvent::TransferFailed)
716 if (
Event != PortEvent::TransferDone)
729 if ((
Event == PortEvent::TransferDone) || (
Event == PortEvent::TransferFailed))
748 case PortEvent::ChangeNone:
749 case PortEvent::ChangeResetDone:
750 case PortEvent::ChangeNeedsHubReset:
751 case PortEvent::ChangeLinkError:
752 case PortEvent::ChangeOverCurrentCleared:
753 case PortEvent::ChangeResetBusy:
754 case PortEvent::ChangeError:
755 case PortEvent::ChangeOverCurrent:
756 case PortEvent::ChangeResumed:
757 case PortEvent::ChangeConnect:
771 if (
Event == PortEvent::TransferDone)
774 if (
Event != PortEvent::TransferFailed)
795 if (
Event == PortEvent::TimerExpired)
805 if (
Event == PortEvent::TransferFailed)
811 if (
Event != PortEvent::TransferDone)
822 if (
Event == PortEvent::TransferFailed)
828 if (
Event != PortEvent::TransferDone)
840 case PortEvent::ChangeError:
843 case PortEvent::ChangeResumed:
844 case PortEvent::ChangeResetDone:
845 case PortEvent::ChangeLinkError:
871 if (
Event == PortEvent::StatusChanged)
905 if (
Event == PortEvent::TransferDone)
908 if (
Event != PortEvent::TransferFailed)
919 if (
Event == PortEvent::TimerExpired)
935 if (
Event == PortEvent::TransferFailed)
941 if (
Event != PortEvent::TransferDone)
947 if (
bits.OverCurrent ||
bits.OverCurrentChanged)
951 : PortEvent::ChangeOverCurrentCleared);
965 if (
Event == PortEvent::TransferFailed)
968 if (
Event == PortEvent::TransferDone)
980 case PortEvent::StatusChanged:
984 case PortEvent::HubStopping:
990 case PortEvent::TimerExpired:
1026 if (
Event == PortEvent::TransferDone)
1029 if (
Event == PortEvent::TransferFailed)
1039 if (
Event == PortEvent::TransferDone)
1042 if (
Event == PortEvent::TransferFailed)
1063 if (
Event != PortEvent::TimerExpired)
1076 if (
Event == PortEvent::TransferFailed)
1079 if (
Event != PortEvent::TransferDone)
1104 case PortEvent::ChangeNone:
1108 case PortEvent::ChangeResumed:
1112 case PortEvent::ChangeConnect:
1121 case PortEvent::ChangeResetBusy:
1126 case PortEvent::ChangeLinkError:
1127 case PortEvent::ChangeResetDone:
1130 case PortEvent::ChangeError:
1144 case PortEvent::HubStopping:
1150 case PortEvent::StatusChanged:
1156 case PortEvent::TimerExpired:
1170 case PortEvent::ChangeLinkError:
1173 case PortEvent::ChangeResumed:
1174 case PortEvent::ChangeError:
1175 case PortEvent::ChangeResetDone:
1176 case PortEvent::ChangeResetBusy:
1179 case PortEvent::ChangeNone:
1182 case PortEvent::ChangeConnect:
1197 if (
Event != PortEvent::StatusChanged)
1223 if (
Event == PortEvent::TransferFailed)
1226 if (
Event != PortEvent::TransferDone)
1244 case PortEvent::ChangeResetDone:
1245 case PortEvent::ChangeDisabled:
1248 case PortEvent::ChangeError:
1250 if (
bits.Connected && !
bits.Enabled)
1254 case PortEvent::ChangeResumed:
1257 case PortEvent::ChangeOverCurrentCleared:
1258 case PortEvent::ChangeConnect:
1259 case PortEvent::ChangeOverCurrent:
1263 SM_BREAK(
"Port change not valid on a suspended port");
1272 if (
Event == PortEvent::TransferFailed)
1275 if (
Event == PortEvent::TransferDone)
1292 if (
Event == PortEvent::TimerExpired)
1396 case PortEvent::ChangeDisabled:
1397 case PortEvent::ChangeResetDone:
1398 case PortEvent::ChangeError:
1399 case PortEvent::ChangeResumed:
1404 case PortEvent::ChangeConnect:
1412 case PortEvent::ChangeOverCurrent:
1413 case PortEvent::ChangeOverCurrentCleared:
1414 case PortEvent::HubStopping:
1417 case PortEvent::ChangeNeedsHubReset:
1422 case PortEvent::ResumeRequest:
1423 case PortEvent::DisableRequest:
1427 case PortEvent::HubSuspending:
1442 case PortEvent::HubResumedInS0:
1445 case PortEvent::HubResumed:
1446 case PortEvent::HubResumedWithReset:
1472 case PortEvent::ChangeOverCurrent:
1473 case PortEvent::ChangeOverCurrentCleared:
1476 case PortEvent::SubDone:
1477 case PortEvent::ChangeConnect:
1478 case PortEvent::ChangeError:
1479 case PortEvent::ChangeResumed:
1480 case PortEvent::ChangeResetDone:
1497 case PortEvent::ChangeError:
1498 case PortEvent::ChangeDisabled:
1499 case PortEvent::ChangeConnect:
1500 case PortEvent::ChangeResumed:
1501 case PortEvent::ChangeResetDone:
1504 case PortEvent::ChangeOverCurrent:
1507 case PortEvent::ChangeOverCurrentCleared:
1510 case PortEvent::TimerExpired:
1516 case PortEvent::HubStopping:
1520 case PortEvent::HubSuspending:
1537 case PortEvent::TimerExpired:
1540 case PortEvent::HubStopping:
1544 case PortEvent::HubSuspending:
1559 if (
Event == PortEvent::TimerExpired)
1571 case PortEvent::ChangeResetDone:
1572 case PortEvent::ChangeResumed:
1573 case PortEvent::ChangeDisabled:
1574 case PortEvent::ChangeError:
1579 case PortEvent::ChangeConnect:
1586 case PortEvent::ChangeOverCurrent:
1587 case PortEvent::ChangeOverCurrentCleared:
1588 case PortEvent::HubStopping:
1591 case PortEvent::ChangeNeedsHubReset:
1596 case PortEvent::ResumeRequest:
1602 case PortEvent::DisableRequest:
1619 case PortEvent::ChangeResumed:
1620 case PortEvent::ChangeError:
1621 case PortEvent::ChangeResetDone:
1628 case PortEvent::ChangeConnect:
1633 case PortEvent::ChangeDisabled:
1638 case PortEvent::ChangeOverCurrent:
1641 case PortEvent::ChangeOverCurrentCleared:
1644 case PortEvent::ChangeNeedsHubReset:
1649 case PortEvent::HubStopping:
1652 case PortEvent::TimerExpired:
1664 if (
Event == PortEvent::TimerExpired)
1696 if (
Event == PortEvent::TransferFailed)
1698 else if (
Event != PortEvent::TransferDone)
SM_RESULT OnSystemResumeReading(_In_ PortEvent Event)
static const State ChangeIdle30
VOID SendRemoteWake(_In_ BOOLEAN Enable)
SM_RESULT OnReconnectWait(_In_ PortEvent Event)
SM_RESULT OnChangeAcking20(_In_ PortEvent Event)
static const State StartReadingFirst
static const State ResumeRereading
SM_RESULT OnStatusAcking(_In_ PortEvent Event)
SM_RESULT OnResumeAckingConnect(_In_ PortEvent Event)
SM_RESULT OnWakeArming(_In_ PortEvent Event)
SM_RESULT CallStatusRead(_In_ READ_KIND Kind)
static const State DrainIdle
@ D3PendingOverCurrentCleared
static const State SuspendAcking
SM_RESULT OnResumeReading(_In_ PortEvent Event)
An over-current seen now, or one that came and went while suspended, is reported.
SM_RESULT EnterResetPollChecking()
SM_RESULT OnReconnectFlush(_In_ PortEvent Event)
SM_RESULT ResumeReadDone()
SM_RESULT OnSystemReconnectWait(_In_ PortEvent Event)
SM_RESULT CheckPending20(_In_ const State *Acking, _In_ const State *Quiet)
SM_RESULT EnterPoweringPort()
static const State ResetChangeChecking
SM_RESULT OnD3DebounceFlush(_In_ PortEvent Event)
static const State DrainEmptyIdleUsb2
SM_RESULT OnResetChangeIdle(_In_ PortEvent Event)
SM_RESULT EnterReadingStatus()
SM_RESULT OnDrainIdle(_In_ PortEvent Event)
SM_RESULT EnterStatusReporting()
SM_RESULT EnterD3PoweringUp()
SM_RESULT EnterChangeReporting20()
SM_RESULT OnResetPollWait(_In_ PortEvent Event)
SM_RESULT EnterSuspendRecovery()
static const State ResetPollChecking
static const State D3Idle
static const State ResumeChangeIdle
SM_RESULT EnterPowerUpResetHub()
SM_RESULT OnD3ReconnectWait(_In_ PortEvent Event)
PortEvent m_SuspendReport
static const State ChangeAcking20
BOOLEAN BootDeviceReturning()
SM_RESULT EnterPlainStatusRead()
SM_RESULT OnDrainEmptyIdle(_In_ PortEvent Event)
static const State ResumeSettling
SM_RESULT OnD3ReconnectFlush(_In_ PortEvent Event)
SM_RESULT OnChangeIdle20(_In_ PortEvent Event)
SM_RESULT OnResetChangeChecking(_In_ PortEvent Event)
static const State DrainEmptyIdleUsb3
SM_RESULT OnResumeSettling(_In_ PortEvent Event)
static const State PowerUpResetHub
SM_RESULT ReportSuspendChange(_In_ PortEvent Report)
SM_RESULT EnterChangeParked20()
SM_RESULT ResumeConnectCheck()
static const State D3DebounceFlush
static const State PowerUpRearming
static const State D3PoweredOff
static const State DrainReading
SM_RESULT OnResumeChangeIdle(_In_ PortEvent Event)
BOOLEAN DeviceConnected()
static const State D3FlushThenReturn
SM_RESULT EnterWithPortChange()
SM_RESULT OnD3Idle(_In_ PortEvent Event)
SM_RESULT EnterReconnectRearming()
static const State ChangeChecking30
SM_RESULT OnDrainAcking(_In_ PortEvent Event)
static const State StartReading30
SM_RESULT D3ConnectCheck(_In_ BOOLEAN AfterResume)
static const State ResumeAckingConnect
VOID ResetChangeAccumulator()
static const State StatusReporting
static const State DrainRearming
SM_RESULT EnterWakeArming()
SM_RESULT OnD3FlushThenReturn(_In_ PortEvent Event)
BOOLEAN HubArmedForWake()
SM_RESULT EnterStatusFailing()
VOID ForceResetOnEnumeration()
static const State ReconnectRearming
VOID FixPortStateAfterPowerUp()
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()
static const State SuspendIdle
static const State D3ReconnectWait
SM_RESULT FailDeviceRequest()
SM_RESULT OnStatusReading(_In_ PortEvent Event)
BOOLEAN PollResetCompletion()
static const State ReconnectAcking
PortEvent m_D3FlushReturn
static const State ReconnectWait
SM_RESULT EnterPowerUpRearming()
static const State D3PoweringUp
SM_RESULT OnStartReading30(_In_ PortEvent Event)
SM_RESULT ReconnectCheck()
SM_RESULT SystemResumeFailed()
VOID TakePortPowerReference()
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
static const State ReconnectFlush
VOID TellDevice(_In_ PSM_DEVICE_NOTICE Notice)
SM_RESULT OnResumePowering(_In_ PortEvent Event)
SM_RESULT D3PendingDone(_In_ D3_PENDING Pending)
static const State ResumePowering
SM_RESULT D3StopReconnectTimer(_In_ D3_PENDING Pending)
static const State StatusAcking
SM_RESULT OnReconnectAcking(_In_ PortEvent Event)
static const State PowerOnSending
static const State ChangeReporting20
SM_RESULT OnResumeRereading(_In_ PortEvent Event)
SM_RESULT OnPowerUpParked(_In_ PortEvent Event)
SM_RESULT OnSuspendIdle(_In_ PortEvent Event)
VOID ReadPortBits(_Out_ PPSM_PORT_BITS Bits)
static const State WakeArming
SM_RESULT OnSuspendRecovery(_In_ PortEvent Event)
SM_RESULT EnterAckingChange()
static const State StartReading20
static const State ResetPollWait
SM_RESULT OnDrainReading(_In_ PortEvent Event)
static const State ChangeReading20
SM_RESULT OnD3PoweredOff(_In_ PortEvent Event)
static const State StatusFailing
VOID MarkOverCurrentCause()
static const State SystemResumeReading
static const State SuspendRecovery
SM_RESULT EnterResetPollWait()
static const State PowerOnSettling
SM_RESULT EnterSuspendReporting()
VOID DropPortPowerReference()
static const State SystemResumeRereading
SM_RESULT OnResetPollChecking(_In_ PortEvent Event)
VOID StartTimer(_In_ PSM_TIMER Timer)
SM_RESULT EnterPowerOnSettling()
static const State ResumeReading
SM_RESULT OnD3PoweringUp(_In_ PortEvent Event)
static const State DrainAcking
SM_RESULT OnReconnectReading(_In_ PortEvent Event)
SM_RESULT ResumeStateDisabled()
VOID ResumeInterruptTransfer()
SM_RESULT EnterDrainRearming()
SM_RESULT ReturnFromFrame(_In_ PortEvent Event)
static const State D3Debouncing
SM_RESULT OnStartReadingFirst(_In_ PortEvent Event)
SM_RESULT ParkChange20(_In_ BOOLEAN ResetHub)
SM_RESULT ReconnectStatusFailed()
SM_RESULT OnD3ResumeAckWait(_In_ PortEvent Event)
static const State SuspendReading
static const State SystemReconnectWait
SM_RESULT OnPowerOnSending(_In_ PortEvent Event)
BOOLEAN m_ReconnectFlushOnStop
SM_RESULT OnD3Debouncing(_In_ PortEvent Event)
static const State D3ReconnectFlush
SM_RESULT OnChangeIdle30(_In_ PortEvent Event)
SM_RESULT D3StopDebounceTimer()
static const State ChangeParked20
static const State ReconnectReading
static const State SuspendReporting
static const State ChangeIdle20
SM_RESULT OnSuspendAcking(_In_ PortEvent Event)
SM_RESULT EnterStatusReading()
static const State ResetChangeIdle
BOOLEAN ConnectChangedOnResume()
static const State ResumeChangeChecking
static const State StatusReading
SM_RESULT OnSystemResumeRereading(_In_ PortEvent Event)
SM_RESULT EnterStartResumeStatusRead()
SM_RESULT OnChangeParked20(_In_ PortEvent Event)
BOOLEAN m_DrainReturnsEmpty
SM_RESULT OnChangeChecking30(_In_ PortEvent Event)
static const State DrainChecking
SM_RESULT OnResumeChangeChecking(_In_ PortEvent Event)
static SM_RESULT SmTransition(_In_ const State *Target)
static SM_RESULT SmReturn(_In_ PortEvent Ev)
static SM_RESULT SmCall(_In_ const State *Start)
static SM_RESULT SmHandled()
static SM_RESULT SmUnhandled()
_Check_return_ _In_ DXGK_EVENT_TYPE _In_ ULONG Event
GLenum GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * bits
static void Report(const char *msg)
@ DisableSuperSpeedRequest
@ PsmNoticeEnabledOnReconnect
@ PsmNoticeStateSuspended
@ PsmTimerD3ColdReconnect
static const PortEvent DrainDrops[]
static const PortEvent DrainEmptyDrops20[]
static const PortEvent DrainEmptyDrops30[]
static const PortEvent FrameRemovedOnly[]
static const PortEvent FrameGoneOnly[]
#define SM_BREAK(Message)
One state. Handler gets every event the state sees.