37 {
NULL,
"ClaimingAddressZero", 0,
41 {
NULL,
"CancelingClaimForHub", 0,
48 {
NULL,
"AddressingInEnum", 0,
52 {
NULL,
"ReadingDescriptors", 0,
56 {
NULL,
"LinkPowerInEnum", 0,
73 if (
Event != DsmEvent::PortAttached)
101 case DsmEvent::Succeeded:
105 case DsmEvent::Failed:
109 case DsmEvent::PortDetached:
155 case DsmEvent::PortDetached:
159 case DsmEvent::HubStopping:
160 case DsmEvent::HubSuspending:
163 case DsmEvent::ControllerIoctlDone:
166 case DsmEvent::ControllerIoctlFailed:
180 case DsmEvent::ControllerIoctlDone:
182 return EndWith(DsmEvent::PortDetached);
184 case DsmEvent::ControllerIoctlFailed:
185 return EndWith(DsmEvent::PortDetached);
205 case DsmEvent::ControllerIoctlDone:
209 case DsmEvent::PortDetached:
212 case DsmEvent::ControllerIoctlFailed:
227 case DsmEvent::PortDetached:
229 return EndWith(DsmEvent::PortDetached);
231 case DsmEvent::PortDisableDone:
232 case DsmEvent::PortFault:
248 case DsmEvent::PortDetached:
249 return EndWith(DsmEvent::PortDetached);
251 case DsmEvent::PortDisableDone:
252 case DsmEvent::PortFault:
282 case DsmEvent::TimerFired:
285 case DsmEvent::PortDetached:
288 case DsmEvent::HubSuspending:
289 case DsmEvent::HubStopping:
301 return EndWith(DsmEvent::PortDetached);
310 if (
Event != DsmEvent::TimerFired)
313 return EndWith(DsmEvent::PortDetached);
331 case DsmEvent::TimerFired:
334 case DsmEvent::PortDetached:
349 case DsmEvent::PortDetached:
350 return EndWith(DsmEvent::PortDetached);
352 case DsmEvent::HubStopping:
353 case DsmEvent::HubSuspending:
356 case DsmEvent::PortFault:
357 case DsmEvent::PortDisableDone:
358 return EndWith(DsmEvent::Failed);
383 case DsmEvent::Succeeded:
386 case DsmEvent::Failed:
389 case DsmEvent::PortDetached:
391 return EndWith(DsmEvent::PortDetached);
393 case DsmEvent::HubStopping:
394 case DsmEvent::HubSuspending:
418 case DsmEvent::TimerFired:
421 case DsmEvent::PortDetached:
425 case DsmEvent::HubSuspending:
426 case DsmEvent::HubStopping:
441 case DsmEvent::HubStopping:
442 case DsmEvent::HubSuspending:
445 case DsmEvent::PortDetached:
447 return EndWith(DsmEvent::PortDetached);
449 case DsmEvent::PortFault:
450 case DsmEvent::PortDisableDone:
452 return EndWith(DsmEvent::Failed);
471 case DsmEvent::Failed:
474 case DsmEvent::Succeeded:
478 case DsmEvent::HubStopping:
479 case DsmEvent::HubSuspending:
482 case DsmEvent::PortDetached:
501 return EndWith(DsmEvent::PortDetached);
510 case DsmEvent::Succeeded:
513 case DsmEvent::Failed:
516 case DsmEvent::PortDetached:
519 case DsmEvent::HubSuspending:
520 case DsmEvent::HubStopping:
536 case DsmEvent::PortDetached:
539 case DsmEvent::PortFault:
540 case DsmEvent::PortDisableDone:
563 case DsmEvent::Failed:
566 case DsmEvent::Succeeded:
587 case DsmEvent::ControllerIoctlFailed:
588 case DsmEvent::ControllerExitLatencyTooLarge:
591 case DsmEvent::ControllerIoctlDone:
595 return EndWith(DsmEvent::Succeeded);
608 case DsmEvent::TransferDone:
609 return EndWith(DsmEvent::Succeeded);
611 case DsmEvent::TransferFailed:
631 case DsmEvent::ResumedWithHub:
632 case DsmEvent::SuspendedAfterHubResume:
633 case DsmEvent::NeedsReenumeration:
637 case DsmEvent::HubStoppedHoldingReference:
640 case DsmEvent::PortDetached:
641 return EndWith(DsmEvent::PortDetached);
643 case DsmEvent::HubStarted:
static const State AtAddressZero
VOID ReleaseAddressZero()
static const State AddressingInEnum
VOID UpdateDeviceInController()
SM_RESULT EnumRetryOrFail()
BOOLEAN DeviceProgrammingLost()
static const State AwaitingPort
SM_RESULT CallWait(_In_ const State *Target, _In_ DSM_NEXT Next)
SM_RESULT EnterUpdatingDevice()
SM_RESULT Zero30CreateDevice()
static const State ReportingUnknown
SM_RESULT Zero20FirstResetDone(_In_ DsmEvent Event)
static const State LinkPowerInEnum
SM_RESULT OnAwaitingAttach(_In_ DsmEvent Event)
SM_RESULT EnterReadingDescriptors()
VOID RequestPortDisable()
BOOLEAN SupportsPdCharging()
SM_RESULT EndAfterDetach()
static const State SettingPdCharging
SM_RESULT EnumTimerFlushedOnDetach(_In_ DsmEvent Event)
SM_RESULT EnumPortOffAfterFailureHoldingAddressZero(_In_ DsmEvent Event)
static const State IoctlAfterDetach
static const State Enumerating
static const State TimerAfterDetach
SM_RESULT EnumRetryDelayEnded(_In_ DsmEvent Event)
SM_RESULT DisableAndDelete(_In_ DSM_THEN After)
BOOLEAN KindWithin(_In_ ULONG Allowed)
A device with no version or speed known yet passes for any version or speed.
SM_RESULT EnumPortOffAfterDelete()
static const State CancelingClaimForHub
static const State AwaitingAttach
SM_RESULT EnumClaimEndedOnDetach(_In_ DsmEvent Event)
BOOLEAN EnumRetriesUsedUp()
SM_RESULT EndWith(_In_ DsmEvent Result)
static const State ParkedForHubInEnum
SM_RESULT EnterAddressing()
SM_RESULT EnumPortOffForHub(_In_ DsmEvent Event)
SM_RESULT EnumStopRetryOnDetach()
SM_RESULT CallStep(_In_ DSM_THEN Then)
SM_RESULT EnterClaimingAddressZero()
SM_RESULT OnCancelingClaimForHub(_In_ DsmEvent Event)
BOOLEAN ReferenceHubPower()
SM_RESULT CallAtPassive(_In_ DSM_THEN Then)
VOID CancelControllerIoctl()
VOID ReferenceDevicePower()
SM_RESULT EnumParkForHub()
static const State DisablingPort
VOID DereferenceDevicePower()
BOOLEAN RegisterWithHub()
SM_RESULT EnumRetryOrFailHoldingAddressZero()
static const State ReadingDescriptors
SM_RESULT OnEnumerating(_In_ DsmEvent Event)
VOID DereferenceHubPower()
static const State ReportingToPnp
SM_RESULT EnumPortOffHoldingAddressZero(_In_ DsmEvent Event)
SM_RESULT OnAddressingInEnum(_In_ DsmEvent Event)
SM_RESULT EnterCancelingClaim()
SM_RESULT EnumTimerFlushedForHub(_In_ DsmEvent Event)
SM_RESULT OnClaimingAddressZero(_In_ DsmEvent Event)
VOID NotifyPortDetached()
static const State ResettingPort
static const State SettingAddress
SM_RESULT OnAtAddressZero(_In_ DsmEvent Event)
static const State HubSuspended
static const State UpdatingDevice
SM_RESULT EnumReleaseAndEndDetached()
SM_RESULT EnterParkedForHub()
SM_RESULT OnUpdatingDevice(_In_ DsmEvent Event)
SM_RESULT OnLinkPowerInEnum(_In_ DsmEvent Event)
SM_RESULT EnterAtAddressZero()
SM_RESULT EnterLinkPowerInEnum()
SM_RESULT Delay(_In_ DSM_DELAY Kind, _In_ DSM_NEXT Next)
SM_RESULT EnumStopRetryForHub()
SM_RESULT EnterEnumerating()
SM_RESULT EnumRetryDelayEndedHoldingAddressZero(_In_ DsmEvent Event)
SM_RESULT EnumPortOffAfterFailure(_In_ DsmEvent Event)
VOID MarkAttachSucceeded()
SM_RESULT EnumPdChargingSet(_In_ DsmEvent Event)
SM_RESULT OnReadingDescriptors(_In_ DsmEvent Event)
static const State ClaimingAddressZero
SM_RESULT EnumPortOffWithDevice(_In_ DsmEvent Event)
static const State AwaitingDelete
SM_RESULT OnParkedForHubInEnum(_In_ DsmEvent Event)
VOID SmDiscardQueued(_In_ DsmEvent Ev)
static SM_RESULT SmTransition(_In_ const State *Target)
static SM_RESULT SmCall(_In_ const State *Start)
static SM_RESULT SmHandled()
static SM_RESULT SmUnhandled()
#define DSM_KIND_ANY_SPEED
#define DSM_KIND_ANY_PORT
#define DSM_KIND_ANY_VERSION
static const DsmEvent DeleteDiscards[]
static const DsmEvent LpmDiscards[]
_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.
_In_ WDFDPC _In_ BOOLEAN Wait