37 {
NULL,
"SettingInterface", 0,
47 {
NULL,
"UpdatingLinkPower", 0,
52 {
NULL,
"SuspendingConfigured", 0,
57 {
NULL,
"BootDeviceSuspending", 0,
70 {
NULL,
"ConfiguredHubSuspended", 0,
75 {
NULL,
"PreparingHibernation", 0,
104 case DsmEvent::ClientUnconfigure:
108 case DsmEvent::ClientResetDevice:
115 case DsmEvent::ClientStreams:
119 case DsmEvent::ClientSelectConfig:
123 case DsmEvent::ClientSetInterface:
129 case DsmEvent::ClientClearStall:
139 case DsmEvent::DeviceTextQuery:
143 case DsmEvent::ClientSyncResetPipe:
153 case DsmEvent::HubGetDescriptor:
158 case DsmEvent::ClientResetPipe:
200 case DsmEvent::TransferDone:
201 case DsmEvent::ControllerIoctlDone:
204 case DsmEvent::TransferFailed:
205 case DsmEvent::ControllerIoctlFailed:
220 case DsmEvent::TransferDone:
224 case DsmEvent::TransferFailed:
236 if ((
Event != DsmEvent::TransferDone) && (
Event != DsmEvent::TransferFailed))
246 if (
Event != DsmEvent::ControllerIoctlDone)
273 case DsmEvent::ClientCyclePort:
277 case DsmEvent::PdoPowerUp:
278 case DsmEvent::PdoInstallMsOsExt:
281 case DsmEvent::HubSuspending:
285 case DsmEvent::PdoPrepareHibernate:
289 case DsmEvent::NoPingResponse:
295 case DsmEvent::PortDetached:
298 case DsmEvent::PdoPowerDown:
305 case DsmEvent::LpmSettingChanged:
308 case DsmEvent::PdoPowerDownFinal:
335 if (
Event != DsmEvent::ControllerIoctlDone)
357 if (
Event != DsmEvent::ControllerIoctlDone)
369 case DsmEvent::PortFault:
373 case DsmEvent::PortSuspendDone:
376 case DsmEvent::PortDetached:
397 if (
Event != DsmEvent::ControllerIoctlDone)
416 case DsmEvent::PortSuspendDone:
419 case DsmEvent::PortDetached:
422 case DsmEvent::PortFault:
437 case DsmEvent::PdoPreStart:
441 case DsmEvent::PdoPowerUp:
444 case DsmEvent::PdoCleanup:
447 case DsmEvent::PortDetached:
450 case DsmEvent::HubStopping:
453 case DsmEvent::HubSuspending:
465 if (
Event != DsmEvent::ControllerIoctlDone)
475 if (
Event != DsmEvent::ControllerIoctlDone)
485 if (
Event != DsmEvent::ControllerIoctlDone)
528 case DsmEvent::Succeeded:
533 case DsmEvent::Failed:
536 case DsmEvent::PortDetached:
568 case DsmEvent::Succeeded:
569 case DsmEvent::Failed:
570 case DsmEvent::PortDetached:
582 if (
Event != DsmEvent::ControllerIoctlDone)
603 case DsmEvent::TransferDone:
612 case DsmEvent::TransferFailed:
634 return EndWith(DsmEvent::Failed);
641 if (
Event == DsmEvent::Succeeded)
642 return EndWith(DsmEvent::Succeeded);
644 return EndWith(DsmEvent::Failed);
663 if ((
Event != DsmEvent::Succeeded) && (
Event != DsmEvent::Failed))
675 case DsmEvent::ControllerIoctlDone:
678 case DsmEvent::ControllerIoctlFailed:
700 case DsmEvent::Failed:
703 case DsmEvent::Succeeded:
707 case DsmEvent::PortDetached:
742 if (
Event != DsmEvent::ControllerIoctlDone)
752 if (
Event == DsmEvent::Succeeded)
773 if ((
Event != DsmEvent::TransferDone) && (
Event != DsmEvent::TransferFailed))
785 case DsmEvent::TransferDone:
788 case DsmEvent::TransferFailed:
801 if (
Event != DsmEvent::ControllerIoctlDone)
811 return EndWith(DsmEvent::Succeeded);
825 return EndWith(DsmEvent::Failed);
845 case DsmEvent::Succeeded:
848 case DsmEvent::Failed:
851 case DsmEvent::PortDetached:
873 case DsmEvent::Succeeded:
874 case DsmEvent::Failed:
877 case DsmEvent::PortDetached:
881 case DsmEvent::HubSuspending:
894 if (
Event != DsmEvent::ControllerIoctlDone)
907 case DsmEvent::Succeeded:
910 case DsmEvent::Failed:
914 case DsmEvent::PortDetached:
928 case DsmEvent::ClientSelectConfig:
929 case DsmEvent::ClientClearStall:
930 case DsmEvent::ClientUnconfigure:
931 case DsmEvent::ClientSetInterface:
932 case DsmEvent::ClientResetPipe:
933 case DsmEvent::ClientSyncResetPipe:
934 case DsmEvent::ClientResetDevice:
938 case DsmEvent::NoPingResponse:
939 case DsmEvent::LpmSettingChanged:
942 case DsmEvent::DeviceTextQuery:
946 case DsmEvent::ClientCyclePort:
950 case DsmEvent::HubGetDescriptor:
954 case DsmEvent::NeedsReenumeration:
957 case DsmEvent::ResumeDone:
960 case DsmEvent::HubStopping:
964 case DsmEvent::PortDetached:
967 case DsmEvent::PdoCleanup:
971 case DsmEvent::ClientStreams:
974 case DsmEvent::PortFault:
977 case DsmEvent::HubStoppingAfterSuspend:
981 case DsmEvent::PdoPreStart:
1009 case DsmEvent::ClientSyncResetPipe:
1010 case DsmEvent::ClientClearStall:
1011 case DsmEvent::ClientSetInterface:
1012 case DsmEvent::ClientResetPipe:
1013 case DsmEvent::ClientUnconfigure:
1014 case DsmEvent::ClientResetDevice:
1015 case DsmEvent::ClientSelectConfig:
1019 case DsmEvent::NoPingResponse:
1020 case DsmEvent::LpmSettingChanged:
1023 case DsmEvent::DeviceTextQuery:
1027 case DsmEvent::HubGetDescriptor:
1031 case DsmEvent::NeedsReenumeration:
1034 case DsmEvent::ResumeDone:
1037 case DsmEvent::PortDetached:
1040 case DsmEvent::ClientStreams:
1043 case DsmEvent::PortFault:
1057 case DsmEvent::NeedsReenumeration:
1060 case DsmEvent::SuspendedAfterHubResume:
1063 case DsmEvent::ResumedWithHub:
1067 case DsmEvent::PortDetached:
1081 case DsmEvent::PortDetached:
1084 case DsmEvent::PortFault:
1085 case DsmEvent::PortNowEnabledOnReconnect:
1086 case DsmEvent::PortResumeTimeout:
1087 case DsmEvent::PortNowDisabled:
1090 case DsmEvent::PortResumeDone:
1103 if ((
Event != DsmEvent::ControllerIoctlDone) && (
Event != DsmEvent::ControllerIoctlFailed))
SM_RESULT InterfaceOldRestored(_In_ DsmEvent Event)
SM_RESULT RemovalDropPowerAndPark()
SM_RESULT OnSuspendingConfigured(_In_ DsmEvent Event)
BOOLEAN m_EndpointsConfigured
SM_RESULT ConfiguredResetBootDevice()
SM_RESULT SelectConfigDone(_In_ DsmEvent Event)
SM_RESULT SelectConfigValidate()
SM_RESULT ConfiguredNotStartedHubStop(_In_ DsmEvent Event)
SM_RESULT ConfigureProgrammed(_In_ DsmEvent Event)
SM_RESULT EnterSuspendingConfigured()
SM_RESULT EndpointsProgrammed(_In_ DsmEvent Event)
SM_RESULT EnterProgrammingEndpoints()
VOID FailHubDescriptorRequest()
SM_RESULT InterfaceSet(_In_ DsmEvent Event)
VOID DisablePendingEndpoints()
VOID PurgeIoForHibernation()
SM_RESULT ConfiguredPurgedWhileSuspending(_In_ DsmEvent Event)
SM_RESULT ConfiguredIoStarted(_In_ DsmEvent Event)
SM_RESULT ReenumForHubResume(_In_ BOOLEAN Configured)
SM_RESULT ConfiguredFreeForClient()
VOID ResetEndpointAndTransfers()
SM_RESULT OnProgrammingEndpoints(_In_ DsmEvent Event)
SM_RESULT OnUpdatingLinkPower(_In_ DsmEvent Event)
SM_RESULT RemovalDeleteForgetAndPark()
SM_RESULT InterfaceProgrammed(_In_ DsmEvent Event)
SM_RESULT UnconfiguredDisabledForStop(_In_ DsmEvent Event)
SM_RESULT ConfiguredResumedWithHub(_In_ DsmEvent Event)
SM_RESULT ConfigureDeleteOld()
SM_RESULT OnSuspendedConfigured(_In_ DsmEvent Event)
static const State ResumingPort
SM_RESULT ConfiguredCyclePort()
SM_RESULT OnConfiguredHubSuspended(_In_ DsmEvent Event)
SM_RESULT ConfigureCreateEndpoints()
SM_RESULT ReenumForResume(_In_ BOOLEAN Configured)
SM_RESULT ConfiguredNotStartedCleanup(_In_ DsmEvent Event)
SM_RESULT OnConfigured(_In_ DsmEvent Event)
static const State DisablingEndpoints
SM_RESULT InterfaceStart()
SM_RESULT Then(_In_ DSM_THEN Next)
SM_RESULT BootDeviceNotifyDetached()
SM_RESULT ConfiguredPurgedForHub(_In_ DsmEvent Event)
VOID CyclePortForClient()
VOID ClearResetAtResume()
SM_RESULT ClientDoneWithLastStatus()
SM_RESULT InterfaceDeleteOld()
SM_RESULT ConfiguredNotStartedHubSuspend(_In_ DsmEvent Event)
SM_RESULT InterfaceDeleteOldAndFail()
static const State ConfiguredOn
VOID MarkPendingEndpointsDisabled()
BOOLEAN SelectInterfaceValid()
SM_RESULT ConfigureOldDisabled(_In_ DsmEvent Event)
SM_RESULT ConfiguredRestartWhileSuspended()
SM_RESULT ConfiguredSuspendedForHub(_In_ DsmEvent Event)
SM_RESULT InterfaceCreateEndpoints()
static const State SuspendingConfigured
VOID RequestHibernationPrep()
SM_RESULT DisableForRemoval(_In_ DSM_THEN After)
static const State BootDeviceSuspended
SM_RESULT OnConfiguring(_In_ DsmEvent Event)
static const State SuspendingPort
BOOLEAN KindWithin(_In_ ULONG Allowed)
A device with no version or speed known yet passes for any version or speed.
SM_RESULT EnterWithMsOsInstall()
SM_RESULT ReenumForPreStart()
static const State StoppedReady
VOID SetNullConfiguration()
static const State ProgrammingEndpoints
SM_RESULT RemovalAckAndPark()
VOID DisableNewInterfaceEndpoints()
static const State ConfiguredNotStarted
VOID DeleteOldInterfaceEndpoints()
BOOLEAN PipeIsIsochronous()
VOID NotifyDisconnected()
static const State UpdatingLinkPower
SM_RESULT EndWith(_In_ DsmEvent Result)
static const State SettingInterface
SM_RESULT ReenumForBootResume()
static const State SuspendedConfigured
SM_RESULT ToAwaitingDetachOrRemove(_In_ BOOLEAN Configured)
static const State DisablingDevice
static const State BootDeviceSuspending
SM_RESULT CallStep(_In_ DSM_THEN Then)
SM_RESULT PurgeOnDetach()
SM_RESULT EnterPreparingHibernation()
VOID GetDescriptorForHub()
BOOLEAN PipeIsZeroBandwidth()
SM_RESULT OnPreparingHibernation(_In_ DsmEvent Event)
static const State DisablingPort
VOID SetConfigInfoInRequest()
SM_RESULT ConfiguredEndpointsDisabledForStop(_In_ DsmEvent Event)
VOID DereferenceDevicePower()
SM_RESULT EnterSettingInterface()
SM_RESULT BootDeviceFailed()
SM_RESULT BackToConfigured()
BOOLEAN AdjustLatencyForNoPing()
SM_RESULT InterfaceNewDisabled(_In_ DsmEvent Event)
SM_RESULT ConfiguredNullSet(_In_ DsmEvent Event)
VOID CompleteClientRequestFailed()
BOOLEAN PrepareConfigLists()
VOID CompleteClientRequest()
SM_RESULT EnterHubSuspendedReleasingPower()
static const State PreparingHibernation
SM_RESULT CleanupPortDisabled(_In_ DsmEvent Event)
SM_RESULT InterfaceDeleteNewAndFail()
SM_RESULT InterfaceRestoreOld()
SM_RESULT HubDescriptorDone(_In_ DsmEvent Event)
SM_RESULT StoppedPortSuspendedForHub(_In_ DsmEvent Event)
static const State Configured
SM_RESULT SelectConfigFailed(_In_ BOOLEAN LastStatus)
SM_RESULT BackToUnconfigured()
SM_RESULT ForwardStreams(_In_ const State *ReturnTo)
SM_RESULT OnConfiguredNotStarted(_In_ DsmEvent Event)
SM_RESULT ConfiguredPurgedForHibernation(_In_ DsmEvent Event)
SM_RESULT StoppedPortOffForHubStop(_In_ DsmEvent Event)
SM_RESULT EnterSuspended()
SM_RESULT InterfaceNewEndpointsDisabled(_In_ DsmEvent Event)
SM_RESULT RemovalNotifyThenReport()
SM_RESULT ConfigureFailed()
SM_RESULT SelectConfigCleanUp()
SM_RESULT OnBootDeviceSuspended(_In_ DsmEvent Event)
SM_RESULT GoConfiguredOn()
static const State ConfiguredHubSuspended
static const State ReadingDeviceText
SM_RESULT AtPassive(_In_ DSM_THEN Then)
BOOLEAN DisableWhenUnused()
SM_RESULT ReenumForBootClient(_In_ BOOLEAN AfterReattach)
SM_RESULT DetachConfigured()
VOID DeleteOldConfigEndpoints()
VOID SetInterfaceInfoInRequest()
SM_RESULT CallRequest(_In_ const State *Target, _In_ DSM_ACTION Start, _In_ DSM_NEXT Next)
SM_RESULT ClientPipeDone(_In_ DsmEvent Event)
SM_RESULT ConfiguredEndpointsDisabledForClient(_In_ DsmEvent Event)
static const State RequestingCritical
SM_RESULT OnBootDeviceSuspending(_In_ DsmEvent Event)
VOID ForceResetOnNextStart()
SM_RESULT OnConfiguredOn(_In_ DsmEvent Event)
SM_RESULT ClientHaltCleared(_In_ DsmEvent Event)
SM_RESULT EnterConfiguring()
VOID DeleteConfigEndpoints()
SM_RESULT OnSettingInterface(_In_ DsmEvent Event)
static const State Configuring
SM_RESULT ConfiguredResumed()
VOID DeleteNewInterfaceEndpoints()
BOOLEAN SelectConfigValid()
VOID CompleteClientRequestLastStatus()
DSM_NEXT m_AfterConfigure
SM_RESULT ConfiguredSignalAndStay()
BOOLEAN PrepareInterfaceLists()
SM_RESULT ConfigureInterfaceSet(_In_ DsmEvent Event)
SM_RESULT ReenumForClientConfigured()
BOOLEAN AlternateSettingLeft()
SM_RESULT EnterUpdatingLinkPower()
BOOLEAN CreateEndpoints()
SM_RESULT LinkPowerStart()
static SM_RESULT SmTransition(_In_ const State *Target)
static SM_RESULT SmHandled()
static SM_RESULT SmUnhandled()
#define DSM_KIND_ANY_SPEED
#define DSM_KIND_ANY_PORT
static const DsmEvent ConfigLpmDiscards[]
_Check_return_ _In_ DXGK_EVENT_TYPE _In_ ULONG Event
#define SM_STATE_TAKES_REQUESTS
#define SM_STATE_YIELDS_TO_CALLER
One state. Handler gets every event the state sees.
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFREQUEST Request
_In_ WDFDPC _In_ BOOLEAN Wait