36 {
NULL,
"AtAddressZeroAgain", 0,
51 {
NULL,
"ClaimingAddressZeroAgain", 0,
109 case DsmEvent::Succeeded:
110 case DsmEvent::Failed:
111 case DsmEvent::FailedDeviceEnabled:
112 case DsmEvent::DetachedDeviceEnabled:
113 case DsmEvent::PortDetached:
114 case DsmEvent::PdoCleanup:
128 if (
Event != DsmEvent::ControllerIoctlDone)
141 if (
Event != DsmEvent::ControllerIoctlDone)
151 if (
Event != DsmEvent::ControllerIoctlDone)
166 case DsmEvent::ControllerIoctlFailed:
173 case DsmEvent::ControllerIoctlDone:
195 case DsmEvent::PortDetached:
196 return EndWith(DsmEvent::PortDetached);
198 case DsmEvent::PortFault:
199 case DsmEvent::PortDisableDone:
200 return EndWith(DsmEvent::Failed);
202 case DsmEvent::HubSuspending:
203 case DsmEvent::HubStopping:
215 if ((
Event != DsmEvent::PortDisableDone) && (
Event != DsmEvent::PortFault))
234 case DsmEvent::SuspendedAfterHubResume:
235 case DsmEvent::ResumedWithHub:
236 case DsmEvent::NeedsReenumeration:
240 case DsmEvent::HubStoppedHoldingReference:
243 case DsmEvent::PortDetached:
244 return EndWith(DsmEvent::PortDetached);
246 case DsmEvent::HubStarted:
261 case DsmEvent::PortDetached:
265 case DsmEvent::HubStopping:
266 case DsmEvent::HubSuspending:
269 case DsmEvent::ControllerIoctlDone:
272 case DsmEvent::ControllerIoctlFailed:
286 case DsmEvent::ControllerIoctlFailed:
287 return EndWith(DsmEvent::DetachedDeviceEnabled);
289 case DsmEvent::ControllerIoctlDone:
291 return EndWith(DsmEvent::DetachedDeviceEnabled);
304 case DsmEvent::ControllerIoctlFailed:
307 case DsmEvent::ControllerIoctlDone:
327 if (
Event != DsmEvent::ControllerIoctlDone)
339 case DsmEvent::PortDetached:
340 return EndWith(DsmEvent::PortDetached);
342 case DsmEvent::PortFault:
343 case DsmEvent::PortDisableDone:
374 if (
Event != DsmEvent::ControllerIoctlDone)
387 case DsmEvent::PortDetached:
388 return EndWith(DsmEvent::DetachedDeviceEnabled);
390 case DsmEvent::PortFault:
391 case DsmEvent::PortDisableDone:
392 return EndWith(DsmEvent::FailedDeviceEnabled);
394 case DsmEvent::HubSuspending:
395 case DsmEvent::HubStopping:
409 case DsmEvent::PortDetached:
410 return EndWith(DsmEvent::DetachedDeviceEnabled);
412 case DsmEvent::PortFault:
413 case DsmEvent::PortDisableDone:
425 if (
Event != DsmEvent::ControllerIoctlDone)
437 case DsmEvent::TimerFired:
440 case DsmEvent::PortDetached:
443 case DsmEvent::HubSuspending:
444 case DsmEvent::HubStopping:
456 return EndWith(DsmEvent::DetachedDeviceEnabled);
465 if (
Event != DsmEvent::TimerFired)
468 return EndWith(DsmEvent::DetachedDeviceEnabled);
486 case DsmEvent::TimerFired:
489 case DsmEvent::PortDetached:
515 case DsmEvent::Succeeded:
518 case DsmEvent::Failed:
521 case DsmEvent::PortDetached:
523 return EndWith(DsmEvent::DetachedDeviceEnabled);
525 case DsmEvent::HubSuspending:
526 case DsmEvent::HubStopping:
551 if (
Event != DsmEvent::ControllerIoctlDone)
563 case DsmEvent::PortDetached:
565 return EndWith(DsmEvent::DetachedDeviceEnabled);
567 case DsmEvent::HubSuspending:
568 case DsmEvent::HubStopping:
572 case DsmEvent::PortDisableDone:
573 case DsmEvent::PortFault:
575 return EndWith(DsmEvent::FailedDeviceEnabled);
588 case DsmEvent::HubSuspending:
589 case DsmEvent::HubStopping:
593 case DsmEvent::PortDetached:
597 case DsmEvent::TimerFired:
613 case DsmEvent::PortResetDone:
616 case DsmEvent::HubStopping:
617 case DsmEvent::HubSuspending:
621 case DsmEvent::PortResetAbortedForSuspend:
624 case DsmEvent::PortResetTimeout:
626 return EndWith(DsmEvent::Failed);
628 case DsmEvent::PortFault:
629 return EndWith(DsmEvent::Failed);
631 case DsmEvent::PortDetached:
632 return EndWith(DsmEvent::PortDetached);
643 if (
Event != DsmEvent::ControllerIoctlDone)
647 return EndWith(DsmEvent::Failed);
658 case DsmEvent::TimerFired:
661 case DsmEvent::HubStopping:
662 case DsmEvent::HubSuspending:
663 case DsmEvent::PortDetached:
675 if ((
Event != DsmEvent::TransferDone) && (
Event != DsmEvent::TransferFailed))
681 return EndWith(DsmEvent::Failed);
690 case DsmEvent::PortResetDone:
693 case DsmEvent::PortResetTimeout:
695 return EndWith(DsmEvent::Failed);
697 case DsmEvent::PortFault:
698 return EndWith(DsmEvent::Failed);
700 case DsmEvent::PortResetAbortedForSuspend:
703 case DsmEvent::PortDetached:
704 return EndWith(DsmEvent::PortDetached);
706 case DsmEvent::HubStopping:
707 case DsmEvent::HubSuspending:
722 case DsmEvent::ControllerIoctlDone:
726 case DsmEvent::ControllerIoctlFailed:
727 return EndWith(DsmEvent::Failed);
740 case DsmEvent::TimerFired:
741 return EndWith(DsmEvent::Succeeded);
743 case DsmEvent::HubStopping:
744 case DsmEvent::HubSuspending:
745 case DsmEvent::PortDetached:
761 case DsmEvent::Failed:
764 case DsmEvent::Succeeded:
769 case DsmEvent::PortDetached:
771 return EndWith(DsmEvent::DetachedDeviceEnabled);
773 case DsmEvent::HubStopping:
774 case DsmEvent::HubSuspending:
790 case DsmEvent::TransferDone:
802 case DsmEvent::TransferFailed:
825 if (
Event != DsmEvent::PortDetached)
828 return EndWith(DsmEvent::DetachedDeviceEnabled);
837 case DsmEvent::TransferFailed:
840 case DsmEvent::TransferDone:
864 case DsmEvent::TransferFailed:
867 case DsmEvent::TransferDone:
894 case DsmEvent::TransferDone:
897 case DsmEvent::TransferFailed:
923 case DsmEvent::Failed:
926 case DsmEvent::Succeeded:
939 return EndWith(DsmEvent::Succeeded);
948 if ((
Event != DsmEvent::ControllerIoctlDone) && (
Event != DsmEvent::ControllerIoctlFailed))
951 return EndWith(DsmEvent::Succeeded);
960 return EndWith(DsmEvent::Succeeded);
969 case DsmEvent::TransferDone:
970 return EndWith(DsmEvent::Succeeded);
972 case DsmEvent::TransferFailed:
1005 case DsmEvent::Succeeded:
1020 case DsmEvent::Failed:
1024 case DsmEvent::FailedDeviceEnabled:
1029 case DsmEvent::DetachedDeviceEnabled:
1033 case DsmEvent::PortDetached:
1047 if (
Event != DsmEvent::Succeeded)
1066 case DsmEvent::Failed:
1070 case DsmEvent::Succeeded:
1073 case DsmEvent::PortDetached:
1089 case DsmEvent::Succeeded:
1096 case DsmEvent::DetachedDeviceEnabled:
1099 case DsmEvent::Failed:
1100 case DsmEvent::FailedDeviceEnabled:
1103 case DsmEvent::PortDetached:
1120 case DsmEvent::Succeeded:
1125 case DsmEvent::Failed:
1128 case DsmEvent::PortDetached:
1141 if (
Event != DsmEvent::ControllerIoctlDone)
1155 case DsmEvent::Succeeded:
1158 case DsmEvent::Failed:
1161 case DsmEvent::DetachedDeviceEnabled:
1164 case DsmEvent::FailedDeviceEnabled:
1167 case DsmEvent::PdoCleanup:
1170 case DsmEvent::PortDetached:
1182 if (
Event != DsmEvent::ControllerIoctlDone)
1192 if (
Event != DsmEvent::ControllerIoctlDone)
1205 case DsmEvent::Succeeded:
1208 case DsmEvent::Failed:
1212 case DsmEvent::DetachedDeviceEnabled:
1216 case DsmEvent::FailedDeviceEnabled:
1219 case DsmEvent::PortDetached:
1240 if (
Event != DsmEvent::ControllerIoctlDone)
1254 case DsmEvent::Succeeded:
1257 case DsmEvent::FailedDeviceEnabled:
1260 case DsmEvent::DetachedDeviceEnabled:
1264 case DsmEvent::Failed:
1268 case DsmEvent::PortDetached:
1281 if (
Event != DsmEvent::ControllerIoctlDone)
1295 case DsmEvent::Succeeded:
1309 case DsmEvent::DetachedDeviceEnabled:
1312 case DsmEvent::Failed:
1315 case DsmEvent::FailedDeviceEnabled:
1319 case DsmEvent::PortDetached:
1331 if (
Event != DsmEvent::Succeeded)
1347 case DsmEvent::Succeeded:
1350 case DsmEvent::Failed:
1353 case DsmEvent::PortDetached:
1368 case DsmEvent::PortDisableDone:
1369 case DsmEvent::PortFault:
1372 case DsmEvent::PortDetached:
1387 case DsmEvent::Succeeded:
1402 case DsmEvent::FailedDeviceEnabled:
1407 case DsmEvent::Failed:
1411 case DsmEvent::DetachedDeviceEnabled:
1415 case DsmEvent::PortDetached:
1428 if (
Event != DsmEvent::Succeeded)
1452 case DsmEvent::Succeeded:
1456 case DsmEvent::Failed:
1459 case DsmEvent::PortDetached:
1475 case DsmEvent::Failed:
1476 case DsmEvent::FailedDeviceEnabled:
1479 case DsmEvent::Succeeded:
1486 case DsmEvent::DetachedDeviceEnabled:
1491 case DsmEvent::PortDetached:
1506 case DsmEvent::Failed:
1509 case DsmEvent::Succeeded:
1513 case DsmEvent::PortDetached:
static const State BootDeviceResetPending
VOID ReleaseAddressZero()
SM_RESULT ReconfiguredAfterResume(_In_ DsmEvent Event)
SM_RESULT ReenumPdCharging()
SM_RESULT EnterLinkPowerAgain()
static const State ReenumeratingForPower
SM_RESULT ReenumDoneForHubResumeConfigured(_In_ DsmEvent Event)
static const State StoppedAddressed
BOOLEAN AltEnumNeededOnReenum()
SM_RESULT Again20SecondResetNotified(_In_ DsmEvent Event)
BOOLEAN DeviceProgrammingLost()
static const State Reenumerating
SM_RESULT ReenumTreePurgedUnconfigured(_In_ DsmEvent Event)
static const State Requesting
SM_RESULT ReenumPurgedHoldingAddressZero(_In_ DsmEvent Event)
SM_RESULT ReconfiguredForClient(_In_ DsmEvent Event)
SM_RESULT ReenumRetryDelayEndedHoldingAddressZero(_In_ DsmEvent Event)
SM_RESULT ReenumPortOffForHubDeviceEnabled(_In_ DsmEvent Event)
SM_RESULT ReenumAltEnumSent(_In_ DsmEvent Event)
static const State AwaitingPort
SM_RESULT ReenumForHubResume(_In_ BOOLEAN Configured)
SM_RESULT ReenumDisabledThenPark(_In_ DsmEvent Event)
SM_RESULT StartSuperSpeedReset()
BOOLEAN m_ReenumForceReset
SM_RESULT CallWait(_In_ const State *Target, _In_ DSM_NEXT Next)
SM_RESULT Link20Updated(_In_ DsmEvent Event)
BOOLEAN m_DetachEndsReset
VOID SendAltEnumCommand()
SM_RESULT ReenumCycleAfterResumeFailure()
VOID DisableEndpointsAndNotify()
SM_RESULT ReenumPdChargingSet(_In_ DsmEvent Event)
SM_RESULT ReenumForResume(_In_ BOOLEAN Configured)
VOID RequestPortDisable()
SM_RESULT ReenumFailedForHubResume(_In_ DsmEvent Event)
BOOLEAN SupportsPdCharging()
SM_RESULT ReenumTimerFlushedForHub(_In_ DsmEvent Event)
static const State DisablingEndpoints
static const State SettingPdCharging
SM_RESULT ReenumDoneForStart(_In_ DsmEvent Event)
SM_RESULT BootDeviceNotifyDetached()
static const State WaitingForController
SM_RESULT ReenumClaimEndedOnDetach(_In_ DsmEvent Event)
SM_RESULT ReenumCleanUpOldConfig()
SM_RESULT ReenumDisableForHub()
SM_RESULT EnterReenumerating()
SM_RESULT Again20FirstResetDone(_In_ DsmEvent Event)
static const State ConfiguredOn
SM_RESULT ReenumRetryOrFail()
SM_RESULT ReenumConfigRead(_In_ DsmEvent Event)
static const State AtAddressZeroAgain
SM_RESULT OnAddressingAgain(_In_ DsmEvent Event)
SM_RESULT Again20FirstDescriptorRead(_In_ DsmEvent Event)
static const State IoctlAfterDetach
static const State ParkedPortOff
SM_RESULT ReenumPurgedAfterFailure(_In_ DsmEvent Event)
SM_RESULT ReenumDisabledForHub(_In_ DsmEvent Event)
static const State TimerAfterDetach
BOOLEAN KindWithin(_In_ ULONG Allowed)
A device with no version or speed known yet passes for any version or speed.
SM_RESULT Again20SecondDelayEnded(_In_ DsmEvent Event)
SM_RESULT ReenumForPreStart()
VOID ClearReprogramNeeded()
SM_RESULT EnterAtAddressZeroAgain()
SM_RESULT ReenumPortOffAfterFailure(_In_ DsmEvent Event)
BOOLEAN EnumRetriesUsedUp()
static const State ClaimingAddressZeroAgain
SM_RESULT Again20FirstDelayEnded(_In_ DsmEvent Event)
SM_RESULT ReenumStopRetryForHub()
SM_RESULT OnParkedForHubAgain(_In_ DsmEvent Event)
VOID ReadConfigDescriptorHeader()
SM_RESULT EndWith(_In_ DsmEvent Result)
SM_RESULT ReenumDoneForClientUnconfigured(_In_ DsmEvent Event)
SM_RESULT EndAfterTimer(_In_ DsmEvent Event)
SM_RESULT ReenumForBootResume()
SM_RESULT EnterAddressing()
SM_RESULT ReenumDoneForBootDevice(_In_ DsmEvent Event)
SM_RESULT ReconfiguredBootDevice(_In_ DsmEvent Event)
SM_RESULT ReenumPortOffForHubDeviceDisabled(_In_ DsmEvent Event)
SM_RESULT ToAwaitingDetachOrRemove(_In_ BOOLEAN Configured)
SM_RESULT ReenumDisabledThenReport(_In_ DsmEvent Event)
SM_RESULT ReconfiguredAfterHubResume(_In_ DsmEvent Event)
static const State DisablingDevice
SM_RESULT ReenumDisabledThenSignalAndCycle(_In_ DsmEvent Event)
SM_RESULT ReenumTreePurgedConfigured(_In_ DsmEvent Event)
SM_RESULT OnReenumerating(_In_ DsmEvent Event)
SM_RESULT CallStep(_In_ DSM_THEN Then)
SM_RESULT EnterClaimingAddressZero()
SM_RESULT ReenumTimerFlushedOnDetach(_In_ DsmEvent Event)
VOID CancelControllerIoctl()
VOID ReferenceDevicePower()
BOOLEAN DeviceSpeedChanged()
static const State DisablingPort
static const State EnablingDevice
SM_RESULT OnAtAddressZeroAgain(_In_ DsmEvent Event)
static const State BootDeviceDetached
VOID DereferenceDevicePower()
SM_RESULT ReenumPortOffHoldingAddressZero(_In_ DsmEvent Event)
VOID CompleteClientRequestFailed()
VOID RecordResetTimeout()
static const State CancelingClaimAgain
VOID ReadDeviceDescriptor()
VOID FailIoAndDisablePort()
SM_RESULT ReenumDisabledThenAckAndCycle(_In_ DsmEvent Event)
SM_RESULT ReenumPortOffDeviceDisabled(_In_ DsmEvent Event)
VOID CompleteClientRequest()
SM_RESULT ReenumDoneForBootResume(_In_ DsmEvent Event)
SM_RESULT EnterBugChecking()
static const State NotifyingReset
SM_RESULT ReenumEndpointsDisabled(_In_ DsmEvent Event)
static const State ReadingFirstDescriptor
SM_RESULT ReenumDoneForPreStart(_In_ DsmEvent Event)
static const State ParkedForHubAgain
SM_RESULT StoppedAckPreStart()
SM_RESULT EnterCancelingClaim()
SM_RESULT EndOnHubOrDetach(_In_ DsmEvent Event)
SM_RESULT ReconfiguredBootAfterResume(_In_ DsmEvent Event)
SM_RESULT DetachUnconfigured()
SM_RESULT ReenumSerialNumber()
VOID NotifyPortDetached()
static const State ResettingPort
SM_RESULT ReportMissingAndLeave()
static const State Configured
SM_RESULT ReenumStopRetryOnDetach()
BOOLEAN ConfigReadOnReset()
SM_RESULT ReenumForStart(_In_ DSM_REENUM Kind)
SM_RESULT ReenumDoneForHubResumeUnconfigured(_In_ DsmEvent Event)
SM_RESULT ReenumDoneForResumeUnconfigured(_In_ DsmEvent Event)
static const State BugChecking
SM_RESULT ReenumWrongDeviceLeft(_In_ DsmEvent Event)
SM_RESULT ReenumDisabledThenCycle(_In_ DsmEvent Event)
static const State RequestingCriticalPassive
SM_RESULT ReenumForClientUnconfigured()
SM_RESULT BackToUnconfigured()
SM_RESULT OnLinkPowerAgain(_In_ DsmEvent Event)
SM_RESULT EnterParkedForHub()
BOOLEAN SerialNumberCompared()
SM_RESULT OnCancelingClaimAgain(_In_ DsmEvent Event)
SM_RESULT Again20SecondResetDone(_In_ DsmEvent Event)
SM_RESULT EndOnResetForHub(_In_ DsmEvent Event)
BOOLEAN SameSerialNumber()
SM_RESULT RemovalNotifyThenReport()
SM_RESULT ReenumPortOffAfterConfigFailure(_In_ DsmEvent Event)
SM_RESULT ReenumSerialRead(_In_ DsmEvent Event)
SM_RESULT RemovalDeleteForgetPortOn()
SM_RESULT AtPassive(_In_ DSM_THEN Then)
SM_RESULT ReenumForBootClient(_In_ BOOLEAN AfterReattach)
SM_RESULT ReenumConfigDescriptor()
SM_RESULT BootDeviceDetachDuringReset(_In_ BOOLEAN ContextGone)
SM_RESULT DetachConfigured()
SM_RESULT ReenumParkForHub()
SM_RESULT ReenumFailedForResume(_In_ DsmEvent Event)
SM_RESULT CallRequest(_In_ const State *Target, _In_ DSM_ACTION Start, _In_ DSM_NEXT Next)
BOOLEAN SameDeviceConnected()
static const State RequestingCritical
static const State ReenumeratingForHubStart
SM_RESULT Again20FirstResetNotified(_In_ DsmEvent Event)
VOID ForceResetOnNextStart()
SM_RESULT Delay(_In_ DSM_DELAY Kind, _In_ DSM_NEXT Next)
SM_RESULT ReenumEnabled(_In_ DsmEvent Event)
SM_RESULT ReenumPortOffForHub(_In_ DsmEvent Event)
static const State BootDeviceDetachedContextGone
BOOLEAN PrepareListsForReset()
SM_RESULT ReenumDoneForResumeConfigured(_In_ DsmEvent Event)
SM_RESULT ReenumDoneForClientConfigured(_In_ DsmEvent Event)
VOID DeleteConfigEndpoints()
SM_RESULT ReenumDoneForHubStart(_In_ DsmEvent Event)
BOOLEAN FirstDescriptorValid()
SM_RESULT ReenumRetryOrFailHoldingAddressZero()
SM_RESULT BootDeviceDisabledForReset(_In_ DsmEvent Event)
static const State Configuring
SM_RESULT OnClaimingAddressZeroAgain(_In_ DsmEvent Event)
VOID BugCheckForBootDevice()
DSM_NEXT m_AfterConfigure
SM_RESULT ReenumRetryDelayEnded(_In_ DsmEvent Event)
SM_RESULT ReenumFailedForClient(_In_ DsmEvent Event)
SM_RESULT ReenumForClientConfigured()
SM_RESULT Reenumerate(_In_ const State *Target, _In_ DSM_REENUM Kind, _In_ BOOLEAN ForceReset, _In_ DSM_NEXT After)
static const State AddressingAgain
SM_RESULT ReenumForHubStart()
static const State LinkPowerAgain
static const State UnconfiguredOn
SM_RESULT ReenumDescriptorRead(_In_ DsmEvent Event)
SM_RESULT ReenumWrongDevice()
static SM_RESULT SmTransition(_In_ const State *Target)
static SM_RESULT SmHandled()
static SM_RESULT SmUnhandled()
#define DSM_KIND_ANY_SPEED
enum _DSM_REENUM DSM_REENUM
#define DSM_KIND_ANY_PORT
#define DSM_KIND_ANY_VERSION
static const DsmEvent ReenumLpmDiscards[]
static const DsmEvent ReenumQuietDiscards[]
_Check_return_ _In_ DXGK_EVENT_TYPE _In_ ULONG Event
#define SM_STATE_TAKES_REQUESTS
#define SM_STATE_YIELDS_TO_CALLER
#define SM_STATE_CRITICAL_ONLY
One state. Handler gets every event the state sees.
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFREQUEST Request
_In_ WDFDPC _In_ BOOLEAN Wait