ReactOS 0.4.17-dev-1281-g065abb3
DeviceMachine Class Reference

#include <devsm.h>

Inheritance diagram for DeviceMachine:
Collaboration diagram for DeviceMachine:

Public Member Functions

VOID Initialize (_In_ HubChild *Device)
 
HubChild * Device () const
 
- Public Member Functions inherited from SmMachine< DeviceMachine, DsmEvent >
VOID SmInitialize (_In_ const State *Initial)
 
BOOLEAN SmPost (_In_ DsmEvent Ev)
 
VOID SmContinueOnPassive ()
 
const State * SmCurrent () const
 
ULONG SmDepth () const
 
const State * SmFrame (_In_ ULONG Index) const
 
BOOLEAN SmIsIn (_In_ const State *Ancestor) const
 
BOOLEAN SmIsPaused () const
 
BOOLEAN SmIsWaitingForTimer () const
 
ULONG SmUnexpectedCount () const
 

Static Public Attributes

static const SM_EVENT_INFO EventInfo []
 

Private Types

typedef SM_RESULT(DeviceMachine::* DSM_NEXT) (_In_ DsmEvent Event)
 
typedef SM_RESULT(DeviceMachine::* DSM_THEN) ()
 
typedef VOID(DeviceMachine::* DSM_ACTION) ()
 

Private Member Functions

VOID SmReference ()
 
VOID SmDereference ()
 
VOID SmQueuePassive ()
 
BOOLEAN SmCancelTimer ()
 
BOOLEAN KindWithin (_In_ ULONG Allowed)
 A device with no version or speed known yet passes for any version or speed.
 
SM_RESULT Wait (_In_ const State *Target, _In_ DSM_NEXT Next)
 
SM_RESULT AtPassive (_In_ DSM_THEN Then)
 
SM_RESULT EndWith (_In_ DsmEvent Result)
 
SM_RESULT OnShared (_In_ DsmEvent Event)
 
SM_RESULT EnterPassiveStep ()
 
SM_RESULT EnterEnding ()
 
SM_RESULT EnterDisablingPort ()
 
SM_RESULT EnterDelaying ()
 
SM_RESULT Delay (_In_ DSM_DELAY Kind, _In_ DSM_NEXT Next)
 
SM_RESULT EnterEnablingDevice ()
 
SM_RESULT EnterResettingPort ()
 
SM_RESULT EnterNotifyingReset ()
 
SM_RESULT EnterReadingFirstDescriptor ()
 
SM_RESULT CallWait (_In_ const State *Target, _In_ DSM_NEXT Next)
 
SM_RESULT CallAtPassive (_In_ DSM_THEN Then)
 
SM_RESULT DeleteThen (_In_ DSM_THEN After)
 
SM_RESULT EndFailed ()
 
SM_RESULT EndDetached ()
 
SM_RESULT EndWithHubEvent ()
 
SM_RESULT EndOnHubOrDetach (_In_ DsmEvent Event)
 
SM_RESULT EndOnResetForHub (_In_ DsmEvent Event)
 
SM_RESULT EndAfterTimer (_In_ DsmEvent Event)
 
SM_RESULT EndDetachedOnTimer (_In_ DsmEvent Event)
 
SM_RESULT EndForHubOnTimer (_In_ DsmEvent Event)
 
SM_RESULT EnterStarting ()
 
SM_RESULT CallStep (_In_ DSM_THEN Then)
 
SM_RESULT EnterRequesting ()
 
SM_RESULT Request (_In_ const State *Target, _In_ DSM_ACTION Start, _In_ DSM_NEXT Next)
 
SM_RESULT CallRequest (_In_ const State *Target, _In_ DSM_ACTION Start, _In_ DSM_NEXT Next)
 
SM_RESULT EnterCancelingTransfer ()
 
SM_RESULT EnterSuspendingPort ()
 
SM_RESULT EnterResumingPort ()
 
SM_RESULT ForwardStreams (_In_ const State *ReturnTo)
 
SM_RESULT EnterForwardingStreams ()
 
SM_RESULT EnterDisablingEndpoints ()
 
SM_RESULT OnForwardingStreams (_In_ DsmEvent Event)
 
SM_RESULT CancelTransferAndEnd (_In_ DsmEvent Event)
 
SM_RESULT EndOnTransferCanceled (_In_ DsmEvent Event)
 
SM_RESULT EnterDisablingDevice ()
 
SM_RESULT EnterSettingPdCharging ()
 
SM_RESULT DisableAndDelete (_In_ DSM_THEN After)
 
SM_RESULT DeleteOnceDisabled (_In_ DsmEvent Event)
 
SM_RESULT DeleteDeviceThen ()
 
SM_RESULT OnAwaitingAttach (_In_ DsmEvent Event)
 
SM_RESULT EnterEnumerating ()
 
SM_RESULT OnEnumerating (_In_ DsmEvent Event)
 
SM_RESULT EndAfterDetach ()
 
VOID DiscardHubEvents ()
 
SM_RESULT EnterClaimingAddressZero ()
 
SM_RESULT OnClaimingAddressZero (_In_ DsmEvent Event)
 
SM_RESULT EnumClaimEndedOnDetach (_In_ DsmEvent Event)
 
SM_RESULT EnterCancelingClaim ()
 
SM_RESULT OnCancelingClaimForHub (_In_ DsmEvent Event)
 
SM_RESULT EnumPortOffHoldingAddressZero (_In_ DsmEvent Event)
 
SM_RESULT EnumPortOffForHub (_In_ DsmEvent Event)
 
SM_RESULT EnumParkForHub ()
 
SM_RESULT EnumRetryOrFail ()
 
SM_RESULT EnumRetryDelayEnded (_In_ DsmEvent Event)
 
SM_RESULT EnumStopRetryOnDetach ()
 
SM_RESULT EnumTimerFlushedOnDetach (_In_ DsmEvent Event)
 
SM_RESULT EnumStopRetryForHub ()
 
SM_RESULT EnumTimerFlushedForHub (_In_ DsmEvent Event)
 
SM_RESULT EnumPortOffAfterFailure (_In_ DsmEvent Event)
 
SM_RESULT EnterAtAddressZero ()
 
SM_RESULT OnAtAddressZero (_In_ DsmEvent Event)
 
SM_RESULT EnumRetryOrFailHoldingAddressZero ()
 
SM_RESULT EnumRetryDelayEndedHoldingAddressZero (_In_ DsmEvent Event)
 
SM_RESULT EnumPortOffAfterFailureHoldingAddressZero (_In_ DsmEvent Event)
 
SM_RESULT EnterAddressing ()
 
SM_RESULT OnAddressingInEnum (_In_ DsmEvent Event)
 
SM_RESULT EnumPortOffAfterDelete ()
 
SM_RESULT EnumReleaseAndEndDetached ()
 
SM_RESULT EnterReadingDescriptors ()
 
SM_RESULT OnReadingDescriptors (_In_ DsmEvent Event)
 
SM_RESULT EnumPortOffWithDevice (_In_ DsmEvent Event)
 
SM_RESULT EnterLinkPowerInEnum ()
 
SM_RESULT OnLinkPowerInEnum (_In_ DsmEvent Event)
 
SM_RESULT EnterUpdatingDevice ()
 
SM_RESULT OnUpdatingDevice (_In_ DsmEvent Event)
 
SM_RESULT EnumPdChargingSet (_In_ DsmEvent Event)
 
SM_RESULT EnterParkedForHub ()
 
SM_RESULT OnParkedForHubInEnum (_In_ DsmEvent Event)
 
SM_RESULT OnHubSuspended (_In_ DsmEvent Event)
 
SM_RESULT OnHubSuspendedPortOff (_In_ DsmEvent Event)
 
SM_RESULT HubResumeForReenumeration (_In_ DsmEvent Event)
 
SM_RESULT HubResumeWithPortSuspended (_In_ DsmEvent Event)
 
SM_RESULT HubResumeWithPortEnabled (_In_ DsmEvent Event)
 
SM_RESULT HubEndResumedOrReenumerate ()
 
SM_RESULT HubPortSynced (_In_ DsmEvent Event)
 
SM_RESULT HubPortSyncedForReset (_In_ DsmEvent Event)
 
SM_RESULT HubPortSyncedForSuspend (_In_ DsmEvent Event)
 
SM_RESULT HubPortSuspendedAgain (_In_ DsmEvent Event)
 
SM_RESULT HubPortSyncedForStop (_In_ DsmEvent Event)
 
SM_RESULT HubPortOffForStop (_In_ DsmEvent Event)
 
SM_RESULT HubPortResumedForReset (_In_ DsmEvent Event)
 
SM_RESULT HubResumeEndedForStop (_In_ DsmEvent Event)
 
SM_RESULT HubResumeEndedForSuspend (_In_ DsmEvent Event)
 
SM_RESULT Zero20FirstResetDone (_In_ DsmEvent Event)
 
SM_RESULT Zero20FirstResetEndedForHub (_In_ DsmEvent Event)
 
SM_RESULT Zero20CreateDevice ()
 
SM_RESULT Zero20Enabled (_In_ DsmEvent Event)
 
SM_RESULT Zero20FirstDelayEnded (_In_ DsmEvent Event)
 
SM_RESULT Zero20StopDelay (_In_ DsmEvent Event)
 
SM_RESULT Zero20TimerFlushedOnDetach (_In_ DsmEvent Event)
 
SM_RESULT Zero20TimerFlushedForHub (_In_ DsmEvent Event)
 
SM_RESULT Zero20FirstDescriptorRead (_In_ DsmEvent Event)
 
SM_RESULT EnterUpdatingDefaultEndpoint ()
 
SM_RESULT Zero20EndpointUpdated (_In_ DsmEvent Event)
 
SM_RESULT Zero20ResetNotified (_In_ DsmEvent Event)
 
SM_RESULT Zero20SecondResetDone (_In_ DsmEvent Event)
 
SM_RESULT Zero20SecondResetEndedForHub (_In_ DsmEvent Event)
 
SM_RESULT Zero20SecondResetAwaitHub (_In_ DsmEvent Event)
 
SM_RESULT Zero20PortOffForHub (_In_ DsmEvent Event)
 
SM_RESULT Zero20SecondDelayEnded (_In_ DsmEvent Event)
 
SM_RESULT Zero30CreateDevice ()
 
SM_RESULT EnterResettingSuperSpeed ()
 
SM_RESULT OnResettingSuperSpeed (_In_ DsmEvent Event)
 
SM_RESULT Zero30Enabled (_In_ DsmEvent Event)
 
SM_RESULT StartSuperSpeedReset ()
 
SM_RESULT SuperSpeedResetNotified (_In_ DsmEvent Event)
 
SM_RESULT SuperSpeedResetDone (_In_ DsmEvent Event)
 
SM_RESULT SuperSpeedDelayEnded (_In_ DsmEvent Event)
 
SM_RESULT EnterSettingAddress ()
 
SM_RESULT OnSettingAddress (_In_ DsmEvent Event)
 
SM_RESULT AddressDelayEnded (_In_ DsmEvent Event)
 
SM_RESULT OnCollectingDescriptors (_In_ DsmEvent Event)
 
SM_RESULT EnterReadingDeviceDescriptor ()
 
SM_RESULT OnReadingDeviceDescriptor (_In_ DsmEvent Event)
 
SM_RESULT DescriptorsQueryRegistry ()
 
SM_RESULT DescriptorsAltEnumSent (_In_ DsmEvent Event)
 
SM_RESULT EnterDisablingSuperSpeed ()
 
SM_RESULT EnterReadingConfigDescriptor ()
 
SM_RESULT OnReadingConfigDescriptor (_In_ DsmEvent Event)
 
SM_RESULT EnterRemainingDescriptors ()
 
SM_RESULT OnRemainingDescriptors (_In_ DsmEvent Event)
 
SM_RESULT EnterReadingBos ()
 
SM_RESULT OnReadingBos (_In_ DsmEvent Event)
 
SM_RESULT BosStart ()
 
SM_RESULT BosHeaderRead (_In_ DsmEvent Event)
 
SM_RESULT BosError ()
 
SM_RESULT BosRead (_In_ DsmEvent Event)
 
SM_RESULT BosValidate ()
 
SM_RESULT BosFeaturesSent (_In_ DsmEvent Event)
 
SM_RESULT BosBillboard ()
 
SM_RESULT BosBillboardRead (_In_ DsmEvent Event)
 
SM_RESULT BosAltModes ()
 
SM_RESULT BosAltModeRead (_In_ DsmEvent Event)
 
SM_RESULT BosAltEnum ()
 
SM_RESULT BosMsOs20 ()
 
SM_RESULT BosMsOs20Read (_In_ DsmEvent Event)
 
SM_RESULT BosMsOs20Validate ()
 
SM_RESULT BosAltEnumSent (_In_ DsmEvent Event)
 
SM_RESULT AltDeviceDescriptorRead (_In_ DsmEvent Event)
 
SM_RESULT AltQueryRegistry ()
 
SM_RESULT AltConfigHeaderRead (_In_ DsmEvent Event)
 
SM_RESULT AltConfigRead (_In_ DsmEvent Event)
 
SM_RESULT AltValidateConfig ()
 
SM_RESULT AltBosHeaderRead (_In_ DsmEvent Event)
 
SM_RESULT AltBosRead (_In_ DsmEvent Event)
 
SM_RESULT AltBosValidate ()
 
SM_RESULT EnterReadingMsOs ()
 
SM_RESULT OnReadingMsOs (_In_ DsmEvent Event)
 
SM_RESULT MsOsStart ()
 
SM_RESULT MsOsRead (_In_ DsmEvent Event)
 
SM_RESULT MsOsMarkUnsupported ()
 
SM_RESULT MsOsStoreVendorCode ()
 
SM_RESULT MsOsSerial ()
 
SM_RESULT MsOsSerialRead (_In_ DsmEvent Event)
 
SM_RESULT MsOsError (_In_ DSM_THEN GoOn)
 
SM_RESULT MsOsExtendedConfig ()
 
SM_RESULT MsOsExtendedHeaderRead (_In_ DsmEvent Event)
 
SM_RESULT MsOsExtendedRead (_In_ DsmEvent Event)
 
SM_RESULT MsOsContainerId ()
 
SM_RESULT MsOsContainerHeaderRead (_In_ DsmEvent Event)
 
SM_RESULT MsOsContainerRead (_In_ DsmEvent Event)
 
SM_RESULT MsOsNoContainerId ()
 
SM_RESULT MsOsMarkNoContainerId ()
 
SM_RESULT EnterReadingLanguages ()
 
SM_RESULT OnReadingLanguages (_In_ DsmEvent Event)
 
SM_RESULT StringError ()
 
SM_RESULT EnterReadingProductName ()
 
SM_RESULT OnReadingProductName (_In_ DsmEvent Event)
 
SM_RESULT EnterReadingQualifier ()
 
SM_RESULT OnReadingQualifier (_In_ DsmEvent Event)
 
SM_RESULT QualifierRead (_In_ DsmEvent Event)
 
SM_RESULT LinkStart ()
 
SM_RESULT LinkIsochDelaySet (_In_ DsmEvent Event)
 
SM_RESULT LinkExitLatency ()
 
SM_RESULT LinkSelSet (_In_ DsmEvent Event)
 
SM_RESULT LinkLatencyTolerance ()
 
SM_RESULT LinkLtmSet (_In_ DsmEvent Event)
 
SM_RESULT EnterReportingToPnp ()
 
SM_RESULT OnReportingToPnp (_In_ DsmEvent Event)
 
SM_RESULT ReportAddChild ()
 
SM_RESULT ReportCreatePdo ()
 
SM_RESULT ReportDuplicateWaitEnded (_In_ DsmEvent Event)
 
SM_RESULT ReportCycledWithTimer (_In_ DsmEvent Event)
 
SM_RESULT EndOnDetach (_In_ DsmEvent Event)
 
SM_RESULT EnterReportingUnknown ()
 
SM_RESULT ReportUnknownPdo ()
 
SM_RESULT OnReportingUnknown (_In_ DsmEvent Event)
 
SM_RESULT EnterFailedDevice ()
 
SM_RESULT OnFailedDevice (_In_ DsmEvent Event)
 
SM_RESULT FailedPortDisabledAgain (_In_ DsmEvent Event)
 
SM_RESULT EnterFailedDeviceGone ()
 
SM_RESULT OnFailedDeviceGone (_In_ DsmEvent Event)
 
SM_RESULT LeaveHub ()
 
SM_RESULT OnFailedDeviceEvents (_In_ DsmEvent Event)
 
SM_RESULT FailedPortOffForHub (_In_ DsmEvent Event)
 
SM_RESULT EnterFailedHubSuspended ()
 
SM_RESULT OnFailedHubSuspended (_In_ DsmEvent Event)
 
SM_RESULT OnPortOffEvents (_In_ DsmEvent Event)
 
SM_RESULT EnterWithPortOff ()
 
SM_RESULT EnterWithPortOn ()
 
SM_RESULT EnterDetachedEvents ()
 
SM_RESULT DetachUnconfigured ()
 
SM_RESULT DetachConfigured ()
 
SM_RESULT EnterDetachedReported ()
 
SM_RESULT EnterDetachedReportedConfigured ()
 
SM_RESULT OnDetachedReported (_In_ DsmEvent Event)
 
SM_RESULT EnterDetachedMissing ()
 
SM_RESULT OnDetachedMissing (_In_ DsmEvent Event)
 
SM_RESULT DisableForRemoval (_In_ DSM_THEN After)
 
SM_RESULT RemovalEndpointsDisabled (_In_ DsmEvent Event)
 
SM_RESULT RemovalDeviceDisabled (_In_ DsmEvent Event)
 
SM_RESULT RemovalDeleteAfterLeaving ()
 
SM_RESULT RemovalDeleteAndFinish ()
 
SM_RESULT RemovalPowerDownDone ()
 
SM_RESULT RemovalLeaveHub ()
 
SM_RESULT RemovalAckHubStop ()
 
SM_RESULT RemovalDropPowerForHubStop ()
 
SM_RESULT RemovalHubStopped ()
 
SM_RESULT OnAwaitingRemove (_In_ DsmEvent Event)
 
SM_RESULT ReportMissingAndLeave ()
 
SM_RESULT OnAwaitingDetachOrRemove (_In_ DsmEvent Event)
 
SM_RESULT RemovalNotifyThenReport ()
 
SM_RESULT RemovalDeleteForgetAndPark ()
 
SM_RESULT RemovalDeleteForget ()
 
SM_RESULT RemovalDropPowerAndPark ()
 
SM_RESULT RemovalAckAndPark ()
 
SM_RESULT OnParkedPortOff (_In_ DsmEvent Event)
 
SM_RESULT OnParkedPortOn (_In_ DsmEvent Event)
 
SM_RESULT RemovalDeleteForgetPortOn ()
 
SM_RESULT OnRemovedPortOff (_In_ DsmEvent Event)
 
SM_RESULT OnRemovedPortOn (_In_ DsmEvent Event)
 
SM_RESULT CleanupPortDisabled (_In_ DsmEvent Event)
 
SM_RESULT CleanupDeviceDisabled (_In_ DsmEvent Event)
 
SM_RESULT CleanupDeleteAll ()
 
SM_RESULT CleanupDone ()
 
SM_RESULT OnDetachedEvents (_In_ DsmEvent Event)
 
SM_RESULT OnPortOnEvents (_In_ DsmEvent Event)
 
SM_RESULT PortOnOffForHubSuspend (_In_ DsmEvent Event)
 
SM_RESULT Then (_In_ DSM_THEN Next)
 
SM_RESULT EnterWithMsOsInstall ()
 
SM_RESULT ToAwaitingDetachOrRemove (_In_ BOOLEAN Configured)
 
SM_RESULT GoStoppedEnumerated ()
 
SM_RESULT EnterStoppedAddressed ()
 
SM_RESULT OnStoppedAddressed (_In_ DsmEvent Event)
 
SM_RESULT StoppedAckPreStart ()
 
SM_RESULT StoppedPoweredUp ()
 
SM_RESULT StoppedDisabledForNoDriver (_In_ DsmEvent Event)
 
SM_RESULT StoppedPortOffForNoDriver (_In_ DsmEvent Event)
 
SM_RESULT StoppedPortOffForHubStop (_In_ DsmEvent Event)
 
SM_RESULT StoppedDisabledForHub (_In_ DsmEvent Event)
 
SM_RESULT StoppedPortSuspendedForHub (_In_ DsmEvent Event)
 
SM_RESULT UnconfiguredByClient (_In_ DsmEvent Event)
 
SM_RESULT BackToUnconfigured ()
 
SM_RESULT HubDescriptorDone (_In_ DsmEvent Event)
 
SM_RESULT EnterReadingDeviceText ()
 
SM_RESULT DeviceTextRead (_In_ DsmEvent Event)
 
SM_RESULT OnReadingDeviceText (_In_ DsmEvent Event)
 
SM_RESULT OnAwaitingMsOsInstall (_In_ DsmEvent Event)
 
SM_RESULT MsOsInstallStart ()
 
SM_RESULT MsOsInstallDone ()
 
SM_RESULT MsOsExtHeaderRead (_In_ DsmEvent Event)
 
SM_RESULT MsOsExtRead (_In_ DsmEvent Event)
 
SM_RESULT MsOsWriteProperties ()
 
SM_RESULT MsOsFreeAndDone ()
 
SM_RESULT OnStoppedReady (_In_ DsmEvent Event)
 
SM_RESULT GoStoppedEnabled ()
 
SM_RESULT StoppedEnabledDisabledForHub (_In_ DsmEvent Event)
 
SM_RESULT StoppedPortOffAfterDisable (_In_ DsmEvent Event)
 
SM_RESULT OnStopped (_In_ DsmEvent Event)
 
SM_RESULT StoppedDropPower ()
 
SM_RESULT OnStoppedHubSuspended (_In_ DsmEvent Event)
 
SM_RESULT StoppedAckHubStop ()
 
SM_RESULT StoppedHubStarted ()
 
SM_RESULT StoppedPortOffAfterHubResume (_In_ DsmEvent Event)
 
SM_RESULT EnterHubSuspendedReleasingPower ()
 
SM_RESULT OnStoppedEnumeratedHubSuspended (_In_ DsmEvent Event)
 
SM_RESULT StoppedDisabledForCleanup (_In_ DsmEvent Event)
 
SM_RESULT StoppedPortResumed (_In_ DsmEvent Event)
 
SM_RESULT StoppedResumeEndedForStop (_In_ DsmEvent Event)
 
SM_RESULT StoppedResumeEndedForSuspend (_In_ DsmEvent Event)
 
SM_RESULT EnterSettingU2Timeout ()
 
SM_RESULT OnSettingU2Timeout (_In_ DsmEvent Event)
 
SM_RESULT U2TimeoutStart ()
 
SM_RESULT U2TimeoutSet (_In_ DsmEvent Event)
 
SM_RESULT GoUnconfiguredOn ()
 
SM_RESULT OnUnconfiguredOn (_In_ DsmEvent Event)
 
SM_RESULT UnconfiguredSuspendedForHub (_In_ DsmEvent Event)
 
SM_RESULT UnconfiguredDisabledForStop (_In_ DsmEvent Event)
 
SM_RESULT UnconfiguredPortOffForStop (_In_ DsmEvent Event)
 
SM_RESULT EnterSuspendingUnconfigured ()
 
SM_RESULT OnSuspendingUnconfigured (_In_ DsmEvent Event)
 
SM_RESULT EnterSuspended ()
 
SM_RESULT OnSuspendedUnconfigured (_In_ DsmEvent Event)
 
SM_RESULT UnconfiguredDisabledForRestart (_In_ DsmEvent Event)
 
SM_RESULT OnUnconfiguredHubSuspended (_In_ DsmEvent Event)
 
SM_RESULT UnconfiguredResumedWithHub (_In_ DsmEvent Event)
 
SM_RESULT SuspendStart ()
 
SM_RESULT SuspendIoAborted (_In_ DsmEvent Event)
 
SM_RESULT SuspendArmed (_In_ DsmEvent Event)
 
SM_RESULT SuspendIoPurged (_In_ DsmEvent Event)
 
SM_RESULT SuspendPortPlain (_In_ DsmEvent Event)
 
SM_RESULT SuspendPortArmed (_In_ DsmEvent Event)
 
SM_RESULT SuspendPortArmFailed (_In_ DsmEvent Event)
 
SM_RESULT SuspendEndedForHub (_In_ DsmEvent Event)
 
SM_RESULT OnDeviceSuspended (_In_ DsmEvent Event)
 
SM_RESULT SuspendedResumedByPort ()
 
SM_RESULT SuspendedIoStartedOnWake (_In_ DsmEvent Event)
 
SM_RESULT SuspendedBackDown (_In_ DsmEvent Event)
 
SM_RESULT SuspendedPortDownForHub (_In_ DsmEvent Event)
 
SM_RESULT SuspendedPortResumed (_In_ DsmEvent Event)
 
SM_RESULT SuspendedIoStarted (_In_ DsmEvent Event)
 
SM_RESULT SuspendedDisarmed (_In_ DsmEvent Event)
 
SM_RESULT SuspendedResumeDone ()
 
SM_RESULT SuspendedNeedsReset ()
 
SM_RESULT EnterAwaitingPowerUpAfterWake ()
 
SM_RESULT OnAwaitingPowerUpAfterWake (_In_ DsmEvent Event)
 
SM_RESULT SuspendedPurgedAfterWake (_In_ DsmEvent Event)
 
SM_RESULT SuspendedPortOffForStop (_In_ DsmEvent Event)
 
SM_RESULT OnSuspendedHubSuspended (_In_ DsmEvent Event)
 
SM_RESULT OnAwaitingPowerUpForReset (_In_ DsmEvent Event)
 
SM_RESULT SuspendedPurgedForReset (_In_ DsmEvent Event)
 
VOID DisablePortMarkingReset ()
 
SM_RESULT SuspendedPortOffForReset (_In_ DsmEvent Event)
 
SM_RESULT OnOffAfterD3Cold (_In_ DsmEvent Event)
 
SM_RESULT BackToConfigured ()
 
SM_RESULT GoConfiguredOn ()
 
SM_RESULT OnConfigured (_In_ DsmEvent Event)
 
SM_RESULT ClientDoneOk ()
 
SM_RESULT ClientDoneWithLastStatus ()
 
SM_RESULT ClientPipeDone (_In_ DsmEvent Event)
 
SM_RESULT ClientHaltCleared (_In_ DsmEvent Event)
 
SM_RESULT ConfiguredNullSet (_In_ DsmEvent Event)
 
SM_RESULT ConfiguredEndpointsDisabledForClient (_In_ DsmEvent Event)
 
SM_RESULT ConfiguredFreeForClient ()
 
SM_RESULT ConfiguredResetBootDevice ()
 
SM_RESULT OnConfiguredOn (_In_ DsmEvent Event)
 
SM_RESULT ConfiguredSignalAndStay ()
 
SM_RESULT ConfiguredCyclePort ()
 
SM_RESULT ConfiguredEndpointsDisabledForStop (_In_ DsmEvent Event)
 
SM_RESULT StopDecision ()
 
SM_RESULT ConfiguredPurgedForHub (_In_ DsmEvent Event)
 
SM_RESULT ConfiguredSuspendedForHub (_In_ DsmEvent Event)
 
VOID PurgeIoForHibernation ()
 
SM_RESULT ConfiguredPurgedForHibernation (_In_ DsmEvent Event)
 
SM_RESULT EnterPreparingHibernation ()
 
SM_RESULT OnPreparingHibernation (_In_ DsmEvent Event)
 
SM_RESULT OnConfiguredNotStarted (_In_ DsmEvent Event)
 
SM_RESULT ConfiguredNotStartedCleanup (_In_ DsmEvent Event)
 
SM_RESULT ConfiguredNotStartedHubStop (_In_ DsmEvent Event)
 
SM_RESULT ConfiguredNotStartedHubSuspend (_In_ DsmEvent Event)
 
SM_RESULT SelectConfigValidate ()
 
SM_RESULT SelectConfigFailed (_In_ BOOLEAN LastStatus)
 
SM_RESULT SelectConfigDone (_In_ DsmEvent Event)
 
SM_RESULT SelectConfigCleanUp ()
 
SM_RESULT EnterConfiguring ()
 
SM_RESULT OnConfiguring (_In_ DsmEvent Event)
 
SM_RESULT ConfigureOldDisabled (_In_ DsmEvent Event)
 
SM_RESULT ConfigureDeleteOld ()
 
SM_RESULT ConfigureInterfaceSet (_In_ DsmEvent Event)
 
SM_RESULT ConfigureCreateEndpoints ()
 
SM_RESULT ConfigureFailed ()
 
SM_RESULT ConfigureProgrammed (_In_ DsmEvent Event)
 
SM_RESULT EnterProgrammingEndpoints ()
 
SM_RESULT OnProgrammingEndpoints (_In_ DsmEvent Event)
 
SM_RESULT EndpointsProgrammed (_In_ DsmEvent Event)
 
SM_RESULT EnterSettingInterface ()
 
SM_RESULT OnSettingInterface (_In_ DsmEvent Event)
 
SM_RESULT InterfaceStart ()
 
SM_RESULT InterfaceCreateEndpoints ()
 
SM_RESULT InterfaceNewDisabled (_In_ DsmEvent Event)
 
SM_RESULT InterfaceProgrammed (_In_ DsmEvent Event)
 
SM_RESULT InterfaceRestoreOld ()
 
SM_RESULT InterfaceOldRestored (_In_ DsmEvent Event)
 
SM_RESULT InterfaceSet (_In_ DsmEvent Event)
 
SM_RESULT InterfaceNewEndpointsDisabled (_In_ DsmEvent Event)
 
SM_RESULT InterfaceDeleteOld ()
 
SM_RESULT InterfaceDeleteNewAndFail ()
 
SM_RESULT InterfaceDeleteOldAndFail ()
 
SM_RESULT EnterUpdatingLinkPower ()
 
SM_RESULT OnUpdatingLinkPower (_In_ DsmEvent Event)
 
SM_RESULT EnterSuspendingConfigured ()
 
SM_RESULT OnSuspendingConfigured (_In_ DsmEvent Event)
 
SM_RESULT ConfiguredPurgedWhileSuspending (_In_ DsmEvent Event)
 
SM_RESULT OnBootDeviceSuspending (_In_ DsmEvent Event)
 
SM_RESULT OnSuspendedConfigured (_In_ DsmEvent Event)
 
SM_RESULT ConfiguredResumed ()
 
SM_RESULT ConfiguredRestartWhileSuspended ()
 
SM_RESULT OnBootDeviceSuspended (_In_ DsmEvent Event)
 
SM_RESULT OnConfiguredHubSuspended (_In_ DsmEvent Event)
 
SM_RESULT ConfiguredResumedWithHub (_In_ DsmEvent Event)
 
SM_RESULT ConfiguredIoStarted (_In_ DsmEvent Event)
 
SM_RESULT LinkPowerStart ()
 
SM_RESULT LpmCompute ()
 
SM_RESULT LpmProgrammedBeforeRaise (_In_ DsmEvent Event)
 
SM_RESULT LpmLatencyRaised (_In_ DsmEvent Event)
 
SM_RESULT LpmLatencyTooLarge ()
 
SM_RESULT LpmFailCleanup ()
 
SM_RESULT LpmCleanedUpAfterFailure (_In_ DsmEvent Event)
 
SM_RESULT LpmDetachCleanup ()
 
SM_RESULT LpmCleanedUpAfterDetach (_In_ DsmEvent Event)
 
SM_RESULT LpmU1 ()
 
SM_RESULT LpmU1TimeoutSet (_In_ DsmEvent Event)
 
SM_RESULT LpmEnableU1 ()
 
SM_RESULT LpmU1Disabled (_In_ DsmEvent Event)
 
SM_RESULT LpmU1Enabled (_In_ DsmEvent Event)
 
SM_RESULT LpmU2 ()
 
SM_RESULT LpmU2TimeoutSet (_In_ DsmEvent Event)
 
SM_RESULT LpmEnableU2 ()
 
SM_RESULT LpmU2Disabled (_In_ DsmEvent Event)
 
SM_RESULT LpmU2Enabled (_In_ DsmEvent Event)
 
SM_RESULT LpmLower ()
 
SM_RESULT LpmLatencyLowered (_In_ DsmEvent Event)
 
SM_RESULT LpmFinalProgram ()
 
SM_RESULT LpmFinalProgrammed (_In_ DsmEvent Event)
 
SM_RESULT EnterBootDeviceEvents ()
 
SM_RESULT PurgeOnDetach ()
 
VOID NotifyAndPurgeIo ()
 
SM_RESULT PurgedOnDetach (_In_ DsmEvent Event)
 
SM_RESULT BootDeviceNotifyDetached ()
 
SM_RESULT BootDeviceDisableOnDetach ()
 
VOID DisableEndpointsPowerLost ()
 
SM_RESULT BootDeviceDisabledOnDetach (_In_ DsmEvent Event)
 
SM_RESULT BootDeviceFailed ()
 
VOID DisableEndpointsAndNotify ()
 
SM_RESULT BootDeviceDisabledOnFailure (_In_ DsmEvent Event)
 
SM_RESULT BootDeviceDetachDuringReset (_In_ BOOLEAN ContextGone)
 
SM_RESULT OnBootDeviceAwaitingReset (_In_ DsmEvent Event)
 
SM_RESULT EnterBootDeviceDetached ()
 
SM_RESULT EnterBootDeviceDetachedContextGone ()
 
SM_RESULT OnBootDeviceDetached (_In_ DsmEvent Event)
 
SM_RESULT EnterBootDeviceResetPending ()
 
SM_RESULT OnBootDeviceResetPending (_In_ DsmEvent Event)
 
SM_RESULT OnBootDeviceEvents (_In_ DsmEvent Event)
 
SM_RESULT Reenumerate (_In_ const State *Target, _In_ DSM_REENUM Kind, _In_ BOOLEAN ForceReset, _In_ DSM_NEXT After)
 
SM_RESULT EnterReenumerating ()
 
SM_RESULT OnReenumerating (_In_ DsmEvent Event)
 
SM_RESULT ReenumTreePurgedConfigured (_In_ DsmEvent Event)
 
SM_RESULT ReenumEndpointsDisabled (_In_ DsmEvent Event)
 
SM_RESULT ReenumTreePurgedUnconfigured (_In_ DsmEvent Event)
 
SM_RESULT ReenumEnabled (_In_ DsmEvent Event)
 
VOID FailIoAndDisablePort ()
 
SM_RESULT ReenumPortOffDeviceDisabled (_In_ DsmEvent Event)
 
SM_RESULT ReenumPortOffForHubDeviceDisabled (_In_ DsmEvent Event)
 
SM_RESULT ReenumParkForHub ()
 
SM_RESULT OnParkedForHubAgain (_In_ DsmEvent Event)
 
SM_RESULT OnClaimingAddressZeroAgain (_In_ DsmEvent Event)
 
SM_RESULT ReenumClaimEndedOnDetach (_In_ DsmEvent Event)
 
SM_RESULT OnCancelingClaimAgain (_In_ DsmEvent Event)
 
SM_RESULT ReenumDisableForHub ()
 
SM_RESULT ReenumDisabledForHub (_In_ DsmEvent Event)
 
SM_RESULT ReenumPortOffForHub (_In_ DsmEvent Event)
 
SM_RESULT ReenumRetryOrFail ()
 
VOID FailIoAndPurge ()
 
SM_RESULT ReenumPurgedAfterFailure (_In_ DsmEvent Event)
 
SM_RESULT ReenumPortOffAfterFailure (_In_ DsmEvent Event)
 
SM_RESULT ReenumPortOffForHubDeviceEnabled (_In_ DsmEvent Event)
 
SM_RESULT ReenumDisabledThenPark (_In_ DsmEvent Event)
 
SM_RESULT ReenumRetryDelayEnded (_In_ DsmEvent Event)
 
SM_RESULT ReenumStopRetryOnDetach ()
 
SM_RESULT ReenumTimerFlushedOnDetach (_In_ DsmEvent Event)
 
SM_RESULT ReenumStopRetryForHub ()
 
SM_RESULT ReenumTimerFlushedForHub (_In_ DsmEvent Event)
 
SM_RESULT EnterAtAddressZeroAgain ()
 
SM_RESULT OnAtAddressZeroAgain (_In_ DsmEvent Event)
 
SM_RESULT ReenumRetryOrFailHoldingAddressZero ()
 
SM_RESULT ReenumPurgedHoldingAddressZero (_In_ DsmEvent Event)
 
SM_RESULT ReenumPortOffHoldingAddressZero (_In_ DsmEvent Event)
 
SM_RESULT ReenumRetryDelayEndedHoldingAddressZero (_In_ DsmEvent Event)
 
SM_RESULT Again20FirstResetDone (_In_ DsmEvent Event)
 
SM_RESULT Again20FirstResetNotified (_In_ DsmEvent Event)
 
SM_RESULT Again20FirstDelayEnded (_In_ DsmEvent Event)
 
SM_RESULT Again20FirstDescriptorRead (_In_ DsmEvent Event)
 
SM_RESULT Again20SecondResetDone (_In_ DsmEvent Event)
 
SM_RESULT Again20SecondResetNotified (_In_ DsmEvent Event)
 
SM_RESULT Again20SecondDelayEnded (_In_ DsmEvent Event)
 
SM_RESULT OnAddressingAgain (_In_ DsmEvent Event)
 
SM_RESULT ReenumDescriptorRead (_In_ DsmEvent Event)
 
SM_RESULT ReenumWrongDevice ()
 
SM_RESULT ReenumWrongDeviceLeft (_In_ DsmEvent Event)
 
SM_RESULT ReenumAltEnumSent (_In_ DsmEvent Event)
 
SM_RESULT ReenumSerialNumber ()
 
SM_RESULT ReenumSerialRead (_In_ DsmEvent Event)
 
SM_RESULT ReenumConfigDescriptor ()
 
SM_RESULT ReenumConfigRead (_In_ DsmEvent Event)
 
SM_RESULT EnterLinkPowerAgain ()
 
SM_RESULT OnLinkPowerAgain (_In_ DsmEvent Event)
 
SM_RESULT Link20Start ()
 
SM_RESULT Link20Updated (_In_ DsmEvent Event)
 
SM_RESULT ReenumPdCharging ()
 
SM_RESULT ReenumPdChargingSet (_In_ DsmEvent Event)
 
SM_RESULT EnterBugChecking ()
 
SM_RESULT CycleAndPark ()
 
SM_RESULT ReenumDoneForClientUnconfigured (_In_ DsmEvent Event)
 
SM_RESULT ReenumFailedForClient (_In_ DsmEvent Event)
 
SM_RESULT ReenumDoneForClientConfigured (_In_ DsmEvent Event)
 
SM_RESULT ReconfiguredForClient (_In_ DsmEvent Event)
 
SM_RESULT ReenumDoneForBootDevice (_In_ DsmEvent Event)
 
SM_RESULT ReconfiguredBootDevice (_In_ DsmEvent Event)
 
SM_RESULT BootDeviceDisabledForReset (_In_ DsmEvent Event)
 
SM_RESULT ReenumDoneForHubStart (_In_ DsmEvent Event)
 
SM_RESULT ReenumDisabledThenReport (_In_ DsmEvent Event)
 
SM_RESULT ReenumDisabledThenCycle (_In_ DsmEvent Event)
 
SM_RESULT ReenumDoneForStart (_In_ DsmEvent Event)
 
SM_RESULT ReenumCleanUpOldConfig ()
 
SM_RESULT ReenumDisabledThenSignalAndCycle (_In_ DsmEvent Event)
 
SM_RESULT ReenumDoneForPreStart (_In_ DsmEvent Event)
 
SM_RESULT ReenumDisabledThenAckAndCycle (_In_ DsmEvent Event)
 
SM_RESULT ReenumDoneForHubResumeUnconfigured (_In_ DsmEvent Event)
 
SM_RESULT ReenumFailedForHubResume (_In_ DsmEvent Event)
 
SM_RESULT ReenumDoneForHubResumeConfigured (_In_ DsmEvent Event)
 
SM_RESULT ReconfiguredAfterHubResume (_In_ DsmEvent Event)
 
SM_RESULT ReenumPortOffAfterConfigFailure (_In_ DsmEvent Event)
 
SM_RESULT ReenumDoneForResumeUnconfigured (_In_ DsmEvent Event)
 
SM_RESULT ReenumFailedForResume (_In_ DsmEvent Event)
 
SM_RESULT ReenumDoneForResumeConfigured (_In_ DsmEvent Event)
 
SM_RESULT ReenumCycleAfterResumeFailure ()
 
SM_RESULT ReconfiguredAfterResume (_In_ DsmEvent Event)
 
SM_RESULT ReenumDoneForBootResume (_In_ DsmEvent Event)
 
SM_RESULT ReconfiguredBootAfterResume (_In_ DsmEvent Event)
 
SM_RESULT ReenumForClientUnconfigured ()
 
SM_RESULT ReenumForClientConfigured ()
 
SM_RESULT ReenumForBootClient (_In_ BOOLEAN AfterReattach)
 
SM_RESULT ReenumForHubStart ()
 
SM_RESULT ReenumForStart (_In_ DSM_REENUM Kind)
 
SM_RESULT ReenumForPreStart ()
 
SM_RESULT ReenumForHubResume (_In_ BOOLEAN Configured)
 
SM_RESULT ReenumForResume (_In_ BOOLEAN Configured)
 
SM_RESULT ReenumForBootResume ()
 
VOID ReferenceDevice ()
 
VOID DereferenceDevice ()
 
VOID QueuePassiveWork ()
 
BOOLEAN CancelStateTimer ()
 
ULONG DeviceKind ()
 
BOOLEAN RegisterWithHub ()
 
VOID UnregisterFromHub ()
 
VOID MarkAttachFailed ()
 
VOID MarkAttachSucceeded ()
 
VOID ReferencePort ()
 
VOID DereferencePort ()
 
BOOLEAN ReferenceHubPower ()
 
VOID DereferenceHubPower ()
 
VOID ReferenceDevicePower ()
 
VOID DereferenceDevicePower ()
 
VOID NotifyPortDetached ()
 
VOID RequestPortDisable ()
 
VOID RequestPortSuspend ()
 
VOID RequestPortResume ()
 
VOID SignalPnpWaiter ()
 
BOOLEAN ResetOnResumeFromSx ()
 
VOID SignalPnpPowerFailure ()
 
VOID ConfirmStopWhileSuspended ()
 
VOID AskPortCycle ()
 
VOID ForwardToController ()
 
VOID FailClientRequest ()
 
VOID FailHubDescriptorRequest ()
 
VOID AckPreStart ()
 
VOID CyclePortForClient ()
 
VOID SignalQueryText ()
 
VOID ReleasePnpWaiter ()
 
VOID StartDuplicateRetries ()
 
DSM_ADD_CHILD AddChildToHub ()
 
BOOLEAN DuplicateRetriesUsedUp ()
 
VOID DropSerialNumber ()
 
BOOLEAN CreatePdo ()
 
VOID ForgetChild ()
 
BOOLEAN CreatePlaceholderPdo ()
 
VOID ReportEnumFailure ()
 
VOID ReportDeviceMissing ()
 
VOID MarkDisconnected ()
 
VOID NotifyDisconnected ()
 
VOID DeleteConfigEndpoints ()
 
VOID DisableAllEndpoints ()
 
VOID StartEnumRetries ()
 
BOOLEAN EnumRetriesUsedUp ()
 
VOID StartRetryTimer ()
 
BOOLEAN StopTimer ()
 
BOOLEAN DeviceProgrammingLost ()
 
VOID ClaimAddressZero ()
 
VOID ReleaseAddressZero ()
 
VOID CancelControllerIoctl ()
 
VOID UpdateDeviceInController ()
 
VOID DisableDeviceInController ()
 
VOID DeleteDefaultEndpoint ()
 
VOID DeleteDeviceInController ()
 
BOOLEAN SupportsPdCharging ()
 
VOID SetPdChargingPolicy ()
 
VOID RequestPortReset ()
 
VOID RequestPortWarmReset ()
 
BOOLEAN SetSpeedFor20 ()
 
BOOLEAN SetSpeedFor30 ()
 
VOID RecordDeviceVersion ()
 
BOOLEAN CreateDeviceInController ()
 
BOOLEAN CreateDefaultEndpoint ()
 
VOID EnableDeviceInController ()
 
BOOLEAN IsFirstEnumTry ()
 
VOID StartPostResetTimer ()
 
VOID StartLongPostResetTimer ()
 
VOID StartSuperSpeedPostResetTimer ()
 
VOID ArmPostAddressTimer ()
 
VOID ArmDuplicateDeviceTimer ()
 
VOID ReadFirstDescriptor ()
 
BOOLEAN FirstDescriptorValid ()
 
VOID UpdateDefaultEndpoint ()
 
BOOLEAN NeedsSecondReset ()
 
VOID NotifyDeviceReset ()
 
VOID RecordResetTimeout ()
 
DSM_RESET_KIND ResetKindNeeded ()
 
VOID SetDeviceAddress ()
 
BOOLEAN WaitNeededAfterAddress ()
 
VOID CancelTransfer ()
 
VOID ReadDeviceDescriptor ()
 
BOOLEAN DeviceDescriptorValid ()
 
BOOLEAN QueryRegistryValues ()
 
BOOLEAN AltEnumNeededInEnum ()
 
BOOLEAN AltEnumNeededAfterBos ()
 
VOID SendAltEnumCommand ()
 
BOOLEAN SuperSpeedMustBeDisabled ()
 
VOID RequestSuperSpeedDisable ()
 
VOID ReadConfigDescriptorHeader ()
 
VOID ReadFullConfigDescriptor ()
 
BOOLEAN ConfigLongerThanRead ()
 
BOOLEAN ConfigDescriptorValid ()
 
BOOLEAN BosQuerySkipped ()
 
VOID ReadBosHeader ()
 
BOOLEAN BosHeaderValid ()
 
BOOLEAN BosComplete ()
 
VOID ReadBos ()
 
BOOLEAN BosValid ()
 
BOOLEAN IgnoreDescriptorError ()
 
BOOLEAN DualRoleSupported ()
 
VOID SendUsbFeatures ()
 
BOOLEAN HasBillboard ()
 
BOOLEAN BillboardStringWanted ()
 
VOID ReadBillboardString ()
 
BOOLEAN BillboardStringValid ()
 
BOOLEAN AltModeStringWanted ()
 
VOID ReadAltModeString ()
 
BOOLEAN AltModeStringValid ()
 
BOOLEAN MsOs20Supported ()
 
VOID ReadMsOs20Set ()
 
BOOLEAN MsOs20SetValid ()
 
BOOLEAN ProductStringIndexZero ()
 
BOOLEAN MsOsQueryWanted ()
 
VOID ReadMsOsDescriptor ()
 
BOOLEAN MsOsDescriptorValid ()
 
VOID MarkMsOsUnsupported ()
 
VOID StoreMsOsVendorCode ()
 
BOOLEAN MsOsContainerIdSupported ()
 
VOID MarkContainerIdUnsupported ()
 
BOOLEAN IgnoreSerialNumber ()
 
BOOLEAN SerialNumberIndexZero ()
 
VOID ReadSerialNumber ()
 
BOOLEAN SerialNumberValid ()
 
BOOLEAN MsOsExtendedConfigSupported ()
 
VOID ReadExtendedConfigHeader ()
 
BOOLEAN ExtendedConfigHeaderValid ()
 
VOID ReadExtendedConfig ()
 
BOOLEAN ExtendedConfigValid ()
 
BOOLEAN ContainerIdWanted ()
 
VOID ReadContainerIdHeader ()
 
BOOLEAN ContainerIdHeaderValid ()
 
VOID ReadContainerId ()
 
BOOLEAN ContainerIdKnown ()
 
VOID ReadLanguageIds ()
 
BOOLEAN LanguageIdsValid ()
 
BOOLEAN ProductNameWanted ()
 
VOID ReadProductName ()
 
BOOLEAN ProductNameValid ()
 
VOID ReadQualifier ()
 
BOOLEAN QualifierValid ()
 
BOOLEAN IsochDelaySkipped ()
 
VOID SetIsochDelay ()
 
BOOLEAN SelSkipped ()
 
VOID SetSel ()
 
BOOLEAN LtmWanted ()
 
VOID EnableLtm ()
 
VOID StartDriverWaitTimer ()
 
BOOLEAN DisableWhenUnused ()
 
VOID ForceResetOnNextStart ()
 
VOID SetNullConfiguration ()
 
VOID CompletePreStart ()
 
VOID AllowIo ()
 
VOID CompleteClientRequest ()
 
BOOLEAN PdoStarted ()
 
VOID GetDescriptorForHub ()
 
VOID CompleteQueryText ()
 
BOOLEAN ExtPropertiesWanted ()
 
VOID MarkMsOsInstallHandled ()
 
BOOLEAN SetExtPropertiesSemaphore ()
 
VOID ReadExtPropertiesHeader ()
 
BOOLEAN MsOs20ValuesWanted ()
 
BOOLEAN InstallMsOs20Values ()
 
BOOLEAN ExtPropertiesHeaderValid ()
 
BOOLEAN AllocateExtPropertiesBuffer ()
 
VOID ReadExtProperties ()
 
BOOLEAN ExtPropertiesValid ()
 
BOOLEAN WriteCustomProperties ()
 
VOID FreeExtPropertiesBuffer ()
 
BOOLEAN U2NeededForEnumerated ()
 
VOID RequestU2Timeout ()
 
VOID ClearResetAtResume ()
 
BOOLEAN ArmForWakeWanted ()
 
VOID AbortDeviceIo ()
 
VOID PurgeIoForSuspend ()
 
VOID ArmForWake ()
 
VOID FinishWaitWake ()
 
VOID MarkResetAtResume ()
 
BOOLEAN DeviceArmedForWake ()
 
VOID StartDeviceIo ()
 
BOOLEAN DisarmOnResume ()
 
VOID DisarmWake ()
 
BOOLEAN ResetOnResumeFromS0 ()
 
BOOLEAN ResetAtResumeMarked ()
 
VOID MarkSystemWakeSource ()
 
BOOLEAN IsBootDevice ()
 
BOOLEAN SelectInterfaceValid ()
 
BOOLEAN FindClientPipe ()
 
BOOLEAN PipeIsZeroBandwidth ()
 
VOID ClearEndpointHalt ()
 
VOID ResetEndpoint ()
 
BOOLEAN PipeIsIsochronous ()
 
VOID ResetEndpointAndTransfers ()
 
VOID CompleteClientRequestLastStatus ()
 
VOID CompleteClientRequestFailed ()
 
BOOLEAN AdjustLatencyForNoPing ()
 
VOID RequestHibernationPrep ()
 
BOOLEAN SelectConfigValid ()
 
BOOLEAN PrepareConfigLists ()
 
VOID SetConfigInfoInRequest ()
 
VOID DisablePendingEndpoints ()
 
VOID DeleteOldConfigEndpoints ()
 
VOID SetConfiguration ()
 
BOOLEAN AlternateSettingLeft ()
 
VOID SetInterface ()
 
BOOLEAN CreateEndpoints ()
 
VOID MarkPendingEndpointsDisabled ()
 
VOID ProgramEndpoints ()
 
VOID SetInterfaceInfoInRequest ()
 
BOOLEAN PrepareInterfaceLists ()
 
VOID DisableNewInterfaceEndpoints ()
 
VOID DeleteOldInterfaceEndpoints ()
 
VOID DeleteNewInterfaceEndpoints ()
 
VOID InitLinkStates ()
 
VOID CalcU1Timeout ()
 
VOID CalcU2Timeout ()
 
VOID ComputeExitLatency ()
 
BOOLEAN ExitLatencyMustRise ()
 
BOOLEAN EndpointsNeedProgramming ()
 
VOID UpdateExitLatency ()
 
BOOLEAN DisableLinkStatesForLatency ()
 
BOOLEAN EndpointsNeedDisableOnFailure ()
 
BOOLEAN U1TimeoutChanged ()
 
VOID RequestU1Timeout ()
 
VOID DisableU1 ()
 
VOID EnableU1 ()
 
VOID MarkU1Disabled ()
 
VOID MarkU1Enabled ()
 
BOOLEAN U2TimeoutChanged ()
 
VOID DisableU2 ()
 
VOID EnableU2 ()
 
VOID MarkU2Disabled ()
 
VOID MarkU2Enabled ()
 
BOOLEAN ExitLatencyMayDrop ()
 
VOID PurgeDeviceIo ()
 
VOID MarkPowerLost ()
 
DSM_FEATURE_CHANGE U1Change ()
 
DSM_FEATURE_CHANGE U2Change ()
 
VOID LogReenumeration ()
 
VOID PurgeDeviceTreeIo ()
 
VOID ClearReprogramNeeded ()
 
VOID SetFailIo ()
 
BOOLEAN DeviceSpeedChanged ()
 
BOOLEAN SameDeviceConnected ()
 
BOOLEAN AltEnumNeededOnReenum ()
 
VOID NotifyWrongDevice ()
 
BOOLEAN SerialNumberCompared ()
 
BOOLEAN SameSerialNumber ()
 
BOOLEAN ConfigReadOnReset ()
 
BOOLEAN UpdateLpm20 ()
 
VOID BugCheckForBootDevice ()
 
BOOLEAN PrepareListsForReset ()
 
VOID NotifyReconnected ()
 

Private Attributes

HubChild * m_Device
 
DSM_NEXT m_Next
 
DSM_THEN m_Then
 
DSM_THEN m_AfterDelete
 
const State * m_ReturnTo
 
DsmEvent m_Result
 
DsmEvent m_HubEvent
 
BOOLEAN m_FailedPoweredUp
 
BOOLEAN m_EndpointsConfigured
 
BOOLEAN m_ChildForgotten
 
BOOLEAN m_Unregistered
 
BOOLEAN m_PortMayResume
 
DSM_THEN m_AfterDisable
 
DSM_THEN m_Resume
 
DSM_REENUM m_ReenumKind
 
BOOLEAN m_ReenumForceReset
 
BOOLEAN m_DetachEndsReset
 
DSM_NEXT m_AfterReenum
 
BOOLEAN m_FromConfigured
 
BOOLEAN m_ContextGone
 
DSM_NEXT m_AfterConfigure
 
DSM_NEXT m_AfterProgram
 
BOOLEAN m_D3Cold
 
DSM_NEXT m_AfterPurge
 
DSM_DELAY m_DelayKind
 
DSM_ACTION m_Start
 
BOOLEAN m_ConfigFullLength
 

Static Private Attributes

static const BOOLEAN SmCompletionsFirst = FALSE
 
static const USHORT SmTimerEventId = static_cast<USHORT>(DsmEvent::TimerFired)
 
static const State PassiveStep
 
static const State Ending
 
static const State DisablingPort
 
static const State AwaitingPort
 
static const State Delaying
 
static const State EnablingDevice
 
static const State ResettingPort
 
static const State NotifyingReset
 
static const State ReadingFirstDescriptor
 
static const State Starting
 
static const State Requesting
 
static const State RequestingCritical
 
static const State RequestingYielding
 
static const State WaitingForController
 
static const State RequestingCriticalPassive
 
static const State CancelingTransfer
 
static const State SuspendingPort
 
static const State ResumingPort
 
static const State IgnoringHub
 
static const State ForwardingStreams
 
static const State DisablingEndpoints
 
static const State AwaitingPortYielding
 
static const State IoctlAfterDetach
 
static const State TimerAfterDetach
 
static const State DisablingDevice
 
static const State SettingPdCharging
 
static const State AwaitingAttach
 
static const State AwaitingDelete
 
static const State Enumerating
 
static const State ClaimingAddressZero
 
static const State CancelingClaimForHub
 
static const State AtAddressZero
 
static const State AddressingInEnum
 
static const State ReadingDescriptors
 
static const State LinkPowerInEnum
 
static const State UpdatingDevice
 
static const State ParkedForHubInEnum
 
static const State HubSuspended
 
static const State HubSuspendedPortOff
 
static const State ResettingSuperSpeed
 
static const State UpdatingDefaultEndpoint
 
static const State SettingAddress
 
static const State CollectingDescriptors
 
static const State ReadingDeviceDescriptor
 
static const State ReadingConfigDescriptor
 
static const State DisablingSuperSpeed
 
static const State RemainingDescriptors
 
static const State ReadingBos
 
static const State ReadingMsOs
 
static const State ReadingLanguages
 
static const State ReadingProductName
 
static const State ReadingQualifier
 
static const State ReportingToPnp
 
static const State ReportingUnknown
 
static const State FailedDevice
 
static const State FailedDeviceGone
 
static const State FailedDeviceEvents
 
static const State FailedHubSuspended
 
static const State PortOffEvents
 
static const State DetachedReported
 
static const State DetachedReportedConfigured
 
static const State DetachedMissing
 
static const State AwaitingRemove
 
static const State AwaitingDetachOrRemove
 
static const State ParkedPortOff
 
static const State ParkedPortOn
 
static const State RemovedPortOff
 
static const State RemovedPortOn
 
static const State DetachedEvents
 
static const State PortOnEvents
 
static const State StoppedAddressed
 
static const State StoppedReady
 
static const State Stopped
 
static const State StoppedHubSuspended
 
static const State StoppedEnumeratedHubSuspended
 
static const State ReadingDeviceText
 
static const State AwaitingMsOsInstall
 
static const State SettingU2Timeout
 
static const State UnconfiguredOn
 
static const State SuspendingUnconfigured
 
static const State SuspendedUnconfigured
 
static const State UnconfiguredHubSuspended
 
static const State DeviceSuspended
 
static const State SuspendedHubSuspended
 
static const State AwaitingPowerUpForReset
 
static const State AwaitingPowerUpAfterWake
 
static const State OffAfterD3Cold
 
static const State Configured
 
static const State ConfiguredOn
 
static const State ConfiguredNotStarted
 
static const State Configuring
 
static const State SettingInterface
 
static const State ProgrammingEndpoints
 
static const State UpdatingLinkPower
 
static const State SuspendingConfigured
 
static const State BootDeviceSuspending
 
static const State SuspendedConfigured
 
static const State BootDeviceSuspended
 
static const State ConfiguredHubSuspended
 
static const State PreparingHibernation
 
static const State BootDeviceAwaitingReset
 
static const State BootDeviceDetached
 
static const State BootDeviceDetachedContextGone
 
static const State BootDeviceResetPending
 
static const State BootDeviceEvents
 
static const State Reenumerating
 
static const State ReenumeratingForHubStart
 
static const State ReenumeratingForPower
 
static const State AtAddressZeroAgain
 
static const State AddressingAgain
 
static const State LinkPowerAgain
 
static const State ParkedForHubAgain
 
static const State ClaimingAddressZeroAgain
 
static const State CancelingClaimAgain
 
static const State BugChecking
 

Friends

class SmMachine< DeviceMachine, DsmEvent >
 

Additional Inherited Members

- Public Types inherited from SmMachine< DeviceMachine, DsmEvent >
typedef SmState< DeviceMachine, DsmEvent > State
 
- Protected Member Functions inherited from SmMachine< DeviceMachine, DsmEvent >
VOID SmBeginPause ()
 
VOID SmDiscardQueued (_In_ DsmEvent Ev)
 
BOOLEAN SmAccepts (_In_ DsmEvent Ev)
 
VOID SmReference ()
 
VOID SmDereference ()
 
VOID SmQueuePassive ()
 
VOID SmOnDequeue (_In_ DsmEvent Ev)
 
VOID SmStateChanged ()
 
BOOLEAN SmCancelTimer ()
 
- Static Protected Member Functions inherited from SmMachine< DeviceMachine, DsmEvent >
static SM_RESULT SmMakeResult (_In_ SM_RESULT_KIND Kind, _In_ USHORT Ev, _In_opt_ const VOID *Target)
 
static SM_RESULT SmHandled ()
 
static SM_RESULT SmUnhandled ()
 
static SM_RESULT SmTransition (_In_ const State *Target)
 
static SM_RESULT SmPaused ()
 
static SM_RESULT SmCall (_In_ const State *Start)
 
static SM_RESULT SmReturn (_In_ DsmEvent Ev)
 
- Static Protected Attributes inherited from SmMachine< DeviceMachine, DsmEvent >
static const BOOLEAN SmCompletionsFirst
 
static const USHORT SmTimerEventId
 

Detailed Description

Definition at line 156 of file devsm.h.

Member Typedef Documentation

◆ DSM_ACTION

typedef VOID(DeviceMachine::* DeviceMachine::DSM_ACTION) ()
private

Starts the request a shared request state waits for.

Definition at line 181 of file devsm.h.

◆ DSM_NEXT

typedef SM_RESULT(DeviceMachine::* DeviceMachine::DSM_NEXT) (_In_ DsmEvent Event)
private

Where a shared wait goes once its event arrives.

Definition at line 175 of file devsm.h.

◆ DSM_THEN

typedef SM_RESULT(DeviceMachine::* DeviceMachine::DSM_THEN) ()
private

Code that runs once a shared step state is entered.

Definition at line 178 of file devsm.h.

Member Function Documentation

◆ AbortDeviceIo()

VOID DeviceMachine::AbortDeviceIo ( )
private

Definition at line 901 of file devhcd.cpp.

902{
905}
HubChild * m_Device
Definition: devsm.h:1832
NTSTATUS NTAPI HubChildSubmitUcxIoctl(_In_ HubChild *Child, _In_ ULONG IoControlCode)
Definition: devhcd.cpp:174
#define UCX_SIZE_ABORT
Definition: devhcd.cpp:23
static HubUcxPayload *NTAPI HubChildNewPayload(_In_ HubChild *Child, _In_ ULONG Size)
Definition: devhcd.cpp:72
#define IOCTL_UCXHUB_DEVICE_ABORT_IO
Definition: hubucx.h:68

Referenced by SuspendStart().

◆ AckPreStart()

VOID DeviceMachine::AckPreStart ( )
private

◆ AddChildToHub()

DSM_ADD_CHILD DeviceMachine::AddChildToHub ( )
private

Definition at line 419 of file devmisc.cpp.

420{
422 USB_ID_STRING Serial;
424
425 if (Child->m_SerialNumber == NULL)
426 return DsmAddChildDone;
427
428 RtlZeroMemory(&Serial, sizeof(Serial));
429 Serial.LanguageId = Child->m_LanguageId;
430 Serial.LengthInBytes = Child->m_SerialNumberLength;
431 Serial.Buffer = Child->m_SerialNumber;
432
434 Child->m_Hub,
435 Child->m_Port->Number(),
437 Child->m_DeviceDescriptor.idVendor,
438 Child->m_DeviceDescriptor.idProduct,
439 &Serial);
440
441 switch (Result)
442 {
444 return DsmAddChildDone;
445
447 DPRINT("Device %p waits for a departing duplicate\n", Child);
449
451 DPRINT1("Device %p serial number already in use\n", Child);
453 return DsmAddChildFailed;
454
456 DPRINT1("Device %p could not be added to the device list\n", Child);
457 return DsmAddChildFailed;
458
459 default:
460 DPRINT1("Device %p unexpected device list answer\n", Child);
462 return DsmAddChildFailed;
463 }
464}
#define DPRINT1
Definition: precomp.h:8
#define HUB_VALIDATION_DUPLICATE_SERIAL
Definition: devmisc.cpp:20
VOID NTAPI HubLogDeviceValidationError(_In_ HubChild *Child, _In_ ULONG Code)
Definition: devmisc.cpp:483
@ DsmAddChildFailed
Definition: devsm.h:118
@ DsmAddChildDone
Definition: devsm.h:116
@ DsmAddChildDuplicate
Definition: devsm.h:117
#define NULL
Definition: types.h:112
ULONG NTAPI USBD_AddDeviceToGlobalList(_In_ PVOID DeviceContext, _In_opt_ PVOID HubContext, _In_ ULONG PortNumber, _In_opt_ PVOID ConnectorNode, _In_ USHORT IdVendor, _In_ USHORT IdProduct, _In_ PUSB_ID_STRING SerialNumber)
Definition: hubsup.c:204
PVOID NTAPI HubConnectorNodeForPort(_In_ HubPort *Port)
Definition: portconn.cpp:320
ULONG64 Serial
Definition: rhubpdo.cpp:335
#define DPRINT
Definition: sndvol32.h:73
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262
uint32_t ULONG
Definition: typedefs.h:59
#define USBD_GLOBAL_LIST_DUPLICATE_PENDING
Definition: usbdhub.h:20
#define USBD_GLOBAL_LIST_ADDED
Definition: usbdhub.h:19
#define USBD_GLOBAL_LIST_DUPLICATE
Definition: usbdhub.h:21
#define USBD_GLOBAL_LIST_NO_MEMORY
Definition: usbdhub.h:22
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFDEVICE Child
Definition: wdffdo.h:536
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
Definition: wsk.h:409
#define NT_ASSERT
Definition: rtlfuncs.h:3334

Referenced by ReportAddChild().

◆ AddressDelayEnded()

SM_RESULT DeviceMachine::AddressDelayEnded ( _In_ DsmEvent  Event)
private

Definition at line 517 of file devsm_zero.cpp.

519{
520 switch (Event)
521 {
522 case DsmEvent::TimerFired:
523 return EndWith(DsmEvent::Succeeded);
524
525 case DsmEvent::HubStopping:
526 case DsmEvent::HubSuspending:
527 case DsmEvent::PortDetached:
528 return EndAfterTimer(Event);
529
530 default:
531 return SmUnhandled();
532 }
533}
SM_RESULT EndWith(_In_ DsmEvent Result)
Definition: devsm.cpp:186
SM_RESULT EndAfterTimer(_In_ DsmEvent Event)
Definition: devsm.cpp:466
static SM_RESULT SmUnhandled()
Definition: smengine.h:188
_Check_return_ _In_ DXGK_EVENT_TYPE _In_ ULONG Event
Definition: dispmprt.h:1287

Referenced by OnSettingAddress().

◆ AdjustLatencyForNoPing()

BOOLEAN DeviceMachine::AdjustLatencyForNoPing ( )
private

Definition at line 567 of file devlpm.cpp.

568{
570 ULONG Doubled;
571
572 if (Child->m_LatencyAdjustPercent == 0)
573 {
575 return TRUE;
576 }
577
578 Doubled = Child->m_LatencyAdjustPercent * 2UL;
579 if (Doubled <= NO_PING_LAST_PERCENT)
580 {
581 Child->m_LatencyAdjustPercent = (UCHAR)Doubled;
582 return TRUE;
583 }
584
585 if (Child->m_U1Timeout == TIMEOUT_DISABLED && Child->m_U2Timeout == TIMEOUT_DISABLED)
586 {
587 DPRINT1("Device %p misses pings with link power already off\n", Child);
588 return FALSE;
589 }
590
591 DPRINT1("Device %p misses pings, turning U1 and U2 off\n", Child);
592 Child->m_LinkFlags |= HUB_LINK_OFF_FOR_NO_PING;
593 return TRUE;
594}
UCHAR m_LatencyAdjustPercent
Definition: hubchild.h:451
#define HUB_LINK_OFF_FOR_NO_PING
Definition: devhcd.h:25
#define NO_PING_LAST_PERCENT
Definition: devlpm.cpp:40
#define TIMEOUT_DISABLED
Definition: devlpm.cpp:15
#define NO_PING_FIRST_PERCENT
Definition: devlpm.cpp:39
#define TRUE
Definition: types.h:120
unsigned char UCHAR
Definition: typedefs.h:53

Referenced by OnConfiguredOn().

◆ Again20FirstDelayEnded()

SM_RESULT DeviceMachine::Again20FirstDelayEnded ( _In_ DsmEvent  Event)
private

Definition at line 653 of file devsm_reenum.cpp.

655{
656 switch (Event)
657 {
658 case DsmEvent::TimerFired:
660
661 case DsmEvent::HubStopping:
662 case DsmEvent::HubSuspending:
663 case DsmEvent::PortDetached:
664 return EndAfterTimer(Event);
665
666 default:
667 return SmUnhandled();
668 }
669}
SM_RESULT Again20FirstDescriptorRead(_In_ DsmEvent Event)
static const State ReadingFirstDescriptor
Definition: devsm.h:227
_In_ WDFDPC _In_ BOOLEAN Wait
Definition: wdfdpc.h:170

Referenced by Again20FirstResetNotified().

◆ Again20FirstDescriptorRead()

SM_RESULT DeviceMachine::Again20FirstDescriptorRead ( _In_ DsmEvent  Event)
private

Definition at line 672 of file devsm_reenum.cpp.

674{
675 if ((Event != DsmEvent::TransferDone) && (Event != DsmEvent::TransferFailed))
676 return SmUnhandled();
677
680
681 return EndWith(DsmEvent::Failed);
682}
static const State ResettingPort
Definition: devsm.h:225
SM_RESULT Again20SecondResetDone(_In_ DsmEvent Event)
BOOLEAN FirstDescriptorValid()
Definition: devdesc.cpp:67

Referenced by Again20FirstDelayEnded().

◆ Again20FirstResetDone()

SM_RESULT DeviceMachine::Again20FirstResetDone ( _In_ DsmEvent  Event)
private

Definition at line 608 of file devsm_reenum.cpp.

610{
611 switch (Event)
612 {
613 case DsmEvent::PortResetDone:
615
616 case DsmEvent::HubStopping:
617 case DsmEvent::HubSuspending:
620
621 case DsmEvent::PortResetAbortedForSuspend:
623
624 case DsmEvent::PortResetTimeout:
626 return EndWith(DsmEvent::Failed);
627
628 case DsmEvent::PortFault:
629 return EndWith(DsmEvent::Failed);
630
631 case DsmEvent::PortDetached:
632 return EndWith(DsmEvent::PortDetached);
633
634 default:
635 return SmUnhandled();
636 }
637}
static const State AwaitingPort
Definition: devsm.h:222
VOID RecordResetTimeout()
Definition: devmisc.cpp:398
DsmEvent m_HubEvent
Definition: devsm.h:1838
static const State NotifyingReset
Definition: devsm.h:226
SM_RESULT EndOnHubOrDetach(_In_ DsmEvent Event)
Definition: devsm.cpp:428
SM_RESULT EndOnResetForHub(_In_ DsmEvent Event)
Definition: devsm.cpp:445
SM_RESULT Again20FirstResetNotified(_In_ DsmEvent Event)

Referenced by EnterAtAddressZeroAgain().

◆ Again20FirstResetNotified()

SM_RESULT DeviceMachine::Again20FirstResetNotified ( _In_ DsmEvent  Event)
private

Definition at line 640 of file devsm_reenum.cpp.

642{
643 if (Event != DsmEvent::ControllerIoctlDone)
644 return SmUnhandled();
645
646 if (DeviceSpeedChanged())
647 return EndWith(DsmEvent::Failed);
648
650}
SM_RESULT Again20FirstDelayEnded(_In_ DsmEvent Event)
BOOLEAN DeviceSpeedChanged()
Definition: devmisc.cpp:218
SM_RESULT Delay(_In_ DSM_DELAY Kind, _In_ DSM_NEXT Next)
Definition: devsm.cpp:291
@ DsmDelayPostReset
Definition: devsm.h:125

Referenced by Again20FirstResetDone().

◆ Again20SecondDelayEnded()

SM_RESULT DeviceMachine::Again20SecondDelayEnded ( _In_ DsmEvent  Event)
private

Definition at line 735 of file devsm_reenum.cpp.

737{
738 switch (Event)
739 {
740 case DsmEvent::TimerFired:
741 return EndWith(DsmEvent::Succeeded);
742
743 case DsmEvent::HubStopping:
744 case DsmEvent::HubSuspending:
745 case DsmEvent::PortDetached:
746 return EndAfterTimer(Event);
747
748 default:
749 return SmUnhandled();
750 }
751}

Referenced by Again20SecondResetNotified().

◆ Again20SecondResetDone()

SM_RESULT DeviceMachine::Again20SecondResetDone ( _In_ DsmEvent  Event)
private

Definition at line 685 of file devsm_reenum.cpp.

687{
688 switch (Event)
689 {
690 case DsmEvent::PortResetDone:
692
693 case DsmEvent::PortResetTimeout:
695 return EndWith(DsmEvent::Failed);
696
697 case DsmEvent::PortFault:
698 return EndWith(DsmEvent::Failed);
699
700 case DsmEvent::PortResetAbortedForSuspend:
702
703 case DsmEvent::PortDetached:
704 return EndWith(DsmEvent::PortDetached);
705
706 case DsmEvent::HubStopping:
707 case DsmEvent::HubSuspending:
710
711 default:
712 return SmUnhandled();
713 }
714}
SM_RESULT Again20SecondResetNotified(_In_ DsmEvent Event)

Referenced by Again20FirstDescriptorRead().

◆ Again20SecondResetNotified()

SM_RESULT DeviceMachine::Again20SecondResetNotified ( _In_ DsmEvent  Event)
private

Definition at line 717 of file devsm_reenum.cpp.

719{
720 switch (Event)
721 {
722 case DsmEvent::ControllerIoctlDone:
725
726 case DsmEvent::ControllerIoctlFailed:
727 return EndWith(DsmEvent::Failed);
728
729 default:
730 return SmUnhandled();
731 }
732}
SM_RESULT Again20SecondDelayEnded(_In_ DsmEvent Event)
BOOLEAN IsFirstEnumTry()
Definition: devmisc.cpp:30
@ DsmDelayPostResetLong
Definition: devsm.h:126

Referenced by Again20SecondResetDone().

◆ AllocateExtPropertiesBuffer()

BOOLEAN DeviceMachine::AllocateExtPropertiesBuffer ( )
private

Definition at line 411 of file hubmsos.cpp.

412{
414
415 if (Child->m_ExtProperties != NULL)
416 ExFreePoolWithTag(Child->m_ExtProperties, HUB_TAG_DEVICE);
417
419 if (Child->m_ExtProperties == NULL)
420 {
421 DPRINT1("Device %p extended properties of %lu bytes could not be allocated\n",
423 return FALSE;
424 }
425
426 return TRUE;
427}
static DWORD DWORD * dwLength
Definition: fusion.c:86
#define ExAllocatePoolWithTag(hernya, size, tag)
Definition: env_spec_w32.h:350
#define NonPagedPool
Definition: env_spec_w32.h:307
static const HubMsOsExtPropHeader *NTAPI HubExtPropHeader(_In_ HubChild *Child)
Definition: hubmsos.cpp:76
#define HUB_TAG_DEVICE
Definition: hubutil.h:13
#define ExFreePoolWithTag(_P, _T)
Definition: module.h:1109

Referenced by MsOsExtHeaderRead().

◆ AllowIo()

VOID DeviceMachine::AllowIo ( )
private

Definition at line 4078 of file childpdo.cpp.

4079{
4081}
HubPdo * m_Pdo
Definition: hubchild.h:318
BOOLEAN m_FailRequests
Definition: childpdo.h:95

Referenced by OnStoppedReady(), and StoppedAckPreStart().

◆ AltBosHeaderRead()

SM_RESULT DeviceMachine::AltBosHeaderRead ( _In_ DsmEvent  Event)
private

Definition at line 554 of file devsm_desc.cpp.

556{
557 switch (Event)
558 {
559 case DsmEvent::TransferDone:
560 if (!BosHeaderValid())
561 return EndWith(DsmEvent::Failed);
562
563 if (BosComplete())
565
568
569 case DsmEvent::TransferFailed:
570 return EndWith(DsmEvent::Failed);
571
572 default:
573 return SmUnhandled();
574 }
575}
SM_RESULT AltBosValidate()
Definition: devsm_desc.cpp:595
SM_RESULT AltBosRead(_In_ DsmEvent Event)
Definition: devsm_desc.cpp:578
static const State RequestingYielding
Definition: devsm.h:231
BOOLEAN BosComplete()
Definition: devdesc.cpp:322
BOOLEAN BosHeaderValid()
Definition: devdesc.cpp:298
SM_RESULT AtPassive(_In_ DSM_THEN Then)
Definition: devsm.cpp:177
VOID ReadBos()
Definition: devreq.cpp:482
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFREQUEST Request

Referenced by AltValidateConfig().

◆ AltBosRead()

SM_RESULT DeviceMachine::AltBosRead ( _In_ DsmEvent  Event)
private

Definition at line 578 of file devsm_desc.cpp.

580{
581 switch (Event)
582 {
583 case DsmEvent::TransferDone:
585
586 case DsmEvent::TransferFailed:
587 return EndWith(DsmEvent::Failed);
588
589 default:
590 return SmUnhandled();
591 }
592}

Referenced by AltBosHeaderRead().

◆ AltBosValidate()

SM_RESULT DeviceMachine::AltBosValidate ( )
private

Definition at line 595 of file devsm_desc.cpp.

596{
597 if (!BosValid())
598 return EndWith(DsmEvent::Failed);
599
600 return BosMsOs20();
601}
SM_RESULT BosMsOs20()
Definition: devsm_desc.cpp:414
BOOLEAN BosValid()
Definition: devdesc.cpp:547

Referenced by AltBosHeaderRead(), and AltBosRead().

◆ AltConfigHeaderRead()

SM_RESULT DeviceMachine::AltConfigHeaderRead ( _In_ DsmEvent  Event)
private

Definition at line 503 of file devsm_desc.cpp.

505{
506 switch (Event)
507 {
508 case DsmEvent::TransferDone:
510 return AltValidateConfig();
511
514
515 case DsmEvent::TransferFailed:
516 return EndWith(DsmEvent::Failed);
517
518 default:
519 return SmUnhandled();
520 }
521}
VOID ReadFullConfigDescriptor()
Definition: devreq.cpp:450
SM_RESULT AltConfigRead(_In_ DsmEvent Event)
Definition: devsm_desc.cpp:524
BOOLEAN ConfigLongerThanRead()
Definition: devdesc.cpp:131
SM_RESULT AltValidateConfig()
Definition: devsm_desc.cpp:541

Referenced by AltQueryRegistry().

◆ AltConfigRead()

SM_RESULT DeviceMachine::AltConfigRead ( _In_ DsmEvent  Event)
private

Definition at line 524 of file devsm_desc.cpp.

526{
527 switch (Event)
528 {
529 case DsmEvent::TransferDone:
530 return AltValidateConfig();
531
532 case DsmEvent::TransferFailed:
533 return EndWith(DsmEvent::Failed);
534
535 default:
536 return SmUnhandled();
537 }
538}

Referenced by AltConfigHeaderRead().

◆ AltDeviceDescriptorRead()

SM_RESULT DeviceMachine::AltDeviceDescriptorRead ( _In_ DsmEvent  Event)
private

Definition at line 471 of file devsm_desc.cpp.

473{
474 switch (Event)
475 {
476 case DsmEvent::TransferDone:
478 return EndWith(DsmEvent::Failed);
479
482
483 case DsmEvent::TransferFailed:
484 return EndWith(DsmEvent::Failed);
485
486 default:
487 return SmUnhandled();
488 }
489}
SM_RESULT AltQueryRegistry()
Definition: devsm_desc.cpp:492
VOID RecordDeviceVersion()
Definition: devmisc.cpp:149
BOOLEAN DeviceDescriptorValid()
Definition: devdesc.cpp:98

Referenced by BosAltEnumSent().

◆ AltEnumNeededAfterBos()

BOOLEAN DeviceMachine::AltEnumNeededAfterBos ( )
private

Definition at line 104 of file hubmsos.cpp.

105{
107 !m_Device->HasState(ChildState::AltEnumCommandSent);
108}
HubMsOs20Info m_MsOs20
Definition: hubchild.h:494
BOOLEAN HasState(_In_ ChildState Flag) const
Definition: hubchild.h:260
#define HUB_MSOS20_ALT_ENUM
Definition: desccheck.h:490

Referenced by AltEnumNeededOnReenum(), and BosAltEnum().

◆ AltEnumNeededInEnum()

BOOLEAN DeviceMachine::AltEnumNeededInEnum ( )
private

Definition at line 86 of file hubmsos.cpp.

87{
88 const LONG Keep = (LONG)ChildState::AltEnumCompleted | (LONG)ChildState::AltEnumCommandSent;
89
90 if (!m_Device->m_AltEnumCached || m_Device->HasState(ChildState::AltEnumCommandSent))
91 return FALSE;
92
93 m_Device->SetState(ChildState::AltEnumCompleted);
95
96 m_Device->m_Hacks = 0;
99
100 return TRUE;
101}
#define InterlockedExchange
Definition: armddk.h:54
USB_DEVICE_DESCRIPTOR m_OriginalDeviceDescriptor
Definition: hubchild.h:502
USB_DEVICE_DESCRIPTOR m_DeviceDescriptor
Definition: hubchild.h:386
BOOLEAN m_AltEnumCached
Definition: hubchild.h:499
ULONG m_Hacks
Definition: hubchild.h:329
volatile LONG m_StateFlags
Definition: hubchild.h:331
volatile LONG m_Properties
Definition: hubchild.h:330
VOID SetState(_In_ ChildState Flag)
Definition: hubchild.h:267
#define InterlockedAnd
Definition: interlocked.h:77
long LONG
Definition: pedump.c:60

Referenced by DescriptorsQueryRegistry().

◆ AltEnumNeededOnReenum()

BOOLEAN DeviceMachine::AltEnumNeededOnReenum ( )
private

Definition at line 111 of file hubmsos.cpp.

112{
114 return FALSE;
115
116 m_Device->SetState(ChildState::AltEnumCompleted);
117 return TRUE;
118}
BOOLEAN AltEnumNeededAfterBos()
Definition: hubmsos.cpp:104

Referenced by ReenumDescriptorRead().

◆ AlternateSettingLeft()

BOOLEAN DeviceMachine::AlternateSettingLeft ( )
private

Definition at line 783 of file devreq.cpp.

784{
788
789 if (Config == NULL)
790 return FALSE;
791
792 for (Entry = Config->Interfaces.Flink; Entry != &Config->Interfaces; Entry = Entry->Flink)
793 {
795 if (Interface->NeedsSetInterface)
796 {
798 return TRUE;
799 }
800 }
801
802 return FALSE;
803}
HubInterface * m_NextInterface
Definition: hubchild.h:374
HubConfiguration * m_CurrentConfig
Definition: hubchild.h:370
PLIST_ENTRY Entry
Definition: devhcd.cpp:1262
Definition: typedefs.h:120
struct _LIST_ENTRY * Flink
Definition: typedefs.h:121
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
_Must_inspect_result_ _In_ WDFDEVICE _In_ PUCX_CONTROLLER_CONFIG Config
_In_ UCXUSBDEVICE _In_ ULONG Interface
Definition: ucxusbdevice.h:428

Referenced by ConfigureInterfaceSet().

◆ AltModeStringValid()

BOOLEAN DeviceMachine::AltModeStringValid ( )
private

Definition at line 732 of file devdesc.cpp.

733{
735 HubBillboardInfo* Billboard = Child->m_Billboard;
738
739 if (Billboard == NULL || Billboard->CurrentMode == HUB_BILLBOARD_NO_MODE)
740 {
741 DPRINT1("Device %p alternate mode string check without a current mode\n", Child);
742 return FALSE;
743 }
744
747 (PUSB_STRING_DESCRIPTOR)Child->m_ScratchBuffer,
749 NULL);
750 if (Valid)
751 HubNoteAltMode(Billboard);
752 else
753 Child->m_EnumMessageId = HUB_ENUM_BAD_ALT_MODE_STRING;
754
755 Billboard->CurrentMode++;
756 return Valid;
757}
unsigned char BOOLEAN
Definition: actypes.h:127
BOOLEAN NTAPI HubDescCheckString(_In_ const HubDescContext *Context, _In_reads_bytes_(Length) PUSB_STRING_DESCRIPTOR Descriptor, _In_ ULONG Length, _Out_opt_ PULONG AdjustedLength)
Definition: desccheck.cpp:2400
BOOLEAN Valid
Definition: desccheck.cpp:2227
VOID NTAPI HubDeviceDescContext(_In_ HubChild *Child, _Out_ HubDescContext *Context)
Definition: devdesc.cpp:35
static VOID NTAPI HubNoteAltMode(_In_ HubBillboardInfo *Billboard)
Definition: devdesc.cpp:685
FORCEINLINE ULONG NTAPI HubDeviceBytesReturned(_In_ HubChild *Child)
Definition: devreq.h:37
#define HUB_BILLBOARD_NO_MODE
Definition: hubchild.h:227
#define HUB_ENUM_BAD_ALT_MODE_STRING
Definition: hubid.h:39
_In_ PIRP _In_ PIO_COMPLETION_ROUTINE _In_ PVOID Context
Definition: kse.h:81
UCHAR CurrentMode
Definition: hubchild.h:233

Referenced by BosAltModeRead().

◆ AltModeStringWanted()

BOOLEAN DeviceMachine::AltModeStringWanted ( )
private

Definition at line 701 of file devdesc.cpp.

702{
704 UCHAR Count;
705
706 if (Billboard == NULL)
707 return FALSE;
708
710
711 if (Billboard->CurrentMode == HUB_BILLBOARD_NO_MODE)
712 Billboard->CurrentMode = 0;
713
714 while (Billboard->CurrentMode < Count &&
715 Billboard->Descriptor->AlternateMode[Billboard->CurrentMode].iAlternateModeSetting == 0)
716 {
717 HubNoteAltMode(Billboard);
718 Billboard->CurrentMode++;
719 }
720
721 if (Billboard->CurrentMode >= Count)
722 {
724 return FALSE;
725 }
726
727 return TRUE;
728}
HubBillboardInfo * m_Billboard
Definition: hubchild.h:520
static UCHAR NTAPI HubBillboardModeCount(_In_ PUSB_DEVICE_CAPABILITY_BILLBOARD_DESCRIPTOR Caps)
Definition: devdesc.cpp:333
PUSB_DEVICE_CAPABILITY_BILLBOARD_DESCRIPTOR Descriptor
Definition: hubchild.h:232
struct _USB_DEVICE_CAPABILITY_BILLBOARD_DESCRIPTOR::@4127 AlternateMode[1]

Referenced by BosAltModes().

◆ AltQueryRegistry()

SM_RESULT DeviceMachine::AltQueryRegistry ( )
private

Definition at line 492 of file devsm_desc.cpp.

493{
494 if (!QueryRegistryValues())
495 return EndWith(DsmEvent::Failed);
496
499}
BOOLEAN QueryRegistryValues()
SM_RESULT AltConfigHeaderRead(_In_ DsmEvent Event)
Definition: devsm_desc.cpp:503
VOID ReadConfigDescriptorHeader()
Definition: devreq.cpp:433

Referenced by AltDeviceDescriptorRead().

◆ AltValidateConfig()

SM_RESULT DeviceMachine::AltValidateConfig ( )
private

Definition at line 541 of file devsm_desc.cpp.

542{
544 return EndWith(DsmEvent::Failed);
545
546 if (BosQuerySkipped())
547 return EndWith(DsmEvent::Succeeded);
548
551}
BOOLEAN BosQuerySkipped()
Definition: devdesc.cpp:285
VOID ReadBosHeader()
Definition: devreq.cpp:471
SM_RESULT AltBosHeaderRead(_In_ DsmEvent Event)
Definition: devsm_desc.cpp:554
BOOLEAN ConfigDescriptorValid()
Definition: devdesc.cpp:213

Referenced by AltConfigHeaderRead(), and AltConfigRead().

◆ ArmDuplicateDeviceTimer()

VOID DeviceMachine::ArmDuplicateDeviceTimer ( )
private

Definition at line 364 of file hubchild.cpp.

365{
367}
HubTimer m_Timer
Definition: hubchild.h:335
VOID Start(_In_ ULONG Milliseconds)
Definition: hubutil.h:104
#define DEVICE_DUPLICATE_POLL_TIME
Definition: hubchild.cpp:23

Referenced by EnterDelaying().

◆ ArmForWake()

VOID DeviceMachine::ArmForWake ( )
private

Definition at line 887 of file devreq.cpp.

888{
890
891 if (Child->m_Pdo != NULL)
892 InterlockedOr(&Child->m_Pdo->m_Flags, (LONG)PdoFlag::ArmedForWake);
893
894 if (Child->m_Kind & DSM_KIND_SUPER_SPEED)
895 {
901 NULL,
902 0,
903 TRUE);
904 }
905 else
906 {
908 }
909}
static VOID NTAPI HubDeviceFeature(_In_ HubChild *Child, _In_ BOOLEAN Set, _In_ USHORT Feature)
Definition: devreq.cpp:377
static BOOLEAN NTAPI HubDeviceRequest(_In_ HubChild *Child, _In_ UCHAR RequestType, _In_ UCHAR Request, _In_ USHORT Value, _In_ USHORT Index, _In_reads_bytes_opt_(Length) PVOID Buffer, _In_ ULONG Length, _In_ BOOLEAN ShortTransferOk)
Definition: devreq.cpp:307
#define XFER_STD_TO_INTERFACE
Definition: devreq.cpp:16
#define XFER_FUNCTION_SUSPEND_WAKE
Definition: devreq.cpp:39
#define DSM_KIND_SUPER_SPEED
Definition: devsm.h:150
#define InterlockedOr
Definition: interlocked.h:239
#define USB_FEATURE_REMOTE_WAKEUP
Definition: usb100.h:103
#define USB_REQUEST_SET_FEATURE
Definition: usb100.h:80
#define USB_FEATURE_FUNCTION_SUSPEND
Definition: usb300.h:333

Referenced by SuspendIoAborted().

◆ ArmForWakeWanted()

BOOLEAN DeviceMachine::ArmForWakeWanted ( )
private

Definition at line 501 of file devmisc.cpp.

502{
504
505 return Pdo != NULL && Pdo->HasFlag(PdoFlag::WakeArmRequested);
506}
_In_ UCXUSBDEVICE _In_ PDEVICE_OBJECT Pdo
Definition: hubucx.h:280

Referenced by SuspendStart().

◆ ArmPostAddressTimer()

VOID DeviceMachine::ArmPostAddressTimer ( )
private

Definition at line 358 of file hubchild.cpp.

359{
361}
#define DEVICE_POST_ADDRESS_TIME
Definition: hubchild.cpp:22

Referenced by EnterDelaying().

◆ AskPortCycle()

VOID DeviceMachine::AskPortCycle ( )
private

◆ AtPassive()

SM_RESULT DeviceMachine::AtPassive ( _In_ DSM_THEN  Then)
private

Definition at line 177 of file devsm.cpp.

179{
180 m_Then = Then;
181 return SmTransition(&PassiveStep);
182}
SM_RESULT Then(_In_ DSM_THEN Next)
DSM_THEN m_Then
Definition: devsm.h:1834
static const State PassiveStep
Definition: devsm.h:217
static SM_RESULT SmTransition(_In_ const State *Target)
Definition: smengine.h:194

Referenced by AltBosHeaderRead(), AltBosRead(), AltDeviceDescriptorRead(), BosHeaderRead(), BosMsOs20Read(), BosRead(), CleanupDeviceDisabled(), ConfiguredEndpointsDisabledForClient(), ConfiguredResumedWithHub(), ConfiguredSuspendedForHub(), ConfigureInterfaceSet(), ConfigureOldDisabled(), DeleteOnceDisabled(), DeleteThen(), InterfaceNewEndpointsDisabled(), InterfaceOldRestored(), InterfaceSet(), InterfaceStart(), MsOsExtRead(), MsOsNoContainerId(), MsOsRead(), OnAwaitingDetachOrRemove(), OnAwaitingMsOsInstall(), OnAwaitingRemove(), OnBootDeviceSuspended(), OnBootDeviceSuspending(), OnConfigured(), OnConfiguredHubSuspended(), OnConfiguredNotStarted(), OnParkedPortOff(), OnParkedPortOn(), OnPreparingHibernation(), OnReadingDeviceDescriptor(), OnStopped(), OnStoppedAddressed(), OnStoppedHubSuspended(), OnSuspendedConfigured(), OnUnconfiguredOn(), ReconfiguredAfterHubResume(), ReconfiguredBootAfterResume(), ReenumDisabledThenReport(), ReenumDoneForHubStart(), ReenumDoneForPreStart(), ReenumDoneForStart(), ReenumFailedForClient(), ReenumFailedForHubResume(), ReenumFailedForResume(), RemovalDeleteAfterLeaving(), RemovalDeleteForgetAndPark(), ReportDuplicateWaitEnded(), SelectConfigDone(), StoppedDisabledForCleanup(), StoppedPortOffAfterDisable(), StoppedPortOffAfterHubResume(), StoppedPortOffForNoDriver(), UnconfiguredPortOffForStop(), and Zero20FirstResetDone().

◆ BackToConfigured()

SM_RESULT DeviceMachine::BackToConfigured ( )
private

Definition at line 82 of file devsm_config.cpp.

83{
84 if (PdoStarted())
86
88}
static const State ConfiguredOn
Definition: devsm.h:1062
static const State ConfiguredNotStarted
Definition: devsm.h:1063
BOOLEAN PdoStarted()
Definition: childpdo.cpp:4122

Referenced by ClientDoneOk(), ClientDoneWithLastStatus(), OnConfigured(), SelectConfigDone(), and SelectConfigFailed().

◆ BackToUnconfigured()

SM_RESULT DeviceMachine::BackToUnconfigured ( )
private

◆ BillboardStringValid()

BOOLEAN DeviceMachine::BillboardStringValid ( )
private

Definition at line 662 of file devdesc.cpp.

663{
666
669 (PUSB_STRING_DESCRIPTOR)Child->m_ScratchBuffer,
671 NULL))
672 {
673 Child->m_EnumMessageId = HUB_ENUM_BAD_BILLBOARD_URL;
674 return FALSE;
675 }
676
677 DPRINT("Device %p billboard URL string read\n", Child);
678 return TRUE;
679}
#define HUB_ENUM_BAD_BILLBOARD_URL
Definition: hubid.h:38

Referenced by BosBillboardRead().

◆ BillboardStringWanted()

BOOLEAN DeviceMachine::BillboardStringWanted ( )
private

Definition at line 647 of file devdesc.cpp.

648{
650
651 if (Billboard == NULL)
652 return FALSE;
653
654 if (Billboard->Descriptor->iAddtionalInfoURL != 0)
655 return TRUE;
656
657 DPRINT("Device %p billboard has no URL string\n", m_Device);
658 return FALSE;
659}

Referenced by BosBillboard().

◆ BootDeviceDetachDuringReset()

SM_RESULT DeviceMachine::BootDeviceDetachDuringReset ( _In_ BOOLEAN  ContextGone)
private

Definition at line 142 of file devsm_boot.cpp.

144{
146 m_ContextGone = ContextGone;
148}
static const State BootDeviceResetPending
Definition: devsm.h:1273
BOOLEAN m_ContextGone
Definition: devsm.h:1851
VOID NotifyPortDetached()
Definition: hubport.cpp:632

Referenced by ReenumDoneForBootDevice().

◆ BootDeviceDisabledForReset()

SM_RESULT DeviceMachine::BootDeviceDisabledForReset ( _In_ DsmEvent  Event)
private

Definition at line 1138 of file devsm_reenum.cpp.

1140{
1141 if (Event != DsmEvent::ControllerIoctlDone)
1142 return SmUnhandled();
1143
1146}

Referenced by ReconfiguredBootDevice().

◆ BootDeviceDisabledOnDetach()

SM_RESULT DeviceMachine::BootDeviceDisabledOnDetach ( _In_ DsmEvent  Event)
private

Definition at line 104 of file devsm_boot.cpp.

106{
107 if (Event != DsmEvent::ControllerIoctlDone)
108 return SmUnhandled();
109
112}
static const State BootDeviceDetached
Definition: devsm.h:1271

Referenced by BootDeviceDisableOnDetach().

◆ BootDeviceDisabledOnFailure()

SM_RESULT DeviceMachine::BootDeviceDisabledOnFailure ( _In_ DsmEvent  Event)
private

Definition at line 130 of file devsm_boot.cpp.

132{
133 if (Event != DsmEvent::ControllerIoctlDone)
134 return SmUnhandled();
135
138}
static const State BootDeviceAwaitingReset
Definition: devsm.h:1270

Referenced by BootDeviceFailed().

◆ BootDeviceDisableOnDetach()

SM_RESULT DeviceMachine::BootDeviceDisableOnDetach ( )
private

Definition at line 90 of file devsm_boot.cpp.

91{
94}
SM_RESULT BootDeviceDisabledOnDetach(_In_ DsmEvent Event)
Definition: devsm_boot.cpp:104
VOID DisableEndpointsPowerLost()
Definition: devsm_boot.cpp:97
static const State RequestingCritical
Definition: devsm.h:230

Referenced by BootDeviceNotifyDetached(), and PurgedOnDetach().

◆ BootDeviceFailed()

SM_RESULT DeviceMachine::BootDeviceFailed ( )
private

Definition at line 116 of file devsm_boot.cpp.

117{
120}
VOID DisableEndpointsAndNotify()
Definition: devsm_boot.cpp:123
SM_RESULT BootDeviceDisabledOnFailure(_In_ DsmEvent Event)
Definition: devsm_boot.cpp:130
static const State RequestingCriticalPassive
Definition: devsm.h:233

Referenced by OnBootDeviceSuspended(), OnBootDeviceSuspending(), and OnPreparingHibernation().

◆ BootDeviceNotifyDetached()

SM_RESULT DeviceMachine::BootDeviceNotifyDetached ( )
private

◆ BosAltEnum()

SM_RESULT DeviceMachine::BosAltEnum ( )
private

Definition at line 402 of file devsm_desc.cpp.

403{
405 {
408 }
409
410 return BosMsOs20();
411}
VOID SendAltEnumCommand()
Definition: devreq.cpp:735
SM_RESULT BosAltEnumSent(_In_ DsmEvent Event)
Definition: devsm_desc.cpp:453

Referenced by BosAltModes(), and BosBillboard().

◆ BosAltEnumSent()

SM_RESULT DeviceMachine::BosAltEnumSent ( _In_ DsmEvent  Event)
private

Definition at line 453 of file devsm_desc.cpp.

455{
456 switch (Event)
457 {
458 case DsmEvent::TransferDone:
461
462 case DsmEvent::TransferFailed:
463 return BosError();
464
465 default:
466 return SmUnhandled();
467 }
468}
SM_RESULT BosError()
Definition: devsm_desc.cpp:277
SM_RESULT AltDeviceDescriptorRead(_In_ DsmEvent Event)
Definition: devsm_desc.cpp:471
VOID ReadDeviceDescriptor()
Definition: devreq.cpp:415

Referenced by BosAltEnum().

◆ BosAltModeRead()

SM_RESULT DeviceMachine::BosAltModeRead ( _In_ DsmEvent  Event)
private

Definition at line 382 of file devsm_desc.cpp.

384{
385 switch (Event)
386 {
387 case DsmEvent::TransferDone:
388 if (AltModeStringValid())
389 return BosAltModes();
390
391 return BosError();
392
393 case DsmEvent::TransferFailed:
394 return BosError();
395
396 default:
397 return SmUnhandled();
398 }
399}
SM_RESULT BosAltModes()
Definition: devsm_desc.cpp:370
BOOLEAN AltModeStringValid()
Definition: devdesc.cpp:732

Referenced by BosAltModes().

◆ BosAltModes()

SM_RESULT DeviceMachine::BosAltModes ( )
private

Definition at line 370 of file devsm_desc.cpp.

371{
373 {
376 }
377
378 return BosAltEnum();
379}
BOOLEAN AltModeStringWanted()
Definition: devdesc.cpp:701
SM_RESULT BosAltModeRead(_In_ DsmEvent Event)
Definition: devsm_desc.cpp:382
SM_RESULT BosAltEnum()
Definition: devsm_desc.cpp:402
VOID ReadAltModeString()
Definition: devreq.cpp:536

Referenced by BosAltModeRead(), BosBillboard(), and BosBillboardRead().

◆ BosBillboard()

SM_RESULT DeviceMachine::BosBillboard ( )
private

Definition at line 335 of file devsm_desc.cpp.

336{
337 if (!HasBillboard())
338 return BosAltEnum();
339
341 {
344 }
345
346 return BosAltModes();
347}
VOID ReadBillboardString()
Definition: devreq.cpp:521
BOOLEAN BillboardStringWanted()
Definition: devdesc.cpp:647
SM_RESULT BosBillboardRead(_In_ DsmEvent Event)
Definition: devsm_desc.cpp:350
BOOLEAN HasBillboard()
Definition: devdesc.cpp:641

Referenced by BosFeaturesSent(), and BosValidate().

◆ BosBillboardRead()

SM_RESULT DeviceMachine::BosBillboardRead ( _In_ DsmEvent  Event)
private

Definition at line 350 of file devsm_desc.cpp.

352{
353 switch (Event)
354 {
355 case DsmEvent::TransferDone:
357 return BosAltModes();
358
359 return BosError();
360
361 case DsmEvent::TransferFailed:
362 return BosError();
363
364 default:
365 return SmUnhandled();
366 }
367}
BOOLEAN BillboardStringValid()
Definition: devdesc.cpp:662

Referenced by BosBillboard().

◆ BosComplete()

BOOLEAN DeviceMachine::BosComplete ( )
private

Definition at line 322 of file devdesc.cpp.

323{
325
326 return HubDeviceBytesReturned(m_Device) >= Header->wTotalLength;
327}
Definition: Header.h:9
UCHAR m_ScratchBuffer[256]
Definition: hubchild.h:393
struct _USB_BOS_DESCRIPTOR * PUSB_BOS_DESCRIPTOR

Referenced by AltBosHeaderRead(), and BosHeaderRead().

◆ BosError()

SM_RESULT DeviceMachine::BosError ( )
private

Definition at line 277 of file devsm_desc.cpp.

278{
280 return EndWith(DsmEvent::Succeeded);
281
282 return EndWith(DsmEvent::Failed);
283}
BOOLEAN IgnoreDescriptorError()
Definition: devdesc.cpp:292

Referenced by BosAltEnumSent(), BosAltModeRead(), BosBillboardRead(), BosFeaturesSent(), BosHeaderRead(), BosMsOs20Read(), BosMsOs20Validate(), BosRead(), and BosValidate().

◆ BosFeaturesSent()

SM_RESULT DeviceMachine::BosFeaturesSent ( _In_ DsmEvent  Event)
private

Definition at line 318 of file devsm_desc.cpp.

320{
321 switch (Event)
322 {
323 case DsmEvent::TransferDone:
324 return BosBillboard();
325
326 case DsmEvent::TransferFailed:
327 return BosError();
328
329 default:
330 return SmUnhandled();
331 }
332}
SM_RESULT BosBillboard()
Definition: devsm_desc.cpp:335

Referenced by BosValidate().

◆ BosHeaderRead()

SM_RESULT DeviceMachine::BosHeaderRead ( _In_ DsmEvent  Event)
private

Definition at line 252 of file devsm_desc.cpp.

254{
255 switch (Event)
256 {
257 case DsmEvent::TransferDone:
258 if (!BosHeaderValid())
259 return BosError();
260
261 if (BosComplete())
263
266
267 case DsmEvent::TransferFailed:
268 return BosError();
269
270 default:
271 return SmUnhandled();
272 }
273}
SM_RESULT BosRead(_In_ DsmEvent Event)
Definition: devsm_desc.cpp:286
SM_RESULT BosValidate()
Definition: devsm_desc.cpp:303

Referenced by BosStart().

◆ BosHeaderValid()

BOOLEAN DeviceMachine::BosHeaderValid ( )
private

Definition at line 298 of file devdesc.cpp.

299{
303
304 if (Bytes < sizeof(USB_BOS_DESCRIPTOR))
305 {
306 DPRINT1("Device %p BOS header read returned %lu bytes\n", Child, Bytes);
307 Child->m_EnumMessageId = HUB_ENUM_BAD_BOS;
308 return FALSE;
309 }
310
313 {
314 Child->m_EnumMessageId = HUB_ENUM_BAD_BOS;
315 return FALSE;
316 }
317
318 return TRUE;
319}
BOOLEAN NTAPI HubDescCheckBosHeader(_In_ const HubDescContext *Context, _In_reads_bytes_opt_(Length) PUSB_BOS_DESCRIPTOR Descriptor, _In_ ULONG Length)
Definition: desccheck.cpp:2197
#define HUB_ENUM_BAD_BOS
Definition: hubid.h:25
_In_ UINT Bytes
Definition: mmcopy.h:9

Referenced by AltBosHeaderRead(), and BosHeaderRead().

◆ BosMsOs20()

SM_RESULT DeviceMachine::BosMsOs20 ( )
private

Definition at line 414 of file devsm_desc.cpp.

415{
416 if (MsOs20Supported())
417 {
420 }
421
422 return EndWith(DsmEvent::Succeeded);
423}
VOID ReadMsOs20Set()
Definition: devreq.cpp:711
SM_RESULT BosMsOs20Read(_In_ DsmEvent Event)
Definition: devsm_desc.cpp:426
BOOLEAN MsOs20Supported()
Definition: hubmsos.cpp:121

Referenced by AltBosValidate(), and BosAltEnum().

◆ BosMsOs20Read()

SM_RESULT DeviceMachine::BosMsOs20Read ( _In_ DsmEvent  Event)
private

Definition at line 426 of file devsm_desc.cpp.

428{
429 switch (Event)
430 {
431 case DsmEvent::TransferDone:
433
434 case DsmEvent::TransferFailed:
435 return BosError();
436
437 default:
438 return SmUnhandled();
439 }
440}
SM_RESULT BosMsOs20Validate()
Definition: devsm_desc.cpp:443

Referenced by BosMsOs20().

◆ BosMsOs20Validate()

SM_RESULT DeviceMachine::BosMsOs20Validate ( )
private

Definition at line 443 of file devsm_desc.cpp.

444{
445 if (MsOs20SetValid())
446 return EndWith(DsmEvent::Succeeded);
447
448 return BosError();
449}
BOOLEAN MsOs20SetValid()
Definition: devdesc.cpp:928

Referenced by BosMsOs20Read().

◆ BosQuerySkipped()

BOOLEAN DeviceMachine::BosQuerySkipped ( )
private

Definition at line 285 of file devdesc.cpp.

286{
287 return m_Device->HasHack(ChildHack::SkipBosQuery) || m_Device->m_DeviceDescriptor.bcdUSB <= 0x0200;
288}
BOOLEAN HasHack(_In_ ChildHack Flag) const
Definition: hubchild.h:281

Referenced by AltValidateConfig(), and BosStart().

◆ BosRead()

SM_RESULT DeviceMachine::BosRead ( _In_ DsmEvent  Event)
private

Definition at line 286 of file devsm_desc.cpp.

288{
289 switch (Event)
290 {
291 case DsmEvent::TransferDone:
293
294 case DsmEvent::TransferFailed:
295 return BosError();
296
297 default:
298 return SmUnhandled();
299 }
300}

Referenced by BosHeaderRead().

◆ BosStart()

SM_RESULT DeviceMachine::BosStart ( )
private

Definition at line 242 of file devsm_desc.cpp.

243{
244 if (BosQuerySkipped())
245 return EndWith(DsmEvent::Succeeded);
246
249}
SM_RESULT BosHeaderRead(_In_ DsmEvent Event)
Definition: devsm_desc.cpp:252

Referenced by EnterReadingBos().

◆ BosValid()

BOOLEAN DeviceMachine::BosValid ( )
private

Definition at line 547 of file devdesc.cpp.

548{
551 PUSB_BOS_DESCRIPTOR Bos = Child->m_Bos ? Child->m_Bos : Header;
552 BOOLEAN SetInfoKnown = (Child->m_MsOs20.Flags & HUB_MSOS20_SET_INFO) != 0;
556 BOOLEAN Ltm = FALSE;
557 ULONG Flags = 0;
559
560 PAGED_CODE();
561
562 RtlZeroMemory(&Lpm, sizeof(Lpm));
564
565 Valid = HubDescCheckBos(&Context,
566 Bos,
568 &Info,
569 &Child->m_U1ExitLatency,
570 &Child->m_U2ExitLatency,
571 &Ltm,
572 &Lpm,
573 &Flags);
574 if (!Valid && !Child->HasHack(ChildHack::IgnoreBosValidationFailure))
575 {
576 Child->m_EnumMessageId = HUB_ENUM_BAD_BOS;
577 return FALSE;
578 }
579
580 if (!Valid)
581 DPRINT1("Device %p BOS is invalid, kept because of its errata\n", Child);
582
584
585 if (Ltm)
586 Child->SetProperty(ChildProperty::LtmCapable);
587 if (Lpm.Capable)
588 Child->SetProperty(ChildProperty::Usb20LpmCapable);
589 if (Lpm.BeslAndAltHird)
590 Child->SetProperty(ChildProperty::BeslCapable);
592 Child->SetProperty(ChildProperty::ChargingPolicySupported);
593
594 if (Info.SuperSpeedPlus != NULL && Child->m_SublinkSpeedAttr == NULL)
595 {
596 if (!HubCacheSublinkSpeeds(Child, Info.SuperSpeedPlus))
597 return FALSE;
598 }
599
600 /* An MS OS container id wins over the BOS one */
601 if (Info.ContainerId != NULL)
602 {
603 Child->SetProperty(ChildProperty::ContainerIdFromBos);
604 if (!Child->HasProperty(ChildProperty::ContainerIdKnown))
605 RtlCopyMemory(&Child->m_ContainerId, Info.ContainerId->ContainerID, sizeof(Child->m_ContainerId));
606 }
607
608 if (Info.Billboard != NULL)
609 HubKeepBillboardData(Child, Info.Billboard);
610
611 if (Info.PlatformFeatures != NULL)
612 HubCacheDualRole(Child, Info.PlatformFeatures);
613
614 if (!SetInfoKnown && Info.MsOs20SetInfo != NULL)
616
617 if (Child->m_Bos == NULL)
618 {
620 if (Bos == NULL)
621 {
622 DPRINT1("Device %p no memory for a %u byte BOS\n", Child, Header->wTotalLength);
623 return FALSE;
624 }
625
626 RtlCopyMemory(Bos, Header, min(Header->wTotalLength, (ULONG)sizeof(Child->m_ScratchBuffer)));
627 Child->m_Bos = Bos;
628 }
629
631 HubSetSqmFlag(Child, ChildSqm::SuperSpeedCapable);
632 if (Valid)
633 HubSetSqmFlag(Child, ChildSqm::ValidBos);
634
635 return TRUE;
636}
#define PAGED_CODE()
Walk Ltm
Definition: desccheck.cpp:2275
_In_ ULONG _Out_opt_ HubBosInfo _Out_opt_ PUSHORT _Out_opt_ PUSHORT _Inout_opt_ PBOOLEAN _Inout_opt_ HubLpmInfo * Lpm
Definition: desccheck.cpp:2221
#define HUB_BOS_SUPERSPEED_CAPABLE
Definition: desccheck.h:316
#define HUB_BOS_CHARGING_POLICY
Definition: desccheck.h:318
#define HUB_MSOS20_SET_INFO
Definition: desccheck.h:488
static BOOLEAN NTAPI HubCacheSublinkSpeeds(_In_ HubChild *Child, _In_ PUSB_DEVICE_CAPABILITY_SUPERSPEEDPLUS_USB_DESCRIPTOR Caps)
Definition: devdesc.cpp:408
static VOID NTAPI HubSetSqmFlag(_In_ HubChild *Child, _In_ ChildSqm Flag)
Definition: devdesc.cpp:53
static VOID NTAPI HubDropCapsPastEnd(_Inout_ HubBosInfo *Info, _In_ const UCHAR *End)
Definition: devdesc.cpp:502
static VOID NTAPI HubKeepBillboardData(_In_ HubChild *Child, _In_ PUSB_DEVICE_CAPABILITY_BILLBOARD_DESCRIPTOR Caps)
Definition: devdesc.cpp:367
static VOID NTAPI HubCacheMsOs20SetInfoFromBos(_In_ HubChild *Child, _In_ const HubMsOs20SetInfo *SetInfo)
Definition: devdesc.cpp:471
_In_ D3DDDI_VIDEO_PRESENT_TARGET_ID _In_ ULONG _In_ ULONG Flags
Definition: dispmprt.h:245
#define min(a, b)
Definition: monoChain.cc:55
#define RtlCopyMemory(Destination, Source, Length)
Definition: typedefs.h:263
_Must_inspect_result_ _In_ WDFCHILDLIST _In_ PWDF_CHILD_LIST_ITERATOR _Out_ WDFDEVICE _Inout_opt_ PWDF_CHILD_RETRIEVE_INFO Info
Definition: wdfchildlist.h:690

Referenced by AltBosValidate(), and BosValidate().

◆ BosValidate()

SM_RESULT DeviceMachine::BosValidate ( )
private

Definition at line 303 of file devsm_desc.cpp.

304{
305 if (!BosValid())
306 return BosError();
307
308 if (DualRoleSupported())
309 {
312 }
313
314 return BosBillboard();
315}
SM_RESULT BosFeaturesSent(_In_ DsmEvent Event)
Definition: devsm_desc.cpp:318
VOID SendUsbFeatures()
Definition: devreq.cpp:500
BOOLEAN DualRoleSupported()
Definition: devmisc.cpp:299

Referenced by BosHeaderRead(), and BosRead().

◆ BugCheckForBootDevice()

VOID DeviceMachine::BugCheckForBootDevice ( )
private

Definition at line 405 of file devmisc.cpp.

406{
407 DPRINT1("Boot device %p failed to enumerate again\n", m_Device);
410 (ULONG_PTR)WdfDeviceWdmGetDeviceObject(m_Device->m_Pdo->m_Device),
412 0);
413}
DECLSPEC_NORETURN VOID NTAPI KeBugCheckEx(IN ULONG BugCheckCode, IN ULONG_PTR BugCheckParameter1, IN ULONG_PTR BugCheckParameter2, IN ULONG_PTR BugCheckParameter3, IN ULONG_PTR BugCheckParameter4)
Definition: debug.c:485
BOOLEAN HasProperty(_In_ ChildProperty Flag) const
Definition: hubchild.h:288
WDFDEVICE m_Device
Definition: childpdo.h:55
#define HUB_BOOT_DEVICE_IS_STORAGE
Definition: hubdriver.h:159
#define HUB_USB3_BOOT_DEVICE_FAILED
Definition: hubdriver.h:158
#define HUB_BUGCHECK_USB3
Definition: hubdriver.h:157
#define HUB_BOOT_DEVICE_IS_HUB
Definition: hubdriver.h:160
uint32_t ULONG_PTR
Definition: typedefs.h:65

Referenced by EnterBugChecking().

◆ CalcU1Timeout()

VOID DeviceMachine::CalcU1Timeout ( )
private

Definition at line 220 of file devlpm.cpp.

221{
224
227 {
230 }
231 else
232 {
234
243 else if (!HubChildU1FromPipes(Child, &Timeout))
245 }
246
247 /* Some hubs cannot take U2 accept only unless U1 is fully on; hubs as devices get accept only */
248 if (Child->m_Hub->HasFlag(HubFlag::DisallowU2AcceptOnly) &&
249 Child->HasProperty(ChildProperty::IsHub) &&
251 {
253 }
254
255 Child->m_TargetU1Timeout = Timeout;
256 DPRINT("Device %p target U1 timeout 0x%x\n", Child, Timeout);
257}
#define HUB_LPM_POLICY_U1_INITIATE
Definition: devhcd.h:15
#define HUB_LPM_POLICY_U1_ACCEPT
Definition: devhcd.h:13
#define HUB_LPM_POLICY_U1_ENABLED
Definition: devhcd.h:11
#define HUB_LPM_POLICY_CONSERVATIVE
Definition: devhcd.h:17
#define HUB_LINK_TARGET_U1
Definition: devhcd.h:21
#define HUB_LINK_U1_OFF_FOR_LATENCY
Definition: devhcd.h:23
#define HUB_LPM_POLICY_AGGRESSIVE
Definition: devhcd.h:18
#define TIMEOUT_SHORTEST
Definition: devlpm.cpp:16
static BOOLEAN NTAPI HubChildLpmBlocked(_In_ HubChild *Child)
Definition: devlpm.cpp:51
static VOID NTAPI HubChildSetLink(_In_ HubChild *Child, _In_ ULONG Bit, _In_ BOOLEAN Set)
Definition: devlpm.cpp:70
static BOOLEAN NTAPI HubChildHasPolicy(_In_ HubChild *Child, _In_ ULONG Bit)
Definition: devlpm.cpp:60
static BOOLEAN NTAPI HubChildU1FromPipes(_In_ HubChild *Child, _Out_ PUCHAR Timeout)
Definition: devlpm.cpp:163
#define TIMEOUT_ACCEPT_ONLY
Definition: devlpm.cpp:19
#define U1_TIMEOUT_LONGEST
Definition: devlpm.cpp:17
static ULONG Timeout
Definition: ping.c:61

Referenced by LpmCompute().

◆ CalcU2Timeout()

VOID DeviceMachine::CalcU2Timeout ( )
private

Definition at line 341 of file devlpm.cpp.

342{
345 BOOLEAN Periodic;
346 USHORT Longest;
348
351 {
354 }
355 else
356 {
358
360 {
362 }
363 else if (Child->HasProperty(ChildProperty::IsHub) ||
365 {
367 }
369 {
371 }
373 {
375 }
376 else
377 {
378 Verdict = HubChildU2FromPipes(Child, &Longest, &Periodic);
379
380 if (Verdict == HubU2Verdict::Off)
381 {
384 }
385 else if (Verdict == HubU2Verdict::AcceptOnly)
386 {
388 }
389 else
390 {
391 if (Periodic && Child->m_TargetU1Timeout != TIMEOUT_DISABLED)
392 Child->m_TargetU1Timeout = TIMEOUT_ACCEPT_ONLY;
393
394 if (Longest < U2_TIMEOUT_LONGEST * U2_TIMEOUT_UNIT)
395 Timeout = (UCHAR)(Longest / U2_TIMEOUT_UNIT + 1);
396 else
398 }
399 }
400 }
401
402 /* Accept only U2 next to a host initiated U1 upsets some hubs; turn U2 off instead */
403 if (Child->m_Hub->HasFlag(HubFlag::DisallowU2AcceptOnly) &&
404 !Child->HasProperty(ChildProperty::IsHub) &&
405 Child->m_TargetU1Timeout != TIMEOUT_DISABLED &&
406 Child->m_TargetU1Timeout != TIMEOUT_ACCEPT_ONLY &&
408 {
411 }
412
413 Child->m_TargetU2Timeout = Timeout;
414 DPRINT("Device %p target U2 timeout 0x%x, U1 0x%x\n", Child, Timeout, Child->m_TargetU1Timeout);
415}
Verdict
Definition: desccheck.cpp:15
#define HUB_LPM_POLICY_U2_ENABLED
Definition: devhcd.h:12
#define HUB_LINK_U2_OFF_FOR_LATENCY
Definition: devhcd.h:24
#define HUB_LPM_POLICY_U2_ACCEPT
Definition: devhcd.h:14
#define HUB_LPM_POLICY_U2_INITIATE
Definition: devhcd.h:16
#define HUB_LINK_TARGET_U2
Definition: devhcd.h:22
HubU2Verdict
Definition: devlpm.cpp:261
#define U2_TIMEOUT_LONGEST
Definition: devlpm.cpp:18
#define U2_TIMEOUT_UNIT
Definition: devlpm.cpp:25
static HubU2Verdict NTAPI HubChildU2FromPipes(_In_ HubChild *Child, _Out_ PUSHORT Longest, _Out_ PBOOLEAN PeriodicInterrupt)
Definition: devlpm.cpp:270
unsigned short USHORT
Definition: pedump.c:61

Referenced by LpmCompute().

◆ CallAtPassive()

SM_RESULT DeviceMachine::CallAtPassive ( _In_ DSM_THEN  Then)
private

Definition at line 513 of file devsm.cpp.

515{
516 m_Then = Then;
517 return SmCall(&PassiveStep);
518}
static SM_RESULT SmCall(_In_ const State *Start)
Definition: smengine.h:209

Referenced by EnterAtAddressZero(), EnterReportingToPnp(), and EnterReportingUnknown().

◆ CallRequest()

SM_RESULT DeviceMachine::CallRequest ( _In_ const State *  Target,
_In_ DSM_ACTION  Start,
_In_ DSM_NEXT  Next 
)
private

Definition at line 578 of file devsm.cpp.

582{
583 m_Start = Start;
584 return CallWait(Target, Next);
585}
static _Out_opt_ PULONGLONG Start
SM_RESULT CallWait(_In_ const State *Target, _In_ DSM_NEXT Next)
Definition: devsm.cpp:389
DSM_ACTION m_Start
Definition: devsm.h:1857
PACPI_METHOD_ARGUMENT Next
Definition: slotdev.cpp:96
_In_ WDFIOTARGET Target
Definition: wdfrequest.h:306

Referenced by EnterConfiguring(), EnterReadingDeviceText(), EnterReadingQualifier(), and EnterReenumerating().

◆ CallStep()

◆ CallWait()

SM_RESULT DeviceMachine::CallWait ( _In_ const State *  Target,
_In_ DSM_NEXT  Next 
)
private

Definition at line 389 of file devsm.cpp.

392{
393 m_Next = Next;
394 return SmCall(Target);
395}
DSM_NEXT m_Next
Definition: devsm.h:1833

Referenced by CallRequest(), EnterAtAddressZero(), EnterAtAddressZeroAgain(), EnterReenumerating(), and StartSuperSpeedReset().

◆ CancelControllerIoctl()

VOID DeviceMachine::CancelControllerIoctl ( )
private

Definition at line 462 of file devhcd.cpp.

463{
464 if (!WdfRequestCancelSentRequest(m_Device->m_UcxRequest))
465 DPRINT1("Device %p UCX request 0x%lx was not canceled\n", m_Device, m_Device->m_UcxIoctl);
466}
WDFREQUEST m_UcxRequest
Definition: hubchild.h:361
ULONG m_UcxIoctl
Definition: hubchild.h:364

Referenced by EnterCancelingClaim(), OnClaimingAddressZero(), and OnClaimingAddressZeroAgain().

◆ CancelStateTimer()

BOOLEAN DeviceMachine::CancelStateTimer ( )
private

Definition at line 289 of file hubchild.cpp.

290{
291 return m_Device->m_Timer.Cancel();
292}
BOOLEAN Cancel()
Definition: hubutil.h:115

Referenced by SmCancelTimer().

◆ CancelTransfer()

VOID DeviceMachine::CancelTransfer ( )
private

Definition at line 426 of file devreq.cpp.

427{
428 if (!WdfRequestCancelSentRequest(m_Device->m_Control.Request))
429 DPRINT1("Device %p transfer not canceled, already completed\n", m_Device);
430}
HubControlRequest m_Control
Definition: hubchild.h:359
WDFREQUEST Request
Definition: hubreq.h:19

Referenced by EnterCancelingTransfer().

◆ CancelTransferAndEnd()

SM_RESULT DeviceMachine::CancelTransferAndEnd ( _In_ DsmEvent  Event)
private

Definition at line 596 of file devsm.cpp.

598{
601}
static const State CancelingTransfer
Definition: devsm.h:234
SM_RESULT EndOnTransferCanceled(_In_ DsmEvent Event)
Definition: devsm.cpp:604

Referenced by OnCollectingDescriptors().

◆ ClaimAddressZero()

VOID DeviceMachine::ClaimAddressZero ( )
private

Definition at line 471 of file devhcd.cpp.

472{
475}
#define UCX_SIZE_ADDRESS0
Definition: devhcd.cpp:15
#define IOCTL_UCXHUB_ADDRESS0_OWNERSHIP_ACQUIRE
Definition: hubucx.h:49

Referenced by EnterClaimingAddressZero().

◆ CleanupDeleteAll()

SM_RESULT DeviceMachine::CleanupDeleteAll ( )
private

Definition at line 536 of file devsm_remove.cpp.

537{
541 ForgetChild();
543 return (this->*m_AfterDelete)();
544}
VOID DeleteDefaultEndpoint()
Definition: devhcd.cpp:558
VOID DeleteDeviceInController()
Definition: devhcd.cpp:568
DSM_THEN m_AfterDelete
Definition: devsm.h:1835
VOID ForgetChild()
Definition: devmisc.cpp:467
VOID SignalPnpWaiter()
Definition: childpdo.cpp:4023
VOID DeleteConfigEndpoints()
Definition: devhcd.cpp:1283

Referenced by CleanupDeviceDisabled().

◆ CleanupDeviceDisabled()

SM_RESULT DeviceMachine::CleanupDeviceDisabled ( _In_ DsmEvent  Event)
private

Definition at line 526 of file devsm_remove.cpp.

528{
529 if (Event != DsmEvent::ControllerIoctlDone)
530 return SmUnhandled();
531
533}
SM_RESULT CleanupDeleteAll()

Referenced by CleanupPortDisabled().

◆ CleanupDone()

SM_RESULT DeviceMachine::CleanupDone ( )
private

Definition at line 547 of file devsm_remove.cpp.

548{
550}
static const State RemovedPortOn
Definition: devsm.h:756

Referenced by CleanupPortDisabled().

◆ CleanupPortDisabled()

SM_RESULT DeviceMachine::CleanupPortDisabled ( _In_ DsmEvent  Event)
private

Definition at line 506 of file devsm_remove.cpp.

508{
509 switch (Event)
510 {
511 case DsmEvent::PortDetached:
514
515 case DsmEvent::PortDisableDone:
516 case DsmEvent::PortFault:
519
520 default:
521 return SmUnhandled();
522 }
523}
SM_RESULT EndAfterDetach()
Definition: devsm_enum.cpp:120
static const State DisablingDevice
Definition: devsm.h:243
SM_RESULT CleanupDeviceDisabled(_In_ DsmEvent Event)
SM_RESULT CleanupDone()

Referenced by ConfiguredNotStartedCleanup(), OnStoppedAddressed(), and OnStoppedReady().

◆ ClearEndpointHalt()

VOID DeviceMachine::ClearEndpointHalt ( )
private

Definition at line 832 of file devreq.cpp.

833{
835 HubPipe* Pipe = Child->m_TargetPipe;
836
837 if (Pipe == NULL)
838 {
839 DPRINT1("Device %p clear halt on an unknown pipe\n", Child);
840 Child->m_LastUsbdStatus = USBD_STATUS_INVALID_PIPE_HANDLE;
841 Child->m_LastNtStatus = STATUS_INVALID_PARAMETER;
842 Child->Post(DsmEvent::TransferFailed);
843 return;
844 }
845
850 Pipe->Descriptor->bEndpointAddress,
851 NULL,
852 0,
853 FALSE);
854}
#define XFER_STD_TO_ENDPOINT
Definition: devreq.cpp:17
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135
#define USB_FEATURE_ENDPOINT_STALL
Definition: usb100.h:102
#define USB_REQUEST_CLEAR_FEATURE
Definition: usb100.h:79
#define USBD_STATUS_INVALID_PIPE_HANDLE
Definition: usb.h:205
_In_ WDFUSBPIPE Pipe
Definition: wdfusb.h:1741

Referenced by OnConfigured().

◆ ClearReprogramNeeded()

VOID DeviceMachine::ClearReprogramNeeded ( )
private

Definition at line 385 of file devmisc.cpp.

386{
387 m_Device->ClearState(ChildState::ReprogrammingPending);
388}
VOID ClearState(_In_ ChildState Flag)
Definition: hubchild.h:274

Referenced by EnterReenumerating().

◆ ClearResetAtResume()

VOID DeviceMachine::ClearResetAtResume ( )
private

Definition at line 4109 of file childpdo.cpp.

4110{
4111 m_Device->m_Pdo->ClearFlag(PdoFlag::WasResetAtResume);
4112 m_Device->m_Pdo->ClearFlag(PdoFlag::ReportPortDisabled);
4113}
VOID ClearFlag(_In_ PdoFlag Flag)
Definition: childpdo.h:80

Referenced by EnterSuspendingUnconfigured(), OnConfiguredOn(), and PurgeIoForHibernation().

◆ ClientDoneOk()

SM_RESULT DeviceMachine::ClientDoneOk ( )
private

Definition at line 180 of file devsm_config.cpp.

181{
183 return BackToConfigured();
184}
SM_RESULT BackToConfigured()
VOID CompleteClientRequest()
Definition: childpdo.cpp:3462

Referenced by ClientPipeDone(), OnConfigured(), OnSettingInterface(), and ReconfiguredForClient().

◆ ClientDoneWithLastStatus()

SM_RESULT DeviceMachine::ClientDoneWithLastStatus ( )
private

Definition at line 187 of file devsm_config.cpp.

188{
190 return BackToConfigured();
191}
VOID CompleteClientRequestLastStatus()
Definition: childpdo.cpp:3526

Referenced by ClientHaltCleared(), ClientPipeDone(), OnConfigured(), and OnSettingInterface().

◆ ClientHaltCleared()

SM_RESULT DeviceMachine::ClientHaltCleared ( _In_ DsmEvent  Event)
private

Definition at line 215 of file devsm_config.cpp.

217{
218 switch (Event)
219 {
220 case DsmEvent::TransferDone:
223
224 case DsmEvent::TransferFailed:
226
227 default:
228 return SmUnhandled();
229 }
230}
VOID ResetEndpointAndTransfers()
Definition: devhcd.cpp:971
SM_RESULT ClientDoneWithLastStatus()
SM_RESULT ClientPipeDone(_In_ DsmEvent Event)

Referenced by OnConfigured().

◆ ClientPipeDone()

SM_RESULT DeviceMachine::ClientPipeDone ( _In_ DsmEvent  Event)
private

Definition at line 195 of file devsm_config.cpp.

197{
198 switch (Event)
199 {
200 case DsmEvent::TransferDone:
201 case DsmEvent::ControllerIoctlDone:
202 return ClientDoneOk();
203
204 case DsmEvent::TransferFailed:
205 case DsmEvent::ControllerIoctlFailed:
207
208 default:
209 return SmUnhandled();
210 }
211}
SM_RESULT ClientDoneOk()

Referenced by ClientHaltCleared(), and OnConfigured().

◆ CompleteClientRequest()

VOID DeviceMachine::CompleteClientRequest ( )
private

Definition at line 3462 of file childpdo.cpp.

3463{
3465 HubPdo* Pdo = Child->m_Pdo;
3466 WDFREQUEST Request = Child->m_ClientRequest;
3470 BOOLEAN ProgrammingLost;
3471 PURB Urb;
3472 ULONG Code;
3473
3475
3476 if (Urb != NULL)
3477 {
3478 if ((Urb->UrbHeader.Function == URB_FUNCTION_SELECT_CONFIGURATION &&
3479 Urb->UrbSelectConfiguration.ConfigurationDescriptor != NULL) ||
3480 Urb->UrbHeader.Function == URB_FUNCTION_SELECT_INTERFACE)
3481 {
3482 Child->SetState(ChildState::ConfigurationValid);
3483 }
3484 }
3486 {
3487 Stack = IoGetCurrentIrpStackLocation(WdfRequestWdmGetIrp(Request));
3488 Flags = (PUCXHUB_RESET_FLAGS)Stack->Parameters.Others.Argument1;
3489 PowerLost = Pdo->TestAndClearFlag(PdoFlag::PowerLostOnReset);
3490 ProgrammingLost = Pdo->TestAndClearFlag(PdoFlag::ProgrammingLostOnReset);
3491
3492 if (Flags != NULL)
3493 {
3494 Flags->AsUlong = 0;
3495 Flags->PortPowerInterrupted = PowerLost;
3496 Flags->HostContextLost = ProgrammingLost;
3497 }
3498 }
3499
3501 Child->m_Port->m_ConnectionStatus = DeviceConnected;
3502 DPRINT("Port %u client request %p done\n", Pdo->m_PortNumber, Request);
3503 WdfRequestComplete(Request, STATUS_SUCCESS);
3504}
static PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(PIRP Irp)
static PURB NTAPI HubClientUrb(_In_ WDFREQUEST Request, _Out_ PULONG IoControlCode)
Definition: childpdo.cpp:3416
static WDFREQUEST NTAPI HubTakeClientRequest(_In_ HubChild *Child)
Definition: childpdo.cpp:3451
#define Code
Definition: deflate.h:80
#define IOCTL_UCXHUB_RESET_PORT_ASYNC
Definition: hubucx.h:78
union _UCXHUB_RESET_FLAGS * PUCXHUB_RESET_FLAGS
#define STATUS_SUCCESS
Definition: shellext.h:65
Definition: usb.h:565
#define URB_FUNCTION_SELECT_INTERFACE
Definition: usb.h:87
#define URB_FUNCTION_SELECT_CONFIGURATION
Definition: usb.h:86
_In_opt_ PUSB_CONFIGURATION_DESCRIPTOR _Inout_ PUSBD_INTERFACE_LIST_ENTRY _Outptr_ PURB * Urb
Definition: usbdlib.h:333
@ DeviceConnected
Definition: usbioctl.h:279
_In_ UCHAR _In_ UCHAR _In_ ULONG Code
Definition: wdfdevice.h:1707
_In_ WDFREQUEST _In_ PIO_STACK_LOCATION Stack
Definition: wdfrequest.h:639

Referenced by ClientDoneOk(), ConfiguredFreeForClient(), ReconfiguredBootDevice(), ReenumDoneForClientUnconfigured(), SelectConfigDone(), and UnconfiguredByClient().

◆ CompleteClientRequestFailed()

VOID DeviceMachine::CompleteClientRequestFailed ( )
private

Definition at line 3507 of file childpdo.cpp.

3508{
3510 WDFREQUEST Request = HubTakeClientRequest(Child);
3511 PURB Urb;
3512 ULONG Code;
3513
3515 if (Urb != NULL)
3516 {
3517 Urb->UrbHeader.Status = HubNtStatusToUsbd(STATUS_UNSUCCESSFUL);
3519 }
3520
3521 DPRINT1("Port %u client request %p IOCTL 0x%lx failed\n", Child->m_Port->Number(), Request, Code);
3522 WdfRequestComplete(Request, STATUS_UNSUCCESSFUL);
3523}
static VOID NTAPI HubPatchFailedSelect(_In_ HubChild *Child, _Inout_ PURB Urb)
Definition: childpdo.cpp:3433
USBD_STATUS NTAPI HubNtStatusToUsbd(_In_ NTSTATUS Status)
Definition: childpdo.cpp:190
#define STATUS_UNSUCCESSFUL
Definition: udferr_usr.h:132

Referenced by OnSettingInterface(), ReconfiguredForClient(), ReenumDoneForClientConfigured(), ReenumFailedForClient(), SelectConfigDone(), and SelectConfigFailed().

◆ CompleteClientRequestLastStatus()

VOID DeviceMachine::CompleteClientRequestLastStatus ( )
private

Definition at line 3526 of file childpdo.cpp.

3527{
3530 WDFREQUEST Request;
3531 PURB Urb;
3532 ULONG Code;
3533
3536 if (Urb != NULL)
3537 {
3538 Urb->UrbHeader.Status = Child->m_LastUsbdStatus;
3540 }
3541
3542 Child->m_LastNtStatus = STATUS_SUCCESS;
3543 Child->m_LastUsbdStatus = USBD_STATUS_SUCCESS;
3544
3545 /* Only reached on failure, so a recorded success must not complete the request as one */
3546 if (NT_SUCCESS(Status))
3548
3549 DPRINT1("Port %u client request %p IOCTL 0x%lx failed 0x%lx, URB status 0x%lx\n",
3550 Child->m_Port->Number(),
3552 Urb != NULL ? Urb->UrbHeader.Status : USBD_STATUS_SUCCESS);
3553 WdfRequestComplete(Request, Status);
3554}
LONG NTSTATUS
Definition: precomp.h:26
NTSTATUS m_LastNtStatus
Definition: hubchild.h:353
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:33
Status
Definition: gdiplustypes.h:24
#define USBD_STATUS_SUCCESS
Definition: usb.h:177

Referenced by ClientDoneWithLastStatus(), SelectConfigCleanUp(), and SelectConfigFailed().

◆ CompletePreStart()

VOID DeviceMachine::CompletePreStart ( )
private

◆ CompleteQueryText()

VOID DeviceMachine::CompleteQueryText ( )
private

Definition at line 4057 of file childpdo.cpp.

4058{
4060}
KEVENT m_QueryTextEvent
Definition: hubchild.h:344

Referenced by DeviceTextRead().

◆ ComputeExitLatency()

VOID DeviceMachine::ComputeExitLatency ( )
private

Definition at line 430 of file devlpm.cpp.

431{
433 HubFdo* Hub = Child->m_Hub;
434 BOOLEAN U1Off;
435 BOOLEAN U2Off;
436 ULONG HostLatency;
437 ULONG PathDelay;
438 ULONG Latency;
439
440 U1Off = HubLinkStateOff(Child->m_TargetU1Timeout, (Child->m_LinkFlags & HUB_LINK_TARGET_U1) != 0);
441 U2Off = HubLinkStateOff(Child->m_TargetU2Timeout, (Child->m_LinkFlags & HUB_LINK_TARGET_U2) != 0);
442
443 if (U1Off && U2Off)
444 {
445 Child->m_TargetExitLatency = 0;
446 return;
447 }
448
449 HostLatency = (U2Off ? Child->m_HostU1ExitLatency : Child->m_HostU2ExitLatency) * 1000UL;
452 Child->m_TxTpDelay;
453
454 /* Out to the device and back, plus the device's ping response */
455 Latency = max(HostLatency, (ULONG)MAX_PACKET_FORWARD_NS) + PathDelay + PING_RESPONSE_NS + PathDelay;
456 Latency += Latency * Child->m_LatencyAdjustPercent / 100;
457
458 Child->m_TargetExitLatency = (USHORT)((Latency + 500) / 1000);
459 DPRINT("Device %p target exit latency %u us\n", Child, Child->m_TargetExitLatency);
460}
HubFdo * Hub
Definition: bootdev.cpp:261
Definition: fdo.h:132
HubParentInfo m_ParentInfo
Definition: fdo.h:360
USB_30_HUB_DESCRIPTOR Usb30
Definition: fdo.h:420
union HubFdo::@1628 m_HubDescriptor
static BOOLEAN NTAPI HubLinkStateOff(_In_ UCHAR Timeout, _In_ BOOLEAN Target)
Definition: devlpm.cpp:421
#define MAX_PACKET_FORWARD_NS
Definition: devlpm.cpp:35
#define PING_RESPONSE_NS
Definition: devlpm.cpp:36
USHORT TotalTpPropagationDelay
Definition: fdo.h:99
#define max(a, b)
Definition: svc.c:63

Referenced by LpmCompute().

◆ ConfigDescriptorValid()

BOOLEAN DeviceMachine::ConfigDescriptorValid ( )
private

Definition at line 213 of file devdesc.cpp.

214{
217 PUSB_CONFIGURATION_DESCRIPTOR Config = Child->m_ConfigDescriptor ? Child->m_ConfigDescriptor : Header;
219 BOOLEAN Streams = FALSE;
221
223
225 {
226 Child->m_EnumMessageId = HUB_ENUM_BAD_CONFIG_DESCRIPTOR;
227 return FALSE;
228 }
229
230 if (Config->wTotalLength != Header->wTotalLength)
231 {
232 HubDescLog(&Context, HubDescCode::ConfigTotalLengthTooLarge, FALSE);
233 Child->m_EnumMessageId = HUB_ENUM_BAD_CONFIG_DESCRIPTOR;
234 return FALSE;
235 }
236
237 Child->SetState(ChildState::ConfigurationValid);
238
239 if (Streams)
240 HubSetSqmFlag(Child, ChildSqm::SupportsStreams);
241 if (Child->m_DeviceDescriptor.bNumConfigurations > 1)
242 HubSetSqmFlag(Child, ChildSqm::MultipleConfigurations);
243
244 if (HubIsCompositeLayout(&Child->m_DeviceDescriptor, Config))
245 Child->SetProperty(ChildProperty::IsComposite);
246
247 if (Child->m_ConfigDescriptor == NULL)
248 {
249 /* A lax USB 2.0 device may report a wTotalLength shorter than the header; allocate at least a header */
250 ULONG Size = max((ULONG)Header->wTotalLength, (ULONG)sizeof(*Config));
251
253 if (Config == NULL)
254 {
255 DPRINT1("Device %p no memory for a %u byte configuration\n", Child, Header->wTotalLength);
256 return FALSE;
257 }
258
259 RtlCopyMemory(Config, Header, min(Size, (ULONG)sizeof(Child->m_ScratchBuffer)));
260 Child->m_ConfigDescriptor = Config;
261 }
262
264
265 /* Composite hubs are not supported; enumeration goes on anyway */
266 if (Child->HasProperty(ChildProperty::IsHub) && Child->HasProperty(ChildProperty::IsComposite))
267 DPRINT1("Device %p is a composite hub\n", Child);
268
269 if (Config->bmAttributes & USB_CONFIG_REMOTE_WAKEUP)
270 Child->SetProperty(ChildProperty::RemoteWakeCapable);
271
272 if (Child->HasHack(ChildHack::BlockedDevice))
273 {
274 DPRINT1("Device %p is marked incompatible, enumeration fails\n", Child);
275 Child->m_EnumMessageId = HUB_ENUM_INCOMPATIBLE;
276 return FALSE;
277 }
278
279 return TRUE;
280}
BOOLEAN NTAPI HubDescCheckConfiguration(_In_ const HubDescContext *Context, _In_reads_bytes_opt_(Length) PUSB_CONFIGURATION_DESCRIPTOR Descriptor, _In_ ULONG Length, _Out_opt_ PBOOLEAN SupportsStreams)
Definition: desccheck.cpp:1237
VOID NTAPI HubDescLog(_In_ const HubDescContext *Context, _In_ HubDescCode Code, _In_ BOOLEAN Warning)
Definition: desccheck.cpp:383
static VOID NTAPI HubPickCompatIdInterface(_In_ HubChild *Child, _In_ PUSB_CONFIGURATION_DESCRIPTOR Config)
Definition: devdesc.cpp:164
static BOOLEAN NTAPI HubIsCompositeLayout(_In_ const USB_DEVICE_DESCRIPTOR *Device, _In_ const USB_CONFIGURATION_DESCRIPTOR *Config)
Definition: devdesc.cpp:142
#define HUB_ENUM_INCOMPATIBLE
Definition: hubid.h:34
#define HUB_ENUM_BAD_CONFIG_DESCRIPTOR
Definition: hubid.h:14
struct _USB_CONFIGURATION_DESCRIPTOR * PUSB_CONFIGURATION_DESCRIPTOR
#define USB_CONFIG_REMOTE_WAKEUP
Definition: usb100.h:71
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
Definition: wdfdevice.h:4539

Referenced by AltValidateConfig(), and OnReadingConfigDescriptor().

◆ ConfigLongerThanRead()

BOOLEAN DeviceMachine::ConfigLongerThanRead ( )
private

Definition at line 131 of file devdesc.cpp.

132{
134
135 return Header->bDescriptorType == USB_CONFIGURATION_DESCRIPTOR_TYPE &&
136 HubDeviceBytesReturned(m_Device) < Header->wTotalLength;
137}
#define USB_CONFIGURATION_DESCRIPTOR_TYPE
Definition: usb100.h:50

Referenced by AltConfigHeaderRead(), and OnReadingConfigDescriptor().

◆ ConfigReadOnReset()

BOOLEAN DeviceMachine::ConfigReadOnReset ( )
private

Definition at line 255 of file devmisc.cpp.

256{
257 return m_Device->HasHack(ChildHack::RequestConfigDescOnReset);
258}

Referenced by ReenumConfigDescriptor().

◆ ConfigureCreateEndpoints()

SM_RESULT DeviceMachine::ConfigureCreateEndpoints ( )
private

Definition at line 621 of file devsm_config.cpp.

622{
623 if (!CreateEndpoints())
624 return ConfigureFailed();
625
628}
SM_RESULT ConfigureProgrammed(_In_ DsmEvent Event)
static const State ProgrammingEndpoints
Definition: devsm.h:1066
SM_RESULT ConfigureFailed()
DSM_NEXT m_AfterProgram
Definition: devsm.h:1853
BOOLEAN CreateEndpoints()
Definition: devhcd.cpp:1136

Referenced by ConfigureInterfaceSet().

◆ ConfiguredCyclePort()

SM_RESULT DeviceMachine::ConfiguredCyclePort ( )
private

Definition at line 325 of file devsm_config.cpp.

326{
327 AskPortCycle();
329}
VOID AskPortCycle()
Definition: hubport.cpp:656
SM_RESULT ToAwaitingDetachOrRemove(_In_ BOOLEAN Configured)

Referenced by ConfiguredResumedWithHub(), ConfiguredSuspendedForHub(), OnConfiguredOn(), OnSuspendedConfigured(), and OnUpdatingLinkPower().

◆ ConfigureDeleteOld()

SM_RESULT DeviceMachine::ConfigureDeleteOld ( )
private

Definition at line 589 of file devsm_config.cpp.

590{
594}
VOID SetConfiguration()
Definition: devreq.cpp:755
VOID DeleteOldConfigEndpoints()
Definition: devhcd.cpp:1289
SM_RESULT ConfigureInterfaceSet(_In_ DsmEvent Event)

Referenced by ConfigureOldDisabled().

◆ ConfiguredEndpointsDisabledForClient()

SM_RESULT DeviceMachine::ConfiguredEndpointsDisabledForClient ( _In_ DsmEvent  Event)
private

Definition at line 243 of file devsm_config.cpp.

245{
246 if (Event != DsmEvent::ControllerIoctlDone)
247 return SmUnhandled();
248
250}
SM_RESULT ConfiguredFreeForClient()

Referenced by ConfiguredNullSet().

◆ ConfiguredEndpointsDisabledForStop()

SM_RESULT DeviceMachine::ConfiguredEndpointsDisabledForStop ( _In_ DsmEvent  Event)
private

Definition at line 332 of file devsm_config.cpp.

334{
335 if (Event != DsmEvent::ControllerIoctlDone)
336 return SmUnhandled();
337
338 return StopDecision();
339}
SM_RESULT StopDecision()

Referenced by OnConfiguredOn().

◆ ConfiguredFreeForClient()

SM_RESULT DeviceMachine::ConfiguredFreeForClient ( )
private

Definition at line 253 of file devsm_config.cpp.

254{
257 return BackToUnconfigured();
258}
SM_RESULT BackToUnconfigured()

Referenced by ConfiguredEndpointsDisabledForClient().

◆ ConfiguredIoStarted()

SM_RESULT DeviceMachine::ConfiguredIoStarted ( _In_ DsmEvent  Event)
private

Definition at line 1100 of file devsm_config.cpp.

1102{
1103 if ((Event != DsmEvent::ControllerIoctlDone) && (Event != DsmEvent::ControllerIoctlFailed))
1104 return SmUnhandled();
1105
1106 return SmTransition(&ConfiguredOn);
1107}

Referenced by ConfiguredResumedWithHub(), and OnConfiguredHubSuspended().

◆ ConfiguredNotStartedCleanup()

SM_RESULT DeviceMachine::ConfiguredNotStartedCleanup ( _In_ DsmEvent  Event)
private

Definition at line 462 of file devsm_config.cpp.

464{
465 if (Event != DsmEvent::ControllerIoctlDone)
466 return SmUnhandled();
467
469}
static const State DisablingPort
Definition: devsm.h:221
SM_RESULT CleanupPortDisabled(_In_ DsmEvent Event)

Referenced by OnConfiguredNotStarted().

◆ ConfiguredNotStartedHubStop()

SM_RESULT DeviceMachine::ConfiguredNotStartedHubStop ( _In_ DsmEvent  Event)
private

Definition at line 472 of file devsm_config.cpp.

474{
475 if (Event != DsmEvent::ControllerIoctlDone)
476 return SmUnhandled();
477
479}
SM_RESULT StoppedPortOffForHubStop(_In_ DsmEvent Event)

Referenced by OnConfiguredNotStarted().

◆ ConfiguredNotStartedHubSuspend()

SM_RESULT DeviceMachine::ConfiguredNotStartedHubSuspend ( _In_ DsmEvent  Event)
private

Definition at line 482 of file devsm_config.cpp.

484{
485 if (Event != DsmEvent::ControllerIoctlDone)
486 return SmUnhandled();
487
489}
static const State SuspendingPort
Definition: devsm.h:235
SM_RESULT StoppedPortSuspendedForHub(_In_ DsmEvent Event)

Referenced by OnConfiguredNotStarted().

◆ ConfiguredNullSet()

SM_RESULT DeviceMachine::ConfiguredNullSet ( _In_ DsmEvent  Event)
private

Definition at line 233 of file devsm_config.cpp.

235{
236 if ((Event != DsmEvent::TransferDone) && (Event != DsmEvent::TransferFailed))
237 return SmUnhandled();
238
240}
static const State DisablingEndpoints
Definition: devsm.h:239
SM_RESULT ConfiguredEndpointsDisabledForClient(_In_ DsmEvent Event)

Referenced by OnConfigured().

◆ ConfiguredPurgedForHibernation()

SM_RESULT DeviceMachine::ConfiguredPurgedForHibernation ( _In_ DsmEvent  Event)
private

Definition at line 394 of file devsm_config.cpp.

396{
397 if (Event != DsmEvent::ControllerIoctlDone)
398 return SmUnhandled();
399
401}
static const State PreparingHibernation
Definition: devsm.h:1073

Referenced by OnConfiguredOn().

◆ ConfiguredPurgedForHub()

SM_RESULT DeviceMachine::ConfiguredPurgedForHub ( _In_ DsmEvent  Event)
private

Definition at line 354 of file devsm_config.cpp.

356{
357 if (Event != DsmEvent::ControllerIoctlDone)
358 return SmUnhandled();
359
361}
SM_RESULT ConfiguredSuspendedForHub(_In_ DsmEvent Event)

Referenced by OnConfiguredOn().

◆ ConfiguredPurgedWhileSuspending()

SM_RESULT DeviceMachine::ConfiguredPurgedWhileSuspending ( _In_ DsmEvent  Event)
private

Definition at line 891 of file devsm_config.cpp.

893{
894 if (Event != DsmEvent::ControllerIoctlDone)
895 return SmUnhandled();
896
899}
static const State ConfiguredHubSuspended
Definition: devsm.h:1072

Referenced by OnSuspendingConfigured().

◆ ConfiguredResetBootDevice()

SM_RESULT DeviceMachine::ConfiguredResetBootDevice ( )
private

Definition at line 261 of file devsm_config.cpp.

262{
265}
SM_RESULT ReenumForBootClient(_In_ BOOLEAN AfterReattach)

Referenced by OnConfigured().

◆ ConfiguredRestartWhileSuspended()

SM_RESULT DeviceMachine::ConfiguredRestartWhileSuspended ( )
private

Definition at line 998 of file devsm_config.cpp.

999{
1000 return ReenumForPreStart();
1001}
SM_RESULT ReenumForPreStart()

Referenced by OnSuspendedConfigured().

◆ ConfiguredResumed()

SM_RESULT DeviceMachine::ConfiguredResumed ( )
private

Definition at line 991 of file devsm_config.cpp.

992{
994 return SmTransition(&ConfiguredOn);
995}

Referenced by OnBootDeviceSuspended(), and OnSuspendedConfigured().

◆ ConfiguredResumedWithHub()

SM_RESULT DeviceMachine::ConfiguredResumedWithHub ( _In_ DsmEvent  Event)
private

Definition at line 1076 of file devsm_config.cpp.

1078{
1079 switch (Event)
1080 {
1081 case DsmEvent::PortDetached:
1083
1084 case DsmEvent::PortFault:
1085 case DsmEvent::PortNowEnabledOnReconnect:
1086 case DsmEvent::PortResumeTimeout:
1087 case DsmEvent::PortNowDisabled:
1088 return ConfiguredCyclePort();
1089
1090 case DsmEvent::PortResumeDone:
1093
1094 default:
1095 return SmUnhandled();
1096 }
1097}
SM_RESULT ConfiguredIoStarted(_In_ DsmEvent Event)
SM_RESULT ConfiguredCyclePort()
SM_RESULT RemovalNotifyThenReport()
VOID StartDeviceIo()
Definition: devhcd.cpp:934

Referenced by OnConfiguredHubSuspended().

◆ ConfiguredSignalAndStay()

SM_RESULT DeviceMachine::ConfiguredSignalAndStay ( )
private

Definition at line 317 of file devsm_config.cpp.

318{
320 return SmTransition(&ConfiguredOn);
321}

Referenced by OnConfiguredNotStarted(), and OnConfiguredOn().

◆ ConfiguredSuspendedForHub()

SM_RESULT DeviceMachine::ConfiguredSuspendedForHub ( _In_ DsmEvent  Event)
private

Definition at line 364 of file devsm_config.cpp.

366{
367 switch (Event)
368 {
369 case DsmEvent::PortFault:
371 return ConfiguredCyclePort();
372
373 case DsmEvent::PortSuspendDone:
375
376 case DsmEvent::PortDetached:
379
380 default:
381 return SmUnhandled();
382 }
383}
VOID DereferenceDevicePower()
Definition: fanout.cpp:1044

Referenced by ConfiguredPurgedForHub().

◆ ConfigureFailed()

SM_RESULT DeviceMachine::ConfigureFailed ( )
private

Definition at line 631 of file devsm_config.cpp.

632{
634 return EndWith(DsmEvent::Failed);
635}
VOID MarkPendingEndpointsDisabled()
Definition: devhcd.cpp:1105

Referenced by ConfigureCreateEndpoints(), and ConfigureInterfaceSet().

◆ ConfigureInterfaceSet()

SM_RESULT DeviceMachine::ConfigureInterfaceSet ( _In_ DsmEvent  Event)
private

Definition at line 598 of file devsm_config.cpp.

600{
601 switch (Event)
602 {
603 case DsmEvent::TransferDone:
605 {
608 }
609
611
612 case DsmEvent::TransferFailed:
613 return ConfigureFailed();
614
615 default:
616 return SmUnhandled();
617 }
618}
SM_RESULT ConfigureCreateEndpoints()
VOID SetInterface()
Definition: devreq.cpp:806
BOOLEAN AlternateSettingLeft()
Definition: devreq.cpp:783

Referenced by ConfigureDeleteOld(), and ConfigureInterfaceSet().

◆ ConfigureOldDisabled()

SM_RESULT DeviceMachine::ConfigureOldDisabled ( _In_ DsmEvent  Event)
private

Definition at line 579 of file devsm_config.cpp.

581{
582 if (Event != DsmEvent::ControllerIoctlDone)
583 return SmUnhandled();
584
586}
SM_RESULT ConfigureDeleteOld()

Referenced by EnterConfiguring().

◆ ConfigureProgrammed()

SM_RESULT DeviceMachine::ConfigureProgrammed ( _In_ DsmEvent  Event)
private

Definition at line 638 of file devsm_config.cpp.

640{
641 if (Event == DsmEvent::Succeeded)
642 return EndWith(DsmEvent::Succeeded);
643
644 return EndWith(DsmEvent::Failed);
645}

Referenced by ConfigureCreateEndpoints().

◆ ConfirmStopWhileSuspended()

VOID DeviceMachine::ConfirmStopWhileSuspended ( )
private

Definition at line 1050 of file fanout.cpp.

1051{
1053}
HubFdo * m_Hub
Definition: hubchild.h:316
VOID ConfirmStopWhileSuspended(_In_ HubChild *Child)
Definition: fanout.cpp:821

Referenced by OnFailedDeviceEvents(), OnFailedHubSuspended(), OnPortOffEvents(), OnPortOnEvents(), RemovalAckAndPark(), RemovalAckHubStop(), and StoppedAckHubStop().

◆ ContainerIdHeaderValid()

BOOLEAN DeviceMachine::ContainerIdHeaderValid ( )
private

Definition at line 847 of file devdesc.cpp.

848{
851
854 (const HubMsOsHeader*)Child->m_ScratchBuffer,
856 {
857 Child->m_EnumMessageId = HUB_ENUM_BAD_MSOS_CONTAINER_ID;
858 return FALSE;
859 }
860
861 return TRUE;
862}
BOOLEAN NTAPI HubDescCheckMsOsContainerIdHeader(_In_ const HubDescContext *Context, _In_reads_bytes_(Length) const HubMsOsHeader *Descriptor, _In_ ULONG Length)
Definition: desccheck.cpp:2505
#define HUB_ENUM_BAD_MSOS_CONTAINER_ID
Definition: hubid.h:28

Referenced by MsOsContainerHeaderRead().

◆ ContainerIdKnown()

BOOLEAN DeviceMachine::ContainerIdKnown ( )
private

Definition at line 865 of file devdesc.cpp.

866{
868 const HubMsOsContainerId* Descriptor = (const HubMsOsContainerId*)Child->m_ScratchBuffer;
870
873 return FALSE;
874
875 RtlCopyMemory(&Child->m_ContainerId, Descriptor->ContainerId, sizeof(Child->m_ContainerId));
876 Child->SetProperty(ChildProperty::ContainerIdKnown);
877 return TRUE;
878}
BOOLEAN NTAPI HubDescCheckMsOsContainerId(_In_ const HubDescContext *Context, _In_reads_bytes_(Length) const HubMsOsContainerId *Descriptor, _In_ ULONG Length)
Definition: desccheck.cpp:2541
_Must_inspect_result_ _In_ WDFIORESLIST _In_ PIO_RESOURCE_DESCRIPTOR Descriptor
Definition: wdfresource.h:342

Referenced by MsOsContainerRead().

◆ ContainerIdWanted()

BOOLEAN DeviceMachine::ContainerIdWanted ( )
private

Definition at line 278 of file hubmsos.cpp.

279{
281
283 return FALSE;
284
286 !Child->HasProperty(ChildProperty::MsOsNotSupported) &&
287 !Child->HasHack(ChildHack::SkipContainerIdQuery))
288 {
289 return TRUE;
290 }
291
292 return Child->HasHack(ChildHack::AlwaysQueryMsOs);
293}
static BOOLEAN NTAPI HubMsOsVersionAllowed(_In_ HubChild *Child)
Definition: hubmsos.cpp:56
static BOOLEAN NTAPI HubHasMsOs20SetInfo(_In_ HubChild *Child)
Definition: hubmsos.cpp:67

Referenced by MsOsContainerId().

◆ CreateDefaultEndpoint()

BOOLEAN DeviceMachine::CreateDefaultEndpoint ( )
private

Definition at line 535 of file devhcd.cpp.

536{
538 HubFdo* Hub = Child->m_Hub;
539 UCXENDPOINT Endpoint;
541
543 Child->m_UsbDevice,
544 Child->m_MaxPacketSize0,
545 &Endpoint);
546 if (!NT_SUCCESS(Status))
547 {
548 DPRINT1("Device %p default endpoint create failed 0x%lx\n", Child, Status);
550 return FALSE;
551 }
552
553 Child->m_DefaultEndpoint = Endpoint;
554 return TRUE;
555}
UCXHUB_STACK_INTERFACE m_Stack
Definition: fdo.h:356
UCXUSBDEVICE UsbDevice() const
Definition: fdo.h:180
static VOID NTAPI HubChildFailStatus(_In_ HubChild *Child, _In_ NTSTATUS NtStatus, _In_ USBD_STATUS UsbdStatus)
Definition: devhcd.cpp:102
_In_ UCXHUB_DEVICE_CONTEXT _In_ UCXENDPOINT Endpoint
Definition: hubucx.h:238
PFN_UCXHUB_DEFAULT_ENDPOINT_CREATE CreateControlEndpoint
Definition: hubucx.h:438
#define STATUS_INSUFFICIENT_RESOURCES
Definition: udferr_usr.h:158
#define USBD_STATUS_INSUFFICIENT_RESOURCES
Definition: usb.h:215

Referenced by Zero20CreateDevice(), and Zero30CreateDevice().

◆ CreateDeviceInController()

BOOLEAN DeviceMachine::CreateDeviceInController ( )
private

Definition at line 488 of file devhcd.cpp.

489{
491 HubFdo* Hub = Child->m_Hub;
492 PUCXHUB_DEVICE_CREATE_INFO Info = &Child->m_CreateInfo;
493 UCXUSBDEVICE UsbDevice;
495
496 Info->Size = sizeof(*Info);
497
498 if (Child->m_Kind & DSM_KIND_SUPER_SPEED)
499 {
500 Info->DeviceSpeed = UsbSuperSpeed;
501 Child->m_MaxPacketSize0 = EP0_PACKET_SUPER;
502 }
503 else if (Child->m_Kind & DSM_KIND_HIGH_SPEED)
504 {
505 Info->DeviceSpeed = UsbHighSpeed;
506 Child->m_MaxPacketSize0 = EP0_PACKET_HIGH_FULL;
507 }
508 else if (Child->m_Kind & DSM_KIND_LOW_SPEED)
509 {
510 Info->DeviceSpeed = UsbLowSpeed;
511 Child->m_MaxPacketSize0 = EP0_PACKET_LOW;
512 }
513 else
514 {
515 Info->DeviceSpeed = UsbFullSpeed;
516 Child->m_MaxPacketSize0 = EP0_PACKET_HIGH_FULL;
517 }
518
519 Info->PortNumber = Child->m_Port->Number();
520 Info->HubDeviceContext = (UCXHUB_DEVICE_CONTEXT)Child;
521
523 if (!NT_SUCCESS(Status))
524 {
525 DPRINT1("Port %u controller device create failed 0x%lx\n", Child->m_Port->Number(), Status);
527 return FALSE;
528 }
529
530 Child->m_UsbDevice = UsbDevice;
531 return TRUE;
532}
#define EP0_PACKET_LOW
Definition: devhcd.cpp:36
#define EP0_PACKET_SUPER
Definition: devhcd.cpp:34
#define EP0_PACKET_HIGH_FULL
Definition: devhcd.cpp:35
#define DSM_KIND_LOW_SPEED
Definition: devsm.h:149
#define DSM_KIND_HIGH_SPEED
Definition: devsm.h:147
_In_ UCXUSBDEVICE UsbDevice
Definition: hostctl.h:31
PFN_UCXHUB_DEVICE_CREATE DeviceCreate
Definition: hubucx.h:434
@ UsbSuperSpeed
Definition: usb200.h:45
@ UsbHighSpeed
Definition: usb200.h:44
@ UsbLowSpeed
Definition: usb200.h:42
@ UsbFullSpeed
Definition: usb200.h:43

Referenced by Zero20CreateDevice(), and Zero30CreateDevice().

◆ CreateEndpoints()

BOOLEAN DeviceMachine::CreateEndpoints ( )
private

Definition at line 1136 of file devhcd.cpp.

1137{
1139 HubFdo* Hub = Child->m_Hub;
1140 HubConfiguration* Config = Child->m_CurrentConfig;
1142 HubPipe* Pipe;
1144 ULONG Index;
1146
1147 if (Child->m_EndpointArrayCapacity == 0 || Config == NULL)
1148 {
1149 DPRINT("Device %p has no endpoints to create\n", Child);
1150 return TRUE;
1151 }
1152
1153 for (Entry = Config->Interfaces.Flink;
1154 Entry != &Config->Interfaces && NT_SUCCESS(Status);
1155 Entry = Entry->Flink)
1156 {
1158
1159 for (Index = 0; Index < Interface->PipeCount; Index++)
1160 {
1161 Pipe = &Interface->Pipes[Index];
1162 if (Pipe->State != PipeState::NotCreated)
1163 continue;
1164
1165 Pipe->State = PipeState::PendingCreate;
1167 Child->m_UsbDevice,
1168 Pipe->Descriptor,
1169 Pipe->BytesToEnd,
1170 Pipe->Companion,
1171 &Pipe->Endpoint);
1172 if (!NT_SUCCESS(Status))
1173 {
1174 DPRINT1("Device %p endpoint 0x%x create failed 0x%lx\n",
1175 Child, Pipe->Descriptor->bEndpointAddress, Status);
1176 Pipe->State = PipeState::NotCreated;
1177 break;
1178 }
1179
1180 if (Pipe->ZeroBandwidth)
1181 {
1182 Pipe->State = PipeState::Disabled;
1183 Child->m_EndpointsUnchanged[Child->m_UnchangedCount++] = Pipe->Endpoint;
1184 }
1185 else
1186 {
1187 Child->m_EndpointsToEnable[Child->m_EnableCount++] = Pipe->Endpoint;
1188 }
1189 }
1190 }
1191
1192 for (Entry = Config->Interfaces.Flink; Entry != &Config->Interfaces; Entry = Entry->Flink)
1193 {
1195
1196 for (Index = 0; Index < Interface->PipeCount; Index++)
1197 {
1198 Pipe = &Interface->Pipes[Index];
1199 if (Pipe->State != PipeState::PendingCreate)
1200 continue;
1201
1202 if (NT_SUCCESS(Status))
1203 {
1204 Pipe->State = PipeState::PendingEnable;
1205 }
1206 else
1207 {
1208 Pipe->State = PipeState::NotCreated;
1209 Hub->m_Stack.EndpointDelete(Hub->UsbDevice(), Child->m_UsbDevice, Pipe->Endpoint);
1210 Pipe->Endpoint = NULL;
1211 }
1212 }
1213 }
1214
1215 if (!NT_SUCCESS(Status))
1216 {
1217 Child->m_EnableCount = 0;
1218 Child->m_UnchangedCount = 0;
1220 return FALSE;
1221 }
1222
1223 return TRUE;
1224}
PFN_UCXHUB_ENDPOINT_CREATE EndpointCreate
Definition: hubucx.h:440
PFN_UCXHUB_ENDPOINT_DELETE EndpointDelete
Definition: hubucx.h:441
_In_ WDFCOLLECTION _In_ ULONG Index

Referenced by ConfigureCreateEndpoints(), and InterfaceCreateEndpoints().

◆ CreatePdo()

BOOLEAN DeviceMachine::CreatePdo ( )
private

Definition at line 3893 of file childpdo.cpp.

3894{
3896
3897 PAGED_CODE();
3898
3899 Child->m_EnumMessageId = 0;
3900
3901 if (!HubPdoCreate(Child, TRUE))
3902 {
3903 Child->m_Port->m_ConnectionStatus = DeviceGeneralFailure;
3904 return FALSE;
3905 }
3906
3907 HubChildSetPdo(Child, WdfDeviceWdmGetDeviceObject(Child->m_Pdo->m_Device));
3908 Child->m_Port->m_ConnectionStatus = DeviceConnected;
3909 return TRUE;
3910}
@ DeviceGeneralFailure
Definition: usbioctl.h:281

Referenced by ReportCreatePdo().

◆ CreatePlaceholderPdo()

BOOLEAN DeviceMachine::CreatePlaceholderPdo ( )
private

Definition at line 3913 of file childpdo.cpp.

3914{
3915 PAGED_CODE();
3916
3918 return HubPdoCreate(m_Device, FALSE);
3919}
USB_CONNECTION_STATUS m_ConnectionStatus
Definition: hubport.h:254
@ DeviceFailedEnumeration
Definition: usbioctl.h:280

Referenced by ReportUnknownPdo().

◆ CycleAndPark()

◆ CyclePortForClient()

VOID DeviceMachine::CyclePortForClient ( )
private

Definition at line 4070 of file childpdo.cpp.

4071{
4072 m_Device->m_Port->Post(PortEvent::CycleRequest);
4073}

Referenced by OnConfiguredOn(), OnStopped(), OnStoppedHubSuspended(), OnStoppedReady(), OnSuspendedConfigured(), OnSuspendedUnconfigured(), and OnUnconfiguredOn().

◆ Delay()

◆ DeleteConfigEndpoints()

VOID DeviceMachine::DeleteConfigEndpoints ( )
private

◆ DeleteDefaultEndpoint()

VOID DeviceMachine::DeleteDefaultEndpoint ( )
private

◆ DeleteDeviceInController()

VOID DeviceMachine::DeleteDeviceInController ( )
private

◆ DeleteDeviceThen()

SM_RESULT DeviceMachine::DeleteDeviceThen ( )
private

Definition at line 333 of file devsm.cpp.

334{
337 return (this->*m_AfterDelete)();
338}

Referenced by DeleteOnceDisabled(), and DeleteThen().

◆ DeleteNewInterfaceEndpoints()

VOID DeviceMachine::DeleteNewInterfaceEndpoints ( )
private

Definition at line 1308 of file devhcd.cpp.

1309{
1311 HubInterface* Interface = Child->m_NewInterface;
1312 KIRQL Irql;
1313
1314 if (Interface == NULL)
1315 return;
1316
1317 KeAcquireSpinLock(&Child->m_ConfigLock, &Irql);
1318 RemoveEntryList(&Interface->Link);
1319 if (Child->m_CurrentConfig != NULL)
1320 Child->m_CurrentConfig->EndpointCount -= Interface->PipeCount;
1321 Child->m_NewInterface = NULL;
1322 KeReleaseSpinLock(&Child->m_ConfigLock, Irql);
1323
1324 if (Child->m_NextInterface == Interface)
1325 Child->m_NextInterface = NULL;
1326
1327 HubChildDeleteInterface(Child, Interface);
1328}
_Out_ PKIRQL Irql
Definition: csq.h:179
#define RemoveEntryList(Entry)
Definition: env_spec_w32.h:986
UCHAR KIRQL
Definition: env_spec_w32.h:591
#define KeReleaseSpinLock(sl, irql)
Definition: env_spec_w32.h:627
#define KeAcquireSpinLock(sl, irql)
Definition: env_spec_w32.h:609

Referenced by InterfaceDeleteNewAndFail().

◆ DeleteOldConfigEndpoints()

VOID DeviceMachine::DeleteOldConfigEndpoints ( )
private

Definition at line 1289 of file devhcd.cpp.

1290{
1291 HubChildDeleteConfiguration(m_Device, &m_Device->m_OldConfig);
1292}
HubConfiguration * m_OldConfig
Definition: hubchild.h:371

Referenced by ConfigureDeleteOld().

◆ DeleteOldInterfaceEndpoints()

VOID DeviceMachine::DeleteOldInterfaceEndpoints ( )
private

Definition at line 1295 of file devhcd.cpp.

1296{
1298
1299 if (Interface == NULL)
1300 return;
1301
1303 HubChildDeleteInterface(m_Device, Interface);
1304}
HubInterface * m_OldInterface
Definition: hubchild.h:373

Referenced by InterfaceDeleteOld(), and InterfaceDeleteOldAndFail().

◆ DeleteOnceDisabled()

SM_RESULT DeviceMachine::DeleteOnceDisabled ( _In_ DsmEvent  Event)
private

Definition at line 323 of file devsm.cpp.

325{
326 if (Event != DsmEvent::ControllerIoctlDone)
327 return SmUnhandled();
328
330}
SM_RESULT DeleteDeviceThen()
Definition: devsm.cpp:333

Referenced by DisableAndDelete().

◆ DeleteThen()

SM_RESULT DeviceMachine::DeleteThen ( _In_ DSM_THEN  After)
private

Definition at line 399 of file devsm.cpp.

401{
402 m_AfterDelete = After;
404}

Referenced by OnResettingSuperSpeed(), Zero20Enabled(), and Zero30Enabled().

◆ DereferenceDevice()

VOID DeviceMachine::DereferenceDevice ( )
private

Definition at line 274 of file hubchild.cpp.

275{
277}
WDFOBJECT m_Object
Definition: hubchild.h:315
FORCEINLINE VOID NTAPI HubDereferenceDeferred(_In_ WDFOBJECT Object)
Definition: hubutil.h:181

Referenced by SmDereference().

◆ DereferenceDevicePower()

◆ DereferenceHubPower()

VOID DeviceMachine::DereferenceHubPower ( )
private

Definition at line 4000 of file childpdo.cpp.

4001{
4002 KIRQL OldIrql;
4003
4005 return;
4006
4010
4012}
BOOLEAN m_HubPowerReferenceHeld
Definition: hubchild.h:538
WDFDEVICE m_Device
Definition: fdo.h:349
#define KeRaiseIrql(irql, oldIrql)
Definition: env_spec_w32.h:597
#define KeLowerIrql(oldIrql)
Definition: env_spec_w32.h:602
#define DISPATCH_LEVEL
Definition: env_spec_w32.h:696
#define WdfDeviceResumeIdle(Device)
Definition: wdfdevice.h:1983
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
Definition: kefuncs.h:778

Referenced by OnEnumerating().

◆ DereferencePort()

VOID DeviceMachine::DereferencePort ( )
private

Definition at line 325 of file hubchild.cpp.

326{
328}
WDFOBJECT m_Object
Definition: hubport.h:227
static const char HubTagDevice[]
Definition: hubchild.cpp:15
#define WdfObjectDereferenceWithTag(Handle, Tag)
Definition: wdfobject.h:829

Referenced by EndAfterDetach(), EnterDetachedMissing(), LeaveHub(), OnAwaitingRemove(), and OnDetachedReported().

◆ DescriptorsAltEnumSent()

SM_RESULT DeviceMachine::DescriptorsAltEnumSent ( _In_ DsmEvent  Event)
private

Definition at line 129 of file devsm_desc.cpp.

131{
132 switch (Event)
133 {
134 case DsmEvent::TransferDone:
136
137 case DsmEvent::TransferFailed:
138 return EndWith(DsmEvent::Failed);
139
140 default:
141 return SmUnhandled();
142 }
143}
static const State ReadingDeviceDescriptor
Definition: devsm.h:549

Referenced by DescriptorsQueryRegistry().

◆ DescriptorsQueryRegistry()

SM_RESULT DeviceMachine::DescriptorsQueryRegistry ( )
private

Definition at line 110 of file devsm_desc.cpp.

111{
112 if (!QueryRegistryValues())
113 return EndWith(DsmEvent::Failed);
114
116 {
119 }
120
123
126}
SM_RESULT DescriptorsAltEnumSent(_In_ DsmEvent Event)
Definition: devsm_desc.cpp:129
static const State Requesting
Definition: devsm.h:229
static const State ReadingConfigDescriptor
Definition: devsm.h:550
BOOLEAN m_ConfigFullLength
Definition: devsm.h:1858
BOOLEAN AltEnumNeededInEnum()
Definition: hubmsos.cpp:86
static const State DisablingSuperSpeed
Definition: devsm.h:551
BOOLEAN SuperSpeedMustBeDisabled()
Definition: devmisc.cpp:287

Referenced by OnReadingDeviceDescriptor().

◆ DetachConfigured()

SM_RESULT DeviceMachine::DetachConfigured ( )
private

◆ DetachUnconfigured()

◆ Device()

HubChild * DeviceMachine::Device ( ) const
inline

Definition at line 166 of file devsm.h.

167 {
168 return m_Device;
169 }

Referenced by Initialize().

◆ DeviceArmedForWake()

BOOLEAN DeviceMachine::DeviceArmedForWake ( )
private

Definition at line 509 of file devmisc.cpp.

510{
512
513 return Pdo != NULL && Pdo->HasFlag(PdoFlag::ArmedForWake);
514}

Referenced by SuspendedResumedByPort().

◆ DeviceDescriptorValid()

BOOLEAN DeviceMachine::DeviceDescriptorValid ( )
private

Definition at line 98 of file devdesc.cpp.

99{
103 BOOLEAN IsBillboard = FALSE;
105
106 if (Bytes != sizeof(*Descriptor))
107 {
108 DPRINT1("Device %p device descriptor read returned %lu bytes\n", Child, Bytes);
110 return FALSE;
111 }
112
114 if (!HubDescCheckDevice(&Context, Descriptor, Bytes, &IsBillboard))
115 {
116 Child->m_EnumMessageId = HUB_ENUM_BAD_DEVICE_DESCRIPTOR;
117 return FALSE;
118 }
119
120 RtlCopyMemory(&Child->m_DeviceDescriptor, Descriptor, sizeof(*Descriptor));
121
122 if (IsBillboard)
123 Child->SetProperty(ChildProperty::HasBillboard);
124
125 return TRUE;
126}
BOOLEAN NTAPI HubDescCheckDevice(_In_ const HubDescContext *Context, _In_reads_bytes_opt_(Length) PUSB_DEVICE_DESCRIPTOR Descriptor, _In_ ULONG Length, _Inout_opt_ PBOOLEAN IsBillboard)
Definition: desccheck.cpp:1367
#define HUB_ENUM_DEVICE_DESCRIPTOR_FAILED
Definition: hubid.h:11
#define HUB_ENUM_BAD_DEVICE_DESCRIPTOR
Definition: hubid.h:15
struct _USB_DEVICE_DESCRIPTOR * PUSB_DEVICE_DESCRIPTOR

Referenced by AltDeviceDescriptorRead(), and OnReadingDeviceDescriptor().

◆ DeviceKind()

ULONG DeviceMachine::DeviceKind ( )
private

Definition at line 301 of file hubchild.cpp.

302{
303 return m_Device->m_Kind;
304}
ULONG m_Kind
Definition: hubchild.h:328

Referenced by KindWithin().

◆ DeviceProgrammingLost()

BOOLEAN DeviceMachine::DeviceProgrammingLost ( )
private

Definition at line 352 of file devmisc.cpp.

353{
357 ULONG Index;
358
359 if (!m_Device->HasState(ChildState::ReprogrammingPending))
360 return FALSE;
361
362 m_Device->ClearState(ChildState::ReprogrammingPending);
363
364 if (m_Device->m_Pdo != NULL)
365 InterlockedOr(&m_Device->m_Pdo->m_Flags, (LONG)PdoFlag::ProgrammingLostOnReset);
366
367 if (Config != NULL)
368 {
369 for (Entry = Config->Interfaces.Flink; Entry != &Config->Interfaces; Entry = Entry->Flink)
370 {
372
373 for (Index = 0; Index < Interface->PipeCount; Index++)
374 {
375 if (Interface->Pipes[Index].State == PipeState::Enabled)
376 Interface->Pipes[Index].State = PipeState::Disabled;
377 }
378 }
379 }
380
381 return TRUE;
382}
volatile LONG m_Flags
Definition: childpdo.h:61

Referenced by OnParkedForHubAgain(), OnParkedForHubInEnum(), ReenumTreePurgedConfigured(), and ReenumTreePurgedUnconfigured().

◆ DeviceSpeedChanged()

BOOLEAN DeviceMachine::DeviceSpeedChanged ( )
private

Definition at line 218 of file devmisc.cpp.

219{
222
223 if (Speed == UsbSuperSpeed)
224 {
226 return FALSE;
227 }
228
229 if (Status & PS_HIGH_SPEED)
230 return Speed != UsbHighSpeed;
231 if (Status & PS_LOW_SPEED)
232 return Speed != UsbLowSpeed;
233 return Speed != UsbFullSpeed;
234}
USB_DEVICE_SPEED Speed() const
Definition: hubchild.cpp:36
HubPortStatus m_Current
Definition: hubport.h:244
#define PS_LOW_SPEED
Definition: devmisc.cpp:26
#define PS_HIGH_SPEED
Definition: devmisc.cpp:27
USB_PORT_STATUS_AND_CHANGE StatusChange
Definition: hubport.h:56
USB_PORT_STATUS PortStatus
Definition: usb200.h:241
USHORT AsUshort16
Definition: usb200.h:223
enum _USB_DEVICE_SPEED USB_DEVICE_SPEED

Referenced by Again20FirstResetNotified().

◆ DeviceTextRead()

SM_RESULT DeviceMachine::DeviceTextRead ( _In_ DsmEvent  Event)
private

Definition at line 292 of file devsm_stopped.cpp.

294{
295 switch (Event)
296 {
297 case DsmEvent::TransferFailed:
298 break;
299
300 case DsmEvent::TransferDone:
302 break;
303
304 default:
305 return SmUnhandled();
306 }
307
309 return EndWith(DsmEvent::Succeeded);
310}
#define VOID
Definition: acefi.h:82
BOOLEAN ProductNameValid()
Definition: devdesc.cpp:803
VOID CompleteQueryText()
Definition: childpdo.cpp:4057

Referenced by EnterReadingDeviceText().

◆ DisableAllEndpoints()

VOID DeviceMachine::DisableAllEndpoints ( )
private

Definition at line 1031 of file devhcd.cpp.

1032{
1034 HubConfiguration* Config = Child->m_CurrentConfig;
1036
1037 if (Config == NULL || Child->m_EndpointArrayCapacity == 0)
1038 {
1039 DPRINT("Device %p has no endpoints to disable\n", Child);
1040 Child->Post(DsmEvent::ControllerIoctlDone);
1041 return;
1042 }
1043
1044 Child->m_EnableCount = 0;
1045 Child->m_DisableCount = 0;
1046 Child->m_UnchangedCount = 0;
1047
1048 for (Entry = Config->Interfaces.Flink; Entry != &Config->Interfaces; Entry = Entry->Flink)
1050
1051 if (Child->m_DisableCount == 0)
1052 {
1053 Child->Post(DsmEvent::ControllerIoctlDone);
1054 return;
1055 }
1056
1058}
VOID ProgramEndpoints()
Definition: devhcd.cpp:979
VOID NTAPI HubChildCollectForDisable(_In_ HubChild *Child, _In_ HubInterface *Interface)
Definition: devconfig.cpp:132

Referenced by DisableEndpointsAndNotify(), DisableEndpointsPowerLost(), and EnterDisablingEndpoints().

◆ DisableAndDelete()

◆ DisableDeviceInController()

VOID DeviceMachine::DisableDeviceInController ( )
private

Definition at line 587 of file devhcd.cpp.

588{
590
593}
#define UCX_SIZE_DISABLE
Definition: devhcd.cpp:20
#define IOCTL_UCXHUB_DEVICE_DISABLE
Definition: hubucx.h:58
UCXENDPOINT DefaultEndpoint
Definition: ucxusbdevice.h:158
USBDEVICE_DISABLE Disable
Definition: hubchild.h:214

Referenced by EnterDisablingDevice().

◆ DisableEndpointsAndNotify()

VOID DeviceMachine::DisableEndpointsAndNotify ( )
private

Definition at line 123 of file devsm_boot.cpp.

124{
127}
VOID DisableAllEndpoints()
Definition: devhcd.cpp:1031

Referenced by BootDeviceFailed(), and ReconfiguredBootDevice().

◆ DisableEndpointsPowerLost()

VOID DeviceMachine::DisableEndpointsPowerLost ( )
private

Definition at line 97 of file devsm_boot.cpp.

98{
101}
VOID MarkPowerLost()
Definition: childpdo.cpp:4096

Referenced by BootDeviceDisableOnDetach().

◆ DisableForRemoval()

SM_RESULT DeviceMachine::DisableForRemoval ( _In_ DSM_THEN  After)
private

Definition at line 190 of file devsm_remove.cpp.

192{
193 m_AfterDisable = After;
196
198}
DSM_THEN m_AfterDisable
Definition: devsm.h:1844
SM_RESULT RemovalEndpointsDisabled(_In_ DsmEvent Event)
SM_RESULT RemovalDeviceDisabled(_In_ DsmEvent Event)

Referenced by OnAwaitingDetachOrRemove(), OnDetachedMissing(), OnDetachedReported(), OnSuspendedConfigured(), and OnSuspendedUnconfigured().

◆ DisableLinkStatesForLatency()

BOOLEAN DeviceMachine::DisableLinkStatesForLatency ( )
private

Definition at line 547 of file devlpm.cpp.

548{
550 {
552 return TRUE;
553 }
554
556 {
558 return TRUE;
559 }
560
561 DPRINT1("Device %p exit latency still too large with U1 and U2 off\n", m_Device);
562 return FALSE;
563}
UCHAR m_TargetU2Timeout
Definition: hubchild.h:448
UCHAR m_TargetU1Timeout
Definition: hubchild.h:447
ULONG m_LinkFlags
Definition: hubchild.h:444

Referenced by LpmLatencyTooLarge().

◆ DisableNewInterfaceEndpoints()

VOID DeviceMachine::DisableNewInterfaceEndpoints ( )
private

Definition at line 1061 of file devhcd.cpp.

1062{
1064
1065 if (Child->m_NewInterface == NULL)
1066 {
1067 Child->Post(DsmEvent::ControllerIoctlDone);
1068 return;
1069 }
1070
1071 Child->m_EnableCount = 0;
1072 Child->m_DisableCount = 0;
1073 Child->m_UnchangedCount = 0;
1074
1075 HubChildCollectForDisable(Child, Child->m_NewInterface);
1076
1077 if (Child->m_DisableCount == 0)
1078 {
1079 Child->Post(DsmEvent::ControllerIoctlDone);
1080 return;
1081 }
1082
1084}
VOID Post(_In_ DsmEvent Event)
Definition: hubchild.h:253

Referenced by InterfaceSet().

◆ DisablePendingEndpoints()

VOID DeviceMachine::DisablePendingEndpoints ( )
private

Definition at line 1087 of file devhcd.cpp.

1088{
1090
1092
1093 if (Child->m_DisableCount == 0)
1094 {
1095 Child->Post(DsmEvent::ControllerIoctlDone);
1096 return;
1097 }
1098
1099 Child->m_EnableCount = 0;
1101}
ULONG m_UnchangedCount
Definition: hubchild.h:381

Referenced by EnterConfiguring(), and InterfaceCreateEndpoints().

◆ DisablePortMarkingReset()

VOID DeviceMachine::DisablePortMarkingReset ( )
private

Definition at line 808 of file devsm_power.cpp.

809{
812}
VOID RequestPortDisable()
Definition: hubport.cpp:638
VOID MarkResetAtResume()
Definition: childpdo.cpp:4102

Referenced by SuspendedPurgedForReset().

◆ DisableU1()

VOID DeviceMachine::DisableU1 ( )
private

Definition at line 945 of file devreq.cpp.

946{
948}
#define USB_FEATURE_U1_ENABLE
Definition: usb300.h:337

Referenced by LpmEnableU1().

◆ DisableU2()

VOID DeviceMachine::DisableU2 ( )
private

Definition at line 957 of file devreq.cpp.

958{
960}
#define USB_FEATURE_U2_ENABLE
Definition: usb300.h:338

Referenced by LpmEnableU2().

◆ DisableWhenUnused()

BOOLEAN DeviceMachine::DisableWhenUnused ( )
private

Definition at line 331 of file devmisc.cpp.

332{
333 return m_Device->HasHack(ChildHack::DisableOnSoftRemove) &&
334 m_Device->m_Hub->HasFlag(HubFlag::DisableOnSoftRemove) &&
335 HubDriver.HasFlag(HubGlobal::DisableOnSoftRemove);
336}
BOOLEAN HasFlag(_In_ HubFlag Flag) const
Definition: fdo.h:153
HubDriverState HubDriver
Definition: entry.cpp:13
BOOLEAN HasFlag(_In_ HubGlobal Flag) const
Definition: hubdriver.h:119

Referenced by OnStoppedAddressed(), OnUnconfiguredOn(), and StopDecision().

◆ DisarmOnResume()

BOOLEAN DeviceMachine::DisarmOnResume ( )
private

Definition at line 518 of file devmisc.cpp.

519{
521
522 if (!m_Device->HasProperty(ChildProperty::RemoteWakeCapable))
523 return FALSE;
524
525 return Pdo == NULL || !Pdo->HasFlag(PdoFlag::ClientDoesFunctionSuspend);
526}

Referenced by SuspendedIoStarted().

◆ DisarmWake()

VOID DeviceMachine::DisarmWake ( )
private

Definition at line 912 of file devreq.cpp.

913{
915
916 if (Child->m_Pdo != NULL)
917 InterlockedAnd(&Child->m_Pdo->m_Flags, ~(LONG)PdoFlag::ArmedForWake);
918
919 if (Child->m_Kind & DSM_KIND_SUPER_SPEED)
920 {
925 0,
926 NULL,
927 0,
928 TRUE);
929 }
930 else
931 {
933 }
934}

Referenced by OnAwaitingPowerUpAfterWake(), and SuspendedIoStarted().

◆ DiscardHubEvents()

VOID DeviceMachine::DiscardHubEvents ( )
private

Definition at line 131 of file devsm_enum.cpp.

132{
133 SmDiscardQueued(DsmEvent::HubResumed);
134 SmDiscardQueued(DsmEvent::HubStarted);
135 SmDiscardQueued(DsmEvent::HubSuspending);
136 SmDiscardQueued(DsmEvent::HubStopping);
137 SmDiscardQueued(DsmEvent::HubResumedWithReset);
138 SmDiscardQueued(DsmEvent::HubStoppingAfterSuspend);
139 SmDiscardQueued(DsmEvent::HubResumedInS0);
140}
VOID SmDiscardQueued(_In_ DsmEvent Ev)
Definition: smengine.h:522

Referenced by EndAfterDetach(), LeaveHub(), OnAwaitingRemove(), RemovalDeleteAfterLeaving(), RemovalLeaveHub(), and ReportMissingAndLeave().

◆ DropSerialNumber()

VOID DeviceMachine::DropSerialNumber ( )
private

Definition at line 1198 of file hubid.cpp.

1199{
1201 return;
1202
1205}
PWCHAR m_SerialNumber
Definition: hubchild.h:400

Referenced by ReportAddChild().

◆ DualRoleSupported()

BOOLEAN DeviceMachine::DualRoleSupported ( )
private

Definition at line 299 of file devmisc.cpp.

300{
301 return m_Device->HasProperty(ChildProperty::DualRole);
302}

Referenced by BosValidate().

◆ DuplicateRetriesUsedUp()

BOOLEAN DeviceMachine::DuplicateRetriesUsedUp ( )
private

Definition at line 98 of file devmisc.cpp.

99{
101
102 DPRINT1("Device %p duplicate serial number retry %lu\n", m_Device, Count);
103
105 {
106 DPRINT1("Device %p duplicate is not going away, serial number dropped\n", m_Device);
107 return TRUE;
108 }
109
110 return FALSE;
111}
ULONG m_DuplicateRetryCount
Definition: hubchild.h:349
#define DEVICE_DUPLICATE_RETRY_LIMIT
Definition: devmisc.cpp:14

Referenced by ReportAddChild().

◆ EnableDeviceInController()

VOID DeviceMachine::EnableDeviceInController ( )
private

Definition at line 578 of file devhcd.cpp.

579{
581
584}
#define UCX_SIZE_ENABLE
Definition: devhcd.cpp:16
#define IOCTL_UCXHUB_DEVICE_ENABLE
Definition: hubucx.h:53
UCXENDPOINT DefaultEndpoint
Definition: ucxusbdevice.h:47
USBDEVICE_ENABLE Enable
Definition: hubchild.h:209

Referenced by EnterEnablingDevice().

◆ EnableLtm()

VOID DeviceMachine::EnableLtm ( )
private

Definition at line 963 of file devreq.cpp.

964{
966}
#define USB_FEATURE_LTM_ENABLE
Definition: usb300.h:339

Referenced by LinkLatencyTolerance().

◆ EnableU1()

VOID DeviceMachine::EnableU1 ( )
private

Definition at line 939 of file devreq.cpp.

Referenced by LpmEnableU1().

◆ EnableU2()

VOID DeviceMachine::EnableU2 ( )
private

Definition at line 951 of file devreq.cpp.

Referenced by LpmEnableU2().

◆ EndAfterDetach()

SM_RESULT DeviceMachine::EndAfterDetach ( )
private

Definition at line 120 of file devsm_enum.cpp.

121{
127}
VOID DereferencePort()
Definition: hubchild.cpp:325
VOID UnregisterFromHub()
Definition: fanout.cpp:1032
VOID DiscardHubEvents()
Definition: devsm_enum.cpp:131
static const State AwaitingDelete
Definition: devsm.h:328

Referenced by CleanupPortDisabled(), OnEnumerating(), OnRemovedPortOff(), OnRemovedPortOn(), OnReportingToPnp(), and OnReportingUnknown().

◆ EndAfterTimer()

SM_RESULT DeviceMachine::EndAfterTimer ( _In_ DsmEvent  Event)
private

Definition at line 466 of file devsm.cpp.

468{
469 if (Event == DsmEvent::PortDetached)
470 {
471 if (StopTimer())
472 return EndWith(DsmEvent::PortDetached);
473
475 }
476
478 if (StopTimer())
479 return EndWith(Event);
480
482}
SM_RESULT EndDetachedOnTimer(_In_ DsmEvent Event)
Definition: devsm.cpp:485
BOOLEAN StopTimer()
Definition: hubchild.cpp:295
static const State TimerAfterDetach
Definition: devsm.h:242
SM_RESULT EndForHubOnTimer(_In_ DsmEvent Event)
Definition: devsm.cpp:495

Referenced by AddressDelayEnded(), Again20FirstDelayEnded(), Again20SecondDelayEnded(), and SuperSpeedDelayEnded().

◆ EndDetached()

◆ EndDetachedOnTimer()

SM_RESULT DeviceMachine::EndDetachedOnTimer ( _In_ DsmEvent  Event)
private

Definition at line 485 of file devsm.cpp.

487{
488 if (Event != DsmEvent::TimerFired)
489 return SmUnhandled();
490
491 return EndWith(DsmEvent::PortDetached);
492}

Referenced by EndAfterTimer(), EndForHubOnTimer(), ReportCycledWithTimer(), and ReportDuplicateWaitEnded().

◆ EndFailed()

SM_RESULT DeviceMachine::EndFailed ( )
private

◆ EndForHubOnTimer()

SM_RESULT DeviceMachine::EndForHubOnTimer ( _In_ DsmEvent  Event)
private

Definition at line 495 of file devsm.cpp.

497{
498 switch (Event)
499 {
500 case DsmEvent::PortDetached:
502
503 case DsmEvent::TimerFired:
504 return EndWith(m_HubEvent);
505
506 default:
507 return SmUnhandled();
508 }
509}

Referenced by EndAfterTimer().

◆ EndOnDetach()

SM_RESULT DeviceMachine::EndOnDetach ( _In_ DsmEvent  Event)
private

Definition at line 167 of file devsm_report.cpp.

169{
170 if (Event != DsmEvent::PortDetached)
171 return SmUnhandled();
172
173 return EndWith(DsmEvent::PortDetached);
174}

Referenced by ReportCreatePdo(), ReportCycledWithTimer(), ReportDuplicateWaitEnded(), and ReportUnknownPdo().

◆ EndOnHubOrDetach()

SM_RESULT DeviceMachine::EndOnHubOrDetach ( _In_ DsmEvent  Event)
private

Definition at line 428 of file devsm.cpp.

430{
431 switch (Event)
432 {
433 case DsmEvent::PortDetached:
434 case DsmEvent::HubStopping:
435 case DsmEvent::HubSuspending:
436 return EndWith(Event);
437
438 default:
439 return SmUnhandled();
440 }
441}

Referenced by Again20FirstResetDone(), Again20SecondResetDone(), SuperSpeedResetDone(), and Zero20FirstResetDone().

◆ EndOnResetForHub()

SM_RESULT DeviceMachine::EndOnResetForHub ( _In_ DsmEvent  Event)
private

Definition at line 445 of file devsm.cpp.

447{
448 switch (Event)
449 {
450 case DsmEvent::PortDetached:
451 return EndWith(DsmEvent::PortDetached);
452
453 case DsmEvent::PortResetDone:
454 case DsmEvent::PortResetTimeout:
455 case DsmEvent::PortResetAbortedForSuspend:
456 case DsmEvent::PortFault:
457 return EndWith(m_HubEvent);
458
459 default:
460 return SmUnhandled();
461 }
462}

Referenced by Again20FirstResetDone(), Again20SecondResetDone(), SuperSpeedResetDone(), and Zero20FirstResetEndedForHub().

◆ EndOnTransferCanceled()

SM_RESULT DeviceMachine::EndOnTransferCanceled ( _In_ DsmEvent  Event)
private

Definition at line 604 of file devsm.cpp.

606{
607 if ((Event != DsmEvent::TransferDone) && (Event != DsmEvent::TransferFailed))
608 return SmUnhandled();
609
610 return EndWith(m_HubEvent);
611}

Referenced by CancelTransferAndEnd().

◆ EndpointsNeedDisableOnFailure()

BOOLEAN DeviceMachine::EndpointsNeedDisableOnFailure ( )
private

Definition at line 1117 of file devhcd.cpp.

1118{
1120
1121 if (Child->m_EnableCount != 0 && Child->m_CurrentConfig != NULL)
1122 {
1123 HubConfigMovePipes(Child->m_CurrentConfig, PipeState::PendingEnable, PipeState::Disabled);
1124 HubChildKeepUnchanged(Child, Child->m_EndpointsToEnable, Child->m_EnableCount);
1125 Child->m_EnableCount = 0;
1126 }
1127
1128 return Child->m_DisableCount != 0;
1129}
static VOID NTAPI HubChildKeepUnchanged(_In_ HubChild *Child, _In_reads_(Count) UCXENDPOINT *Endpoints, _In_ ULONG Count)
Definition: devhcd.cpp:115
VOID NTAPI HubConfigMovePipes(_In_opt_ HubConfiguration *Config, _In_ PipeState From, _In_ PipeState To)
Definition: devhcd.cpp:133

Referenced by LpmDetachCleanup(), and LpmFailCleanup().

◆ EndpointsNeedProgramming()

BOOLEAN DeviceMachine::EndpointsNeedProgramming ( )
private

Definition at line 1111 of file devhcd.cpp.

1112{
1113 return m_Device->m_DisableCount != 0 || m_Device->m_EnableCount != 0;
1114}
ULONG m_DisableCount
Definition: hubchild.h:380
ULONG m_EnableCount
Definition: hubchild.h:379

Referenced by LpmCompute(), and LpmFinalProgram().

◆ EndpointsProgrammed()

SM_RESULT DeviceMachine::EndpointsProgrammed ( _In_ DsmEvent  Event)
private

Definition at line 670 of file devsm_config.cpp.

672{
673 switch (Event)
674 {
675 case DsmEvent::ControllerIoctlDone:
676 return (this->*m_AfterProgram)(DsmEvent::Succeeded);
677
678 case DsmEvent::ControllerIoctlFailed:
679 return (this->*m_AfterProgram)(DsmEvent::Failed);
680
681 default:
682 return SmUnhandled();
683 }
684}

Referenced by EnterProgrammingEndpoints().

◆ EndWith()

SM_RESULT DeviceMachine::EndWith ( _In_ DsmEvent  Result)
private

Definition at line 186 of file devsm.cpp.

188{
190 return SmTransition(&Ending);
191}
DsmEvent m_Result
Definition: devsm.h:1837
static const State Ending
Definition: devsm.h:218

Referenced by AddressDelayEnded(), Again20FirstDescriptorRead(), Again20FirstResetDone(), Again20FirstResetNotified(), Again20SecondDelayEnded(), Again20SecondResetDone(), Again20SecondResetNotified(), AltBosHeaderRead(), AltBosRead(), AltBosValidate(), AltConfigHeaderRead(), AltConfigRead(), AltDeviceDescriptorRead(), AltQueryRegistry(), AltValidateConfig(), BosError(), BosMsOs20(), BosMsOs20Validate(), BosStart(), ConfigureFailed(), ConfigureProgrammed(), DescriptorsAltEnumSent(), DescriptorsQueryRegistry(), DeviceTextRead(), EndAfterTimer(), EndDetached(), EndDetachedOnTimer(), EndFailed(), EndForHubOnTimer(), EndOnDetach(), EndOnHubOrDetach(), EndOnResetForHub(), EndOnTransferCanceled(), EndWithHubEvent(), EnterReadingQualifier(), EnumClaimEndedOnDetach(), EnumPdChargingSet(), EnumPortOffAfterFailure(), EnumPortOffAfterFailureHoldingAddressZero(), EnumPortOffForHub(), EnumPortOffHoldingAddressZero(), EnumReleaseAndEndDetached(), EnumStopRetryOnDetach(), EnumTimerFlushedOnDetach(), FailedPortOffForHub(), HubEndResumedOrReenumerate(), HubPortOffForStop(), HubPortResumedForReset(), HubPortSuspendedAgain(), HubPortSynced(), HubPortSyncedForReset(), HubPortSyncedForStop(), HubPortSyncedForSuspend(), HubResumeEndedForStop(), HubResumeEndedForSuspend(), HubResumeForReenumeration(), HubResumeWithPortEnabled(), HubResumeWithPortSuspended(), InterfaceDeleteOld(), InterfaceDeleteOldAndFail(), Link20Start(), Link20Updated(), LinkLatencyTolerance(), LinkLtmSet(), LinkSelSet(), LpmCleanedUpAfterDetach(), LpmCleanedUpAfterFailure(), LpmDetachCleanup(), LpmFailCleanup(), LpmFinalProgram(), LpmFinalProgrammed(), MsOsContainerId(), MsOsContainerRead(), MsOsError(), MsOsMarkNoContainerId(), OnAddressingAgain(), OnAtAddressZero(), OnAtAddressZeroAgain(), OnFailedHubSuspended(), OnHubSuspended(), OnHubSuspendedPortOff(), OnOffAfterD3Cold(), OnParkedForHubAgain(), OnParkedForHubInEnum(), OnReadingBos(), OnReadingConfigDescriptor(), OnReadingDeviceDescriptor(), OnReadingMsOs(), OnReadingQualifier(), OnRemainingDescriptors(), OnSettingAddress(), OnUpdatingDevice(), PortOnOffForHubSuspend(), QualifierRead(), ReenumClaimEndedOnDetach(), ReenumPdCharging(), ReenumPdChargingSet(), ReenumPortOffAfterFailure(), ReenumPortOffDeviceDisabled(), ReenumPortOffForHub(), ReenumPortOffForHubDeviceEnabled(), ReenumPortOffHoldingAddressZero(), ReenumStopRetryOnDetach(), ReenumTimerFlushedOnDetach(), ReenumWrongDeviceLeft(), ReportCreatePdo(), ReportDuplicateWaitEnded(), ReportUnknownPdo(), StringError(), SuperSpeedResetDone(), SuperSpeedResetNotified(), SuspendedBackDown(), SuspendedNeedsReset(), SuspendedPortDownForHub(), SuspendedPortOffForReset(), SuspendedPortOffForStop(), SuspendedPortResumed(), SuspendedResumeDone(), SuspendEndedForHub(), SuspendPortArmed(), SuspendPortArmFailed(), SuspendPortPlain(), U2TimeoutSet(), U2TimeoutStart(), Zero20CreateDevice(), Zero20FirstResetDone(), Zero20FirstResetEndedForHub(), Zero20ResetNotified(), Zero30CreateDevice(), and Zero30Enabled().

◆ EndWithHubEvent()

SM_RESULT DeviceMachine::EndWithHubEvent ( )
private

◆ EnterAddressing()

SM_RESULT DeviceMachine::EnterAddressing ( )
private

Definition at line 460 of file devsm_enum.cpp.

461{
462 return SmCall(&SettingAddress);
463}
static const State SettingAddress
Definition: devsm.h:472

◆ EnterAtAddressZero()

SM_RESULT DeviceMachine::EnterAtAddressZero ( )
private

Definition at line 366 of file devsm_enum.cpp.

367{
370
373
374 return SmUnhandled();
375}
SM_RESULT Zero30CreateDevice()
Definition: devsm_zero.cpp:337
SM_RESULT Zero20FirstResetDone(_In_ DsmEvent Event)
Definition: devsm_zero.cpp:34
BOOLEAN KindWithin(_In_ ULONG Allowed)
A device with no version or speed known yet passes for any version or speed.
Definition: devsm.cpp:159
SM_RESULT CallAtPassive(_In_ DSM_THEN Then)
Definition: devsm.cpp:513
#define DSM_KIND_PORT30
Definition: devsm.h:153
#define DSM_KIND_ANY_SPEED
Definition: devsm.h:151
#define DSM_KIND_PORT20
Definition: devsm.h:152
#define DSM_KIND_ANY_VERSION
Definition: devsm.h:146

◆ EnterAtAddressZeroAgain()

SM_RESULT DeviceMachine::EnterAtAddressZeroAgain ( )
private

Definition at line 498 of file devsm_reenum.cpp.

◆ EnterAwaitingPowerUpAfterWake()

SM_RESULT DeviceMachine::EnterAwaitingPowerUpAfterWake ( )
private

Definition at line 687 of file devsm_power.cpp.

688{
691 return SmHandled();
692}
VOID FinishWaitWake()
Definition: childpdo.cpp:4136
VOID MarkSystemWakeSource()
Definition: childpdo.cpp:4143

◆ EnterBootDeviceDetached()

SM_RESULT DeviceMachine::EnterBootDeviceDetached ( )
private

Definition at line 200 of file devsm_boot.cpp.

201{
204 return SmCall(&BootDeviceEvents);
205}
static const State BootDeviceEvents
Definition: devsm.h:1274

◆ EnterBootDeviceDetachedContextGone()

SM_RESULT DeviceMachine::EnterBootDeviceDetachedContextGone ( )
private

Definition at line 208 of file devsm_boot.cpp.

209{
213 return SmCall(&BootDeviceEvents);
214}

◆ EnterBootDeviceEvents()

SM_RESULT DeviceMachine::EnterBootDeviceEvents ( )
private

Definition at line 49 of file devsm_boot.cpp.

50{
51 return SmCall(&BootDeviceEvents);
52}

◆ EnterBootDeviceResetPending()

SM_RESULT DeviceMachine::EnterBootDeviceResetPending ( )
private

Definition at line 259 of file devsm_boot.cpp.

260{
262 return SmHandled();
263}

◆ EnterBugChecking()

SM_RESULT DeviceMachine::EnterBugChecking ( )
private

Definition at line 981 of file devsm_reenum.cpp.

982{
984 return SmHandled();
985}
VOID BugCheckForBootDevice()
Definition: devmisc.cpp:405

◆ EnterCancelingClaim()

SM_RESULT DeviceMachine::EnterCancelingClaim ( )
private

Definition at line 193 of file devsm_enum.cpp.

194{
196 return SmHandled();
197}
VOID CancelControllerIoctl()
Definition: devhcd.cpp:462

◆ EnterCancelingTransfer()

SM_RESULT DeviceMachine::EnterCancelingTransfer ( )
private

Definition at line 588 of file devsm.cpp.

589{
591 return SmHandled();
592}
VOID CancelTransfer()
Definition: devreq.cpp:426

◆ EnterClaimingAddressZero()

SM_RESULT DeviceMachine::EnterClaimingAddressZero ( )
private

Definition at line 143 of file devsm_enum.cpp.

144{
146 return SmHandled();
147}
VOID ClaimAddressZero()
Definition: devhcd.cpp:471

◆ EnterConfiguring()

SM_RESULT DeviceMachine::EnterConfiguring ( )
private

Definition at line 556 of file devsm_config.cpp.

557{
560}
VOID DisablePendingEndpoints()
Definition: devhcd.cpp:1087
SM_RESULT ConfigureOldDisabled(_In_ DsmEvent Event)
SM_RESULT CallRequest(_In_ const State *Target, _In_ DSM_ACTION Start, _In_ DSM_NEXT Next)
Definition: devsm.cpp:578

◆ EnterDelaying()

SM_RESULT DeviceMachine::EnterDelaying ( )
private

Definition at line 258 of file devsm.cpp.

259{
260 switch (m_DelayKind)
261 {
264 break;
265
268 break;
269
272 break;
273
276 break;
277
280 break;
281
284 break;
285 }
286
287 return SmHandled();
288}
VOID StartSuperSpeedPostResetTimer()
Definition: hubchild.cpp:352
VOID StartPostResetTimer()
Definition: hubchild.cpp:340
VOID ArmPostAddressTimer()
Definition: hubchild.cpp:358
VOID StartLongPostResetTimer()
Definition: hubchild.cpp:346
VOID StartRetryTimer()
Definition: hubchild.cpp:333
VOID ArmDuplicateDeviceTimer()
Definition: hubchild.cpp:364
@ DsmDelayDuplicate
Definition: devsm.h:129
@ DsmDelayEnumRetry
Definition: devsm.h:124
@ DsmDelayPostResetSuperSpeed
Definition: devsm.h:127
@ DsmDelayPostAddress
Definition: devsm.h:128

◆ EnterDetachedEvents()

SM_RESULT DeviceMachine::EnterDetachedEvents ( )
private

Definition at line 86 of file devsm_remove.cpp.

87{
88 return SmCall(&DetachedEvents);
89}
static const State DetachedEvents
Definition: devsm.h:757

◆ EnterDetachedMissing()

SM_RESULT DeviceMachine::EnterDetachedMissing ( )
private

Definition at line 159 of file devsm_remove.cpp.

160{
162 ForgetChild();
164 return SmCall(&DetachedEvents);
165}
BOOLEAN m_ChildForgotten
Definition: devsm.h:1841

◆ EnterDetachedReported()

SM_RESULT DeviceMachine::EnterDetachedReported ( )
private

Definition at line 110 of file devsm_remove.cpp.

111{
117 return SmCall(&DetachedEvents);
118}
VOID MarkDisconnected()
Definition: devmisc.cpp:474
VOID ReportDeviceMissing()
Definition: childpdo.cpp:3932

◆ EnterDetachedReportedConfigured()

SM_RESULT DeviceMachine::EnterDetachedReportedConfigured ( )
private

Definition at line 121 of file devsm_remove.cpp.

◆ EnterDisablingDevice()

SM_RESULT DeviceMachine::EnterDisablingDevice ( )
private

Definition at line 300 of file devsm.cpp.

301{
303 return SmHandled();
304}
VOID DisableDeviceInController()
Definition: devhcd.cpp:587

◆ EnterDisablingEndpoints()

SM_RESULT DeviceMachine::EnterDisablingEndpoints ( )
private

Definition at line 678 of file devsm.cpp.

679{
681 return SmHandled();
682}

◆ EnterDisablingPort()

SM_RESULT DeviceMachine::EnterDisablingPort ( )
private

Definition at line 251 of file devsm.cpp.

252{
254 return SmHandled();
255}

◆ EnterDisablingSuperSpeed()

SM_RESULT DeviceMachine::EnterDisablingSuperSpeed ( )
private

Definition at line 146 of file devsm_desc.cpp.

147{
149 return SmHandled();
150}
VOID RequestSuperSpeedDisable()
Definition: hubport.cpp:674

◆ EnterEnablingDevice()

SM_RESULT DeviceMachine::EnterEnablingDevice ( )
private

Definition at line 360 of file devsm.cpp.

361{
363 return SmHandled();
364}
VOID EnableDeviceInController()
Definition: devhcd.cpp:578

◆ EnterEnding()

SM_RESULT DeviceMachine::EnterEnding ( )
private

Definition at line 208 of file devsm.cpp.

209{
210 return SmReturn(m_Result);
211}
static SM_RESULT SmReturn(_In_ DsmEvent Ev)
Definition: smengine.h:217

◆ EnterEnumerating()

SM_RESULT DeviceMachine::EnterEnumerating ( )
private

Definition at line 89 of file devsm_enum.cpp.

90{
93}
VOID StartEnumRetries()
Definition: devmisc.cpp:59
static const State ClaimingAddressZero
Definition: devsm.h:330

◆ EnterFailedDevice()

SM_RESULT DeviceMachine::EnterFailedDevice ( )
private

Definition at line 216 of file devsm_report.cpp.

217{
218 return SmCall(&FailedDeviceEvents);
219}
static const State FailedDeviceEvents
Definition: devsm.h:697

◆ EnterFailedDeviceGone()

SM_RESULT DeviceMachine::EnterFailedDeviceGone ( )
private

Definition at line 273 of file devsm_report.cpp.

274{
277 return SmCall(&PortOffEvents);
278}
static const State PortOffEvents
Definition: devsm.h:699

◆ EnterFailedHubSuspended()

SM_RESULT DeviceMachine::EnterFailedHubSuspended ( )
private

Definition at line 367 of file devsm_report.cpp.

368{
370 return SmCall(&HubSuspended);
371}
static const State HubSuspended
Definition: devsm.h:422

◆ EnterForwardingStreams()

SM_RESULT DeviceMachine::EnterForwardingStreams ( )
private

Definition at line 653 of file devsm.cpp.

654{
656 return SmHandled();
657}
VOID ForwardToController()
Definition: devhcd.cpp:1369

◆ EnterHubSuspendedReleasingPower()

SM_RESULT DeviceMachine::EnterHubSuspendedReleasingPower ( )
private

Definition at line 681 of file devsm_stopped.cpp.

682{
684 return SmCall(&HubSuspended);
685}

◆ EnterLinkPowerAgain()

SM_RESULT DeviceMachine::EnterLinkPowerAgain ( )
private

Definition at line 906 of file devsm_reenum.cpp.

907{
910
913
914 return ReenumPdCharging();
915}
SM_RESULT ReenumPdCharging()
SM_RESULT LinkStart()
Definition: devsm_desc.cpp:965
SM_RESULT Link20Start()
SM_RESULT CallStep(_In_ DSM_THEN Then)
Definition: devsm.cpp:552
#define DSM_KIND_USB2X
Definition: devsm.h:144
#define DSM_KIND_USB3X
Definition: devsm.h:145
#define DSM_KIND_ANY_PORT
Definition: devsm.h:154

◆ EnterLinkPowerInEnum()

SM_RESULT DeviceMachine::EnterLinkPowerInEnum ( )
private

Definition at line 549 of file devsm_enum.cpp.

550{
553
555}
static const State UpdatingDevice
Definition: devsm.h:336

◆ EnterNotifyingReset()

SM_RESULT DeviceMachine::EnterNotifyingReset ( )
private

Definition at line 374 of file devsm.cpp.

375{
377 return SmHandled();
378}
VOID NotifyDeviceReset()
Definition: devhcd.cpp:837

◆ EnterParkedForHub()

SM_RESULT DeviceMachine::EnterParkedForHub ( )
private

Definition at line 620 of file devsm_enum.cpp.

621{
622 return SmCall(&HubSuspended);
623}

◆ EnterPassiveStep()

SM_RESULT DeviceMachine::EnterPassiveStep ( )
private

Definition at line 202 of file devsm.cpp.

203{
204 return (this->*m_Then)();
205}

◆ EnterPreparingHibernation()

SM_RESULT DeviceMachine::EnterPreparingHibernation ( )
private

Definition at line 404 of file devsm_config.cpp.

405{
407 return SmHandled();
408}
VOID RequestHibernationPrep()
Definition: hubport.cpp:692

◆ EnterProgrammingEndpoints()

SM_RESULT DeviceMachine::EnterProgrammingEndpoints ( )
private

Definition at line 650 of file devsm_config.cpp.

◆ EnterReadingBos()

SM_RESULT DeviceMachine::EnterReadingBos ( )
private

Definition at line 216 of file devsm_desc.cpp.

217{
220
221 return SmTransition(&ReadingMsOs);
222}
static const State ReadingMsOs
Definition: devsm.h:554
SM_RESULT BosStart()
Definition: devsm_desc.cpp:242

◆ EnterReadingConfigDescriptor()

SM_RESULT DeviceMachine::EnterReadingConfigDescriptor ( )
private

Definition at line 153 of file devsm_desc.cpp.

154{
157 else
159
160 return SmHandled();
161}

◆ EnterReadingDescriptors()

SM_RESULT DeviceMachine::EnterReadingDescriptors ( )
private

Definition at line 76 of file devsm_desc.cpp.

77{
79}

◆ EnterReadingDeviceDescriptor()

SM_RESULT DeviceMachine::EnterReadingDeviceDescriptor ( )
private

Definition at line 82 of file devsm_desc.cpp.

83{
85 return SmHandled();
86}

◆ EnterReadingDeviceText()

SM_RESULT DeviceMachine::EnterReadingDeviceText ( )
private

Definition at line 285 of file devsm_stopped.cpp.

286{
289}
SM_RESULT DeviceTextRead(_In_ DsmEvent Event)
VOID ReadProductName()
Definition: devreq.cpp:575

◆ EnterReadingFirstDescriptor()

SM_RESULT DeviceMachine::EnterReadingFirstDescriptor ( )
private

Definition at line 381 of file devsm.cpp.

382{
384 return SmHandled();
385}
VOID ReadFirstDescriptor()
Definition: devreq.cpp:409

◆ EnterReadingLanguages()

SM_RESULT DeviceMachine::EnterReadingLanguages ( )
private

Definition at line 843 of file devsm_desc.cpp.

844{
846 return SmHandled();
847}
VOID ReadLanguageIds()
Definition: devreq.cpp:567

◆ EnterReadingMsOs()

SM_RESULT DeviceMachine::EnterReadingMsOs ( )
private

Definition at line 606 of file devsm_desc.cpp.

607{
609}
SM_RESULT MsOsStart()
Definition: devsm_desc.cpp:632

◆ EnterReadingProductName()

SM_RESULT DeviceMachine::EnterReadingProductName ( )
private

Definition at line 882 of file devsm_desc.cpp.

883{
885 return SmHandled();
886}

◆ EnterReadingQualifier()

SM_RESULT DeviceMachine::EnterReadingQualifier ( )
private

Definition at line 909 of file devsm_desc.cpp.

910{
912 {
915 }
916
917 return EndWith(DsmEvent::Succeeded);
918}
VOID ReadQualifier()
Definition: devreq.cpp:607
SM_RESULT QualifierRead(_In_ DsmEvent Event)
Definition: devsm_desc.cpp:940
#define DSM_KIND_USB20
Definition: devsm.h:143
#define DSM_KIND_FULL_SPEED
Definition: devsm.h:148

◆ EnterReenumerating()

SM_RESULT DeviceMachine::EnterReenumerating ( )
private

Definition at line 79 of file devsm_reenum.cpp.

80{
83
86
87 switch (m_ReenumKind)
88 {
92
96
97 default:
100 }
101}
SM_RESULT ReenumTreePurgedUnconfigured(_In_ DsmEvent Event)
BOOLEAN m_ReenumForceReset
Definition: devsm.h:1847
VOID ClearReprogramNeeded()
Definition: devmisc.cpp:385
VOID LogReenumeration()
Definition: devmisc.cpp:392
SM_RESULT ReenumTreePurgedConfigured(_In_ DsmEvent Event)
static const State EnablingDevice
Definition: devsm.h:224
VOID ForceResetOnNextStart()
Definition: childpdo.cpp:4090
SM_RESULT ReenumEnabled(_In_ DsmEvent Event)
VOID PurgeDeviceTreeIo()
Definition: devhcd.cpp:927
DSM_REENUM m_ReenumKind
Definition: devsm.h:1846
@ DsmReenumConfigured
Definition: devsm.h:135
@ DsmReenumUnconfigured
Definition: devsm.h:136

◆ EnterRemainingDescriptors()

SM_RESULT DeviceMachine::EnterRemainingDescriptors ( )
private

Definition at line 190 of file devsm_desc.cpp.

191{
192 return SmCall(&ReadingBos);
193}
static const State ReadingBos
Definition: devsm.h:553

◆ EnterReportingToPnp()

SM_RESULT DeviceMachine::EnterReportingToPnp ( )
private

Definition at line 63 of file devsm_report.cpp.

64{
67}
SM_RESULT ReportAddChild()
VOID StartDuplicateRetries()
Definition: devmisc.cpp:92

◆ EnterReportingUnknown()

SM_RESULT DeviceMachine::EnterReportingUnknown ( )
private

Definition at line 179 of file devsm_report.cpp.

180{
182}
SM_RESULT ReportUnknownPdo()

◆ EnterRequesting()

SM_RESULT DeviceMachine::EnterRequesting ( )
private

Definition at line 560 of file devsm.cpp.

561{
562 (this->*m_Start)();
563 return SmHandled();
564}

◆ EnterResettingPort()

SM_RESULT DeviceMachine::EnterResettingPort ( )
private

Definition at line 367 of file devsm.cpp.

368{
370 return SmHandled();
371}
VOID RequestPortReset()
Definition: hubport.cpp:662

◆ EnterResettingSuperSpeed()

SM_RESULT DeviceMachine::EnterResettingSuperSpeed ( )
private

Definition at line 352 of file devsm_zero.cpp.

353{
354 return StartSuperSpeedReset();
355}

◆ EnterResumingPort()

SM_RESULT DeviceMachine::EnterResumingPort ( )
private

Definition at line 629 of file devsm.cpp.

630{
632 return SmHandled();
633}
VOID RequestPortResume()
Definition: hubport.cpp:650

◆ EnterSettingAddress()

SM_RESULT DeviceMachine::EnterSettingAddress ( )
private

Definition at line 490 of file devsm_zero.cpp.

491{
493 return SmHandled();
494}
VOID SetDeviceAddress()
Definition: devhcd.cpp:607

◆ EnterSettingInterface()

SM_RESULT DeviceMachine::EnterSettingInterface ( )
private

Definition at line 689 of file devsm_config.cpp.

690{
692}
SM_RESULT InterfaceStart()

◆ EnterSettingPdCharging()

SM_RESULT DeviceMachine::EnterSettingPdCharging ( )
private

Definition at line 307 of file devsm.cpp.

308{
310 return SmHandled();
311}
VOID SetPdChargingPolicy()
Definition: devreq.cpp:969

◆ EnterSettingU2Timeout()

SM_RESULT DeviceMachine::EnterSettingU2Timeout ( )
private

Definition at line 817 of file devsm_stopped.cpp.

818{
821
822 return (this->*m_Resume)();
823}
DSM_THEN m_Resume
Definition: devsm.h:1845
SM_RESULT U2TimeoutStart()

◆ EnterStarting()

SM_RESULT DeviceMachine::EnterStarting ( )
private

Definition at line 546 of file devsm.cpp.

547{
548 return (this->*m_Then)();
549}

◆ EnterStoppedAddressed()

SM_RESULT DeviceMachine::EnterStoppedAddressed ( )
private

Definition at line 92 of file devsm_stopped.cpp.

93{
96}
static const State AwaitingMsOsInstall
Definition: devsm.h:840
VOID StartDriverWaitTimer()
Definition: childpdo.cpp:4015

◆ EnterSuspended()

SM_RESULT DeviceMachine::EnterSuspended ( )
private

Definition at line 222 of file devsm_power.cpp.

223{
225 return SmCall(&DeviceSuspended);
226}
static const State DeviceSuspended
Definition: devsm.h:951

◆ EnterSuspendingConfigured()

SM_RESULT DeviceMachine::EnterSuspendingConfigured ( )
private

Definition at line 862 of file devsm_config.cpp.

863{
865}
SM_RESULT SuspendStart()

◆ EnterSuspendingPort()

SM_RESULT DeviceMachine::EnterSuspendingPort ( )
private

Definition at line 622 of file devsm.cpp.

623{
625 return SmHandled();
626}
VOID RequestPortSuspend()
Definition: hubport.cpp:644

◆ EnterSuspendingUnconfigured()

SM_RESULT DeviceMachine::EnterSuspendingUnconfigured ( )
private

Definition at line 192 of file devsm_power.cpp.

193{
196}
VOID ClearResetAtResume()
Definition: childpdo.cpp:4109

◆ EnterUpdatingDefaultEndpoint()

SM_RESULT DeviceMachine::EnterUpdatingDefaultEndpoint ( )
private

Definition at line 188 of file devsm_zero.cpp.

189{
192 return SmHandled();
193}
VOID UpdateDefaultEndpoint()
Definition: devhcd.cpp:596

◆ EnterUpdatingDevice()

SM_RESULT DeviceMachine::EnterUpdatingDevice ( )
private

Definition at line 575 of file devsm_enum.cpp.

576{
578 return SmHandled();
579}
VOID UpdateDeviceInController()
Definition: devhcd.cpp:753

◆ EnterUpdatingLinkPower()

SM_RESULT DeviceMachine::EnterUpdatingLinkPower ( )
private

Definition at line 831 of file devsm_config.cpp.

◆ EnterWithMsOsInstall()

SM_RESULT DeviceMachine::EnterWithMsOsInstall ( )
private

Definition at line 70 of file devsm_stopped.cpp.

71{
73}

◆ EnterWithPortOff()

SM_RESULT DeviceMachine::EnterWithPortOff ( )
private

Definition at line 74 of file devsm_remove.cpp.

75{
76 return SmCall(&PortOffEvents);
77}

◆ EnterWithPortOn()

SM_RESULT DeviceMachine::EnterWithPortOn ( )
private

Definition at line 80 of file devsm_remove.cpp.

81{
82 return SmCall(&PortOnEvents);
83}
static const State PortOnEvents
Definition: devsm.h:758

◆ EnumClaimEndedOnDetach()

SM_RESULT DeviceMachine::EnumClaimEndedOnDetach ( _In_ DsmEvent  Event)
private

Definition at line 175 of file devsm_enum.cpp.

177{
178 switch (Event)
179 {
180 case DsmEvent::ControllerIoctlDone:
182 return EndWith(DsmEvent::PortDetached);
183
184 case DsmEvent::ControllerIoctlFailed:
185 return EndWith(DsmEvent::PortDetached);
186
187 default:
188 return SmUnhandled();
189 }
190}
VOID ReleaseAddressZero()
Definition: devhcd.cpp:478

Referenced by OnCancelingClaimForHub(), and OnClaimingAddressZero().

◆ EnumParkForHub()

SM_RESULT DeviceMachine::EnumParkForHub ( )
private

Definition at line 261 of file devsm_enum.cpp.

262{
265}
static const State ParkedForHubInEnum
Definition: devsm.h:337

Referenced by EnumPortOffForHub(), EnumPortOffHoldingAddressZero(), EnumPortOffWithDevice(), and OnParkedForHubInEnum().

◆ EnumPdChargingSet()

SM_RESULT DeviceMachine::EnumPdChargingSet ( _In_ DsmEvent  Event)
private

Definition at line 603 of file devsm_enum.cpp.

605{
606 switch (Event)
607 {
608 case DsmEvent::TransferDone:
609 return EndWith(DsmEvent::Succeeded);
610
611 case DsmEvent::TransferFailed:
613
614 default:
615 return SmUnhandled();
616 }
617}
SM_RESULT EnumRetryOrFail()
Definition: devsm_enum.cpp:268
SM_RESULT DisableAndDelete(_In_ DSM_THEN After)
Definition: devsm.cpp:315

Referenced by OnUpdatingDevice().

◆ EnumPortOffAfterDelete()

SM_RESULT DeviceMachine::EnumPortOffAfterDelete ( )
private

Definition at line 491 of file devsm_enum.cpp.

492{
495}
SM_RESULT EnumPortOffHoldingAddressZero(_In_ DsmEvent Event)
Definition: devsm_enum.cpp:222

Referenced by OnAddressingInEnum().

◆ EnumPortOffAfterFailure()

SM_RESULT DeviceMachine::EnumPortOffAfterFailure ( _In_ DsmEvent  Event)
private

Definition at line 344 of file devsm_enum.cpp.

346{
347 switch (Event)
348 {
349 case DsmEvent::PortDetached:
350 return EndWith(DsmEvent::PortDetached);
351
352 case DsmEvent::HubStopping:
353 case DsmEvent::HubSuspending:
355
356 case DsmEvent::PortFault:
357 case DsmEvent::PortDisableDone:
358 return EndWith(DsmEvent::Failed);
359
360 default:
361 return SmUnhandled();
362 }
363}
SM_RESULT EnumPortOffForHub(_In_ DsmEvent Event)
Definition: devsm_enum.cpp:243

Referenced by EnumRetryOrFail().

◆ EnumPortOffAfterFailureHoldingAddressZero()

SM_RESULT DeviceMachine::EnumPortOffAfterFailureHoldingAddressZero ( _In_ DsmEvent  Event)
private

Definition at line 436 of file devsm_enum.cpp.

438{
439 switch (Event)
440 {
441 case DsmEvent::HubStopping:
442 case DsmEvent::HubSuspending:
444
445 case DsmEvent::PortDetached:
447 return EndWith(DsmEvent::PortDetached);
448
449 case DsmEvent::PortFault:
450 case DsmEvent::PortDisableDone:
452 return EndWith(DsmEvent::Failed);
453
454 default:
455 return SmUnhandled();
456 }
457}

Referenced by EnumRetryOrFailHoldingAddressZero().

◆ EnumPortOffForHub()

SM_RESULT DeviceMachine::EnumPortOffForHub ( _In_ DsmEvent  Event)
private

Definition at line 243 of file devsm_enum.cpp.

245{
246 switch (Event)
247 {
248 case DsmEvent::PortDetached:
249 return EndWith(DsmEvent::PortDetached);
250
251 case DsmEvent::PortDisableDone:
252 case DsmEvent::PortFault:
253 return EnumParkForHub();
254
255 default:
256 return SmUnhandled();
257 }
258}
SM_RESULT EnumParkForHub()
Definition: devsm_enum.cpp:261

Referenced by EnumPortOffAfterFailure(), EnumStopRetryForHub(), EnumTimerFlushedForHub(), and OnCancelingClaimForHub().

◆ EnumPortOffHoldingAddressZero()

SM_RESULT DeviceMachine::EnumPortOffHoldingAddressZero ( _In_ DsmEvent  Event)
private

Definition at line 222 of file devsm_enum.cpp.

224{
225 switch (Event)
226 {
227 case DsmEvent::PortDetached:
229 return EndWith(DsmEvent::PortDetached);
230
231 case DsmEvent::PortDisableDone:
232 case DsmEvent::PortFault:
234 return EnumParkForHub();
235
236 default:
237 return SmUnhandled();
238 }
239}

Referenced by EnumPortOffAfterDelete(), EnumPortOffAfterFailureHoldingAddressZero(), OnAtAddressZero(), and OnCancelingClaimForHub().

◆ EnumPortOffWithDevice()

SM_RESULT DeviceMachine::EnumPortOffWithDevice ( _In_ DsmEvent  Event)
private

Definition at line 531 of file devsm_enum.cpp.

533{
534 switch (Event)
535 {
536 case DsmEvent::PortDetached:
538
539 case DsmEvent::PortFault:
540 case DsmEvent::PortDisableDone:
542
543 default:
544 return SmUnhandled();
545 }
546}
SM_RESULT EndDetached()
Definition: devsm.cpp:415

Referenced by OnReadingDescriptors().

◆ EnumReleaseAndEndDetached()

SM_RESULT DeviceMachine::EnumReleaseAndEndDetached ( )
private

Definition at line 498 of file devsm_enum.cpp.

499{
501 return EndWith(DsmEvent::PortDetached);
502}

Referenced by OnAddressingInEnum().

◆ EnumRetriesUsedUp()

BOOLEAN DeviceMachine::EnumRetriesUsedUp ( )
private

Definition at line 74 of file devmisc.cpp.

75{
76 m_Device->SetState(ChildState::FailedAnEnumeration);
77
79 {
80 DPRINT1("Device %p failed %lu enumeration attempts\n", m_Device, m_Device->m_EnumRetryCount);
81 return TRUE;
82 }
83
84 DPRINT1("Device %p enumeration retry %lu\n", m_Device, m_Device->m_EnumRetryCount);
85 m_Device->ClearState(ChildState::ConfigurationValid);
88 return FALSE;
89}
ULONG m_EnumRetryCount
Definition: hubchild.h:348
ULONG m_EnumMessageId
Definition: hubchild.h:355
#define DEVICE_ENUM_RETRY_LIMIT
Definition: devmisc.cpp:23
static VOID NTAPI HubForgetMsOs20(_Inout_ HubChild *Child)
Definition: devmisc.cpp:39

Referenced by EnumRetryOrFail(), EnumRetryOrFailHoldingAddressZero(), ReenumEnabled(), ReenumRetryOrFail(), and ReenumRetryOrFailHoldingAddressZero().

◆ EnumRetryDelayEnded()

SM_RESULT DeviceMachine::EnumRetryDelayEnded ( _In_ DsmEvent  Event)
private

Definition at line 277 of file devsm_enum.cpp.

279{
280 switch (Event)
281 {
282 case DsmEvent::TimerFired:
284
285 case DsmEvent::PortDetached:
286 return EnumStopRetryOnDetach();
287
288 case DsmEvent::HubSuspending:
289 case DsmEvent::HubStopping:
290 return EnumStopRetryForHub();
291
292 default:
293 return SmUnhandled();
294 }
295}
SM_RESULT EnumStopRetryOnDetach()
Definition: devsm_enum.cpp:298
SM_RESULT EnumStopRetryForHub()
Definition: devsm_enum.cpp:317

Referenced by EnumRetryOrFail().

◆ EnumRetryDelayEndedHoldingAddressZero()

SM_RESULT DeviceMachine::EnumRetryDelayEndedHoldingAddressZero ( _In_ DsmEvent  Event)
private

Definition at line 413 of file devsm_enum.cpp.

415{
416 switch (Event)
417 {
418 case DsmEvent::TimerFired:
420
421 case DsmEvent::PortDetached:
423 return EnumStopRetryOnDetach();
424
425 case DsmEvent::HubSuspending:
426 case DsmEvent::HubStopping:
428 return EnumStopRetryForHub();
429
430 default:
431 return SmUnhandled();
432 }
433}
static const State AtAddressZero
Definition: devsm.h:332

Referenced by EnumRetryOrFailHoldingAddressZero().

◆ EnumRetryOrFail()

SM_RESULT DeviceMachine::EnumRetryOrFail ( )
private

Definition at line 268 of file devsm_enum.cpp.

269{
270 if (!EnumRetriesUsedUp())
272
274}
SM_RESULT EnumRetryDelayEnded(_In_ DsmEvent Event)
Definition: devsm_enum.cpp:277
BOOLEAN EnumRetriesUsedUp()
Definition: devmisc.cpp:74
SM_RESULT EnumPortOffAfterFailure(_In_ DsmEvent Event)
Definition: devsm_enum.cpp:344

Referenced by EnumPdChargingSet(), OnClaimingAddressZero(), OnLinkPowerInEnum(), OnReadingDescriptors(), and OnUpdatingDevice().

◆ EnumRetryOrFailHoldingAddressZero()

SM_RESULT DeviceMachine::EnumRetryOrFailHoldingAddressZero ( )
private

Definition at line 404 of file devsm_enum.cpp.

405{
406 if (!EnumRetriesUsedUp())
408
410}
SM_RESULT EnumPortOffAfterFailureHoldingAddressZero(_In_ DsmEvent Event)
Definition: devsm_enum.cpp:436
SM_RESULT EnumRetryDelayEndedHoldingAddressZero(_In_ DsmEvent Event)
Definition: devsm_enum.cpp:413

Referenced by OnAddressingInEnum(), and OnAtAddressZero().

◆ EnumStopRetryForHub()

SM_RESULT DeviceMachine::EnumStopRetryForHub ( )
private

Definition at line 317 of file devsm_enum.cpp.

318{
319 if (StopTimer())
321
323}
SM_RESULT EnumTimerFlushedForHub(_In_ DsmEvent Event)
Definition: devsm_enum.cpp:326

Referenced by EnumRetryDelayEnded(), and EnumRetryDelayEndedHoldingAddressZero().

◆ EnumStopRetryOnDetach()

SM_RESULT DeviceMachine::EnumStopRetryOnDetach ( )
private

Definition at line 298 of file devsm_enum.cpp.

299{
300 if (StopTimer())
301 return EndWith(DsmEvent::PortDetached);
302
304}
SM_RESULT EnumTimerFlushedOnDetach(_In_ DsmEvent Event)
Definition: devsm_enum.cpp:307

Referenced by EnumRetryDelayEnded(), and EnumRetryDelayEndedHoldingAddressZero().

◆ EnumTimerFlushedForHub()

SM_RESULT DeviceMachine::EnumTimerFlushedForHub ( _In_ DsmEvent  Event)
private

Definition at line 326 of file devsm_enum.cpp.

328{
329 switch (Event)
330 {
331 case DsmEvent::TimerFired:
333
334 case DsmEvent::PortDetached:
336
337 default:
338 return SmUnhandled();
339 }
340}

Referenced by EnumStopRetryForHub().

◆ EnumTimerFlushedOnDetach()

SM_RESULT DeviceMachine::EnumTimerFlushedOnDetach ( _In_ DsmEvent  Event)
private

Definition at line 307 of file devsm_enum.cpp.

309{
310 if (Event != DsmEvent::TimerFired)
311 return SmUnhandled();
312
313 return EndWith(DsmEvent::PortDetached);
314}

Referenced by EnumStopRetryOnDetach(), and EnumTimerFlushedForHub().

◆ ExitLatencyMayDrop()

BOOLEAN DeviceMachine::ExitLatencyMayDrop ( )
private

Definition at line 540 of file devlpm.cpp.

541{
543}
USHORT m_TargetExitLatency
Definition: hubchild.h:455
USHORT m_EffectiveExitLatency
Definition: hubchild.h:454

Referenced by LpmLower().

◆ ExitLatencyMustRise()

BOOLEAN DeviceMachine::ExitLatencyMustRise ( )
private

Definition at line 534 of file devlpm.cpp.

Referenced by LpmCompute().

◆ ExtendedConfigHeaderValid()

BOOLEAN DeviceMachine::ExtendedConfigHeaderValid ( )
private

Definition at line 881 of file devdesc.cpp.

882{
885
888 (const HubMsOsExtConfigHeader*)Child->m_ScratchBuffer,
890 {
891 Child->m_EnumMessageId = HUB_ENUM_BAD_MSOS_EXT_CONFIG;
892 return FALSE;
893 }
894
895 return TRUE;
896}
BOOLEAN NTAPI HubDescCheckMsOsExtConfigHeader(_In_ const HubDescContext *Context, _In_reads_bytes_(Length) const HubMsOsExtConfigHeader *Descriptor, _In_ ULONG Length)
Definition: desccheck.cpp:2563
#define HUB_ENUM_BAD_MSOS_EXT_CONFIG
Definition: hubid.h:29

Referenced by MsOsExtendedHeaderRead().

◆ ExtendedConfigValid()

BOOLEAN DeviceMachine::ExtendedConfigValid ( )
private

Definition at line 900 of file devdesc.cpp.

901{
903 const HubMsOsExtConfigHeader* Header = (const HubMsOsExtConfigHeader*)Child->m_ScratchBuffer;
906
907 if (Child->m_MsOsExtConfig == NULL)
908 {
909 DPRINT1("Device %p has no extended configuration buffer\n", Child);
910 return FALSE;
911 }
912
914 if (Bytes == Header->dwLength && HubDescCheckMsOsExtConfig(&Context, Child->m_MsOsExtConfig, Bytes))
915 return TRUE;
916
917 if (Bytes != Header->dwLength)
918 DPRINT1("Device %p extended configuration read %lu of %lu bytes\n", Child, Bytes, Header->dwLength);
919
920 ExFreePoolWithTag(Child->m_MsOsExtConfig, HUB_TAG_DEVICE);
921 Child->m_MsOsExtConfig = NULL;
922 return FALSE;
923}
BOOLEAN NTAPI HubDescCheckMsOsExtConfig(_In_ const HubDescContext *Context, _In_reads_bytes_(sizeof(HubMsOsExtConfig)) const HubMsOsExtConfig *Descriptor, _In_ ULONG Length)
Definition: desccheck.cpp:2606

Referenced by MsOsExtendedRead().

◆ ExtPropertiesHeaderValid()

BOOLEAN DeviceMachine::ExtPropertiesHeaderValid ( )
private

Definition at line 386 of file hubmsos.cpp.

387{
389
390 if (m_Device->m_Control.Urb.TransferBufferLength != sizeof(*Header))
391 {
392 DPRINT1("Device %p extended properties header is %lu bytes\n",
393 m_Device, m_Device->m_Control.Urb.TransferBufferLength);
394 return FALSE;
395 }
396
397 if (Header->dwLength >= sizeof(*Header) &&
398 Header->bcdVersion == MSOS_EXT_PROPERTIES_VERSION &&
400 Header->wCount != 0)
401 {
402 return TRUE;
403 }
404
405 DPRINT1("Device %p extended properties header is invalid\n", m_Device);
406 return FALSE;
407}
#define MSOS_EXT_PROPERTIES_INDEX
Definition: hubmsos.cpp:18
#define MSOS_EXT_PROPERTIES_VERSION
Definition: hubmsos.cpp:19
struct _URB_CONTROL_TRANSFER_EX Urb
Definition: hubreq.h:21

Referenced by MsOsExtHeaderRead().

◆ ExtPropertiesValid()

BOOLEAN DeviceMachine::ExtPropertiesValid ( )
private

Definition at line 470 of file hubmsos.cpp.

471{
474 const UCHAR* Buffer = (const UCHAR*)Child->m_ExtProperties;
475 ULONG Total = Header->dwLength;
477 ULONG Size;
478 ULONG Found = 0;
479
480 if (Buffer == NULL || Child->m_Control.Urb.TransferBufferLength != Total)
481 {
482 DPRINT1("Device %p extended properties: %lu of %lu bytes read\n",
483 Child, Child->m_Control.Urb.TransferBufferLength, Total);
484 return FALSE;
485 }
486
487 if (!RtlEqualMemory(Buffer, Header, sizeof(*Header)))
488 {
489 DPRINT1("Device %p extended properties header changed between reads\n", Child);
490 return FALSE;
491 }
492
494 {
495 DPRINT1("Device %p extended properties too large (%lu bytes)\n", Child, Total);
496 return FALSE;
497 }
498
499 for (Offset = sizeof(*Header); Offset < Total; Offset += Size)
500 {
502 {
503 DPRINT1("Device %p custom property at offset %lu is invalid\n", Child, Offset);
504 return FALSE;
505 }
506
507 if (++Found == Header->wCount)
508 break;
509 }
510
511 if (Found != Header->wCount)
512 {
513 DPRINT1("Device %p has %lu custom properties, header says %u\n", Child, Found, Header->wCount);
514 return FALSE;
515 }
516
517 return TRUE;
518}
return Found
Definition: dirsup.c:1270
Definition: bufpool.h:45
#define MSOS_EXT_PROPERTIES_MAX
Definition: hubmsos.cpp:20
static BOOLEAN NTAPI HubCustomPropertyValid(_In_reads_bytes_(Total) const UCHAR *Buffer, _In_ ULONG Total, _In_ ULONG Offset, _Out_ PULONG Size)
Definition: hubmsos.cpp:433
ULONG Total
Definition: hubwmi.cpp:548
#define RtlEqualMemory(dst, src, len)
Definition: kdvm.h:18
if(dx< 0)
Definition: linetemp.h:194
_In_ ULONG _In_ ULONG Offset
Definition: ntddpcm.h:101

Referenced by MsOsExtRead().

◆ ExtPropertiesWanted()

BOOLEAN DeviceMachine::ExtPropertiesWanted ( )
private

Definition at line 303 of file hubmsos.cpp.

304{
307 BOOLEAN Installed;
308
309 PAGED_CODE();
310
311 HubRefreshExtPropertiesInstalled(Child);
312 Installed = Child->HasProperty(ChildProperty::ExtPropertiesInstalled);
313
314 if (Child->HasProperty(ChildProperty::IsComposite) || HubHasMsOs20SetInfo(Child))
315 return FALSE;
316
317 if (Child->HasHack(ChildHack::AlwaysQueryMsOs) && !Installed)
318 return TRUE;
319
320 if ((BcdUsb >= 0x0100 && BcdUsb <= 0x01FF) ||
321 Installed ||
322 Child->HasProperty(ChildProperty::MsOsNotSupported))
323 {
324 return FALSE;
325 }
326
327 return TRUE;
328}

Referenced by MsOsInstallStart().

◆ FailClientRequest()

VOID DeviceMachine::FailClientRequest ( )
private

◆ FailedPortDisabledAgain()

SM_RESULT DeviceMachine::FailedPortDisabledAgain ( _In_ DsmEvent  Event)
private

Definition at line 252 of file devsm_report.cpp.

254{
255 switch (Event)
256 {
257 case DsmEvent::PortDisableDone:
258 case DsmEvent::PortFault:
259 return SmTransition(&FailedDevice);
260
261 case DsmEvent::PortDetached:
263 return SmUnhandled();
264
266
267 default:
268 return SmUnhandled();
269 }
270}
static const State FailedDevice
Definition: devsm.h:695
BOOLEAN m_FailedPoweredUp
Definition: devsm.h:1839
static const State FailedDeviceGone
Definition: devsm.h:696

Referenced by OnFailedDevice().

◆ FailedPortOffForHub()

SM_RESULT DeviceMachine::FailedPortOffForHub ( _In_ DsmEvent  Event)
private

Definition at line 348 of file devsm_report.cpp.

350{
351 switch (Event)
352 {
353 case DsmEvent::PortDetached:
355 return EndWith(DsmEvent::PortDetached);
356
357 case DsmEvent::PortDisableDone:
358 case DsmEvent::PortFault:
360
361 default:
362 return SmUnhandled();
363 }
364}
static const State FailedHubSuspended
Definition: devsm.h:698

Referenced by OnFailedDeviceEvents().

◆ FailHubDescriptorRequest()

VOID DeviceMachine::FailHubDescriptorRequest ( )
private

Definition at line 383 of file hubioctl.cpp.

384{
386 WDFREQUEST Request = Child->m_FdoRequest;
387
388 Child->m_FdoRequest = NULL;
389 DPRINT1("Device %p descriptor request %p failed by the device machine\n", Child, Request);
391}
WDFREQUEST m_FdoRequest
Definition: hubchild.h:366
VOID NTAPI HubCompleteFdoDescriptorRequest(_In_ HubChild *Child, _In_ WDFREQUEST Request, _In_ NTSTATUS Status, _In_ ULONG Size)
Definition: hubioctl.cpp:372

Referenced by OnBootDeviceAwaitingReset(), OnBootDeviceDetached(), OnBootDeviceEvents(), OnBootDeviceSuspended(), OnDetachedEvents(), OnFailedDeviceEvents(), OnPortOffEvents(), OnPortOnEvents(), OnStopped(), OnStoppedEnumeratedHubSuspended(), OnStoppedHubSuspended(), OnStoppedReady(), OnSuspendedConfigured(), and OnSuspendedUnconfigured().

◆ FailIoAndDisablePort()

VOID DeviceMachine::FailIoAndDisablePort ( )
private

Definition at line 182 of file devsm_reenum.cpp.

183{
184 SetFailIo();
186}
VOID SetFailIo()
Definition: childpdo.cpp:4084

Referenced by ReenumEnabled().

◆ FailIoAndPurge()

VOID DeviceMachine::FailIoAndPurge ( )
private

Definition at line 364 of file devsm_reenum.cpp.

365{
366 SetFailIo();
368}
VOID PurgeDeviceIo()
Definition: devhcd.cpp:908

Referenced by ReenumRetryOrFail(), and ReenumRetryOrFailHoldingAddressZero().

◆ FindClientPipe()

BOOLEAN DeviceMachine::FindClientPipe ( )
private

Definition at line 3857 of file childpdo.cpp.

3858{
3860 HubConfiguration* Config = Child->m_CurrentConfig;
3861 ULONG Code;
3862 PURB Urb = HubClientUrb(Child->m_ClientRequest, &Code);
3863 HubPipe* Pipe;
3864
3865 Pipe = HubFindPipeByHandle(Config, Urb->UrbPipeRequest.PipeHandle);
3866 if (Pipe != NULL)
3867 {
3868 Child->m_TargetPipe = Pipe;
3869 return TRUE;
3870 }
3871
3872 DPRINT1("Port %u client pipe handle %p not found\n", Child->m_Port->Number(), Urb->UrbPipeRequest.PipeHandle);
3873 Child->m_LastUsbdStatus = USBD_STATUS_INVALID_PIPE_HANDLE;
3874 Child->m_LastNtStatus = STATUS_INVALID_PARAMETER;
3875 return FALSE;
3876}
HubPipe *NTAPI HubFindPipeByHandle(_In_opt_ HubConfiguration *Config, _In_ USBD_PIPE_HANDLE Handle)
Definition: devreq.cpp:858

Referenced by OnConfigured().

◆ FinishWaitWake()

VOID DeviceMachine::FinishWaitWake ( )
private

Definition at line 4136 of file childpdo.cpp.

4137{
4139}
static VOID NTAPI HubPdoIndicateWake(_In_ HubPdo *Pdo)
Definition: childpdo.cpp:1598

Referenced by EnterAwaitingPowerUpAfterWake(), OnDeviceSuspended(), SuspendedIoStarted(), SuspendPortArmed(), and SuspendPortArmFailed().

◆ FirstDescriptorValid()

BOOLEAN DeviceMachine::FirstDescriptorValid ( )
private

Definition at line 67 of file devdesc.cpp.

68{
73
75 {
76 DPRINT1("Device %p first device descriptor read returned %lu bytes\n", Child, Bytes);
78 return FALSE;
79 }
80
83 {
84 Child->m_EnumMessageId = HUB_ENUM_BAD_DEVICE_DESCRIPTOR;
85 return FALSE;
86 }
87
88 Child->m_MaxPacketSize0 = Descriptor->bMaxPacketSize0;
89 RtlCopyMemory(&Child->m_DeviceDescriptor, Descriptor, DESC_FIRST_READ_KEEP);
90
91 if (Descriptor->idVendor == DESC_SLOW_ENUM_VENDOR && Descriptor->idProduct == DESC_SLOW_ENUM_PRODUCT)
92 Child->m_Hacks |= (ULONG)ChildHack::AlwaysSecondReset;
93
94 return TRUE;
95}
#define DESC_SLOW_ENUM_PRODUCT
Definition: devdesc.cpp:19
#define DESC_FIRST_READ_KEEP
Definition: devdesc.cpp:15
#define DESC_SLOW_ENUM_VENDOR
Definition: devdesc.cpp:18

Referenced by Again20FirstDescriptorRead(), and Zero20FirstDescriptorRead().

◆ ForceResetOnNextStart()

VOID DeviceMachine::ForceResetOnNextStart ( )
private

Definition at line 4090 of file childpdo.cpp.

4091{
4092 m_Device->SetState(ChildState::HotResetOnEnumeration);
4093}

Referenced by EnterReenumerating(), OnConfigured(), OnStoppedAddressed(), OnUnconfiguredOn(), StopDecision(), and SuspendedNeedsReset().

◆ ForgetChild()

VOID DeviceMachine::ForgetChild ( )
private

Definition at line 467 of file devmisc.cpp.

468{
471}
VOID NTAPI USBD_RemoveDeviceFromGlobalList(_In_ PVOID DeviceContext)
Definition: hubsup.c:286

Referenced by CleanupDeleteAll(), EnterDetachedMissing(), OnAwaitingRemove(), OnDetachedReported(), RemovalDeleteForget(), RemovalDeleteForgetPortOn(), and ReportCreatePdo().

◆ ForwardStreams()

◆ ForwardToController()

VOID DeviceMachine::ForwardToController ( )
private

Definition at line 1369 of file devhcd.cpp.

1370{
1372}
VOID NTAPI HubChildForwardToController(_In_ HubChild *Child)
Definition: devhcd.cpp:1352

Referenced by EnterForwardingStreams().

◆ FreeExtPropertiesBuffer()

VOID DeviceMachine::FreeExtPropertiesBuffer ( )
private

Definition at line 559 of file hubmsos.cpp.

Referenced by MsOsFreeAndDone().

◆ GetDescriptorForHub()

VOID DeviceMachine::GetDescriptorForHub ( )
private

Definition at line 1108 of file devreq.cpp.

1109{
1111 WDFREQUEST Request = Child->m_FdoRequest;
1112 HubQueueContext* Queue = HubGetQueueContext(WdfRequestGetIoQueue(Request));
1114
1115 RtlZeroMemory(&Stack, sizeof(Stack));
1116 Stack.MajorFunction = IRP_MJ_INTERNAL_DEVICE_CONTROL;
1117 Stack.Parameters.DeviceIoControl.IoControlCode = IOCTL_INTERNAL_USB_SUBMIT_URB;
1118 Stack.Parameters.Others.Argument1 = &Queue->Urb;
1119 WdfRequestWdmFormatUsingStackLocation(Request, &Stack);
1120
1121 WdfRequestSetCompletionRoutine(Request, HubFdoDescriptorComplete, Child);
1122
1123 if (WdfRequestSend(Request, Child->m_Hub->m_RootHubTarget, WDF_NO_SEND_OPTIONS))
1124 return;
1125
1126 DPRINT1("Device %p descriptor read for the hub not sent 0x%lx\n", Child, WdfRequestGetStatus(Request));
1127 Child->Post(DsmEvent::TransferFailed);
1129}
static EVT_WDF_REQUEST_COMPLETION_ROUTINE HubFdoDescriptorComplete
Definition: devreq.cpp:48
#define IOCTL_INTERNAL_USB_SUBMIT_URB
Definition: usbioctl.h:32
_Must_inspect_result_ _In_ WDFDEVICE _In_ PIRP _In_ WDFQUEUE Queue
Definition: wdfdevice.h:2231
_Must_inspect_result_ FORCEINLINE BOOLEAN WdfRequestSend(_In_ WDFREQUEST Request, _In_ WDFIOTARGET Target, _In_opt_ PWDF_REQUEST_SEND_OPTIONS Options)
Definition: wdfrequest.h:677
#define WDF_NO_SEND_OPTIONS
Definition: wdftypes.h:109
#define IRP_MJ_INTERNAL_DEVICE_CONTROL

Referenced by OnConfigured(), OnStoppedAddressed(), and OnUnconfiguredOn().

◆ GoConfiguredOn()

SM_RESULT DeviceMachine::GoConfiguredOn ( )
private

Definition at line 91 of file devsm_config.cpp.

92{
94}

◆ GoStoppedEnabled()

SM_RESULT DeviceMachine::GoStoppedEnabled ( )
private

Definition at line 480 of file devsm_stopped.cpp.

481{
482 return SmTransition(&StoppedReady);
483}
static const State StoppedReady
Definition: devsm.h:835

Referenced by OnStoppedReady().

◆ GoStoppedEnumerated()

SM_RESULT DeviceMachine::GoStoppedEnumerated ( )
private

Definition at line 84 of file devsm_stopped.cpp.

85{
87}

Referenced by OnStoppedAddressed().

◆ GoUnconfiguredOn()

SM_RESULT DeviceMachine::GoUnconfiguredOn ( )
private

Definition at line 63 of file devsm_power.cpp.

64{
66}

Referenced by OnUnconfiguredOn().

◆ HasBillboard()

BOOLEAN DeviceMachine::HasBillboard ( )
private

Definition at line 641 of file devdesc.cpp.

642{
643 return m_Device->m_Billboard != NULL;
644}

Referenced by BosBillboard().

◆ HubDescriptorDone()

SM_RESULT DeviceMachine::HubDescriptorDone ( _In_ DsmEvent  Event)
private

Definition at line 273 of file devsm_stopped.cpp.

275{
276 if ((Event != DsmEvent::TransferDone) && (Event != DsmEvent::TransferFailed))
277 return SmUnhandled();
278
279 return (this->*m_Resume)();
280}

Referenced by OnConfigured(), OnStoppedAddressed(), and OnUnconfiguredOn().

◆ HubEndResumedOrReenumerate()

SM_RESULT DeviceMachine::HubEndResumedOrReenumerate ( )
private

Definition at line 161 of file devsm_hub.cpp.

162{
164 return EndWith(DsmEvent::NeedsReenumeration);
165
166 return EndWith(DsmEvent::ResumedWithHub);
167}
BOOLEAN ResetOnResumeFromSx()
Definition: devmisc.cpp:345

Referenced by HubPortSynced(), and HubResumeWithPortEnabled().

◆ HubPortOffForStop()

SM_RESULT DeviceMachine::HubPortOffForStop ( _In_ DsmEvent  Event)
private

Definition at line 303 of file devsm_hub.cpp.

305{
306 switch (Event)
307 {
308 case DsmEvent::PortDetached:
309 return EndWith(DsmEvent::PortDetached);
310
311 case DsmEvent::PortFault:
312 case DsmEvent::PortDisableDone:
313 return EndWith(DsmEvent::HubStoppedHoldingReference);
314
315 default:
316 return SmUnhandled();
317 }
318}

Referenced by HubPortSyncedForStop(), and HubResumeEndedForStop().

◆ HubPortResumedForReset()

SM_RESULT DeviceMachine::HubPortResumedForReset ( _In_ DsmEvent  Event)
private

Definition at line 322 of file devsm_hub.cpp.

324{
325 switch (Event)
326 {
327 case DsmEvent::PortResumeDone:
328 case DsmEvent::PortNowEnabledOnReconnect:
329 case DsmEvent::PortResumeTimeout:
330 case DsmEvent::PortFault:
331 case DsmEvent::PortNowDisabled:
332 return EndWith(DsmEvent::NeedsReenumeration);
333
334 case DsmEvent::PortDetached:
335 return EndWith(DsmEvent::PortDetached);
336
337 case DsmEvent::HubStopping:
339
340 case DsmEvent::HubSuspending:
342
343 default:
344 return SmUnhandled();
345 }
346}
SM_RESULT HubResumeEndedForSuspend(_In_ DsmEvent Event)
Definition: devsm_hub.cpp:372
SM_RESULT HubResumeEndedForStop(_In_ DsmEvent Event)
Definition: devsm_hub.cpp:349

Referenced by HubPortSyncedForReset(), and HubResumeWithPortSuspended().

◆ HubPortSuspendedAgain()

SM_RESULT DeviceMachine::HubPortSuspendedAgain ( _In_ DsmEvent  Event)
private

Definition at line 258 of file devsm_hub.cpp.

260{
261 switch (Event)
262 {
263 case DsmEvent::PortSuspendDone:
265 return SmTransition(&HubSuspended);
266
267 case DsmEvent::PortDetached:
268 return EndWith(DsmEvent::PortDetached);
269
270 case DsmEvent::PortFault:
273
274 default:
275 return SmUnhandled();
276 }
277}
static const State HubSuspendedPortOff
Definition: devsm.h:423

Referenced by HubPortSyncedForSuspend(), and HubResumeEndedForSuspend().

◆ HubPortSynced()

SM_RESULT DeviceMachine::HubPortSynced ( _In_ DsmEvent  Event)
private

Definition at line 171 of file devsm_hub.cpp.

173{
174 switch (Event)
175 {
176 case DsmEvent::PortNowDisabled:
177 case DsmEvent::PortNowEnabledOnReconnect:
178 return EndWith(DsmEvent::NeedsReenumeration);
179
180 case DsmEvent::PortNowEnabled:
182
183 case DsmEvent::PortNowSuspended:
184 return EndWith(DsmEvent::SuspendedAfterHubResume);
185
186 case DsmEvent::PortDetached:
187 return EndWith(DsmEvent::PortDetached);
188
189 case DsmEvent::HubSuspending:
191
192 case DsmEvent::HubStopping:
194
195 default:
196 return SmUnhandled();
197 }
198}
SM_RESULT HubPortSyncedForStop(_In_ DsmEvent Event)
Definition: devsm_hub.cpp:281
SM_RESULT HubEndResumedOrReenumerate()
Definition: devsm_hub.cpp:161
SM_RESULT HubPortSyncedForSuspend(_In_ DsmEvent Event)
Definition: devsm_hub.cpp:231

Referenced by OnHubSuspended().

◆ HubPortSyncedForReset()

SM_RESULT DeviceMachine::HubPortSyncedForReset ( _In_ DsmEvent  Event)
private

Definition at line 202 of file devsm_hub.cpp.

204{
205 switch (Event)
206 {
207 case DsmEvent::PortNowEnabled:
208 case DsmEvent::PortNowDisabled:
209 case DsmEvent::PortNowEnabledOnReconnect:
210 return EndWith(DsmEvent::NeedsReenumeration);
211
212 case DsmEvent::PortNowSuspended:
214
215 case DsmEvent::HubSuspending:
217
218 case DsmEvent::HubStopping:
220
221 case DsmEvent::PortDetached:
222 return EndWith(DsmEvent::PortDetached);
223
224 default:
225 return SmUnhandled();
226 }
227}
SM_RESULT HubPortResumedForReset(_In_ DsmEvent Event)
Definition: devsm_hub.cpp:322
static const State ResumingPort
Definition: devsm.h:236

Referenced by OnHubSuspended(), and OnHubSuspendedPortOff().

◆ HubPortSyncedForStop()

SM_RESULT DeviceMachine::HubPortSyncedForStop ( _In_ DsmEvent  Event)
private

Definition at line 281 of file devsm_hub.cpp.

283{
284 switch (Event)
285 {
286 case DsmEvent::PortNowEnabled:
287 case DsmEvent::PortNowEnabledOnReconnect:
289
290 case DsmEvent::PortDetached:
291 return EndWith(DsmEvent::PortDetached);
292
293 case DsmEvent::PortNowSuspended:
294 case DsmEvent::PortNowDisabled:
295 return EndWith(DsmEvent::HubStoppedHoldingReference);
296
297 default:
298 return SmUnhandled();
299 }
300}
SM_RESULT HubPortOffForStop(_In_ DsmEvent Event)
Definition: devsm_hub.cpp:303

Referenced by HubPortSynced(), and HubPortSyncedForReset().

◆ HubPortSyncedForSuspend()

SM_RESULT DeviceMachine::HubPortSyncedForSuspend ( _In_ DsmEvent  Event)
private

Definition at line 231 of file devsm_hub.cpp.

233{
234 switch (Event)
235 {
236 case DsmEvent::PortNowSuspended:
238 return SmTransition(&HubSuspended);
239
240 case DsmEvent::PortNowDisabled:
243
244 case DsmEvent::PortNowEnabled:
245 case DsmEvent::PortNowEnabledOnReconnect:
247
248 case DsmEvent::PortDetached:
250 return EndWith(DsmEvent::PortDetached);
251
252 default:
253 return SmUnhandled();
254 }
255}
SM_RESULT HubPortSuspendedAgain(_In_ DsmEvent Event)
Definition: devsm_hub.cpp:258

Referenced by HubPortSynced(), and HubPortSyncedForReset().

◆ HubResumeEndedForStop()

SM_RESULT DeviceMachine::HubResumeEndedForStop ( _In_ DsmEvent  Event)
private

Definition at line 349 of file devsm_hub.cpp.

351{
352 switch (Event)
353 {
354 case DsmEvent::PortResumeDone:
356
357 case DsmEvent::PortNowEnabledOnReconnect:
358 case DsmEvent::PortResumeTimeout:
359 case DsmEvent::PortNowDisabled:
360 case DsmEvent::PortFault:
361 return EndWith(DsmEvent::HubStoppedHoldingReference);
362
363 case DsmEvent::PortDetached:
364 return EndWith(DsmEvent::PortDetached);
365
366 default:
367 return SmUnhandled();
368 }
369}

Referenced by HubPortResumedForReset().

◆ HubResumeEndedForSuspend()

SM_RESULT DeviceMachine::HubResumeEndedForSuspend ( _In_ DsmEvent  Event)
private

Definition at line 372 of file devsm_hub.cpp.

374{
375 switch (Event)
376 {
377 case DsmEvent::PortResumeDone:
378 case DsmEvent::PortNowEnabledOnReconnect:
380
381 case DsmEvent::PortFault:
382 case DsmEvent::PortNowDisabled:
383 case DsmEvent::PortResumeTimeout:
386
387 case DsmEvent::PortDetached:
388 return EndWith(DsmEvent::PortDetached);
389
390 default:
391 return SmUnhandled();
392 }
393}

Referenced by HubPortResumedForReset().

◆ HubResumeForReenumeration()

SM_RESULT DeviceMachine::HubResumeForReenumeration ( _In_ DsmEvent  Event)
private

Definition at line 91 of file devsm_hub.cpp.

93{
94 switch (Event)
95 {
96 case DsmEvent::HubResumed:
97 case DsmEvent::HubResumedWithReset:
99 return EndWith(DsmEvent::NeedsReenumeration);
100
101 case DsmEvent::PortDetached:
102 return EndWith(DsmEvent::PortDetached);
103
104 default:
105 return SmUnhandled();
106 }
107}
VOID ReferenceDevicePower()
Definition: fanout.cpp:1038

Referenced by OnHubSuspended(), and OnHubSuspendedPortOff().

◆ HubResumeWithPortEnabled()

SM_RESULT DeviceMachine::HubResumeWithPortEnabled ( _In_ DsmEvent  Event)
private

Definition at line 139 of file devsm_hub.cpp.

141{
142 switch (Event)
143 {
144 case DsmEvent::HubResumed:
147
148 case DsmEvent::PortDetached:
149 return EndWith(DsmEvent::PortDetached);
150
151 case DsmEvent::HubResumedWithReset:
153 return EndWith(DsmEvent::NeedsReenumeration);
154
155 default:
156 return SmUnhandled();
157 }
158}

Referenced by HubResumeWithPortSuspended(), and OnHubSuspended().

◆ HubResumeWithPortSuspended()

SM_RESULT DeviceMachine::HubResumeWithPortSuspended ( _In_ DsmEvent  Event)
private

Definition at line 110 of file devsm_hub.cpp.

112{
113 switch (Event)
114 {
115 case DsmEvent::HubResumed:
119
120 return EndWith(DsmEvent::SuspendedAfterHubResume);
121
122 case DsmEvent::PortResumeDone:
125
126 case DsmEvent::PortDetached:
127 return EndWith(DsmEvent::PortDetached);
128
129 case DsmEvent::HubResumedWithReset:
132
133 default:
134 return SmUnhandled();
135 }
136}
SM_RESULT HubResumeWithPortEnabled(_In_ DsmEvent Event)
Definition: devsm_hub.cpp:139

Referenced by OnHubSuspended().

◆ IgnoreDescriptorError()

BOOLEAN DeviceMachine::IgnoreDescriptorError ( )
private

Definition at line 292 of file devdesc.cpp.

293{
294 return m_Device->m_DeviceDescriptor.bcdUSB <= 0x0200;
295}

Referenced by BosError(), MsOsError(), QualifierRead(), and StringError().

◆ IgnoreSerialNumber()

BOOLEAN DeviceMachine::IgnoreSerialNumber ( )
private

Definition at line 1131 of file hubid.cpp.

1132{
1133 return m_Device->HasHack(ChildHack::DisableSerialNumber);
1134}

Referenced by MsOsSerial().

◆ Initialize()

VOID DeviceMachine::Initialize ( _In_ HubChild *  Device)

Definition at line 96 of file devsm.cpp.

98{
100 m_Next = NULL;
101 m_Then = NULL;
102 m_Start = NULL;
105 m_Resume = NULL;
111 m_Result = DsmEvent::Succeeded;
112 m_HubEvent = DsmEvent::PortDetached;
124 m_D3Cold = FALSE;
126
128}
BOOLEAN m_DetachEndsReset
Definition: devsm.h:1848
DSM_NEXT m_AfterReenum
Definition: devsm.h:1849
static const State AwaitingAttach
Definition: devsm.h:327
DSM_NEXT m_AfterPurge
Definition: devsm.h:1855
HubChild * Device() const
Definition: devsm.h:166
BOOLEAN m_FromConfigured
Definition: devsm.h:1850
BOOLEAN m_Unregistered
Definition: devsm.h:1842
DSM_NEXT m_AfterConfigure
Definition: devsm.h:1852
BOOLEAN m_D3Cold
Definition: devsm.h:1854
VOID SmInitialize(_In_ const State *Initial)
Definition: smengine.h:349

◆ InitLinkStates()

VOID DeviceMachine::InitLinkStates ( )
private

◆ InstallMsOs20Values()

BOOLEAN DeviceMachine::InstallMsOs20Values ( )
private

Definition at line 170 of file hubmsos.cpp.

171{
173 const HubMsOs20SetHeader* Header = (const HubMsOs20SetHeader*)Child->m_MsOs20Set;
176 PUCHAR End;
178
179 PAGED_CODE();
180
181 if (Header == NULL)
182 {
183 DPRINT1("Device %p has no MS OS 2.0 descriptor set to install\n", Child);
184 return FALSE;
185 }
186
187 End = (PUCHAR)Header + Header->wTotalLength;
189
190 while (Current != NULL)
191 {
192 if (Current->wDescriptorType == MSOS20_TYPE_REGISTRY_PROPERTY)
193 {
194 /* The registry write reports its own failure */
195 Status = HubInstallMsOs20Property(Child, (const HubMsOs20Registry*)Current);
196 if (!NT_SUCCESS(Status))
197 break;
198 }
199
201 {
202 DPRINT1("Device %p MS OS 2.0 descriptor set walk failed\n", Child);
203 Result = FALSE;
204 break;
205 }
206 }
207
208 /* The model id goes out whatever the property walk did */
209 if ((Child->m_MsOs20.Flags & HUB_MSOS20_MODEL_ID) && Child->m_MsOs20.ModelId != NULL && Child->m_Pdo != NULL)
210 {
211 Status = IoSetDevicePropertyData(WdfDeviceWdmGetDeviceObject(Child->m_Pdo->m_Device),
212 &DEVPKEY_Device_ModelId,
214 0,
216 sizeof(Child->m_MsOs20.ModelId->ModelId),
217 Child->m_MsOs20.ModelId->ModelId);
218 if (!NT_SUCCESS(Status))
219 DPRINT1("Setting the model id failed 0x%lx\n", Status);
220 }
221
222 return Result;
223}
BOOLEAN NTAPI HubDescNextMsOs20(_In_ PUCHAR End, _Inout_ HubMsOs20Common **Current)
Definition: desccheck.cpp:2647
PUCHAR End
Definition: desccheck.cpp:2229
#define HUB_MSOS20_MODEL_ID
Definition: desccheck.h:496
#define DEVPROP_TYPE_GUID
Definition: devpropdef.h:42
#define MSOS20_TYPE_REGISTRY_PROPERTY
Definition: hubmsos.cpp:23
HubUxdSettings Current
#define LOCALE_NEUTRAL
unsigned char * PUCHAR
Definition: typedefs.h:53

Referenced by MsOsInstallStart().

◆ InterfaceCreateEndpoints()

SM_RESULT DeviceMachine::InterfaceCreateEndpoints ( )
private

Definition at line 726 of file devsm_config.cpp.

727{
728 if (!CreateEndpoints())
729 {
732 }
733
736}
SM_RESULT InterfaceProgrammed(_In_ DsmEvent Event)
SM_RESULT InterfaceNewDisabled(_In_ DsmEvent Event)

Referenced by InterfaceStart().

◆ InterfaceDeleteNewAndFail()

SM_RESULT DeviceMachine::InterfaceDeleteNewAndFail ( )
private

Definition at line 815 of file devsm_config.cpp.

816{
819}
SM_RESULT InterfaceDeleteOldAndFail()
VOID DeleteNewInterfaceEndpoints()
Definition: devhcd.cpp:1308

Referenced by InterfaceNewEndpointsDisabled(), and InterfaceOldRestored().

◆ InterfaceDeleteOld()

SM_RESULT DeviceMachine::InterfaceDeleteOld ( )
private

Definition at line 808 of file devsm_config.cpp.

809{
811 return EndWith(DsmEvent::Succeeded);
812}
VOID DeleteOldInterfaceEndpoints()
Definition: devhcd.cpp:1295

Referenced by InterfaceSet().

◆ InterfaceDeleteOldAndFail()

SM_RESULT DeviceMachine::InterfaceDeleteOldAndFail ( )
private

Definition at line 822 of file devsm_config.cpp.

823{
825 return EndWith(DsmEvent::Failed);
826}

Referenced by InterfaceDeleteNewAndFail(), and InterfaceStart().

◆ InterfaceNewDisabled()

SM_RESULT DeviceMachine::InterfaceNewDisabled ( _In_ DsmEvent  Event)
private

Definition at line 739 of file devsm_config.cpp.

741{
742 if (Event != DsmEvent::ControllerIoctlDone)
743 return SmUnhandled();
744
745 return InterfaceRestoreOld();
746}
SM_RESULT InterfaceRestoreOld()

Referenced by InterfaceCreateEndpoints().

◆ InterfaceNewEndpointsDisabled()

SM_RESULT DeviceMachine::InterfaceNewEndpointsDisabled ( _In_ DsmEvent  Event)
private

Definition at line 798 of file devsm_config.cpp.

800{
801 if (Event != DsmEvent::ControllerIoctlDone)
802 return SmUnhandled();
803
805}
SM_RESULT InterfaceDeleteNewAndFail()

Referenced by InterfaceSet().

◆ InterfaceOldRestored()

SM_RESULT DeviceMachine::InterfaceOldRestored ( _In_ DsmEvent  Event)
private

Definition at line 770 of file devsm_config.cpp.

772{
773 if ((Event != DsmEvent::TransferDone) && (Event != DsmEvent::TransferFailed))
774 return SmUnhandled();
775
777}

Referenced by InterfaceRestoreOld().

◆ InterfaceProgrammed()

SM_RESULT DeviceMachine::InterfaceProgrammed ( _In_ DsmEvent  Event)
private

Definition at line 749 of file devsm_config.cpp.

751{
752 if (Event == DsmEvent::Succeeded)
753 {
756 }
757
758 return InterfaceRestoreOld();
759}
SM_RESULT InterfaceSet(_In_ DsmEvent Event)

Referenced by InterfaceCreateEndpoints().

◆ InterfaceRestoreOld()

SM_RESULT DeviceMachine::InterfaceRestoreOld ( )
private

Definition at line 763 of file devsm_config.cpp.

764{
767}
SM_RESULT InterfaceOldRestored(_In_ DsmEvent Event)

Referenced by InterfaceNewDisabled(), and InterfaceProgrammed().

◆ InterfaceSet()

SM_RESULT DeviceMachine::InterfaceSet ( _In_ DsmEvent  Event)
private

Definition at line 780 of file devsm_config.cpp.

782{
783 switch (Event)
784 {
785 case DsmEvent::TransferDone:
787
788 case DsmEvent::TransferFailed:
791
792 default:
793 return SmUnhandled();
794 }
795}
SM_RESULT InterfaceDeleteOld()
VOID DisableNewInterfaceEndpoints()
Definition: devhcd.cpp:1061
SM_RESULT InterfaceNewEndpointsDisabled(_In_ DsmEvent Event)

Referenced by InterfaceProgrammed().

◆ InterfaceStart()

SM_RESULT DeviceMachine::InterfaceStart ( )
private

Definition at line 717 of file devsm_config.cpp.

Referenced by EnterSettingInterface().

◆ IsBootDevice()

BOOLEAN DeviceMachine::IsBootDevice ( )
private

Definition at line 4128 of file childpdo.cpp.

4129{
4130 return m_Device->m_Pdo != NULL && m_Device->m_Pdo->HasFlag(PdoFlag::InBootPath);
4131}
BOOLEAN HasFlag(_In_ PdoFlag Flag) const
Definition: childpdo.h:66

Referenced by OnConfigured(), OnConfiguredOn(), PurgedOnDetach(), ReenumWrongDevice(), and SerialNumberCompared().

◆ IsFirstEnumTry()

BOOLEAN DeviceMachine::IsFirstEnumTry ( )
private

Definition at line 30 of file devmisc.cpp.

31{
32 return m_Device->m_EnumRetryCount == 0;
33}

Referenced by Again20SecondResetNotified(), SuperSpeedResetDone(), Zero20Enabled(), and Zero20SecondResetDone().

◆ IsochDelaySkipped()

BOOLEAN DeviceMachine::IsochDelaySkipped ( )
private

Definition at line 317 of file devmisc.cpp.

318{
319 return m_Device->HasHack(ChildHack::NoIsochDelayRequest);
320}

Referenced by LinkStart().

◆ KindWithin()

BOOLEAN DeviceMachine::KindWithin ( _In_ ULONG  Allowed)
private

A device with no version or speed known yet passes for any version or speed.

Definition at line 159 of file devsm.cpp.

161{
162 return (DeviceKind() & ~Allowed) == 0;
163}
ULONG DeviceKind()
Definition: hubchild.cpp:301

Referenced by EnterAtAddressZero(), EnterAtAddressZeroAgain(), EnterLinkPowerAgain(), EnterLinkPowerInEnum(), EnterProgrammingEndpoints(), EnterReadingBos(), EnterReadingQualifier(), EnterSettingU2Timeout(), and EnterUpdatingLinkPower().

◆ LanguageIdsValid()

BOOLEAN DeviceMachine::LanguageIdsValid ( )
private

Definition at line 797 of file devdesc.cpp.

798{
800}
PUSB_STRING_DESCRIPTOR m_LanguageIds
Definition: hubchild.h:390
static BOOLEAN NTAPI HubCacheString(_In_ HubChild *Child, _In_ ULONG BadReason, _Outptr_result_maybenull_ PUSB_STRING_DESCRIPTOR *Cache)
Definition: devdesc.cpp:765
#define HUB_ENUM_BAD_LANGUAGE_IDS
Definition: hubid.h:27

Referenced by OnReadingLanguages().

◆ LeaveHub()

SM_RESULT DeviceMachine::LeaveHub ( )
private

Definition at line 293 of file devsm_report.cpp.

294{
299}

Referenced by OnFailedDeviceGone().

◆ Link20Start()

SM_RESULT DeviceMachine::Link20Start ( )
private

Definition at line 936 of file devsm_reenum.cpp.

937{
938 if (!UpdateLpm20())
939 return EndWith(DsmEvent::Succeeded);
940
942}
SM_RESULT Link20Updated(_In_ DsmEvent Event)
static const State WaitingForController
Definition: devsm.h:232
BOOLEAN UpdateLpm20()
Definition: devhcd.cpp:798

Referenced by EnterLinkPowerAgain().

◆ Link20Updated()

SM_RESULT DeviceMachine::Link20Updated ( _In_ DsmEvent  Event)
private

Definition at line 945 of file devsm_reenum.cpp.

947{
948 if ((Event != DsmEvent::ControllerIoctlDone) && (Event != DsmEvent::ControllerIoctlFailed))
949 return SmUnhandled();
950
951 return EndWith(DsmEvent::Succeeded);
952}

Referenced by Link20Start().

◆ LinkExitLatency()

SM_RESULT DeviceMachine::LinkExitLatency ( )
private

Definition at line 985 of file devsm_desc.cpp.

986{
987 if (SelSkipped())
988 return LinkLatencyTolerance();
989
991}
BOOLEAN SelSkipped()
Definition: devmisc.cpp:311
SM_RESULT LinkLatencyTolerance()
SM_RESULT LinkSelSet(_In_ DsmEvent Event)
Definition: devsm_desc.cpp:994
VOID SetSel()
Definition: devreq.cpp:1011

Referenced by LinkIsochDelaySet(), and LinkStart().

◆ LinkIsochDelaySet()

SM_RESULT DeviceMachine::LinkIsochDelaySet ( _In_ DsmEvent  Event)
private

Definition at line 975 of file devsm_desc.cpp.

977{
978 if ((Event != DsmEvent::TransferDone) && (Event != DsmEvent::TransferFailed))
979 return SmUnhandled();
980
981 return LinkExitLatency();
982}
SM_RESULT LinkExitLatency()
Definition: devsm_desc.cpp:985

Referenced by LinkStart().

◆ LinkLatencyTolerance()

SM_RESULT DeviceMachine::LinkLatencyTolerance ( )
private

Definition at line 1012 of file devsm_desc.cpp.

1013{
1014 if (LtmWanted())
1016
1017 return EndWith(DsmEvent::Succeeded);
1018}
SM_RESULT LinkLtmSet(_In_ DsmEvent Event)
VOID EnableLtm()
Definition: devreq.cpp:963
BOOLEAN LtmWanted()
Definition: devmisc.cpp:323

Referenced by LinkExitLatency(), and LinkSelSet().

◆ LinkLtmSet()

SM_RESULT DeviceMachine::LinkLtmSet ( _In_ DsmEvent  Event)
private

Definition at line 1021 of file devsm_desc.cpp.

1023{
1024 switch (Event)
1025 {
1026 case DsmEvent::TransferFailed:
1027 return EndWith(DsmEvent::Failed);
1028
1029 case DsmEvent::TransferDone:
1030 case DsmEvent::TransferStalled:
1031 return EndWith(DsmEvent::Succeeded);
1032
1033 default:
1034 return SmUnhandled();
1035 }
1036}

Referenced by LinkLatencyTolerance().

◆ LinkPowerStart()

SM_RESULT DeviceMachine::LinkPowerStart ( )
private

Definition at line 16 of file devsm_lpm.cpp.

17{
19 return LpmCompute();
20}
SM_RESULT LpmCompute()
Definition: devsm_lpm.cpp:23
VOID InitLinkStates()
Definition: devlpm.cpp:110

Referenced by EnterProgrammingEndpoints(), and EnterUpdatingLinkPower().

◆ LinkSelSet()

SM_RESULT DeviceMachine::LinkSelSet ( _In_ DsmEvent  Event)
private

Definition at line 994 of file devsm_desc.cpp.

996{
997 switch (Event)
998 {
999 case DsmEvent::TransferDone:
1000 case DsmEvent::TransferStalled:
1001 return LinkLatencyTolerance();
1002
1003 case DsmEvent::TransferFailed:
1004 return EndWith(DsmEvent::Failed);
1005
1006 default:
1007 return SmUnhandled();
1008 }
1009}

Referenced by LinkExitLatency().

◆ LinkStart()

SM_RESULT DeviceMachine::LinkStart ( )
private

Definition at line 965 of file devsm_desc.cpp.

966{
967 if (IsochDelaySkipped())
968 return LinkExitLatency();
969
972}
VOID SetIsochDelay()
Definition: devreq.cpp:1068
BOOLEAN IsochDelaySkipped()
Definition: devmisc.cpp:317
SM_RESULT LinkIsochDelaySet(_In_ DsmEvent Event)
Definition: devsm_desc.cpp:975

Referenced by EnterLinkPowerAgain(), and EnterLinkPowerInEnum().

◆ LogReenumeration()

VOID DeviceMachine::LogReenumeration ( )
private

Definition at line 392 of file devmisc.cpp.

393{
394 DPRINT1("Device %p enumerated again behind PnP\n", m_Device);
395}

Referenced by EnterReenumerating().

◆ LpmCleanedUpAfterDetach()

SM_RESULT DeviceMachine::LpmCleanedUpAfterDetach ( _In_ DsmEvent  Event)
private

Definition at line 125 of file devsm_lpm.cpp.

127{
128 if (Event != DsmEvent::ControllerIoctlDone)
129 return SmUnhandled();
130
131 return EndWith(DsmEvent::PortDetached);
132}

Referenced by LpmDetachCleanup().

◆ LpmCleanedUpAfterFailure()

SM_RESULT DeviceMachine::LpmCleanedUpAfterFailure ( _In_ DsmEvent  Event)
private

Definition at line 103 of file devsm_lpm.cpp.

105{
106 if (Event != DsmEvent::ControllerIoctlDone)
107 return SmUnhandled();
108
109 return EndWith(DsmEvent::Failed);
110}

Referenced by LpmFailCleanup().

◆ LpmCompute()

SM_RESULT DeviceMachine::LpmCompute ( )
private

Definition at line 23 of file devsm_lpm.cpp.

24{
29 return LpmU1();
30
32 {
35 }
36
39}
SM_RESULT LpmProgrammedBeforeRaise(_In_ DsmEvent Event)
Definition: devsm_lpm.cpp:42
SM_RESULT LpmU1()
Definition: devsm_lpm.cpp:135
SM_RESULT LpmLatencyRaised(_In_ DsmEvent Event)
Definition: devsm_lpm.cpp:63
BOOLEAN ExitLatencyMustRise()
Definition: devlpm.cpp:534
VOID ComputeExitLatency()
Definition: devlpm.cpp:430
VOID UpdateExitLatency()
Definition: devhcd.cpp:812
BOOLEAN EndpointsNeedProgramming()
Definition: devhcd.cpp:1111
VOID CalcU2Timeout()
Definition: devlpm.cpp:341
VOID CalcU1Timeout()
Definition: devlpm.cpp:220

Referenced by LinkPowerStart(), and LpmLatencyTooLarge().

◆ LpmDetachCleanup()

SM_RESULT DeviceMachine::LpmDetachCleanup ( )
private

Definition at line 113 of file devsm_lpm.cpp.

114{
116 {
119 }
120
121 return EndWith(DsmEvent::PortDetached);
122}
BOOLEAN EndpointsNeedDisableOnFailure()
Definition: devhcd.cpp:1117
SM_RESULT LpmCleanedUpAfterDetach(_In_ DsmEvent Event)
Definition: devsm_lpm.cpp:125

Referenced by LpmU1TimeoutSet(), and LpmU2TimeoutSet().

◆ LpmEnableU1()

SM_RESULT DeviceMachine::LpmEnableU1 ( )
private

Definition at line 163 of file devsm_lpm.cpp.

164{
165 switch (U1Change())
166 {
170
171 case DsmFeatureEnable:
174
175 default:
176 return LpmU2();
177 }
178}
SM_RESULT LpmU1Enabled(_In_ DsmEvent Event)
Definition: devsm_lpm.cpp:192
VOID DisableU1()
Definition: devreq.cpp:945
VOID EnableU1()
Definition: devreq.cpp:939
DSM_FEATURE_CHANGE U1Change()
Definition: devlpm.cpp:496
SM_RESULT LpmU1Disabled(_In_ DsmEvent Event)
Definition: devsm_lpm.cpp:181
SM_RESULT LpmU2()
Definition: devsm_lpm.cpp:203
@ DsmFeatureDisable
Definition: devsm.h:110
@ DsmFeatureEnable
Definition: devsm.h:109

Referenced by LpmU1(), and LpmU1TimeoutSet().

◆ LpmEnableU2()

SM_RESULT DeviceMachine::LpmEnableU2 ( )
private

Definition at line 231 of file devsm_lpm.cpp.

232{
233 switch (U2Change())
234 {
238
239 case DsmFeatureEnable:
242
243 default:
244 return LpmLower();
245 }
246}
DSM_FEATURE_CHANGE U2Change()
Definition: devlpm.cpp:503
SM_RESULT LpmLower()
Definition: devsm_lpm.cpp:271
VOID DisableU2()
Definition: devreq.cpp:957
SM_RESULT LpmU2Disabled(_In_ DsmEvent Event)
Definition: devsm_lpm.cpp:249
SM_RESULT LpmU2Enabled(_In_ DsmEvent Event)
Definition: devsm_lpm.cpp:260
VOID EnableU2()
Definition: devreq.cpp:951

Referenced by LpmU2(), and LpmU2TimeoutSet().

◆ LpmFailCleanup()

SM_RESULT DeviceMachine::LpmFailCleanup ( )
private

Definition at line 91 of file devsm_lpm.cpp.

92{
94 {
97 }
98
99 return EndWith(DsmEvent::Failed);
100}
SM_RESULT LpmCleanedUpAfterFailure(_In_ DsmEvent Event)
Definition: devsm_lpm.cpp:103

Referenced by LpmFinalProgrammed(), LpmLatencyTooLarge(), and LpmProgrammedBeforeRaise().

◆ LpmFinalProgram()

SM_RESULT DeviceMachine::LpmFinalProgram ( )
private

Definition at line 301 of file devsm_lpm.cpp.

302{
304 {
307 }
308
309 return EndWith(DsmEvent::Succeeded);
310}
SM_RESULT LpmFinalProgrammed(_In_ DsmEvent Event)
Definition: devsm_lpm.cpp:313

Referenced by LpmLatencyLowered(), and LpmLower().

◆ LpmFinalProgrammed()

SM_RESULT DeviceMachine::LpmFinalProgrammed ( _In_ DsmEvent  Event)
private

Definition at line 313 of file devsm_lpm.cpp.

315{
316 switch (Event)
317 {
318 case DsmEvent::ControllerIoctlDone:
319 return EndWith(DsmEvent::Succeeded);
320
321 case DsmEvent::ControllerExitLatencyTooLarge:
322 return LpmLatencyTooLarge();
323
324 case DsmEvent::ControllerIoctlFailed:
325 return LpmFailCleanup();
326
327 default:
328 return SmUnhandled();
329 }
330}
SM_RESULT LpmLatencyTooLarge()
Definition: devsm_lpm.cpp:82
SM_RESULT LpmFailCleanup()
Definition: devsm_lpm.cpp:91

Referenced by LpmFinalProgram().

◆ LpmLatencyLowered()

SM_RESULT DeviceMachine::LpmLatencyLowered ( _In_ DsmEvent  Event)
private

Definition at line 283 of file devsm_lpm.cpp.

285{
286 switch (Event)
287 {
288 case DsmEvent::ControllerIoctlDone:
289 case DsmEvent::ControllerIoctlFailed:
290 return LpmFinalProgram();
291
292 case DsmEvent::ControllerExitLatencyTooLarge:
293 return LpmLatencyTooLarge();
294
295 default:
296 return SmUnhandled();
297 }
298}
SM_RESULT LpmFinalProgram()
Definition: devsm_lpm.cpp:301

Referenced by LpmLower().

◆ LpmLatencyRaised()

SM_RESULT DeviceMachine::LpmLatencyRaised ( _In_ DsmEvent  Event)
private

Definition at line 63 of file devsm_lpm.cpp.

65{
66 switch (Event)
67 {
68 case DsmEvent::ControllerIoctlDone:
69 case DsmEvent::ControllerIoctlFailed:
70 return LpmU1();
71
72 case DsmEvent::ControllerExitLatencyTooLarge:
73 return LpmLatencyTooLarge();
74
75 default:
76 return SmUnhandled();
77 }
78}

Referenced by LpmCompute(), and LpmProgrammedBeforeRaise().

◆ LpmLatencyTooLarge()

SM_RESULT DeviceMachine::LpmLatencyTooLarge ( )
private

Definition at line 82 of file devsm_lpm.cpp.

83{
85 return LpmCompute();
86
87 return LpmFailCleanup();
88}
BOOLEAN DisableLinkStatesForLatency()
Definition: devlpm.cpp:547

Referenced by LpmFinalProgrammed(), LpmLatencyLowered(), LpmLatencyRaised(), and LpmProgrammedBeforeRaise().

◆ LpmLower()

SM_RESULT DeviceMachine::LpmLower ( )
private

Definition at line 271 of file devsm_lpm.cpp.

272{
273 if (ExitLatencyMayDrop())
274 {
277 }
278
279 return LpmFinalProgram();
280}
BOOLEAN ExitLatencyMayDrop()
Definition: devlpm.cpp:540
SM_RESULT LpmLatencyLowered(_In_ DsmEvent Event)
Definition: devsm_lpm.cpp:283

Referenced by LpmEnableU2(), LpmU2Disabled(), and LpmU2Enabled().

◆ LpmProgrammedBeforeRaise()

SM_RESULT DeviceMachine::LpmProgrammedBeforeRaise ( _In_ DsmEvent  Event)
private

Definition at line 42 of file devsm_lpm.cpp.

44{
45 switch (Event)
46 {
47 case DsmEvent::ControllerIoctlDone:
50
51 case DsmEvent::ControllerExitLatencyTooLarge:
52 return LpmLatencyTooLarge();
53
54 case DsmEvent::ControllerIoctlFailed:
55 return LpmFailCleanup();
56
57 default:
58 return SmUnhandled();
59 }
60}

Referenced by LpmCompute().

◆ LpmU1()

SM_RESULT DeviceMachine::LpmU1 ( )
private

Definition at line 135 of file devsm_lpm.cpp.

136{
137 if (!U1TimeoutChanged())
138 return LpmEnableU1();
139
142}
BOOLEAN U1TimeoutChanged()
Definition: devlpm.cpp:463
SM_RESULT LpmEnableU1()
Definition: devsm_lpm.cpp:163
static const State AwaitingPortYielding
Definition: devsm.h:240
SM_RESULT LpmU1TimeoutSet(_In_ DsmEvent Event)
Definition: devsm_lpm.cpp:145
VOID RequestU1Timeout()
Definition: hubport.cpp:680

Referenced by LpmCompute(), and LpmLatencyRaised().

◆ LpmU1Disabled()

SM_RESULT DeviceMachine::LpmU1Disabled ( _In_ DsmEvent  Event)
private

Definition at line 181 of file devsm_lpm.cpp.

183{
184 if ((Event != DsmEvent::TransferDone) && (Event != DsmEvent::TransferFailed))
185 return SmUnhandled();
186
188 return LpmU2();
189}
VOID MarkU1Disabled()
Definition: devlpm.cpp:516

Referenced by LpmEnableU1().

◆ LpmU1Enabled()

SM_RESULT DeviceMachine::LpmU1Enabled ( _In_ DsmEvent  Event)
private

Definition at line 192 of file devsm_lpm.cpp.

194{
195 if ((Event != DsmEvent::TransferDone) && (Event != DsmEvent::TransferFailed))
196 return SmUnhandled();
197
199 return LpmU2();
200}
VOID MarkU1Enabled()
Definition: devlpm.cpp:510

Referenced by LpmEnableU1().

◆ LpmU1TimeoutSet()

SM_RESULT DeviceMachine::LpmU1TimeoutSet ( _In_ DsmEvent  Event)
private

Definition at line 145 of file devsm_lpm.cpp.

147{
148 switch (Event)
149 {
150 case DsmEvent::PortTimeoutSet:
151 case DsmEvent::PortFault:
152 return LpmEnableU1();
153
154 case DsmEvent::PortDetached:
155 return LpmDetachCleanup();
156
157 default:
158 return SmUnhandled();
159 }
160}
SM_RESULT LpmDetachCleanup()
Definition: devsm_lpm.cpp:113

Referenced by LpmU1().

◆ LpmU2()

SM_RESULT DeviceMachine::LpmU2 ( )
private

Definition at line 203 of file devsm_lpm.cpp.

204{
205 if (!U2TimeoutChanged())
206 return LpmEnableU2();
207
210}
VOID RequestU2Timeout()
Definition: hubport.cpp:686
BOOLEAN U2TimeoutChanged()
Definition: devlpm.cpp:473
SM_RESULT LpmEnableU2()
Definition: devsm_lpm.cpp:231
SM_RESULT LpmU2TimeoutSet(_In_ DsmEvent Event)
Definition: devsm_lpm.cpp:213

Referenced by LpmEnableU1(), LpmU1Disabled(), and LpmU1Enabled().

◆ LpmU2Disabled()

SM_RESULT DeviceMachine::LpmU2Disabled ( _In_ DsmEvent  Event)
private

Definition at line 249 of file devsm_lpm.cpp.

251{
252 if ((Event != DsmEvent::TransferDone) && (Event != DsmEvent::TransferFailed))
253 return SmUnhandled();
254
256 return LpmLower();
257}
VOID MarkU2Disabled()
Definition: devlpm.cpp:528

Referenced by LpmEnableU2().

◆ LpmU2Enabled()

SM_RESULT DeviceMachine::LpmU2Enabled ( _In_ DsmEvent  Event)
private

Definition at line 260 of file devsm_lpm.cpp.

262{
263 if ((Event != DsmEvent::TransferDone) && (Event != DsmEvent::TransferFailed))
264 return SmUnhandled();
265
267 return LpmLower();
268}
VOID MarkU2Enabled()
Definition: devlpm.cpp:522

Referenced by LpmEnableU2().

◆ LpmU2TimeoutSet()

SM_RESULT DeviceMachine::LpmU2TimeoutSet ( _In_ DsmEvent  Event)
private

Definition at line 213 of file devsm_lpm.cpp.

215{
216 switch (Event)
217 {
218 case DsmEvent::PortTimeoutSet:
219 case DsmEvent::PortFault:
220 return LpmEnableU2();
221
222 case DsmEvent::PortDetached:
223 return LpmDetachCleanup();
224
225 default:
226 return SmUnhandled();
227 }
228}

Referenced by LpmU2().

◆ LtmWanted()

BOOLEAN DeviceMachine::LtmWanted ( )
private

Definition at line 323 of file devmisc.cpp.

324{
325 return m_Device->HasProperty(ChildProperty::LtmCapable) &&
326 m_Device->HasProperty(ChildProperty::NotRemovable) &&
327 HubDriver.HasFlag(HubGlobal::EnableUsbLtm);
328}

Referenced by LinkLatencyTolerance().

◆ MarkAttachFailed()

VOID DeviceMachine::MarkAttachFailed ( )
private

Definition at line 307 of file hubchild.cpp.

308{
309 m_Device->ClearState(ChildState::AttachSucceeded);
310}

Referenced by OnAwaitingAttach().

◆ MarkAttachSucceeded()

VOID DeviceMachine::MarkAttachSucceeded ( )
private

Definition at line 313 of file hubchild.cpp.

314{
315 m_Device->SetState(ChildState::AttachSucceeded);
316}

Referenced by OnAwaitingAttach().

◆ MarkContainerIdUnsupported()

VOID DeviceMachine::MarkContainerIdUnsupported ( )
private

Definition at line 357 of file hubmsos.cpp.

358{
359 USHORT Record = 1;
360
361 HubWriteUsbflagsValue(m_Device, L"SkipContainerIdQuery", &Record, sizeof(Record));
362 m_Device->m_Hacks |= (ULONG)ChildHack::SkipContainerIdQuery;
363}
#define L(x)
Definition: resources.c:13
_In_ PCUNICODE_STRING _Out_ HubUxdSettings * Record

Referenced by MsOsMarkNoContainerId(), and MsOsStoreVendorCode().

◆ MarkDisconnected()

VOID DeviceMachine::MarkDisconnected ( )
private

Definition at line 474 of file devmisc.cpp.

475{
478}
VOID NTAPI USBD_MarkDeviceAsDisconnected(_In_ PVOID DeviceContext)
Definition: hubsup.c:269

Referenced by EnterDetachedReported(), EnterDetachedReportedConfigured(), and ReportMissingAndLeave().

◆ MarkMsOsInstallHandled()

VOID DeviceMachine::MarkMsOsInstallHandled ( )
private

Definition at line 368 of file hubmsos.cpp.

369{
370 m_Device->SetState(ChildState::MsOsInstallHandled);
371}

Referenced by MsOsInstallStart().

◆ MarkMsOsUnsupported()

VOID DeviceMachine::MarkMsOsUnsupported ( )
private

Definition at line 333 of file hubmsos.cpp.

334{
335 UCHAR Record[2] = { 0, 0 };
336
337 PAGED_CODE();
338
339 HubWriteUsbflagsValue(m_Device, L"osvc", Record, sizeof(Record));
340 m_Device->SetProperty(ChildProperty::MsOsNotSupported);
341}
VOID SetProperty(_In_ ChildProperty Flag)
Definition: hubchild.h:295

Referenced by MsOsMarkUnsupported().

◆ MarkPendingEndpointsDisabled()

VOID DeviceMachine::MarkPendingEndpointsDisabled ( )
private

Definition at line 1105 of file devhcd.cpp.

1106{
1107 HubConfigMovePipes(m_Device->m_CurrentConfig, PipeState::PendingEnable, PipeState::Disabled);
1108}

Referenced by ConfigureFailed().

◆ MarkPowerLost()

VOID DeviceMachine::MarkPowerLost ( )
private

Definition at line 4096 of file childpdo.cpp.

4097{
4098 m_Device->m_Pdo->SetFlag(PdoFlag::PowerLostOnReset);
4099}
VOID SetFlag(_In_ PdoFlag Flag)
Definition: childpdo.h:73

Referenced by DisableEndpointsPowerLost(), EnterBootDeviceDetached(), EnterBootDeviceDetachedContextGone(), and EnterBootDeviceResetPending().

◆ MarkResetAtResume()

VOID DeviceMachine::MarkResetAtResume ( )
private

Definition at line 4102 of file childpdo.cpp.

4103{
4104 m_Device->m_Pdo->SetFlag(PdoFlag::WasResetAtResume);
4105 m_Device->m_Pdo->SetFlag(PdoFlag::ReportPortDisabled);
4106}

Referenced by DisablePortMarkingReset(), OnDeviceSuspended(), SuspendedNeedsReset(), and SuspendedPortResumed().

◆ MarkSystemWakeSource()

VOID DeviceMachine::MarkSystemWakeSource ( )
private

Definition at line 4143 of file childpdo.cpp.

4144{
4145 DPRINT("Port %u device is the system wake source\n", m_Device->m_Port->Number());
4146
4148 HubSetSystemWakeDevice(WdfDeviceWdmGetDeviceObject(m_Device->m_Pdo->m_Device));
4149}
static PFN_HUB_SET_SYSTEM_WAKE_DEVICE HubSetSystemWakeDevice
Definition: childpdo.cpp:149

Referenced by EnterAwaitingPowerUpAfterWake().

◆ MarkU1Disabled()

VOID DeviceMachine::MarkU1Disabled ( )
private

Definition at line 516 of file devlpm.cpp.

517{
518 m_Device->ClearState(ChildState::U1EnabledUpstream);
519}

Referenced by LpmU1Disabled().

◆ MarkU1Enabled()

VOID DeviceMachine::MarkU1Enabled ( )
private

Definition at line 510 of file devlpm.cpp.

511{
512 m_Device->SetState(ChildState::U1EnabledUpstream);
513}

Referenced by LpmU1Enabled().

◆ MarkU2Disabled()

VOID DeviceMachine::MarkU2Disabled ( )
private

Definition at line 528 of file devlpm.cpp.

529{
530 m_Device->ClearState(ChildState::U2EnabledUpstream);
531}

Referenced by LpmU2Disabled().

◆ MarkU2Enabled()

VOID DeviceMachine::MarkU2Enabled ( )
private

Definition at line 522 of file devlpm.cpp.

523{
524 m_Device->SetState(ChildState::U2EnabledUpstream);
525}

Referenced by LpmU2Enabled().

◆ MsOs20SetValid()

BOOLEAN DeviceMachine::MsOs20SetValid ( )
private

Definition at line 928 of file devdesc.cpp.

929{
932 HubMsOs20ResumeTime* Resume;
933
934 PAGED_CODE();
935
936 if (Child->m_MsOs20Set == NULL)
937 {
938 DPRINT1("Device %p has no MS OS 2.0 set buffer\n", Child);
939 return FALSE;
940 }
941
942 Child->m_MsOs20SetLength = HubDeviceBytesReturned(Child);
943
945 if (!HubDescCheckMsOs20Set(&Context,
946 Child->m_MsOs20Set,
947 Child->m_MsOs20SetLength,
948 &Child->m_MsOs20SetInfo,
949 &Child->m_MsOs20))
950 {
951 Child->m_EnumMessageId = HUB_ENUM_BAD_MSOS20_SET;
952 return FALSE;
953 }
954
955 if (Child->m_MsOs20.Flags & HUB_MSOS20_CCGP)
956 Child->SetProperty(ChildProperty::IsComposite);
957
958 Resume = Child->m_MsOs20.ResumeTime;
959 if (Resume != NULL)
960 {
961 Child->m_HasResumeRecoveryTime = TRUE;
962 Child->m_ResumeRecoveryTime = Resume->bResumeRecoveryTime;
963 Child->m_ResumeSignalingTime = Resume->bResumeSignalingTime;
964 }
965
966 return TRUE;
967}
#define HUB_MSOS20_CCGP
Definition: desccheck.h:497
#define HUB_ENUM_BAD_MSOS20_SET
Definition: hubid.h:36
UCHAR bResumeSignalingTime
Definition: desccheck.h:391
UCHAR bResumeRecoveryTime
Definition: desccheck.h:390

Referenced by BosMsOs20Validate().

◆ MsOs20Supported()

BOOLEAN DeviceMachine::MsOs20Supported ( )
private

Definition at line 121 of file hubmsos.cpp.

122{
124}
HubMsOs20SetInfo m_MsOs20SetInfo
Definition: hubchild.h:493

Referenced by BosMsOs20().

◆ MsOs20ValuesWanted()

BOOLEAN DeviceMachine::MsOs20ValuesWanted ( )
private

Definition at line 127 of file hubmsos.cpp.

128{
130 return FALSE;
131
132 return !m_Device->HasProperty(ChildProperty::ExtPropertiesInstalled);
133}
#define HUB_MSOS20_REGISTRY
Definition: desccheck.h:494

Referenced by MsOsInstallStart().

◆ MsOsContainerHeaderRead()

SM_RESULT DeviceMachine::MsOsContainerHeaderRead ( _In_ DsmEvent  Event)
private

Definition at line 787 of file devsm_desc.cpp.

789{
790 switch (Event)
791 {
792 case DsmEvent::TransferDone:
795
798
799 case DsmEvent::TransferFailed:
801
802 default:
803 return SmUnhandled();
804 }
805}
SM_RESULT MsOsContainerRead(_In_ DsmEvent Event)
Definition: devsm_desc.cpp:808
SM_RESULT MsOsNoContainerId()
Definition: devsm_desc.cpp:828
VOID ReadContainerId()
Definition: devreq.cpp:641
BOOLEAN ContainerIdHeaderValid()
Definition: devdesc.cpp:847
SM_RESULT MsOsError(_In_ DSM_THEN GoOn)
Definition: devsm_desc.cpp:712

Referenced by MsOsContainerId().

◆ MsOsContainerId()

SM_RESULT DeviceMachine::MsOsContainerId ( )
private

Definition at line 775 of file devsm_desc.cpp.

776{
777 if (ContainerIdWanted())
778 {
781 }
782
783 return EndWith(DsmEvent::Succeeded);
784}
SM_RESULT MsOsContainerHeaderRead(_In_ DsmEvent Event)
Definition: devsm_desc.cpp:787
VOID ReadContainerIdHeader()
Definition: devreq.cpp:631
BOOLEAN ContainerIdWanted()
Definition: hubmsos.cpp:278

Referenced by MsOsExtendedConfig(), MsOsExtendedHeaderRead(), and MsOsExtendedRead().

◆ MsOsContainerIdSupported()

BOOLEAN DeviceMachine::MsOsContainerIdSupported ( )
private

Definition at line 296 of file hubmsos.cpp.

297{
299}
HubMsOsString m_MsOsString
Definition: hubchild.h:489
#define MSOS_FLAG_CONTAINER_ID
Definition: hubmsos.cpp:15

Referenced by MsOsStoreVendorCode().

◆ MsOsContainerRead()

SM_RESULT DeviceMachine::MsOsContainerRead ( _In_ DsmEvent  Event)
private

Definition at line 808 of file devsm_desc.cpp.

810{
811 switch (Event)
812 {
813 case DsmEvent::TransferDone:
814 if (ContainerIdKnown())
815 return EndWith(DsmEvent::Succeeded);
816
818
819 case DsmEvent::TransferFailed:
821
822 default:
823 return SmUnhandled();
824 }
825}
BOOLEAN ContainerIdKnown()
Definition: devdesc.cpp:865

Referenced by MsOsContainerHeaderRead().

◆ MsOsDescriptorValid()

BOOLEAN DeviceMachine::MsOsDescriptorValid ( )
private

Definition at line 826 of file devdesc.cpp.

827{
830
831 if (HubDeviceBytesReturned(Child) != sizeof(Child->m_MsOsString))
832 {
833 DPRINT1("Device %p MS OS string read returned %lu bytes\n", Child, HubDeviceBytesReturned(Child));
834 return FALSE;
835 }
836
838 if (!HubDescCheckMsOsString(&Context, &Child->m_MsOsString))
839 return FALSE;
840
841 Child->m_MsOsVendorCode = Child->m_MsOsString.bVendorCode;
842 return TRUE;
843}
BOOLEAN NTAPI HubDescCheckMsOsString(_In_ const HubDescContext *Context, _In_ const HubMsOsString *Descriptor)
Definition: desccheck.cpp:2490

Referenced by MsOsRead().

◆ MsOsError()

SM_RESULT DeviceMachine::MsOsError ( _In_ DSM_THEN  GoOn)
private

Definition at line 712 of file devsm_desc.cpp.

714{
716 return (this->*GoOn)();
717
718 return EndWith(DsmEvent::Failed);
719}

Referenced by MsOsContainerHeaderRead(), MsOsContainerRead(), MsOsExtendedHeaderRead(), MsOsExtendedRead(), and MsOsSerialRead().

◆ MsOsExtendedConfig()

SM_RESULT DeviceMachine::MsOsExtendedConfig ( )
private

Definition at line 722 of file devsm_desc.cpp.

723{
725 {
728 }
729
730 return MsOsContainerId();
731}
SM_RESULT MsOsContainerId()
Definition: devsm_desc.cpp:775
BOOLEAN MsOsExtendedConfigSupported()
Definition: hubmsos.cpp:260
VOID ReadExtendedConfigHeader()
Definition: devreq.cpp:651
SM_RESULT MsOsExtendedHeaderRead(_In_ DsmEvent Event)
Definition: devsm_desc.cpp:734

Referenced by MsOsSerial(), and MsOsSerialRead().

◆ MsOsExtendedConfigSupported()

BOOLEAN DeviceMachine::MsOsExtendedConfigSupported ( )
private

Definition at line 260 of file hubmsos.cpp.

261{
263
265 return FALSE;
266
268 !Child->HasProperty(ChildProperty::MsOsNotSupported) &&
269 !Child->HasProperty(ChildProperty::IsComposite))
270 {
271 return TRUE;
272 }
273
274 return Child->HasHack(ChildHack::AlwaysQueryMsOs);
275}

Referenced by MsOsExtendedConfig().

◆ MsOsExtendedHeaderRead()

SM_RESULT DeviceMachine::MsOsExtendedHeaderRead ( _In_ DsmEvent  Event)
private

Definition at line 734 of file devsm_desc.cpp.

736{
737 switch (Event)
738 {
739 case DsmEvent::TransferDone:
742
745
746 case DsmEvent::TransferFailed:
747 return MsOsContainerId();
748
749 default:
750 return SmUnhandled();
751 }
752}
VOID ReadExtendedConfig()
Definition: devreq.cpp:664
SM_RESULT MsOsExtendedRead(_In_ DsmEvent Event)
Definition: devsm_desc.cpp:755
BOOLEAN ExtendedConfigHeaderValid()
Definition: devdesc.cpp:881

Referenced by MsOsExtendedConfig().

◆ MsOsExtendedRead()

SM_RESULT DeviceMachine::MsOsExtendedRead ( _In_ DsmEvent  Event)
private

Definition at line 755 of file devsm_desc.cpp.

757{
758 switch (Event)
759 {
760 case DsmEvent::TransferDone:
762 return MsOsContainerId();
763
765
766 case DsmEvent::TransferFailed:
768
769 default:
770 return SmUnhandled();
771 }
772}
BOOLEAN ExtendedConfigValid()
Definition: devdesc.cpp:900

Referenced by MsOsExtendedHeaderRead().

◆ MsOsExtHeaderRead()

SM_RESULT DeviceMachine::MsOsExtHeaderRead ( _In_ DsmEvent  Event)
private

Definition at line 363 of file devsm_stopped.cpp.

365{
366 switch (Event)
367 {
368 case DsmEvent::TransferDone:
370 {
373 }
374
375 return MsOsInstallDone();
376
377 case DsmEvent::TransferFailed:
378 return MsOsInstallDone();
379
380 default:
381 return SmUnhandled();
382 }
383}
SM_RESULT MsOsInstallDone()
SM_RESULT MsOsExtRead(_In_ DsmEvent Event)
BOOLEAN ExtPropertiesHeaderValid()
Definition: hubmsos.cpp:386
VOID ReadExtProperties()
Definition: devreq.cpp:692
BOOLEAN AllocateExtPropertiesBuffer()
Definition: hubmsos.cpp:411

Referenced by MsOsInstallStart().

◆ MsOsExtRead()

SM_RESULT DeviceMachine::MsOsExtRead ( _In_ DsmEvent  Event)
private

Definition at line 386 of file devsm_stopped.cpp.

388{
389 switch (Event)
390 {
391 case DsmEvent::TransferDone:
392 if (ExtPropertiesValid())
394
395 return MsOsFreeAndDone();
396
397 case DsmEvent::TransferFailed:
398 return MsOsFreeAndDone();
399
400 default:
401 return SmUnhandled();
402 }
403}
SM_RESULT MsOsFreeAndDone()
SM_RESULT MsOsWriteProperties()
BOOLEAN ExtPropertiesValid()
Definition: hubmsos.cpp:470

Referenced by MsOsExtHeaderRead().

◆ MsOsFreeAndDone()

SM_RESULT DeviceMachine::MsOsFreeAndDone ( )
private

Definition at line 413 of file devsm_stopped.cpp.

414{
416 return MsOsInstallDone();
417}
VOID FreeExtPropertiesBuffer()
Definition: hubmsos.cpp:559

Referenced by MsOsExtRead(), and MsOsWriteProperties().

◆ MsOsInstallDone()

SM_RESULT DeviceMachine::MsOsInstallDone ( )
private

Definition at line 356 of file devsm_stopped.cpp.

357{
360}

Referenced by MsOsExtHeaderRead(), MsOsFreeAndDone(), and MsOsInstallStart().

◆ MsOsInstallStart()

SM_RESULT DeviceMachine::MsOsInstallStart ( )
private

Definition at line 335 of file devsm_stopped.cpp.

336{
337 BOOLEAN wanted = ExtPropertiesWanted();
338
340 if (wanted)
341 {
343 return MsOsInstallDone();
344
347 }
348
351
352 return MsOsInstallDone();
353}
BOOLEAN ExtPropertiesWanted()
Definition: hubmsos.cpp:303
VOID MarkMsOsInstallHandled()
Definition: hubmsos.cpp:368
BOOLEAN MsOs20ValuesWanted()
Definition: hubmsos.cpp:127
BOOLEAN SetExtPropertiesSemaphore()
Definition: hubmsos.cpp:374
BOOLEAN InstallMsOs20Values()
Definition: hubmsos.cpp:170
VOID ReadExtPropertiesHeader()
Definition: devreq.cpp:681
SM_RESULT MsOsExtHeaderRead(_In_ DsmEvent Event)

Referenced by OnAwaitingMsOsInstall().

◆ MsOsMarkNoContainerId()

SM_RESULT DeviceMachine::MsOsMarkNoContainerId ( )
private

Definition at line 834 of file devsm_desc.cpp.

835{
837 return EndWith(DsmEvent::Succeeded);
838}
VOID MarkContainerIdUnsupported()
Definition: hubmsos.cpp:357

Referenced by MsOsNoContainerId().

◆ MsOsMarkUnsupported()

SM_RESULT DeviceMachine::MsOsMarkUnsupported ( )
private

Definition at line 664 of file devsm_desc.cpp.

665{
667 return MsOsSerial();
668}
VOID MarkMsOsUnsupported()
Definition: hubmsos.cpp:333
SM_RESULT MsOsSerial()
Definition: devsm_desc.cpp:681

Referenced by MsOsRead().

◆ MsOsNoContainerId()

SM_RESULT DeviceMachine::MsOsNoContainerId ( )
private

Definition at line 828 of file devsm_desc.cpp.

829{
831}
SM_RESULT MsOsMarkNoContainerId()
Definition: devsm_desc.cpp:834

Referenced by MsOsContainerHeaderRead(), and MsOsContainerRead().

◆ MsOsQueryWanted()

BOOLEAN DeviceMachine::MsOsQueryWanted ( )
private

Definition at line 228 of file hubmsos.cpp.

229{
231
233 return FALSE;
234
235 switch (HubDriver.MsOsMode)
236 {
237 case HubMsOsMode::ForceQuery:
238 Child->ClearProperty(ChildProperty::MsOsNotSupported);
239 return TRUE;
240
241 case HubMsOsMode::NeverQuery:
242 Child->SetProperty(ChildProperty::MsOsNotSupported);
243 return FALSE;
244
245 default:
246 break;
247 }
248
250 !Child->HasProperty(ChildProperty::MsOsNotSupported) &&
251 Child->m_MsOsVendorCode == 0)
252 {
253 return TRUE;
254 }
255
256 return Child->HasHack(ChildHack::AlwaysQueryMsOs);
257}
HubMsOsMode MsOsMode
Definition: hubdriver.h:92

Referenced by MsOsStart().

◆ MsOsRead()

SM_RESULT DeviceMachine::MsOsRead ( _In_ DsmEvent  Event)
private

Definition at line 644 of file devsm_desc.cpp.

646{
647 switch (Event)
648 {
649 case DsmEvent::TransferFailed:
651
652 case DsmEvent::TransferDone:
655
657
658 default:
659 return SmUnhandled();
660 }
661}
SM_RESULT MsOsMarkUnsupported()
Definition: devsm_desc.cpp:664
BOOLEAN MsOsDescriptorValid()
Definition: devdesc.cpp:826
SM_RESULT MsOsStoreVendorCode()
Definition: devsm_desc.cpp:671

Referenced by MsOsStart().

◆ MsOsSerial()

SM_RESULT DeviceMachine::MsOsSerial ( )
private

Definition at line 681 of file devsm_desc.cpp.

682{
684 return MsOsExtendedConfig();
685
688}
BOOLEAN SerialNumberIndexZero()
Definition: hubid.cpp:1137
SM_RESULT MsOsSerialRead(_In_ DsmEvent Event)
Definition: devsm_desc.cpp:691
SM_RESULT MsOsExtendedConfig()
Definition: devsm_desc.cpp:722
VOID ReadSerialNumber()
Definition: devreq.cpp:592
BOOLEAN IgnoreSerialNumber()
Definition: hubid.cpp:1131

Referenced by MsOsMarkUnsupported(), MsOsStart(), and MsOsStoreVendorCode().

◆ MsOsSerialRead()

SM_RESULT DeviceMachine::MsOsSerialRead ( _In_ DsmEvent  Event)
private

Definition at line 691 of file devsm_desc.cpp.

693{
694 switch (Event)
695 {
696 case DsmEvent::TransferFailed:
698
699 case DsmEvent::TransferDone:
700 if (SerialNumberValid())
701 return MsOsExtendedConfig();
702
704
705 default:
706 return SmUnhandled();
707 }
708}
BOOLEAN SerialNumberValid()
Definition: hubid.cpp:1144

Referenced by MsOsSerial().

◆ MsOsStart()

SM_RESULT DeviceMachine::MsOsStart ( )
private

Definition at line 632 of file devsm_desc.cpp.

633{
634 if (MsOsQueryWanted())
635 {
638 }
639
640 return MsOsSerial();
641}
BOOLEAN MsOsQueryWanted()
Definition: hubmsos.cpp:228
SM_RESULT MsOsRead(_In_ DsmEvent Event)
Definition: devsm_desc.cpp:644
VOID ReadMsOsDescriptor()
Definition: devreq.cpp:620

Referenced by EnterReadingMsOs().

◆ MsOsStoreVendorCode()

SM_RESULT DeviceMachine::MsOsStoreVendorCode ( )
private

Definition at line 671 of file devsm_desc.cpp.

672{
676
677 return MsOsSerial();
678}
VOID StoreMsOsVendorCode()
Definition: hubmsos.cpp:344
BOOLEAN MsOsContainerIdSupported()
Definition: hubmsos.cpp:296

Referenced by MsOsRead().

◆ MsOsWriteProperties()

SM_RESULT DeviceMachine::MsOsWriteProperties ( )
private

Definition at line 406 of file devsm_stopped.cpp.

407{
409 return MsOsFreeAndDone();
410}
BOOLEAN WriteCustomProperties()
Definition: hubmsos.cpp:522

Referenced by MsOsExtRead().

◆ NeedsSecondReset()

BOOLEAN DeviceMachine::NeedsSecondReset ( )
private

Definition at line 262 of file devmisc.cpp.

263{
264 if (m_Device->HasHack(ChildHack::AlwaysSecondReset))
265 return TRUE;
266
268 return FALSE;
269
271 !HubDriver.HasFlag(HubGlobal::AlwaysSecondReset) &&
273 {
274 return FALSE;
275 }
276
277 return TRUE;
278}

Referenced by Zero20EndpointUpdated().

◆ NotifyAndPurgeIo()

VOID DeviceMachine::NotifyAndPurgeIo ( )
private

Definition at line 63 of file devsm_boot.cpp.

64{
67}

Referenced by PurgeOnDetach().

◆ NotifyDeviceReset()

VOID DeviceMachine::NotifyDeviceReset ( )
private

Definition at line 837 of file devhcd.cpp.

838{
840 HubConfiguration* Config = Child->m_CurrentConfig;
841 UCXENDPOINT* Endpoints = NULL;
842 HubUcxPayload* Payload;
845 ULONG Count = 0;
846 ULONG Index;
848
849 if (Config != NULL && Child->m_EndpointArrayCapacity != 0)
850 {
851 Endpoints = Child->m_EndpointsToDisable;
852
853 for (Entry = Config->Interfaces.Flink;
854 Entry != &Config->Interfaces && NT_SUCCESS(Status);
855 Entry = Entry->Flink)
856 {
858
859 for (Index = 0; Index < Interface->PipeCount; Index++)
860 {
861 if (Interface->Pipes[Index].State != PipeState::Enabled)
862 continue;
863
864 if (Endpoints == NULL)
865 {
867 break;
868 }
869
870 Interface->Pipes[Index].State = PipeState::PendingDisable;
871 Endpoints[Count++] = Interface->Pipes[Index].Endpoint;
872 }
873 }
874
875 /* Fails the request so the device machine does not wait forever */
876 if (!NT_SUCCESS(Status))
877 {
878 DPRINT1("Device %p reset has enabled endpoints but no disable list 0x%lx\n", Child, Status);
880 Child->Post(DsmEvent::ControllerIoctlFailed);
881 }
882 }
883
884 if (NT_SUCCESS(Status))
885 {
887 Payload->Reset.DefaultEndpoint = Child->m_DefaultEndpoint;
889 Payload->Reset.EndpointsToDisable = Endpoints;
890
892 }
893
894 if (!NT_SUCCESS(Status))
895 HubConfigMovePipes(Config, PipeState::PendingDisable, PipeState::Enabled);
896}
#define UCX_SIZE_RESET
Definition: devhcd.cpp:17
#define IOCTL_UCXHUB_DEVICE_RESET
Definition: hubucx.h:54
ULONG EndpointsToDisableCount
Definition: ucxusbdevice.h:55
UCXENDPOINT DefaultEndpoint
Definition: ucxusbdevice.h:54
USBDEVICE_RESET Reset
Definition: hubchild.h:210

Referenced by EnterNotifyingReset().

◆ NotifyDisconnected()

VOID DeviceMachine::NotifyDisconnected ( )
private

Definition at line 3952 of file childpdo.cpp.

3953{
3955 HubPdo* Pdo = Child->m_Pdo;
3956
3957 PAGED_CODE();
3958
3959 DPRINT("Port %u device disconnected\n", Pdo->m_PortNumber);
3960
3961 Pdo->SetFlag(PdoFlag::DeviceGone);
3962 Pdo->m_FailRequests = TRUE;
3963
3964 if (!Pdo->HasFlag(PdoFlag::InBootPath) && Pdo->m_CycleQueued == 0)
3965 HubPurgeUxdState(Child, HubUxdEvent::Disconnect);
3966}

Referenced by BootDeviceNotifyDetached(), ConfiguredResetBootDevice(), DisableEndpointsAndNotify(), EnterDetachedReported(), NotifyAndPurgeIo(), RemovalNotifyThenReport(), and ReportMissingAndLeave().

◆ NotifyPortDetached()

◆ NotifyReconnected()

VOID DeviceMachine::NotifyReconnected ( )
private

Definition at line 3969 of file childpdo.cpp.

3970{
3972
3973 DPRINT("Port %u device reconnected\n", Pdo->m_PortNumber);
3974
3975 Pdo->m_FailRequests = FALSE;
3976 Pdo->ClearFlag(PdoFlag::DeviceGone);
3977}

Referenced by ReconfiguredBootDevice().

◆ NotifyWrongDevice()

VOID DeviceMachine::NotifyWrongDevice ( )
private

Definition at line 371 of file bootdev.cpp.

372{
373 DPRINT1("A different device is on boot port %u\n", m_Device->m_Port->Number());
374 m_Device->SetState(ChildState::DifferentDeviceOnBootPort);
376}
PVOID m_BootHandle
Definition: hubchild.h:429
VOID NTAPI HubNotifyBootDeviceRemoval(_In_opt_ PVOID Handle)
Definition: entry.cpp:335

Referenced by ReenumWrongDevice().

◆ OnAddressingAgain()

SM_RESULT DeviceMachine::OnAddressingAgain ( _In_ DsmEvent  Event)
private

Definition at line 756 of file devsm_reenum.cpp.

758{
759 switch (Event)
760 {
761 case DsmEvent::Failed:
763
764 case DsmEvent::Succeeded:
768
769 case DsmEvent::PortDetached:
771 return EndWith(DsmEvent::DetachedDeviceEnabled);
772
773 case DsmEvent::HubStopping:
774 case DsmEvent::HubSuspending:
776 return ReenumDisableForHub();
777
778 default:
779 return SmUnhandled();
780 }
781}
SM_RESULT ReenumDisableForHub()
SM_RESULT ReenumRetryOrFailHoldingAddressZero()
SM_RESULT ReenumDescriptorRead(_In_ DsmEvent Event)

◆ OnAddressingInEnum()

SM_RESULT DeviceMachine::OnAddressingInEnum ( _In_ DsmEvent  Event)
private

Definition at line 466 of file devsm_enum.cpp.

468{
469 switch (Event)
470 {
471 case DsmEvent::Failed:
473
474 case DsmEvent::Succeeded:
477
478 case DsmEvent::HubStopping:
479 case DsmEvent::HubSuspending:
481
482 case DsmEvent::PortDetached:
484
485 default:
486 return SmUnhandled();
487 }
488}
SM_RESULT EnumPortOffAfterDelete()
Definition: devsm_enum.cpp:491
SM_RESULT EnumRetryOrFailHoldingAddressZero()
Definition: devsm_enum.cpp:404
static const State ReadingDescriptors
Definition: devsm.h:334
SM_RESULT EnumReleaseAndEndDetached()
Definition: devsm_enum.cpp:498

◆ OnAtAddressZero()

SM_RESULT DeviceMachine::OnAtAddressZero ( _In_ DsmEvent  Event)
private

Definition at line 378 of file devsm_enum.cpp.

380{
381 switch (Event)
382 {
383 case DsmEvent::Succeeded:
385
386 case DsmEvent::Failed:
388
389 case DsmEvent::PortDetached:
391 return EndWith(DsmEvent::PortDetached);
392
393 case DsmEvent::HubStopping:
394 case DsmEvent::HubSuspending:
397
398 default:
399 return SmUnhandled();
400 }
401}
static const State AddressingInEnum
Definition: devsm.h:333

◆ OnAtAddressZeroAgain()

SM_RESULT DeviceMachine::OnAtAddressZeroAgain ( _In_ DsmEvent  Event)
private

Definition at line 510 of file devsm_reenum.cpp.

512{
513 switch (Event)
514 {
515 case DsmEvent::Succeeded:
517
518 case DsmEvent::Failed:
520
521 case DsmEvent::PortDetached:
523 return EndWith(DsmEvent::DetachedDeviceEnabled);
524
525 case DsmEvent::HubSuspending:
526 case DsmEvent::HubStopping:
528 return ReenumDisableForHub();
529
530 default:
531 return SmUnhandled();
532 }
533}
static const State AddressingAgain
Definition: devsm.h:1317

◆ OnAwaitingAttach()

SM_RESULT DeviceMachine::OnAwaitingAttach ( _In_ DsmEvent  Event)
private

Definition at line 70 of file devsm_enum.cpp.

72{
73 if (Event != DsmEvent::PortAttached)
74 return SmUnhandled();
75
76 if (!RegisterWithHub())
77 {
80 }
81
86}
VOID MarkAttachFailed()
Definition: hubchild.cpp:307
static const State Enumerating
Definition: devsm.h:329
BOOLEAN ReferenceHubPower()
Definition: childpdo.cpp:3982
BOOLEAN RegisterWithHub()
Definition: fanout.cpp:1026
VOID ReferencePort()
Definition: hubchild.cpp:319
VOID MarkAttachSucceeded()
Definition: hubchild.cpp:313

◆ OnAwaitingDetachOrRemove()

SM_RESULT DeviceMachine::OnAwaitingDetachOrRemove ( _In_ DsmEvent  Event)
private

Definition at line 341 of file devsm_remove.cpp.

343{
344 switch (Event)
345 {
346 case DsmEvent::PdoCleanup:
348
349 case DsmEvent::PortDetached:
352
353 return DetachUnconfigured();
354
355 case DsmEvent::HubStopping:
357
358 case DsmEvent::PdoPowerDownFinal:
361
362 case DsmEvent::HubStoppingAfterSuspend:
364
365 default:
366 return SmUnhandled();
367 }
368}
SM_RESULT RemovalDropPowerAndPark()
SM_RESULT RemovalDeleteForgetAndPark()
SM_RESULT DisableForRemoval(_In_ DSM_THEN After)
SM_RESULT RemovalAckAndPark()
static const State AwaitingDetachOrRemove
Definition: devsm.h:752
SM_RESULT DetachUnconfigured()

◆ OnAwaitingMsOsInstall()

SM_RESULT DeviceMachine::OnAwaitingMsOsInstall ( _In_ DsmEvent  Event)
private

Definition at line 325 of file devsm_stopped.cpp.

327{
328 if (Event != DsmEvent::PdoInstallMsOsExt)
329 return SmUnhandled();
330
332}
SM_RESULT MsOsInstallStart()

◆ OnAwaitingPowerUpAfterWake()

SM_RESULT DeviceMachine::OnAwaitingPowerUpAfterWake ( _In_ DsmEvent  Event)
private

Definition at line 695 of file devsm_power.cpp.

697{
698 switch (Event)
699 {
700 case DsmEvent::PdoPowerUp:
703
704 case DsmEvent::HubSuspending:
707
708 case DsmEvent::HubStopping:
710
711 default:
712 return SmUnhandled();
713 }
714}
SM_RESULT SuspendedPurgedAfterWake(_In_ DsmEvent Event)
SM_RESULT SuspendedPortOffForStop(_In_ DsmEvent Event)
VOID DisarmWake()
Definition: devreq.cpp:912
VOID PurgeIoForSuspend()
Definition: devhcd.cpp:917
SM_RESULT SuspendedDisarmed(_In_ DsmEvent Event)

◆ OnAwaitingPowerUpForReset()

SM_RESULT DeviceMachine::OnAwaitingPowerUpForReset ( _In_ DsmEvent  Event)
private

Definition at line 778 of file devsm_power.cpp.

780{
781 switch (Event)
782 {
783 case DsmEvent::PdoPowerUp:
784 return SuspendedNeedsReset();
785
786 case DsmEvent::HubSuspending:
789
790 default:
791 return SmUnhandled();
792 }
793}
SM_RESULT SuspendedPurgedForReset(_In_ DsmEvent Event)
SM_RESULT SuspendedNeedsReset()

◆ OnAwaitingRemove()

SM_RESULT DeviceMachine::OnAwaitingRemove ( _In_ DsmEvent  Event)
private

Definition at line 282 of file devsm_remove.cpp.

284{
285 switch (Event)
286 {
287 case DsmEvent::PdoReportedMissing:
289 return SmUnhandled();
290
291 ForgetChild();
294 if (!m_Unregistered)
295 {
299 }
300
302
303 case DsmEvent::PdoCleanup:
304 if (!m_ChildForgotten)
305 {
306 ForgetChild();
308 }
309
310 if (!m_Unregistered)
311 {
314 }
315
317
318 default:
319 return SmUnhandled();
320 }
321}
static const State AwaitingRemove
Definition: devsm.h:751
SM_RESULT RemovalDeleteAndFinish()

◆ OnBootDeviceAwaitingReset()

SM_RESULT DeviceMachine::OnBootDeviceAwaitingReset ( _In_ DsmEvent  Event)
private

Definition at line 151 of file devsm_boot.cpp.

153{
154 switch (Event)
155 {
156 case DsmEvent::ClientUnconfigure:
157 case DsmEvent::ClientClearStall:
158 case DsmEvent::ClientSyncResetPipe:
159 case DsmEvent::ClientResetPipe:
160 case DsmEvent::ClientSetInterface:
161 case DsmEvent::ClientSelectConfig:
163 return SmHandled();
164
165 case DsmEvent::HubGetDescriptor:
167 return SmHandled();
168
169 case DsmEvent::NoPingResponse:
170 case DsmEvent::LpmSettingChanged:
171 return SmHandled();
172
173 case DsmEvent::DeviceTextQuery:
175 return SmHandled();
176
177 case DsmEvent::PdoPreStart:
178 AckPreStart();
179 return SmHandled();
180
181 case DsmEvent::ClientResetDevice:
183
184 case DsmEvent::PortDetached:
185 if (m_ContextGone)
187
190
191 case DsmEvent::ClientStreams:
193
194 default:
195 return SmUnhandled();
196 }
197}
VOID FailHubDescriptorRequest()
Definition: hubioctl.cpp:383
VOID AckPreStart()
Definition: childpdo.cpp:4051
VOID FailClientRequest()
Definition: childpdo.cpp:3558
SM_RESULT ForwardStreams(_In_ const State *ReturnTo)
Definition: devsm.cpp:645
static const State BootDeviceDetachedContextGone
Definition: devsm.h:1272
VOID SignalQueryText()
Definition: childpdo.cpp:4064

◆ OnBootDeviceDetached()

SM_RESULT DeviceMachine::OnBootDeviceDetached ( _In_ DsmEvent  Event)
private

Definition at line 217 of file devsm_boot.cpp.

219{
220 switch (Event)
221 {
222 case DsmEvent::ClientSetInterface:
223 case DsmEvent::ClientSelectConfig:
224 case DsmEvent::ClientResetPipe:
225 case DsmEvent::ClientSyncResetPipe:
226 case DsmEvent::ClientUnconfigure:
227 case DsmEvent::ClientClearStall:
229 return SmHandled();
230
231 case DsmEvent::NoPingResponse:
232 case DsmEvent::LpmSettingChanged:
233 return SmHandled();
234
235 case DsmEvent::HubGetDescriptor:
237 return SmHandled();
238
239 case DsmEvent::DeviceTextQuery:
241 return SmHandled();
242
243 case DsmEvent::ClientResetDevice:
245
246 case DsmEvent::PortReattached:
248
249 case DsmEvent::ClientStreams:
252
253 default:
254 return SmUnhandled();
255 }
256}

◆ OnBootDeviceEvents()

SM_RESULT DeviceMachine::OnBootDeviceEvents ( _In_ DsmEvent  Event)
private

Definition at line 276 of file devsm_boot.cpp.

278{
279 switch (Event)
280 {
281 case DsmEvent::ClientResetPipe:
282 case DsmEvent::ClientClearStall:
283 case DsmEvent::ClientSyncResetPipe:
285 return SmHandled();
286
287 case DsmEvent::LpmSettingChanged:
288 case DsmEvent::NoPingResponse:
289 return SmHandled();
290
291 case DsmEvent::HubGetDescriptor:
293 return SmHandled();
294
295 case DsmEvent::HubResumed:
296 case DsmEvent::HubResumedWithReset:
297 case DsmEvent::HubResumedInS0:
300
301 case DsmEvent::PdoInstallMsOsExt:
302 case DsmEvent::PdoPowerDown:
303 case DsmEvent::PdoPowerUp:
306
307 case DsmEvent::HubSuspending:
310
311 default:
312 return SmUnhandled();
313 }
314}

◆ OnBootDeviceResetPending()

SM_RESULT DeviceMachine::OnBootDeviceResetPending ( _In_ DsmEvent  Event)
private

Definition at line 266 of file devsm_boot.cpp.

268{
269 if (Event != DsmEvent::PortReattached)
270 return SmUnhandled();
271
273}

◆ OnBootDeviceSuspended()

SM_RESULT DeviceMachine::OnBootDeviceSuspended ( _In_ DsmEvent  Event)
private

Definition at line 1004 of file devsm_config.cpp.

1006{
1007 switch (Event)
1008 {
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:
1017 return SmHandled();
1018
1019 case DsmEvent::NoPingResponse:
1020 case DsmEvent::LpmSettingChanged:
1021 return SmHandled();
1022
1023 case DsmEvent::DeviceTextQuery:
1025 return SmHandled();
1026
1027 case DsmEvent::HubGetDescriptor:
1029 return SmHandled();
1030
1031 case DsmEvent::NeedsReenumeration:
1032 return ReenumForBootResume();
1033
1034 case DsmEvent::ResumeDone:
1036
1037 case DsmEvent::PortDetached:
1039
1040 case DsmEvent::ClientStreams:
1042
1043 case DsmEvent::PortFault:
1044 return BootDeviceFailed();
1045
1046 default:
1047 return SmUnhandled();
1048 }
1049}
SM_RESULT BootDeviceNotifyDetached()
Definition: devsm_boot.cpp:83
static const State BootDeviceSuspended
Definition: devsm.h:1071
SM_RESULT ReenumForBootResume()
SM_RESULT BootDeviceFailed()
Definition: devsm_boot.cpp:116
SM_RESULT ConfiguredResumed()

◆ OnBootDeviceSuspending()

SM_RESULT DeviceMachine::OnBootDeviceSuspending ( _In_ DsmEvent  Event)
private

Definition at line 902 of file devsm_config.cpp.

904{
905 switch (Event)
906 {
907 case DsmEvent::Succeeded:
909
910 case DsmEvent::Failed:
912 return BootDeviceFailed();
913
914 case DsmEvent::PortDetached:
916
917 default:
918 return SmUnhandled();
919 }
920}

◆ OnCancelingClaimAgain()

SM_RESULT DeviceMachine::OnCancelingClaimAgain ( _In_ DsmEvent  Event)
private

Definition at line 299 of file devsm_reenum.cpp.

301{
302 switch (Event)
303 {
304 case DsmEvent::ControllerIoctlFailed:
305 return ReenumDisableForHub();
306
307 case DsmEvent::ControllerIoctlDone:
309 return ReenumDisableForHub();
310
311 default:
312 return SmUnhandled();
313 }
314}

◆ OnCancelingClaimForHub()

SM_RESULT DeviceMachine::OnCancelingClaimForHub ( _In_ DsmEvent  Event)
private

Definition at line 200 of file devsm_enum.cpp.

202{
203 switch (Event)
204 {
205 case DsmEvent::ControllerIoctlDone:
208
209 case DsmEvent::PortDetached:
211
212 case DsmEvent::ControllerIoctlFailed:
214
215 default:
216 return SmUnhandled();
217 }
218}
static const State IoctlAfterDetach
Definition: devsm.h:241
SM_RESULT EnumClaimEndedOnDetach(_In_ DsmEvent Event)
Definition: devsm_enum.cpp:175

◆ OnClaimingAddressZero()

SM_RESULT DeviceMachine::OnClaimingAddressZero ( _In_ DsmEvent  Event)
private

Definition at line 150 of file devsm_enum.cpp.

152{
153 switch (Event)
154 {
155 case DsmEvent::PortDetached:
158
159 case DsmEvent::HubStopping:
160 case DsmEvent::HubSuspending:
162
163 case DsmEvent::ControllerIoctlDone:
165
166 case DsmEvent::ControllerIoctlFailed:
167 return EnumRetryOrFail();
168
169 default:
170 return SmUnhandled();
171 }
172}
static const State CancelingClaimForHub
Definition: devsm.h:331

◆ OnClaimingAddressZeroAgain()

SM_RESULT DeviceMachine::OnClaimingAddressZeroAgain ( _In_ DsmEvent  Event)
private

Definition at line 256 of file devsm_reenum.cpp.

258{
259 switch (Event)
260 {
261 case DsmEvent::PortDetached:
264
265 case DsmEvent::HubStopping:
266 case DsmEvent::HubSuspending:
268
269 case DsmEvent::ControllerIoctlDone:
271
272 case DsmEvent::ControllerIoctlFailed:
273 return ReenumRetryOrFail();
274
275 default:
276 return SmUnhandled();
277 }
278}
SM_RESULT ReenumClaimEndedOnDetach(_In_ DsmEvent Event)
SM_RESULT ReenumRetryOrFail()
static const State AtAddressZeroAgain
Definition: devsm.h:1316
static const State CancelingClaimAgain
Definition: devsm.h:1321

◆ OnCollectingDescriptors()

SM_RESULT DeviceMachine::OnCollectingDescriptors ( _In_ DsmEvent  Event)
private

Definition at line 60 of file devsm_desc.cpp.

62{
63 switch (Event)
64 {
65 case DsmEvent::PortDetached:
66 case DsmEvent::HubSuspending:
67 case DsmEvent::HubStopping:
69
70 default:
71 return SmUnhandled();
72 }
73}
SM_RESULT CancelTransferAndEnd(_In_ DsmEvent Event)
Definition: devsm.cpp:596

◆ OnConfigured()

SM_RESULT DeviceMachine::OnConfigured ( _In_ DsmEvent  Event)
private

Definition at line 99 of file devsm_config.cpp.

101{
102 switch (Event)
103 {
104 case DsmEvent::ClientUnconfigure:
107
108 case DsmEvent::ClientResetDevice:
110 if (IsBootDevice())
112
114
115 case DsmEvent::ClientStreams:
117 return ForwardStreams(NULL);
118
119 case DsmEvent::ClientSelectConfig:
122
123 case DsmEvent::ClientSetInterface:
126
128
129 case DsmEvent::ClientClearStall:
130 if (!FindClientPipe())
132
134 return ClientDoneOk();
135
138
139 case DsmEvent::DeviceTextQuery:
142
143 case DsmEvent::ClientSyncResetPipe:
144 if (!FindClientPipe())
146
148 return ClientDoneOk();
149
152
153 case DsmEvent::HubGetDescriptor:
157
158 case DsmEvent::ClientResetPipe:
159 if (!FindClientPipe())
161
163 return ClientDoneOk();
164
165 if (PipeIsIsochronous())
166 {
169 }
170
173
174 default:
175 return SmUnhandled();
176 }
177}
SM_RESULT ConfiguredResetBootDevice()
SM_RESULT SelectConfigValidate()
BOOLEAN FindClientPipe()
Definition: childpdo.cpp:3857
BOOLEAN SelectInterfaceValid()
Definition: childpdo.cpp:3819
VOID ClearEndpointHalt()
Definition: devreq.cpp:832
VOID SetNullConfiguration()
Definition: devreq.cpp:777
BOOLEAN PipeIsIsochronous()
Definition: childpdo.cpp:3885
static const State SettingInterface
Definition: devsm.h:1065
VOID GetDescriptorForHub()
Definition: devreq.cpp:1108
BOOLEAN PipeIsZeroBandwidth()
Definition: childpdo.cpp:3879
SM_RESULT ConfiguredNullSet(_In_ DsmEvent Event)
SM_RESULT HubDescriptorDone(_In_ DsmEvent Event)
static const State ReadingDeviceText
Definition: devsm.h:839
SM_RESULT ClientHaltCleared(_In_ DsmEvent Event)
VOID ResetEndpoint()
Definition: devhcd.cpp:965
BOOLEAN IsBootDevice()
Definition: childpdo.cpp:4128
SM_RESULT ReenumForClientConfigured()

◆ OnConfiguredHubSuspended()

SM_RESULT DeviceMachine::OnConfiguredHubSuspended ( _In_ DsmEvent  Event)
private

Definition at line 1052 of file devsm_config.cpp.

1054{
1055 switch (Event)
1056 {
1057 case DsmEvent::NeedsReenumeration:
1058 return ReenumForHubResume(TRUE);
1059
1060 case DsmEvent::SuspendedAfterHubResume:
1062
1063 case DsmEvent::ResumedWithHub:
1066
1067 case DsmEvent::PortDetached:
1069
1070 default:
1071 return SmUnhandled();
1072 }
1073}
SM_RESULT ReenumForHubResume(_In_ BOOLEAN Configured)
SM_RESULT ConfiguredResumedWithHub(_In_ DsmEvent Event)

◆ OnConfiguredNotStarted()

SM_RESULT DeviceMachine::OnConfiguredNotStarted ( _In_ DsmEvent  Event)
private

Definition at line 432 of file devsm_config.cpp.

434{
435 switch (Event)
436 {
437 case DsmEvent::PdoPreStart:
438 AckPreStart();
439 return SmHandled();
440
441 case DsmEvent::PdoPowerUp:
443
444 case DsmEvent::PdoCleanup:
446
447 case DsmEvent::PortDetached:
449
450 case DsmEvent::HubStopping:
452
453 case DsmEvent::HubSuspending:
455
456 default:
457 return SmUnhandled();
458 }
459}
SM_RESULT ConfiguredNotStartedHubStop(_In_ DsmEvent Event)
SM_RESULT ConfiguredNotStartedCleanup(_In_ DsmEvent Event)
SM_RESULT ConfiguredNotStartedHubSuspend(_In_ DsmEvent Event)
SM_RESULT ConfiguredSignalAndStay()

◆ OnConfiguredOn()

SM_RESULT DeviceMachine::OnConfiguredOn ( _In_ DsmEvent  Event)
private

Definition at line 268 of file devsm_config.cpp.

270{
271 switch (Event)
272 {
273 case DsmEvent::ClientCyclePort:
275 return SmHandled();
276
277 case DsmEvent::PdoPowerUp:
278 case DsmEvent::PdoInstallMsOsExt:
280
281 case DsmEvent::HubSuspending:
284
285 case DsmEvent::PdoPrepareHibernate:
288
289 case DsmEvent::NoPingResponse:
292
293 return ConfiguredCyclePort();
294
295 case DsmEvent::PortDetached:
296 return PurgeOnDetach();
297
298 case DsmEvent::PdoPowerDown:
300 if (IsBootDevice())
302
304
305 case DsmEvent::LpmSettingChanged:
307
308 case DsmEvent::PdoPowerDownFinal:
310
311 default:
312 return SmUnhandled();
313 }
314}
VOID PurgeIoForHibernation()
SM_RESULT ConfiguredPurgedForHub(_In_ DsmEvent Event)
VOID CyclePortForClient()
Definition: childpdo.cpp:4070
static const State SuspendingConfigured
Definition: devsm.h:1068
static const State UpdatingLinkPower
Definition: devsm.h:1067
static const State BootDeviceSuspending
Definition: devsm.h:1069
SM_RESULT PurgeOnDetach()
Definition: devsm_boot.cpp:56
SM_RESULT ConfiguredEndpointsDisabledForStop(_In_ DsmEvent Event)
BOOLEAN AdjustLatencyForNoPing()
Definition: devlpm.cpp:567
SM_RESULT ConfiguredPurgedForHibernation(_In_ DsmEvent Event)

◆ OnConfiguring()

SM_RESULT DeviceMachine::OnConfiguring ( _In_ DsmEvent  Event)
private

Definition at line 563 of file devsm_config.cpp.

565{
566 switch (Event)
567 {
568 case DsmEvent::Succeeded:
569 case DsmEvent::Failed:
570 case DsmEvent::PortDetached:
571 return (this->*m_AfterConfigure)(Event);
572
573 default:
574 return SmUnhandled();
575 }
576}

◆ OnDetachedEvents()

SM_RESULT DeviceMachine::OnDetachedEvents ( _In_ DsmEvent  Event)
private

Definition at line 555 of file devsm_remove.cpp.

557{
558 switch (Event)
559 {
560 case DsmEvent::ClientCyclePort:
561 case DsmEvent::NoPingResponse:
562 case DsmEvent::PortNowSuspended:
563 case DsmEvent::PortNowEnabled:
564 case DsmEvent::PortResetTimeout:
565 case DsmEvent::LpmSettingChanged:
566 case DsmEvent::PortFault:
567 case DsmEvent::PortNowDisabled:
568 return SmHandled();
569
570 case DsmEvent::ClientSelectConfig:
571 case DsmEvent::ClientResetDevice:
572 case DsmEvent::ClientClearStall:
573 case DsmEvent::ClientSyncResetPipe:
574 case DsmEvent::ClientResetPipe:
575 case DsmEvent::ClientSetInterface:
576 case DsmEvent::ClientUnconfigure:
578 return SmHandled();
579
580 case DsmEvent::HubGetDescriptor:
582 return SmHandled();
583
584 case DsmEvent::PdoPreStart:
585 AckPreStart();
586 return SmHandled();
587
588 case DsmEvent::HubResumed:
589 case DsmEvent::HubResumedWithReset:
590 case DsmEvent::HubStarted:
591 case DsmEvent::HubResumedInS0:
594
595 case DsmEvent::PdoPowerDown:
596 case DsmEvent::PdoInstallMsOsExt:
597 case DsmEvent::PdoPowerUp:
600
601 case DsmEvent::HubSuspending:
604
605 case DsmEvent::ClientStreams:
607
608 default:
609 return SmUnhandled();
610 }
611}

◆ OnDetachedMissing()

SM_RESULT DeviceMachine::OnDetachedMissing ( _In_ DsmEvent  Event)
private

Definition at line 168 of file devsm_remove.cpp.

170{
171 switch (Event)
172 {
173 case DsmEvent::HubStopping:
174 case DsmEvent::HubStoppingAfterSuspend:
176
177 case DsmEvent::PdoCleanup:
179
180 case DsmEvent::PdoPowerDownFinal:
182
183 default:
184 return SmUnhandled();
185 }
186}
SM_RESULT RemovalLeaveHub()
SM_RESULT RemovalPowerDownDone()
SM_RESULT RemovalDeleteAfterLeaving()

◆ OnDetachedReported()

SM_RESULT DeviceMachine::OnDetachedReported ( _In_ DsmEvent  Event)
private

Definition at line 131 of file devsm_remove.cpp.

133{
134 switch (Event)
135 {
136 case DsmEvent::PdoReportedMissing:
138
139 case DsmEvent::PdoCleanup:
140 ForgetChild();
143
144 case DsmEvent::PdoPowerDownFinal:
146
147 case DsmEvent::HubStoppingAfterSuspend:
149
150 case DsmEvent::HubStopping:
152
153 default:
154 return SmUnhandled();
155 }
156}
SM_RESULT RemovalAckHubStop()
SM_RESULT RemovalDropPowerForHubStop()
static const State DetachedMissing
Definition: devsm.h:750

◆ OnDeviceSuspended()

SM_RESULT DeviceMachine::OnDeviceSuspended ( _In_ DsmEvent  Event)
private

Definition at line 505 of file devsm_power.cpp.

507{
508 switch (Event)
509 {
510 case DsmEvent::PortNowEnabledOnReconnect:
513 return SuspendedResumedByPort();
514
515 case DsmEvent::HubSuspending:
516 m_D3Cold = FALSE;
518
519 case DsmEvent::PdoPowerUp:
521
522 case DsmEvent::PortResumeDone:
524 return SuspendedResumedByPort();
525
526 case DsmEvent::PortNowDisabled:
531
532 default:
533 return SmUnhandled();
534 }
535}
SM_RESULT SuspendedPortResumed(_In_ DsmEvent Event)
SM_RESULT SuspendedResumedByPort()
static const State OffAfterD3Cold
Definition: devsm.h:955
static const State SuspendedHubSuspended
Definition: devsm.h:952

◆ OnEnumerating()

SM_RESULT DeviceMachine::OnEnumerating ( _In_ DsmEvent  Event)
private

Definition at line 96 of file devsm_enum.cpp.

98{
99 switch (Event)
100 {
101 case DsmEvent::Succeeded:
104
105 case DsmEvent::Failed:
108
109 case DsmEvent::PortDetached:
111 return EndAfterDetach();
112
113 default:
114 return SmUnhandled();
115 }
116}
static const State ReportingUnknown
Definition: devsm.h:694
VOID DereferenceHubPower()
Definition: childpdo.cpp:4000
static const State ReportingToPnp
Definition: devsm.h:693

◆ OnFailedDevice()

SM_RESULT DeviceMachine::OnFailedDevice ( _In_ DsmEvent  Event)
private

Definition at line 222 of file devsm_report.cpp.

224{
225 switch (Event)
226 {
227 case DsmEvent::PdoCleanup:
230
231 case DsmEvent::PdoPowerUp:
233 AskPortCycle();
234
237 return SmTransition(&FailedDevice);
238
239 case DsmEvent::PortDetached:
241
242 case DsmEvent::PortNowEnabledOnReconnect:
244
245 default:
246 return SmUnhandled();
247 }
248}
SM_RESULT FailedPortDisabledAgain(_In_ DsmEvent Event)

◆ OnFailedDeviceEvents()

SM_RESULT DeviceMachine::OnFailedDeviceEvents ( _In_ DsmEvent  Event)
private

Definition at line 302 of file devsm_report.cpp.

304{
305 switch (Event)
306 {
307 case DsmEvent::PdoPreStart:
308 AckPreStart();
309 return SmHandled();
310
311 case DsmEvent::HubGetDescriptor:
313 return SmHandled();
314
315 case DsmEvent::PortNowEnabled:
316 case DsmEvent::PortNowDisabled:
317 case DsmEvent::PortNowSuspended:
318 return SmHandled();
319
320 case DsmEvent::PdoPowerDownFinal:
321 case DsmEvent::PdoInstallMsOsExt:
322 case DsmEvent::PdoPowerDown:
325
326 case DsmEvent::HubResumedInS0:
327 case DsmEvent::HubStarted:
330
331 case DsmEvent::HubSuspending:
333
334 case DsmEvent::HubStoppingAfterSuspend:
337
338 case DsmEvent::HubStopping:
341
342 default:
343 return SmUnhandled();
344 }
345}
VOID ConfirmStopWhileSuspended()
Definition: fanout.cpp:1050
SM_RESULT FailedPortOffForHub(_In_ DsmEvent Event)

◆ OnFailedDeviceGone()

SM_RESULT DeviceMachine::OnFailedDeviceGone ( _In_ DsmEvent  Event)
private

Definition at line 281 of file devsm_report.cpp.

283{
284 if (Event != DsmEvent::PdoCleanup)
285 return SmUnhandled();
286
288 return LeaveHub();
289}
SM_RESULT LeaveHub()

◆ OnFailedHubSuspended()

SM_RESULT DeviceMachine::OnFailedHubSuspended ( _In_ DsmEvent  Event)
private

Definition at line 374 of file devsm_report.cpp.

376{
377 switch (Event)
378 {
379 case DsmEvent::HubStoppedHoldingReference:
382
383 case DsmEvent::NeedsReenumeration:
384 case DsmEvent::SuspendedAfterHubResume:
385 case DsmEvent::ResumedWithHub:
387
388 case DsmEvent::PortDetached:
389 return EndWith(DsmEvent::PortDetached);
390
391 case DsmEvent::HubStoppingAfterSuspend:
394
395 default:
396 return SmUnhandled();
397 }
398}

◆ OnForwardingStreams()

SM_RESULT DeviceMachine::OnForwardingStreams ( _In_ DsmEvent  Event)
private

Definition at line 660 of file devsm.cpp.

662{
663 if (Event != DsmEvent::ControllerRequestDone)
664 return SmUnhandled();
665
666 if (m_ReturnTo == NULL)
667 return (this->*m_Resume)();
668
669 return SmTransition(m_ReturnTo);
670}

◆ OnHubSuspended()

SM_RESULT DeviceMachine::OnHubSuspended ( _In_ DsmEvent  Event)
private

Definition at line 27 of file devsm_hub.cpp.

29{
30 switch (Event)
31 {
32 case DsmEvent::HubResumed:
35
36 case DsmEvent::HubResumedWithReset:
39
40 case DsmEvent::HubResumedInS0:
42 return EndWith(DsmEvent::SuspendedAfterHubResume);
43
44 case DsmEvent::PortNowDisabled:
45 case DsmEvent::PortNowEnabledOnReconnect:
47
48 case DsmEvent::PortNowSuspended:
50
51 case DsmEvent::PortNowEnabled:
53
54 case DsmEvent::PdoPowerDown:
57
58 default:
59 return SmUnhandled();
60 }
61}
SM_RESULT HubResumeWithPortSuspended(_In_ DsmEvent Event)
Definition: devsm_hub.cpp:110
SM_RESULT HubPortSyncedForReset(_In_ DsmEvent Event)
Definition: devsm_hub.cpp:202
SM_RESULT HubResumeForReenumeration(_In_ DsmEvent Event)
Definition: devsm_hub.cpp:91
SM_RESULT HubPortSynced(_In_ DsmEvent Event)
Definition: devsm_hub.cpp:171

◆ OnHubSuspendedPortOff()

SM_RESULT DeviceMachine::OnHubSuspendedPortOff ( _In_ DsmEvent  Event)
private

Definition at line 64 of file devsm_hub.cpp.

66{
67 switch (Event)
68 {
69 case DsmEvent::HubResumed:
70 case DsmEvent::HubResumedWithReset:
73
74 case DsmEvent::HubResumedInS0:
76 return EndWith(DsmEvent::NeedsReenumeration);
77
78 case DsmEvent::PortNowEnabled:
79 case DsmEvent::PortNowDisabled:
80 case DsmEvent::PortNowSuspended:
81 case DsmEvent::PortNowEnabledOnReconnect:
83
84 default:
85 return SmUnhandled();
86 }
87}

◆ OnLinkPowerAgain()

SM_RESULT DeviceMachine::OnLinkPowerAgain ( _In_ DsmEvent  Event)
private

Definition at line 918 of file devsm_reenum.cpp.

920{
921 switch (Event)
922 {
923 case DsmEvent::Failed:
924 return ReenumRetryOrFail();
925
926 case DsmEvent::Succeeded:
927 return ReenumPdCharging();
928
929 default:
930 return SmUnhandled();
931 }
932}

◆ OnLinkPowerInEnum()

SM_RESULT DeviceMachine::OnLinkPowerInEnum ( _In_ DsmEvent  Event)
private

Definition at line 558 of file devsm_enum.cpp.

560{
561 switch (Event)
562 {
563 case DsmEvent::Failed:
565
566 case DsmEvent::Succeeded:
568
569 default:
570 return SmUnhandled();
571 }
572}

◆ OnOffAfterD3Cold()

SM_RESULT DeviceMachine::OnOffAfterD3Cold ( _In_ DsmEvent  Event)
private

Definition at line 837 of file devsm_power.cpp.

839{
840 switch (Event)
841 {
842 case DsmEvent::PdoPowerUp:
843 return EndWith(DsmEvent::NeedsReenumeration);
844
845 case DsmEvent::HubSuspending:
846 m_D3Cold = TRUE;
848
849 default:
850 return SmUnhandled();
851 }
852}

◆ OnParkedForHubAgain()

SM_RESULT DeviceMachine::OnParkedForHubAgain ( _In_ DsmEvent  Event)
private

Definition at line 229 of file devsm_reenum.cpp.

231{
232 switch (Event)
233 {
234 case DsmEvent::SuspendedAfterHubResume:
235 case DsmEvent::ResumedWithHub:
236 case DsmEvent::NeedsReenumeration:
239
240 case DsmEvent::HubStoppedHoldingReference:
241 return ReenumParkForHub();
242
243 case DsmEvent::PortDetached:
244 return EndWith(DsmEvent::PortDetached);
245
246 case DsmEvent::HubStarted:
249
250 default:
251 return SmUnhandled();
252 }
253}
BOOLEAN DeviceProgrammingLost()
Definition: devmisc.cpp:352
SM_RESULT ReenumParkForHub()

◆ OnParkedForHubInEnum()

SM_RESULT DeviceMachine::OnParkedForHubInEnum ( _In_ DsmEvent  Event)
private

Definition at line 626 of file devsm_enum.cpp.

628{
629 switch (Event)
630 {
631 case DsmEvent::ResumedWithHub:
632 case DsmEvent::SuspendedAfterHubResume:
633 case DsmEvent::NeedsReenumeration:
636
637 case DsmEvent::HubStoppedHoldingReference:
638 return EnumParkForHub();
639
640 case DsmEvent::PortDetached:
641 return EndWith(DsmEvent::PortDetached);
642
643 case DsmEvent::HubStarted:
646
647 default:
648 return SmUnhandled();
649 }
650}

◆ OnParkedPortOff()

SM_RESULT DeviceMachine::OnParkedPortOff ( _In_ DsmEvent  Event)
private

Definition at line 414 of file devsm_remove.cpp.

416{
417 switch (Event)
418 {
419 case DsmEvent::PortDetached:
421
422 case DsmEvent::PdoCleanup:
424
425 case DsmEvent::PortResumeDone:
426 case DsmEvent::PortNowEnabledOnReconnect:
427 if (!m_PortMayResume)
428 return SmUnhandled();
429
430 return SmTransition(&ParkedPortOn);
431
432 default:
433 return SmUnhandled();
434 }
435}
SM_RESULT RemovalDeleteForget()
static const State ParkedPortOn
Definition: devsm.h:754
SM_RESULT ReportMissingAndLeave()

◆ OnParkedPortOn()

SM_RESULT DeviceMachine::OnParkedPortOn ( _In_ DsmEvent  Event)
private

Definition at line 438 of file devsm_remove.cpp.

440{
441 switch (Event)
442 {
443 case DsmEvent::PortOffForHubSuspend:
446
447 case DsmEvent::PdoCleanup:
449
450 case DsmEvent::PortDetached:
452
453 default:
454 return SmUnhandled();
455 }
456}
SM_RESULT RemovalDeleteForgetPortOn()

◆ OnPortOffEvents()

SM_RESULT DeviceMachine::OnPortOffEvents ( _In_ DsmEvent  Event)
private

Definition at line 403 of file devsm_report.cpp.

405{
406 switch (Event)
407 {
408 case DsmEvent::ClientCyclePort:
409 case DsmEvent::PortDisableDone:
410 case DsmEvent::PortResetTimeout:
411 case DsmEvent::PortResetAbortedForSuspend:
412 case DsmEvent::PortNowEnabled:
413 case DsmEvent::PortSuspendDone:
414 case DsmEvent::LpmSettingChanged:
415 case DsmEvent::PortFault:
416 case DsmEvent::PortNowSuspended:
417 return SmHandled();
418
419 case DsmEvent::ClientResetPipe:
420 case DsmEvent::ClientSetInterface:
421 case DsmEvent::ClientSyncResetPipe:
422 case DsmEvent::ClientResetDevice:
423 case DsmEvent::ClientSelectConfig:
424 case DsmEvent::ClientClearStall:
425 case DsmEvent::ClientUnconfigure:
427 return SmHandled();
428
429 case DsmEvent::HubGetDescriptor:
431 return SmHandled();
432
433 case DsmEvent::PdoPreStart:
434 AckPreStart();
435 return SmHandled();
436
437 case DsmEvent::HubResumed:
438 case DsmEvent::HubStarted:
439 case DsmEvent::HubResumedWithReset:
440 case DsmEvent::HubResumedInS0:
443
444 case DsmEvent::PdoPowerDownFinal:
445 case DsmEvent::PdoPowerUp:
446 case DsmEvent::PdoInstallMsOsExt:
447 case DsmEvent::PdoPowerDown:
450
451 case DsmEvent::HubStopping:
452 case DsmEvent::HubSuspending:
455
456 case DsmEvent::HubStoppingAfterSuspend:
459
460 case DsmEvent::ClientStreams:
462
463 default:
464 return SmUnhandled();
465 }
466}
VOID SignalPnpPowerFailure()
Definition: childpdo.cpp:4031

◆ OnPortOnEvents()

SM_RESULT DeviceMachine::OnPortOnEvents ( _In_ DsmEvent  Event)
private

Definition at line 614 of file devsm_remove.cpp.

616{
617 switch (Event)
618 {
619 case DsmEvent::PortNowDisabled:
620 case DsmEvent::PortNowEnabled:
621 case DsmEvent::PortResetTimeout:
622 case DsmEvent::LpmSettingChanged:
623 case DsmEvent::ClientCyclePort:
624 case DsmEvent::PortDisableDone:
625 case DsmEvent::PortFault:
626 case DsmEvent::NoPingResponse:
627 case DsmEvent::PortSuspendDone:
628 case DsmEvent::PortResetAbortedForSuspend:
629 case DsmEvent::PortNowEnabledOnReconnect:
630 case DsmEvent::PortNowSuspended:
631 case DsmEvent::PortResumeDone:
632 return SmHandled();
633
634 case DsmEvent::ClientUnconfigure:
635 case DsmEvent::ClientSyncResetPipe:
636 case DsmEvent::ClientSetInterface:
637 case DsmEvent::ClientResetDevice:
638 case DsmEvent::ClientResetPipe:
639 case DsmEvent::ClientClearStall:
640 case DsmEvent::ClientSelectConfig:
642 return SmHandled();
643
644 case DsmEvent::HubGetDescriptor:
646 return SmHandled();
647
648 case DsmEvent::PdoPreStart:
649 AckPreStart();
650 return SmHandled();
651
652 case DsmEvent::HubResumed:
653 case DsmEvent::HubStarted:
654 case DsmEvent::HubResumedWithReset:
655 case DsmEvent::HubResumedInS0:
657 return SmTransition(&PortOnEvents);
658
659 case DsmEvent::HubStoppingAfterSuspend:
661 return SmTransition(&PortOnEvents);
662
663 case DsmEvent::PdoPowerDownFinal:
664 case DsmEvent::PdoPowerUp:
665 case DsmEvent::PdoInstallMsOsExt:
666 case DsmEvent::PdoPowerDown:
668 return SmTransition(&PortOnEvents);
669
670 case DsmEvent::HubSuspending:
672
673 case DsmEvent::ClientStreams:
675
676 case DsmEvent::HubStopping:
678 return SmTransition(&PortOnEvents);
679
680 default:
681 return SmUnhandled();
682 }
683}
SM_RESULT PortOnOffForHubSuspend(_In_ DsmEvent Event)

◆ OnPreparingHibernation()

SM_RESULT DeviceMachine::OnPreparingHibernation ( _In_ DsmEvent  Event)
private

Definition at line 411 of file devsm_config.cpp.

413{
414 switch (Event)
415 {
416 case DsmEvent::PortSuspendDone:
418
419 case DsmEvent::PortDetached:
421
422 case DsmEvent::PortFault:
424 return BootDeviceFailed();
425
426 default:
427 return SmUnhandled();
428 }
429}

◆ OnProgrammingEndpoints()

SM_RESULT DeviceMachine::OnProgrammingEndpoints ( _In_ DsmEvent  Event)
private

Definition at line 660 of file devsm_config.cpp.

662{
663 if ((Event != DsmEvent::Succeeded) && (Event != DsmEvent::Failed))
664 return SmUnhandled();
665
666 return (this->*m_AfterProgram)(Event);
667}

◆ OnReadingBos()

SM_RESULT DeviceMachine::OnReadingBos ( _In_ DsmEvent  Event)
private

Definition at line 225 of file devsm_desc.cpp.

227{
228 switch (Event)
229 {
230 case DsmEvent::Succeeded:
231 return SmTransition(&ReadingMsOs);
232
233 case DsmEvent::Failed:
234 return EndWith(DsmEvent::Failed);
235
236 default:
237 return SmUnhandled();
238 }
239}

◆ OnReadingConfigDescriptor()

SM_RESULT DeviceMachine::OnReadingConfigDescriptor ( _In_ DsmEvent  Event)
private

Definition at line 164 of file devsm_desc.cpp.

166{
167 switch (Event)
168 {
169 case DsmEvent::TransferFailed:
170 return EndWith(DsmEvent::Failed);
171
172 case DsmEvent::TransferDone:
174 {
177 }
178
180 return EndWith(DsmEvent::Failed);
181
183
184 default:
185 return SmUnhandled();
186 }
187}
static const State RemainingDescriptors
Definition: devsm.h:552

◆ OnReadingDescriptors()

SM_RESULT DeviceMachine::OnReadingDescriptors ( _In_ DsmEvent  Event)
private

Definition at line 505 of file devsm_enum.cpp.

507{
508 switch (Event)
509 {
510 case DsmEvent::Succeeded:
512
513 case DsmEvent::Failed:
515
516 case DsmEvent::PortDetached:
518
519 case DsmEvent::HubSuspending:
520 case DsmEvent::HubStopping:
523
524 default:
525 return SmUnhandled();
526 }
527}
static const State LinkPowerInEnum
Definition: devsm.h:335
SM_RESULT EnumPortOffWithDevice(_In_ DsmEvent Event)
Definition: devsm_enum.cpp:531

◆ OnReadingDeviceDescriptor()

SM_RESULT DeviceMachine::OnReadingDeviceDescriptor ( _In_ DsmEvent  Event)
private

Definition at line 89 of file devsm_desc.cpp.

91{
92 switch (Event)
93 {
94 case DsmEvent::TransferFailed:
95 return EndWith(DsmEvent::Failed);
96
97 case DsmEvent::TransferDone:
99 return EndWith(DsmEvent::Failed);
100
103
104 default:
105 return SmUnhandled();
106 }
107}
SM_RESULT DescriptorsQueryRegistry()
Definition: devsm_desc.cpp:110

◆ OnReadingDeviceText()

SM_RESULT DeviceMachine::OnReadingDeviceText ( _In_ DsmEvent  Event)
private

Definition at line 313 of file devsm_stopped.cpp.

315{
316 if (Event != DsmEvent::Succeeded)
317 return SmUnhandled();
318
319 return (this->*m_Resume)();
320}

◆ OnReadingLanguages()

SM_RESULT DeviceMachine::OnReadingLanguages ( _In_ DsmEvent  Event)
private

Definition at line 850 of file devsm_desc.cpp.

852{
853 switch (Event)
854 {
855 case DsmEvent::TransferFailed:
856 return StringError();
857
858 case DsmEvent::TransferDone:
859 if (!LanguageIdsValid())
860 return StringError();
861
862 if (ProductNameWanted())
864
866
867 default:
868 return SmUnhandled();
869 }
870}
static const State ReadingProductName
Definition: devsm.h:556
BOOLEAN ProductNameWanted()
Definition: devmisc.cpp:492
SM_RESULT StringError()
Definition: devsm_desc.cpp:873
static const State ReadingQualifier
Definition: devsm.h:557
BOOLEAN LanguageIdsValid()
Definition: devdesc.cpp:797

◆ OnReadingMsOs()

SM_RESULT DeviceMachine::OnReadingMsOs ( _In_ DsmEvent  Event)
private

Definition at line 612 of file devsm_desc.cpp.

614{
615 switch (Event)
616 {
617 case DsmEvent::Succeeded:
620
622
623 case DsmEvent::Failed:
624 return EndWith(DsmEvent::Failed);
625
626 default:
627 return SmUnhandled();
628 }
629}
BOOLEAN ProductStringIndexZero()
Definition: devmisc.cpp:305
static const State ReadingLanguages
Definition: devsm.h:555

◆ OnReadingProductName()

SM_RESULT DeviceMachine::OnReadingProductName ( _In_ DsmEvent  Event)
private

Definition at line 889 of file devsm_desc.cpp.

891{
892 switch (Event)
893 {
894 case DsmEvent::TransferDone:
895 if (ProductNameValid())
897
898 return StringError();
899
900 case DsmEvent::TransferFailed:
901 return StringError();
902
903 default:
904 return SmUnhandled();
905 }
906}

◆ OnReadingQualifier()

SM_RESULT DeviceMachine::OnReadingQualifier ( _In_ DsmEvent  Event)
private

Definition at line 921 of file devsm_desc.cpp.

923{
924 switch (Event)
925 {
926 case DsmEvent::Failed:
927 case DsmEvent::FailEnumeration:
928 return EndWith(DsmEvent::Failed);
929
930 case DsmEvent::Succeeded:
931 return EndWith(DsmEvent::Succeeded);
932
933 default:
934 return SmUnhandled();
935 }
936}

◆ OnReenumerating()

SM_RESULT DeviceMachine::OnReenumerating ( _In_ DsmEvent  Event)
private

Definition at line 104 of file devsm_reenum.cpp.

106{
107 switch (Event)
108 {
109 case DsmEvent::Succeeded:
110 case DsmEvent::Failed:
111 case DsmEvent::FailedDeviceEnabled:
112 case DsmEvent::DetachedDeviceEnabled:
113 case DsmEvent::PortDetached:
114 case DsmEvent::PdoCleanup:
115 return (this->*m_AfterReenum)(Event);
116
117 default:
118 return SmUnhandled();
119 }
120}

◆ OnRemainingDescriptors()

SM_RESULT DeviceMachine::OnRemainingDescriptors ( _In_ DsmEvent  Event)
private

Definition at line 196 of file devsm_desc.cpp.

198{
199 switch (Event)
200 {
201 case DsmEvent::Failed:
202 case DsmEvent::Succeeded:
203 case DsmEvent::HubStopping:
204 case DsmEvent::HubSuspending:
205 case DsmEvent::PortDetached:
206 return EndWith(Event);
207
208 default:
209 return SmUnhandled();
210 }
211}

◆ OnRemovedPortOff()

SM_RESULT DeviceMachine::OnRemovedPortOff ( _In_ DsmEvent  Event)
private

Definition at line 470 of file devsm_remove.cpp.

472{
473 switch (Event)
474 {
475 case DsmEvent::PortDetached:
476 return EndAfterDetach();
477
478 case DsmEvent::PortNowEnabledOnReconnect:
479 case DsmEvent::PortResumeDone:
481
482 default:
483 return SmUnhandled();
484 }
485}

◆ OnRemovedPortOn()

SM_RESULT DeviceMachine::OnRemovedPortOn ( _In_ DsmEvent  Event)
private

Definition at line 488 of file devsm_remove.cpp.

490{
491 switch (Event)
492 {
493 case DsmEvent::PortOffForHubSuspend:
495
496 case DsmEvent::PortDetached:
497 return EndAfterDetach();
498
499 default:
500 return SmUnhandled();
501 }
502}
static const State RemovedPortOff
Definition: devsm.h:755

◆ OnReportingToPnp()

SM_RESULT DeviceMachine::OnReportingToPnp ( _In_ DsmEvent  Event)
private

Definition at line 70 of file devsm_report.cpp.

72{
73 switch (Event)
74 {
75 case DsmEvent::Succeeded:
77
78 case DsmEvent::PortDetached:
80
81 default:
82 return SmUnhandled();
83 }
84}

◆ OnReportingUnknown()

SM_RESULT DeviceMachine::OnReportingUnknown ( _In_ DsmEvent  Event)
private

Definition at line 198 of file devsm_report.cpp.

200{
201 switch (Event)
202 {
203 case DsmEvent::Succeeded:
205 return SmTransition(&FailedDevice);
206
207 case DsmEvent::PortDetached:
208 return EndAfterDetach();
209
210 default:
211 return SmUnhandled();
212 }
213}

◆ OnResettingSuperSpeed()

SM_RESULT DeviceMachine::OnResettingSuperSpeed ( _In_ DsmEvent  Event)
private

Definition at line 358 of file devsm_zero.cpp.

360{
361 switch (Event)
362 {
363 case DsmEvent::Succeeded:
364 if (!SetSpeedFor30())
366
368
369 case DsmEvent::Failed:
371
372 case DsmEvent::HubStopping:
373 case DsmEvent::HubSuspending:
376
377 case DsmEvent::PortDetached:
379
380 default:
381 return SmUnhandled();
382 }
383}
SM_RESULT EndWithHubEvent()
Definition: devsm.cpp:421
BOOLEAN SetSpeedFor30()
Definition: devlpm.cpp:641
SM_RESULT EndFailed()
Definition: devsm.cpp:409
SM_RESULT Zero30Enabled(_In_ DsmEvent Event)
Definition: devsm_zero.cpp:386
SM_RESULT DeleteThen(_In_ DSM_THEN After)
Definition: devsm.cpp:399

◆ OnSettingAddress()

SM_RESULT DeviceMachine::OnSettingAddress ( _In_ DsmEvent  Event)
private

Definition at line 497 of file devsm_zero.cpp.

499{
500 switch (Event)
501 {
502 case DsmEvent::ControllerIoctlFailed:
503 return EndWith(DsmEvent::Failed);
504
505 case DsmEvent::ControllerIoctlDone:
507 return EndWith(DsmEvent::Succeeded);
508
510
511 default:
512 return SmUnhandled();
513 }
514}
SM_RESULT AddressDelayEnded(_In_ DsmEvent Event)
Definition: devsm_zero.cpp:517
BOOLEAN WaitNeededAfterAddress()
Definition: devmisc.cpp:281

◆ OnSettingInterface()

SM_RESULT DeviceMachine::OnSettingInterface ( _In_ DsmEvent  Event)
private

Definition at line 695 of file devsm_config.cpp.

697{
698 switch (Event)
699 {
700 case DsmEvent::Failed:
702
703 case DsmEvent::Succeeded:
705 return ClientDoneOk();
706
707 case DsmEvent::PortDetached:
709 return DetachConfigured();
710
711 default:
712 return SmUnhandled();
713 }
714}
VOID CompleteClientRequestFailed()
Definition: childpdo.cpp:3507
SM_RESULT DetachConfigured()
VOID SetInterfaceInfoInRequest()
Definition: devconfig.cpp:972

◆ OnSettingU2Timeout()

SM_RESULT DeviceMachine::OnSettingU2Timeout ( _In_ DsmEvent  Event)
private

Definition at line 826 of file devsm_stopped.cpp.

828{
829 switch (Event)
830 {
831 case DsmEvent::Succeeded:
832 case DsmEvent::Failed:
833 return (this->*m_Resume)();
834
835 case DsmEvent::PortDetached:
836 return DetachUnconfigured();
837
838 default:
839 return SmUnhandled();
840 }
841}

◆ OnShared()

SM_RESULT DeviceMachine::OnShared ( _In_ DsmEvent  Event)
private

Definition at line 195 of file devsm.cpp.

197{
198 return (this->*m_Next)(Event);
199}

◆ OnStopped()

SM_RESULT DeviceMachine::OnStopped ( _In_ DsmEvent  Event)
private

Definition at line 517 of file devsm_stopped.cpp.

519{
520 switch (Event)
521 {
522 case DsmEvent::ClientResetDevice:
523 case DsmEvent::ClientSyncResetPipe:
524 case DsmEvent::ClientSetInterface:
525 case DsmEvent::ClientClearStall:
526 case DsmEvent::ClientUnconfigure:
527 case DsmEvent::ClientResetPipe:
528 case DsmEvent::ClientSelectConfig:
530 return SmHandled();
531
532 case DsmEvent::DeviceTextQuery:
534 return SmHandled();
535
536 case DsmEvent::HubGetDescriptor:
538 return SmHandled();
539
540 case DsmEvent::ClientCyclePort:
542 return SmHandled();
543
544 case DsmEvent::PdoPowerUp:
546
547 case DsmEvent::HubStopping:
548 case DsmEvent::HubSuspending:
550
551 case DsmEvent::ClientStreams:
552 return ForwardStreams(&Stopped);
553
554 case DsmEvent::PortDetached:
556
557 case DsmEvent::PdoPreStart:
558 return ReenumForPreStart();
559
560 case DsmEvent::PdoCleanup:
562
563 default:
564 return SmUnhandled();
565 }
566}
SM_RESULT StoppedDropPower()
SM_RESULT ReenumForStart(_In_ DSM_REENUM Kind)
static const State Stopped
Definition: devsm.h:836
@ DsmReenumRestart
Definition: devsm.h:137

◆ OnStoppedAddressed()

SM_RESULT DeviceMachine::OnStoppedAddressed ( _In_ DsmEvent  Event)
private

Definition at line 99 of file devsm_stopped.cpp.

101{
102 switch (Event)
103 {
104 case DsmEvent::TimerFired:
105 if (DisableWhenUnused())
107
109 return SmTransition(&StoppedReady);
110
111 case DsmEvent::HubStopping:
113
114 case DsmEvent::PortDetached:
115 return DetachUnconfigured();
116
117 case DsmEvent::ClientUnconfigure:
120
121 case DsmEvent::ClientResetDevice:
123
124 case DsmEvent::ClientSelectConfig:
127
128 case DsmEvent::PdoPreStart:
130
131 case DsmEvent::PdoCleanup:
133
134 case DsmEvent::HubSuspending:
136
137 case DsmEvent::PdoPowerUp:
139
140 case DsmEvent::DeviceTextQuery:
143
144 case DsmEvent::HubGetDescriptor:
148
149 default:
150 return SmUnhandled();
151 }
152}
SM_RESULT UnconfiguredByClient(_In_ DsmEvent Event)
SM_RESULT StoppedPoweredUp()
SM_RESULT StoppedAckPreStart()
SM_RESULT GoStoppedEnumerated()
SM_RESULT ReenumForClientUnconfigured()
BOOLEAN DisableWhenUnused()
Definition: devmisc.cpp:331
SM_RESULT StoppedDisabledForNoDriver(_In_ DsmEvent Event)

◆ OnStoppedEnumeratedHubSuspended()

SM_RESULT DeviceMachine::OnStoppedEnumeratedHubSuspended ( _In_ DsmEvent  Event)
private

Definition at line 688 of file devsm_stopped.cpp.

690{
691 switch (Event)
692 {
693 case DsmEvent::HubGetDescriptor:
695 return SmHandled();
696
697 case DsmEvent::PdoPreStart:
698 AckPreStart();
699 return SmHandled();
700
701 case DsmEvent::PdoInstallMsOsExt:
703 return SmHandled();
704
705 case DsmEvent::HubStoppedHoldingReference:
706 case DsmEvent::HubStopping:
708
709 case DsmEvent::ResumedWithHub:
711
712 case DsmEvent::SuspendedAfterHubResume:
714
715 case DsmEvent::NeedsReenumeration:
716 return ReenumForHubStart();
717
718 case DsmEvent::PortDetached:
719 return DetachUnconfigured();
720
721 case DsmEvent::PdoCleanup:
723
724 default:
725 return SmUnhandled();
726 }
727}
SM_RESULT StoppedDisabledForHub(_In_ DsmEvent Event)
SM_RESULT StoppedPortResumed(_In_ DsmEvent Event)
SM_RESULT StoppedDisabledForCleanup(_In_ DsmEvent Event)
VOID ReleasePnpWaiter()
Definition: childpdo.cpp:4039
SM_RESULT ReenumForHubStart()

◆ OnStoppedHubSuspended()

SM_RESULT DeviceMachine::OnStoppedHubSuspended ( _In_ DsmEvent  Event)
private

Definition at line 578 of file devsm_stopped.cpp.

580{
581 switch (Event)
582 {
583 case DsmEvent::ClientUnconfigure:
584 case DsmEvent::ClientResetPipe:
585 case DsmEvent::ClientSetInterface:
586 case DsmEvent::ClientResetDevice:
587 case DsmEvent::ClientSelectConfig:
588 case DsmEvent::ClientClearStall:
589 case DsmEvent::ClientSyncResetPipe:
591 return SmHandled();
592
593 case DsmEvent::HubGetDescriptor:
595 return SmHandled();
596
597 case DsmEvent::PdoPreStart:
598 AckPreStart();
599 return SmHandled();
600
601 case DsmEvent::DeviceTextQuery:
603 return SmHandled();
604
605 case DsmEvent::ClientCyclePort:
607 return SmHandled();
608
609 case DsmEvent::LpmSettingChanged:
610 return SmHandled();
611
612 case DsmEvent::PdoInstallMsOsExt:
614 return SmHandled();
615
616 case DsmEvent::ResumedWithHub:
617 case DsmEvent::NeedsReenumeration:
618 case DsmEvent::SuspendedAfterHubResume:
620
621 case DsmEvent::HubStoppedHoldingReference:
623
624 case DsmEvent::ClientStreams:
626
627 case DsmEvent::PortDetached:
629
630 case DsmEvent::PdoCleanup:
632
633 case DsmEvent::HubStoppingAfterSuspend:
635
636 case DsmEvent::HubStarted:
638
639 default:
640 return SmUnhandled();
641 }
642}
SM_RESULT StoppedPortOffAfterHubResume(_In_ DsmEvent Event)
SM_RESULT StoppedAckHubStop()
static const State StoppedHubSuspended
Definition: devsm.h:837
SM_RESULT StoppedHubStarted()

◆ OnStoppedReady()

SM_RESULT DeviceMachine::OnStoppedReady ( _In_ DsmEvent  Event)
private

Definition at line 422 of file devsm_stopped.cpp.

424{
425 switch (Event)
426 {
427 case DsmEvent::ClientSelectConfig:
428 case DsmEvent::ClientResetPipe:
429 case DsmEvent::ClientClearStall:
430 case DsmEvent::ClientResetDevice:
431 case DsmEvent::ClientUnconfigure:
432 case DsmEvent::ClientSyncResetPipe:
433 case DsmEvent::ClientSetInterface:
435 return SmHandled();
436
437 case DsmEvent::ClientCyclePort:
439 return SmHandled();
440
441 case DsmEvent::DeviceTextQuery:
443 return SmHandled();
444
445 case DsmEvent::HubGetDescriptor:
447 return SmHandled();
448
449 case DsmEvent::ClientStreams:
451
452 case DsmEvent::PdoPowerUp:
454
455 case DsmEvent::PdoPreStart:
456 AllowIo();
458 return SmTransition(&StoppedReady);
459
460 case DsmEvent::PortDetached:
461 return DetachUnconfigured();
462
463 case DsmEvent::PdoCleanup:
465
466 case DsmEvent::LpmSettingChanged:
469
470 case DsmEvent::HubStopping:
471 case DsmEvent::HubSuspending:
473
474 default:
475 return SmUnhandled();
476 }
477}
SM_RESULT GoStoppedEnabled()
VOID CompletePreStart()
Definition: childpdo.cpp:4045
static const State SettingU2Timeout
Definition: devsm.h:841
VOID AllowIo()
Definition: childpdo.cpp:4078
SM_RESULT StoppedEnabledDisabledForHub(_In_ DsmEvent Event)

◆ OnSuspendedConfigured()

SM_RESULT DeviceMachine::OnSuspendedConfigured ( _In_ DsmEvent  Event)
private

Definition at line 923 of file devsm_config.cpp.

925{
926 switch (Event)
927 {
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:
936 return SmHandled();
937
938 case DsmEvent::NoPingResponse:
939 case DsmEvent::LpmSettingChanged:
940 return SmHandled();
941
942 case DsmEvent::DeviceTextQuery:
944 return SmHandled();
945
946 case DsmEvent::ClientCyclePort:
948 return SmHandled();
949
950 case DsmEvent::HubGetDescriptor:
952 return SmHandled();
953
954 case DsmEvent::NeedsReenumeration:
955 return ReenumForResume(TRUE);
956
957 case DsmEvent::ResumeDone:
959
960 case DsmEvent::HubStopping:
963
964 case DsmEvent::PortDetached:
966
967 case DsmEvent::PdoCleanup:
970
971 case DsmEvent::ClientStreams:
973
974 case DsmEvent::PortFault:
975 return ConfiguredCyclePort();
976
977 case DsmEvent::HubStoppingAfterSuspend:
980
981 case DsmEvent::PdoPreStart:
984
985 default:
986 return SmUnhandled();
987 }
988}
SM_RESULT ReenumForResume(_In_ BOOLEAN Configured)
SM_RESULT ConfiguredRestartWhileSuspended()
static const State SuspendedConfigured
Definition: devsm.h:1070

◆ OnSuspendedHubSuspended()

SM_RESULT DeviceMachine::OnSuspendedHubSuspended ( _In_ DsmEvent  Event)
private

Definition at line 746 of file devsm_power.cpp.

748{
749 switch (Event)
750 {
751 case DsmEvent::NeedsReenumeration:
752 if (m_D3Cold)
754
756
757 case DsmEvent::ResumedWithHub:
758 if (m_D3Cold)
760
761 return SuspendedResumedByPort();
762
763 case DsmEvent::SuspendedAfterHubResume:
764 if (m_D3Cold)
766
769
771
772 default:
773 return SmUnhandled();
774 }
775}
static const State AwaitingPowerUpForReset
Definition: devsm.h:953
BOOLEAN ResetAtResumeMarked()
Definition: childpdo.cpp:4116

◆ OnSuspendedUnconfigured()

SM_RESULT DeviceMachine::OnSuspendedUnconfigured ( _In_ DsmEvent  Event)
private

Definition at line 229 of file devsm_power.cpp.

231{
232 switch (Event)
233 {
234 case DsmEvent::ClientSetInterface:
235 case DsmEvent::ClientResetPipe:
236 case DsmEvent::ClientSyncResetPipe:
237 case DsmEvent::ClientUnconfigure:
238 case DsmEvent::ClientSelectConfig:
239 case DsmEvent::ClientResetDevice:
240 case DsmEvent::ClientClearStall:
242 return SmHandled();
243
244 case DsmEvent::NoPingResponse:
245 return SmHandled();
246
247 case DsmEvent::DeviceTextQuery:
249 return SmHandled();
250
251 case DsmEvent::ClientCyclePort:
253 return SmHandled();
254
255 case DsmEvent::HubGetDescriptor:
257 return SmHandled();
258
259 case DsmEvent::NeedsReenumeration:
260 return ReenumForResume(FALSE);
261
262 case DsmEvent::ResumeDone:
265
266 case DsmEvent::PdoCleanup:
269
270 case DsmEvent::PortDetached:
271 return DetachUnconfigured();
272
273 case DsmEvent::HubStopping:
276
277 case DsmEvent::ClientStreams:
279
280 case DsmEvent::HubStoppingAfterSuspend:
283
284 case DsmEvent::PortFault:
286
287 case DsmEvent::PdoPreStart:
289
290 default:
291 return SmUnhandled();
292 }
293}
SM_RESULT UnconfiguredDisabledForRestart(_In_ DsmEvent Event)
static const State SuspendedUnconfigured
Definition: devsm.h:949

◆ OnSuspendingConfigured()

SM_RESULT DeviceMachine::OnSuspendingConfigured ( _In_ DsmEvent  Event)
private

Definition at line 868 of file devsm_config.cpp.

870{
871 switch (Event)
872 {
873 case DsmEvent::Succeeded:
874 case DsmEvent::Failed:
876
877 case DsmEvent::PortDetached:
879 return DetachConfigured();
880
881 case DsmEvent::HubSuspending:
884
885 default:
886 return SmUnhandled();
887 }
888}
SM_RESULT ConfiguredPurgedWhileSuspending(_In_ DsmEvent Event)

◆ OnSuspendingUnconfigured()

SM_RESULT DeviceMachine::OnSuspendingUnconfigured ( _In_ DsmEvent  Event)
private

Definition at line 199 of file devsm_power.cpp.

201{
202 switch (Event)
203 {
204 case DsmEvent::Succeeded:
205 case DsmEvent::Failed:
207
208 case DsmEvent::HubSuspending:
211
212 case DsmEvent::PortDetached:
214 return DetachUnconfigured();
215
216 default:
217 return SmUnhandled();
218 }
219}
static const State UnconfiguredHubSuspended
Definition: devsm.h:950

◆ OnUnconfiguredHubSuspended()

SM_RESULT DeviceMachine::OnUnconfiguredHubSuspended ( _In_ DsmEvent  Event)
private

Definition at line 306 of file devsm_power.cpp.

308{
309 switch (Event)
310 {
311 case DsmEvent::NeedsReenumeration:
313
314 case DsmEvent::ResumedWithHub:
316
317 case DsmEvent::SuspendedAfterHubResume:
319
320 case DsmEvent::PortDetached:
321 return DetachUnconfigured();
322
323 default:
324 return SmUnhandled();
325 }
326}
SM_RESULT UnconfiguredResumedWithHub(_In_ DsmEvent Event)

◆ OnUnconfiguredOn()

SM_RESULT DeviceMachine::OnUnconfiguredOn ( _In_ DsmEvent  Event)
private

Definition at line 71 of file devsm_power.cpp.

73{
74 switch (Event)
75 {
76 case DsmEvent::ClientResetPipe:
77 case DsmEvent::ClientClearStall:
78 case DsmEvent::ClientSetInterface:
79 case DsmEvent::ClientSyncResetPipe:
81 return SmHandled();
82
83 case DsmEvent::DeviceTextQuery:
85 return SmHandled();
86
87 case DsmEvent::ClientCyclePort:
89 return SmHandled();
90
91 case DsmEvent::NoPingResponse:
92 return SmHandled();
93
94 case DsmEvent::HubSuspending:
96
97 case DsmEvent::HubGetDescriptor:
101
102 case DsmEvent::ClientUnconfigure:
105
106 case DsmEvent::ClientResetDevice:
108
109 case DsmEvent::ClientSelectConfig:
112
113 case DsmEvent::PdoPowerDown:
115
116 case DsmEvent::PortDetached:
117 return DetachUnconfigured();
118
119 case DsmEvent::LpmSettingChanged:
122
123 case DsmEvent::PdoPowerDownFinal:
124 if (DisableWhenUnused())
126
129 return SmTransition(&StoppedReady);
130
131 case DsmEvent::ClientStreams:
133
134 default:
135 return SmUnhandled();
136 }
137}
static const State SuspendingUnconfigured
Definition: devsm.h:948
SM_RESULT UnconfiguredDisabledForStop(_In_ DsmEvent Event)
SM_RESULT UnconfiguredSuspendedForHub(_In_ DsmEvent Event)
SM_RESULT GoUnconfiguredOn()
Definition: devsm_power.cpp:63

◆ OnUpdatingDevice()

SM_RESULT DeviceMachine::OnUpdatingDevice ( _In_ DsmEvent  Event)
private

Definition at line 582 of file devsm_enum.cpp.

584{
585 switch (Event)
586 {
587 case DsmEvent::ControllerIoctlFailed:
588 case DsmEvent::ControllerExitLatencyTooLarge:
590
591 case DsmEvent::ControllerIoctlDone:
592 if (SupportsPdCharging())
594
595 return EndWith(DsmEvent::Succeeded);
596
597 default:
598 return SmUnhandled();
599 }
600}
BOOLEAN SupportsPdCharging()
Definition: devmisc.cpp:293
static const State SettingPdCharging
Definition: devsm.h:244
SM_RESULT EnumPdChargingSet(_In_ DsmEvent Event)
Definition: devsm_enum.cpp:603

◆ OnUpdatingLinkPower()

SM_RESULT DeviceMachine::OnUpdatingLinkPower ( _In_ DsmEvent  Event)
private

Definition at line 840 of file devsm_config.cpp.

842{
843 switch (Event)
844 {
845 case DsmEvent::Succeeded:
846 return SmTransition(&ConfiguredOn);
847
848 case DsmEvent::Failed:
849 return ConfiguredCyclePort();
850
851 case DsmEvent::PortDetached:
852 return PurgeOnDetach();
853
854 default:
855 return SmUnhandled();
856 }
857}

◆ PdoStarted()

BOOLEAN DeviceMachine::PdoStarted ( )
private

Definition at line 4122 of file childpdo.cpp.

4123{
4124 return m_Device->m_Pdo != NULL && m_Device->m_Pdo->HasFlag(PdoFlag::Started);
4125}

Referenced by BackToConfigured(), and BackToUnconfigured().

◆ PipeIsIsochronous()

BOOLEAN DeviceMachine::PipeIsIsochronous ( )
private

Definition at line 3885 of file childpdo.cpp.

3886{
3888}
HubPipe * m_TargetPipe
Definition: hubchild.h:438
PUSB_ENDPOINT_DESCRIPTOR Descriptor
Definition: hubchild.h:172
#define USB_ENDPOINT_TYPE_ISOCHRONOUS
Definition: usb100.h:63
#define USB_ENDPOINT_TYPE_MASK
Definition: usb100.h:61

Referenced by OnConfigured().

◆ PipeIsZeroBandwidth()

BOOLEAN DeviceMachine::PipeIsZeroBandwidth ( )
private

Definition at line 3879 of file childpdo.cpp.

3880{
3882}
BOOLEAN ZeroBandwidth
Definition: hubchild.h:178

Referenced by OnConfigured().

◆ PortOnOffForHubSuspend()

SM_RESULT DeviceMachine::PortOnOffForHubSuspend ( _In_ DsmEvent  Event)
private

Definition at line 686 of file devsm_remove.cpp.

688{
689 switch (Event)
690 {
691 case DsmEvent::PortDetached:
692 return EndWith(DsmEvent::PortDetached);
693
694 case DsmEvent::PortFault:
695 case DsmEvent::PortDisableDone:
697 return EndWith(DsmEvent::PortOffForHubSuspend);
698
699 default:
700 return SmUnhandled();
701 }
702}

Referenced by OnPortOnEvents().

◆ PrepareConfigLists()

BOOLEAN DeviceMachine::PrepareConfigLists ( )
private

Definition at line 557 of file devconfig.cpp.

558{
561 struct _URB_SELECT_CONFIGURATION* Select = &Urb->UrbSelectConfiguration;
568 PUCHAR UrbEnd;
569 PUCHAR ConfigEnd;
570 BOOLEAN HasAlternates;
571 ULONG Total = 0;
573 KIRQL Irql;
574
575 Child->m_EnableCount = 0;
576
577 KeAcquireSpinLock(&Child->m_ConfigLock, &Irql);
578 Child->ClearState(ChildState::ConfigurationValid);
579 Child->m_OldConfig = Child->m_CurrentConfig;
580 Child->m_CurrentConfig = NULL;
581 Child->ClearState(ChildState::AltSettingFiltered);
582 KeReleaseSpinLock(&Child->m_ConfigLock, Irql);
583
585 if (!NT_SUCCESS(Status))
586 goto Failed;
587
588 KeAcquireSpinLock(&Child->m_ConfigLock, &Irql);
589 Child->m_CurrentConfig = Config;
590 KeReleaseSpinLock(&Child->m_ConfigLock, Irql);
591
592 ConfigEnd = (PUCHAR)&Config->Descriptor + Config->Descriptor.wTotalLength;
593 UrbEnd = (PUCHAR)Urb + Urb->UrbHeader.Length;
594
595 for (Info = &Select->Interface; (PUCHAR)Info + sizeof(USHORT) < UrbEnd; Info = Next)
596 {
598 &Config->Descriptor,
599 Info->InterfaceNumber,
600 Info->AlternateSetting,
601 -1,
602 -1,
603 -1,
604 &HasAlternates);
605 if (Descriptor == NULL || Info->Length == 0)
606 {
607 DPRINT1("Device %p SELECT_CONFIGURATION names missing interface %u alternate %u\n",
608 Child, Info->InterfaceNumber, Info->AlternateSetting);
611 goto Failed;
612 }
613
614 if (HubChildSettingFiltered(Child, Info->InterfaceNumber, Info->AlternateSetting))
615 {
616 DPRINT("Device %p interface %u alternate %u is filtered\n",
617 Child, Info->InterfaceNumber, Info->AlternateSetting);
618 Child->SetState(ChildState::AltSettingFiltered);
619 }
620
621 Info->NumberOfPipes = Descriptor->bNumEndpoints;
622 Total += Descriptor->bNumEndpoints;
624
626 if (!NT_SUCCESS(Status))
627 goto Failed;
628
629 Info->InterfaceHandle = Interface;
630
631 KeAcquireSpinLock(&Child->m_ConfigLock, &Irql);
632 InsertTailList(&Config->Interfaces, &Interface->Link);
633 KeReleaseSpinLock(&Child->m_ConfigLock, Irql);
634
635 Info->Class = Descriptor->bInterfaceClass;
636 Info->SubClass = Descriptor->bInterfaceSubClass;
637 Info->Protocol = Descriptor->bInterfaceProtocol;
638
640 if (!NT_SUCCESS(Status))
641 {
643 goto Failed;
644 }
645 }
646
647 /* There is never a descriptor for endpoint zero */
649 {
650 DPRINT1("Device %p configuration has an endpoint zero descriptor\n", Child);
651 Child->m_LastUsbdStatus = USBD_STATUS_BAD_ENDPOINT_ADDRESS;
653 goto Failed;
654 }
655
657 if (!NT_SUCCESS(Status))
658 {
660 goto Failed;
661 }
662
663 Config->EndpointCount = Total;
664
665 /* The old configuration's pipes are collected into the same arrays, so size for the larger count */
667 (Child->m_OldConfig != NULL) ? max(Total, Child->m_OldConfig->EndpointCount) : Total);
668 if (!NT_SUCCESS(Status))
669 goto Failed;
670
671 if (Child->m_OldConfig != NULL)
672 {
673 Child->m_UnchangedCount = 0;
674 Child->m_DisableCount = 0;
675
676 for (Entry = Child->m_OldConfig->Interfaces.Flink;
677 Entry != &Child->m_OldConfig->Interfaces;
678 Entry = Entry->Flink)
679 {
681 }
682 }
683
684 Select->ConfigurationHandle = Config;
685 return TRUE;
686
687Failed:
689
690 KeAcquireSpinLock(&Child->m_ConfigLock, &Irql);
691 Child->m_CurrentConfig = Child->m_OldConfig;
692 Child->m_OldConfig = NULL;
693 Child->SetState(ChildState::ConfigurationValid);
694 KeReleaseSpinLock(&Child->m_ConfigLock, Irql);
695
696 if (Config != NULL)
698
699 Select->ConfigurationHandle = NULL;
700 return FALSE;
701}
PUSB_INTERFACE_DESCRIPTOR NTAPI HubDescFindInterface(_In_ PUSB_CONFIGURATION_DESCRIPTOR Config, _In_ PVOID Position, _In_ LONG Number, _In_ LONG Alternate, _In_ LONG Class, _In_ LONG SubClass, _In_ LONG Protocol, _Out_opt_ PBOOLEAN HasAlternates)
Definition: desccheck.cpp:3371
static NTSTATUS NTAPI HubAllocateInterface(_In_ PUSB_INTERFACE_DESCRIPTOR Descriptor, _In_ BOOLEAN HasAlternates, _Out_ HubInterface **Result)
Definition: devconfig.cpp:207
static VOID NTAPI HubChildRecordFailure(_In_ HubChild *Child, _In_ NTSTATUS Status)
Definition: devconfig.cpp:544
static NTSTATUS NTAPI HubAllocateConfiguration(_In_ PUSB_CONFIGURATION_DESCRIPTOR Source, _Out_ HubConfiguration **Result)
Definition: devconfig.cpp:170
static NTSTATUS NTAPI HubConfigCheckDuplicates(_In_ HubConfiguration *Config)
Definition: devconfig.cpp:463
static NTSTATUS NTAPI HubChildInitPipes(_In_ HubChild *Child, _Inout_ PUSBD_INTERFACE_INFORMATION Info, _Inout_ HubInterface *Interface, _In_ PUCHAR Walk, _In_ PUCHAR End)
Definition: devconfig.cpp:328
static BOOLEAN NTAPI HubConfigHasEndpointZero(_In_ HubConfiguration *Config)
Definition: devconfig.cpp:442
static VOID NTAPI HubFreeConfiguration(_In_ HubChild *Child, _In_ HubConfiguration *Config)
Definition: devconfig.cpp:248
static PURB NTAPI HubChildClientUrb(_In_ HubChild *Child)
Definition: devconfig.cpp:29
static NTSTATUS NTAPI HubChildSizeEndpointArrays(_In_ HubChild *Child, _In_ ULONG Count)
Definition: devconfig.cpp:94
static BOOLEAN NTAPI HubChildSettingFiltered(_In_ HubChild *Child, _In_ UCHAR InterfaceNumber, _In_ UCHAR AlternateSetting)
Definition: devconfig.cpp:43
#define InsertTailList(ListHead, Entry)
PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor
Definition: usb.h:321
USBD_INTERFACE_INFORMATION Interface
Definition: usb.h:323
USBD_CONFIGURATION_HANDLE ConfigurationHandle
Definition: usb.h:322
struct _USBD_INTERFACE_INFORMATION * PUSBD_INTERFACE_INFORMATION
#define USBD_STATUS_BAD_ENDPOINT_ADDRESS
Definition: usb.h:239
#define USBD_STATUS_INVALID_CONFIGURATION_DESCRIPTOR
Definition: usb.h:214

Referenced by SelectConfigValidate().

◆ PrepareInterfaceLists()

BOOLEAN DeviceMachine::PrepareInterfaceLists ( )
private

Definition at line 706 of file devconfig.cpp.

707{
710 PUSBD_INTERFACE_INFORMATION Info = &Urb->UrbSelectInterface.Interface;
711 HubConfiguration* Config = Child->m_CurrentConfig;
714 HubInterface* Old = NULL;
717 BOOLEAN HasAlternates = FALSE;
718 ULONG Total;
719 ULONG Index;
721 KIRQL Irql;
722
723 Child->m_NewInterface = NULL;
724 Child->m_EnableCount = 0;
725 Child->ClearState(ChildState::AltSettingFiltered);
726
727 /* The PDO completion path sets it again whatever happens here */
728 KeAcquireSpinLock(&Child->m_ConfigLock, &Irql);
729 Child->ClearState(ChildState::ConfigurationValid);
730 KeReleaseSpinLock(&Child->m_ConfigLock, Irql);
731
732 if (Config != NULL)
733 {
735 &Config->Descriptor,
736 Info->InterfaceNumber,
737 Info->AlternateSetting,
738 -1,
739 -1,
740 -1,
741 &HasAlternates);
742 }
743
744 if (Descriptor == NULL)
745 {
746 DPRINT1("Device %p SELECT_INTERFACE names missing interface %u alternate %u\n",
747 Child, Info->InterfaceNumber, Info->AlternateSetting);
748 Child->m_LastUsbdStatus = USBD_STATUS_INTERFACE_NOT_FOUND;
750 goto Failed;
751 }
752
753 if (HubChildSettingFiltered(Child, Info->InterfaceNumber, Info->AlternateSetting))
754 {
755 DPRINT("Device %p interface %u alternate %u is filtered\n",
756 Child, Info->InterfaceNumber, Info->AlternateSetting);
757 Child->SetState(ChildState::AltSettingFiltered);
758 }
759
761 Descriptor->bNumEndpoints * sizeof(USBD_PIPE_INFORMATION));
762 Info->Class = 0;
763 Info->SubClass = 0;
764 Info->Protocol = 0;
765 Info->Reserved = 0;
766 Info->InterfaceHandle = NULL;
767 Info->NumberOfPipes = Descriptor->bNumEndpoints;
768
770 if (!NT_SUCCESS(Status))
771 goto Failed;
772
773 Child->m_NextInterface = HasAlternates ? Interface : NULL;
774
775 Info->Class = Descriptor->bInterfaceClass;
776 Info->SubClass = Descriptor->bInterfaceSubClass;
777 Info->Protocol = Descriptor->bInterfaceProtocol;
778
780 Info,
781 Interface,
782 (PUCHAR)Descriptor + Descriptor->bLength,
783 (PUCHAR)&Config->Descriptor + Config->Descriptor.wTotalLength);
784 if (!NT_SUCCESS(Status))
785 {
786 Child->m_LastUsbdStatus = USBD_STATUS_INTERFACE_NOT_FOUND;
787 goto Failed;
788 }
789
791 {
792 DPRINT1("Device %p interface %u has an endpoint zero descriptor\n", Child, Info->InterfaceNumber);
793 Child->m_LastUsbdStatus = USBD_STATUS_BAD_ENDPOINT_ADDRESS;
795 goto Failed;
796 }
797
798 /* The interface being replaced is only marked old once nothing can fail anymore */
799 Child->m_OldInterface = NULL;
800
801 for (Entry = Config->Interfaces.Flink; Entry != &Config->Interfaces; Entry = Entry->Flink)
802 {
804
805 if (Other->Descriptor->bInterfaceNumber == Info->InterfaceNumber)
806 {
807 Old = Other;
808 continue;
809 }
810
812 if (!NT_SUCCESS(Status))
813 goto Failed;
814 }
815
816 Total = Config->EndpointCount + Interface->PipeCount;
817
819 if (!NT_SUCCESS(Status))
820 goto Failed;
821
822 if (Old != NULL)
823 Total -= Old->PipeCount;
824
825 Child->m_UnchangedCount = 0;
826 Child->m_DisableCount = 0;
827
828 if (Old != NULL)
829 {
830 KeAcquireSpinLock(&Child->m_ConfigLock, &Irql);
831 RemoveEntryList(&Old->Link);
832 KeReleaseSpinLock(&Child->m_ConfigLock, Irql);
833
834 Child->m_OldInterface = Old;
836 }
837
838 for (Entry = Config->Interfaces.Flink; Entry != &Config->Interfaces; Entry = Entry->Flink)
839 {
841
842 for (Index = 0; Index < Other->PipeCount; Index++)
843 Child->m_EndpointsUnchanged[Child->m_UnchangedCount++] = Other->Pipes[Index].Endpoint;
844 }
845
846 KeAcquireSpinLock(&Child->m_ConfigLock, &Irql);
847 InsertTailList(&Config->Interfaces, &Interface->Link);
848 Config->EndpointCount = Total;
849 KeReleaseSpinLock(&Child->m_ConfigLock, Irql);
850
851 Child->m_NewInterface = Interface;
852 Info->InterfaceHandle = Interface;
853 return TRUE;
854
855Failed:
857
858 if (Interface != NULL)
859 {
860 if (Child->m_NextInterface == Interface)
861 Child->m_NextInterface = NULL;
862
863 WdfObjectDelete(Interface->Memory);
864 }
865
866 Info->InterfaceHandle = (USBD_INTERFACE_HANDLE)(LONG_PTR)-1;
867 return FALSE;
868}
static NTSTATUS NTAPI HubInterfacesShareEndpoints(_In_ HubInterface *First, _In_ HubInterface *Second)
Definition: devconfig.cpp:509
static BOOLEAN NTAPI HubInterfaceHasEndpointZero(_In_ HubInterface *Interface)
Definition: devconfig.cpp:425
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
@ Other
Definition: video.h:273
ULONG PipeCount
Definition: hubchild.h:189
LIST_ENTRY Link
Definition: hubchild.h:187
#define FIELD_OFFSET(t, f)
Definition: typedefs.h:255
struct _USBD_PIPE_INFORMATION USBD_PIPE_INFORMATION
PVOID USBD_INTERFACE_HANDLE
Definition: usb.h:243
#define USBD_STATUS_INTERFACE_NOT_FOUND
Definition: usb.h:218
WdfObjectDelete(String)

Referenced by InterfaceStart().

◆ PrepareListsForReset()

BOOLEAN DeviceMachine::PrepareListsForReset ( )
private

Definition at line 872 of file devconfig.cpp.

873{
875 HubConfiguration* Config = Child->m_CurrentConfig;
877 HubPipe* Pipe;
879 ULONG Index;
880
881 Child->m_EnableCount = 0;
882 Child->m_DisableCount = 0;
883 Child->m_UnchangedCount = 0;
884
885 if (Config == NULL)
886 return TRUE;
887
888 /* A failed earlier resize can leave the arrays short */
889 if (!NT_SUCCESS(HubChildSizeEndpointArrays(Child, Config->EndpointCount)))
890 return FALSE;
891
892 for (Entry = Config->Interfaces.Flink; Entry != &Config->Interfaces; Entry = Entry->Flink)
893 {
895 if (Interface->HasAlternateSettings)
896 Interface->NeedsSetInterface = TRUE;
897
898 for (Index = 0; Index < Interface->PipeCount; Index++)
899 {
900 Pipe = &Interface->Pipes[Index];
901
902 if (Pipe->ZeroBandwidth)
903 {
904 Pipe->State = PipeState::Disabled;
905 Child->m_EndpointsUnchanged[Child->m_UnchangedCount++] = Pipe->Endpoint;
906 }
907 else
908 {
909 Pipe->State = PipeState::PendingEnable;
910 Child->m_EndpointsToEnable[Child->m_EnableCount++] = Pipe->Endpoint;
911 }
912 }
913 }
914
915 return TRUE;
916}

Referenced by ReenumDoneForBootDevice(), ReenumDoneForBootResume(), ReenumDoneForClientConfigured(), ReenumDoneForHubResumeConfigured(), and ReenumDoneForResumeConfigured().

◆ ProductNameValid()

BOOLEAN DeviceMachine::ProductNameValid ( )
private

Definition at line 803 of file devdesc.cpp.

804{
806}
PUSB_STRING_DESCRIPTOR m_ProductString
Definition: hubchild.h:391
#define HUB_ENUM_BAD_PRODUCT_STRING
Definition: hubid.h:30

Referenced by DeviceTextRead(), and OnReadingProductName().

◆ ProductNameWanted()

BOOLEAN DeviceMachine::ProductNameWanted ( )
private

Definition at line 492 of file devmisc.cpp.

493{
494 if (m_Device->HasHack(ChildHack::DisableSerialNumber))
495 return FALSE;
496
498}
BOOLEAN NTAPI HubIdLanguageSupported(_In_ HubChild *Child, _In_ USHORT Language)
Definition: hubid.cpp:911
#define MAKELANGID(p, s)
Definition: nls.h:15
#define LANG_ENGLISH
Definition: nls.h:52
#define SUBLANG_ENGLISH_US
Definition: nls.h:222

Referenced by OnReadingLanguages().

◆ ProductStringIndexZero()

BOOLEAN DeviceMachine::ProductStringIndexZero ( )
private

Definition at line 305 of file devmisc.cpp.

306{
308}

Referenced by OnReadingMsOs().

◆ ProgramEndpoints()

VOID DeviceMachine::ProgramEndpoints ( )
private

Definition at line 979 of file devhcd.cpp.

980{
982 BOOLEAN FailAlternate = Child->HasState(ChildState::AltSettingFiltered);
984
985 /* Selecting a zero bandwidth setting takes the bandwidth popup away */
986 if (Child->m_DisableCount == 0 && Child->m_EnableCount == 0)
987 {
988 DPRINT("Device %p has no endpoints to program\n", Child);
990 Child->Post(DsmEvent::ControllerIoctlDone);
991 return;
992 }
993
994 /* The flag stays set on this path */
995 if (Child->m_DisableCount == 0 && FailAlternate)
996 {
997 DPRINT1("Device %p select failed by the alternate setting filter\n", Child);
998 HubConfigMovePipes(Child->m_CurrentConfig, PipeState::PendingEnable, PipeState::Disabled);
1000 Child->Post(DsmEvent::ControllerIoctlFailed);
1001 return;
1002 }
1003
1005
1006 if (!FailAlternate)
1007 {
1008 Configure->EndpointsToEnableCount = Child->m_EnableCount;
1009 Configure->EndpointsToEnable = Child->m_EndpointsToEnable;
1010 }
1011
1012 Configure->EndpointsToDisableCount = Child->m_DisableCount;
1013 Configure->EndpointsToDisable = Child->m_EndpointsToDisable;
1014 Configure->EndpointsEnabledAndUnchangedCount = Child->m_UnchangedCount;
1015 Configure->EndpointsEnabledAndUnchanged = Child->m_EndpointsUnchanged;
1016
1017 if (Child->m_CurrentConfig != NULL)
1018 Configure->ConfigurationValue = Child->m_CurrentConfig->Descriptor.bConfigurationValue;
1019
1020 /* The next and new interfaces are always set together */
1021 if (Child->m_NextInterface != NULL && Child->m_NewInterface != NULL)
1022 {
1023 Configure->InterfaceNumber = Child->m_NewInterface->Descriptor->bInterfaceNumber;
1024 Configure->AlternateSetting = Child->m_NewInterface->Descriptor->bAlternateSetting;
1025 }
1026
1028}
static VOID NTAPI HubChildStopBandwidthTimer(_In_ HubChild *Child)
Definition: devhcd.cpp:93
#define UCX_SIZE_CONFIGURE
Definition: devhcd.cpp:24
#define IOCTL_UCXHUB_ENDPOINTS_CONFIGURE
Definition: hubucx.h:61
static LRESULT Configure(const CodecInfo *pi, HWND hWnd)
Definition: msrle32.c:1192
ENDPOINTS_CONFIGURE Configure
Definition: hubchild.h:219
#define USBD_STATUS_NO_BANDWIDTH
Definition: usb.h:206

Referenced by DisableAllEndpoints(), DisableNewInterfaceEndpoints(), DisablePendingEndpoints(), EnterProgrammingEndpoints(), LpmCompute(), LpmDetachCleanup(), LpmFailCleanup(), and LpmFinalProgram().

◆ PurgeDeviceIo()

VOID DeviceMachine::PurgeDeviceIo ( )
private

Definition at line 908 of file devhcd.cpp.

909{
911
912 Payload->Purge.OnSuspend = FALSE;
914}
#define UCX_SIZE_PURGE
Definition: devhcd.cpp:21
#define IOCTL_UCXHUB_DEVICE_PURGE_IO
Definition: hubucx.h:59
USBDEVICE_PURGEIO Purge
Definition: hubchild.h:215

Referenced by FailIoAndPurge(), and NotifyAndPurgeIo().

◆ PurgeDeviceTreeIo()

VOID DeviceMachine::PurgeDeviceTreeIo ( )
private

Definition at line 927 of file devhcd.cpp.

Referenced by EnterReenumerating().

◆ PurgedOnDetach()

SM_RESULT DeviceMachine::PurgedOnDetach ( _In_ DsmEvent  Event)
private

Definition at line 70 of file devsm_boot.cpp.

72{
73 if (Event != DsmEvent::ControllerIoctlDone)
74 return SmUnhandled();
75
76 if (IsBootDevice())
78
79 return DetachConfigured();
80}

Referenced by PurgeOnDetach().

◆ PurgeIoForHibernation()

VOID DeviceMachine::PurgeIoForHibernation ( )
private

Definition at line 387 of file devsm_config.cpp.

388{
391}

Referenced by OnConfiguredOn().

◆ PurgeIoForSuspend()

◆ PurgeOnDetach()

SM_RESULT DeviceMachine::PurgeOnDetach ( )
private

Definition at line 56 of file devsm_boot.cpp.

57{
60}
SM_RESULT PurgedOnDetach(_In_ DsmEvent Event)
Definition: devsm_boot.cpp:70
VOID NotifyAndPurgeIo()
Definition: devsm_boot.cpp:63

Referenced by OnConfiguredOn(), and OnUpdatingLinkPower().

◆ QualifierRead()

SM_RESULT DeviceMachine::QualifierRead ( _In_ DsmEvent  Event)
private

Definition at line 940 of file devsm_desc.cpp.

942{
943 switch (Event)
944 {
945 case DsmEvent::TransferDone:
946 if (QualifierValid())
947 return EndWith(DsmEvent::Succeeded);
948
950 return EndWith(DsmEvent::Succeeded);
951
952 return EndWith(DsmEvent::FailEnumeration);
953
954 case DsmEvent::TransferFailed:
955 return EndWith(DsmEvent::Succeeded);
956
957 default:
958 return SmUnhandled();
959 }
960}
BOOLEAN QualifierValid()
Definition: devdesc.cpp:810

Referenced by EnterReadingQualifier().

◆ QualifierValid()

BOOLEAN DeviceMachine::QualifierValid ( )
private

Definition at line 810 of file devdesc.cpp.

811{
813 {
814 DPRINT1("Device %p qualifier read returned %lu bytes\n", m_Device, HubDeviceBytesReturned(m_Device));
816 return FALSE;
817 }
818
819 m_Device->SetProperty(ChildProperty::HighSpeedCapable);
820 return TRUE;
821}
USB_DEVICE_QUALIFIER_DESCRIPTOR m_Qualifier
Definition: hubchild.h:387
#define HUB_ENUM_BAD_QUALIFIER
Definition: hubid.h:26

Referenced by QualifierRead().

◆ QueryRegistryValues()

BOOLEAN DeviceMachine::QueryRegistryValues ( )
private

Definition at line 671 of file hubregistry.cpp.

672{
675
677
678 Status = HubQueryDeviceErrata(m_Device, &Ids);
679 HubQueryVerifierFlags(&m_Device->m_DeviceDescriptor, &Ids, L"device", &m_Device->m_VerifierFlags);
680
681 if (!NT_SUCCESS(Status))
682 {
683 DPRINT1("Device %p usbflags query failed 0x%lx\n", m_Device, Status);
685 return FALSE;
686 }
687
688 return TRUE;
689}
ULONG m_VerifierFlags
Definition: hubchild.h:332
_In_ const HubIdStrings * Ids
VOID NTAPI HubFormatIdStrings(_In_ const USB_DEVICE_DESCRIPTOR *Descriptor, _Out_ HubIdStrings *Ids)
Definition: hubregistry.cpp:59
#define HUB_MSG_REGISTRY_FAILURE
Definition: hubregistry.h:11

Referenced by AltQueryRegistry(), and DescriptorsQueryRegistry().

◆ QueuePassiveWork()

VOID DeviceMachine::QueuePassiveWork ( )
private

Definition at line 280 of file hubchild.cpp.

281{
284 m_Device,
286}
PUCXHUB_WORKITEM m_WorkItem
Definition: hubchild.h:337
BOOLEAN m_NeedsForwardProgress
Definition: hubchild.h:338
static UCXHUB_WORKITEM_ROUTINE MachineWorkItem
Definition: hubchild.h:548
VOID EnqueueWorkItem(_In_ PUCXHUB_WORKITEM WorkItem, _In_ PUCXHUB_WORKITEM_ROUTINE Routine, _In_ PVOID Context, _In_ BOOLEAN ForwardProgress)
Definition: fdo.cpp:54

Referenced by SmQueuePassive().

◆ ReadAltModeString()

VOID DeviceMachine::ReadAltModeString ( )
private

Definition at line 536 of file devreq.cpp.

537{
539 HubBillboardInfo* Billboard = Child->m_Billboard;
540 UCHAR Index;
541
542 if (Billboard == NULL || Billboard->CurrentMode == HUB_BILLBOARD_NO_MODE)
543 {
544 DPRINT1("Device %p has no alternate mode string to read\n", Child);
545 Child->Post(DsmEvent::TransferFailed);
546 return;
547 }
548
549 Index = Billboard->Descriptor->AlternateMode[Billboard->CurrentMode].iAlternateModeSetting;
550
551 Child->m_Control.SetSetup(XFER_STD_FROM_DEVICE,
554 0,
556
557 if (!HubDeviceSend(Child, Child->m_ScratchBuffer, MAXIMUM_USB_STRING_LENGTH, TRUE))
558 {
560 Child->Post(DsmEvent::TransferFailed);
561 }
562}
BOOLEAN NTAPI HubDeviceSend(_In_ HubChild *Child, _In_reads_bytes_opt_(Length) PVOID Buffer, _In_ ULONG Length, _In_ BOOLEAN ShortTransferOk)
Definition: devreq.cpp:262
#define XFER_STD_FROM_DEVICE
Definition: devreq.cpp:18
#define USB_REQUEST_GET_DESCRIPTOR
Definition: usb100.h:82
#define MAXIMUM_USB_STRING_LENGTH
Definition: usb100.h:43
#define USB_STRING_DESCRIPTOR_TYPE
Definition: usb100.h:51

Referenced by BosAltModes().

◆ ReadBillboardString()

VOID DeviceMachine::ReadBillboardString ( )
private

Definition at line 521 of file devreq.cpp.

522{
524
525 if (Child->m_Billboard == NULL)
526 {
527 DPRINT1("Device %p has no billboard to read the URL string of\n", Child);
528 Child->Post(DsmEvent::TransferFailed);
529 return;
530 }
531
532 HubDeviceGetString(Child, Child->m_Billboard->Descriptor->iAddtionalInfoURL, 0);
533}
static VOID NTAPI HubDeviceGetString(_In_ HubChild *Child, _In_ UCHAR Index, _In_ USHORT LanguageId)
Definition: devreq.cpp:348

Referenced by BosBillboard().

◆ ReadBos()

VOID DeviceMachine::ReadBos ( )
private

Definition at line 482 of file devreq.cpp.

483{
485 USHORT Total = ((PUSB_BOS_DESCRIPTOR)Child->m_ScratchBuffer)->wTotalLength;
486
488 if (Child->m_Bos == NULL)
489 {
490 DPRINT1("Device %p no memory for a %u byte BOS\n", Child, Total);
491 Child->Post(DsmEvent::TransferFailed);
492 return;
493 }
494
496}
static VOID NTAPI HubDeviceGetDescriptor(_In_ HubChild *Child, _In_ UCHAR Type, _In_ UCHAR Index, _In_ USHORT LanguageId, _Out_writes_bytes_(Length) PVOID Buffer, _In_ ULONG Length)
Definition: devreq.cpp:327
#define USB_BOS_DESCRIPTOR_TYPE
Definition: usb300.h:17

Referenced by AltBosHeaderRead(), and BosHeaderRead().

◆ ReadBosHeader()

VOID DeviceMachine::ReadBosHeader ( )
private

Definition at line 471 of file devreq.cpp.

472{
474
475 HubFreeDevicePool((PVOID*)&Child->m_Bos);
477
479}
VOID NTAPI HubFreeBillboardInfo(_In_ HubChild *Child)
Definition: devdesc.cpp:348
#define XFER_HEADER_READ
Definition: devreq.cpp:30
static VOID NTAPI HubFreeDevicePool(_Inout_ PVOID *Buffer)
Definition: devreq.cpp:395

Referenced by AltValidateConfig(), and BosStart().

◆ ReadConfigDescriptorHeader()

VOID DeviceMachine::ReadConfigDescriptorHeader ( )
private

Definition at line 433 of file devreq.cpp.

434{
436
437 HubFreeDevicePool((PVOID*)&Child->m_ConfigDescriptor);
438 Child->m_CompatIdInterface = NULL;
439
442 0,
443 0,
444 Child->m_ScratchBuffer,
446}

Referenced by AltQueryRegistry(), EnterReadingConfigDescriptor(), and ReenumConfigDescriptor().

◆ ReadContainerId()

VOID DeviceMachine::ReadContainerId ( )
private

Definition at line 641 of file devreq.cpp.

642{
647 sizeof(HubMsOsContainerId));
648}
#define XFER_VENDOR_FROM_DEVICE
Definition: devreq.cpp:20
static VOID NTAPI HubDeviceMsOsRead(_In_ HubChild *Child, _In_ UCHAR RequestType, _In_ USHORT Index, _Out_writes_bytes_(Length) PVOID Buffer, _In_ ULONG Length)
Definition: devreq.cpp:364
#define HUB_MSOS_INDEX_CONTAINER_ID
Definition: devreq.h:15

Referenced by MsOsContainerHeaderRead().

◆ ReadContainerIdHeader()

VOID DeviceMachine::ReadContainerIdHeader ( )
private

Definition at line 631 of file devreq.cpp.

Referenced by MsOsContainerId().

◆ ReadDeviceDescriptor()

VOID DeviceMachine::ReadDeviceDescriptor ( )
private

Definition at line 415 of file devreq.cpp.

416{
419 0,
420 0,
422 sizeof(USB_DEVICE_DESCRIPTOR));
423}
#define USB_DEVICE_DESCRIPTOR_TYPE
Definition: usb100.h:49

Referenced by BosAltEnumSent(), EnterReadingDeviceDescriptor(), and OnAddressingAgain().

◆ ReadExtendedConfig()

VOID DeviceMachine::ReadExtendedConfig ( )
private

Definition at line 664 of file devreq.cpp.

665{
667 ULONG Length = ((HubMsOsExtConfigHeader*)Child->m_ScratchBuffer)->dwLength;
668
670 if (Child->m_MsOsExtConfig == NULL)
671 {
672 DPRINT1("Device %p no memory for a %lu byte extended configuration\n", Child, Length);
673 Child->Post(DsmEvent::TransferFailed);
674 return;
675 }
676
678}
HubMsOsExtConfig * m_MsOsExtConfig
Definition: hubchild.h:418
#define HUB_MSOS_INDEX_EXT_CONFIG
Definition: devreq.h:13
_In_ ULONG _In_ ULONG _In_ ULONG Length
Definition: ntddpcm.h:102

Referenced by MsOsExtendedHeaderRead().

◆ ReadExtendedConfigHeader()

VOID DeviceMachine::ReadExtendedConfigHeader ( )
private

◆ ReadExtProperties()

VOID DeviceMachine::ReadExtProperties ( )
private

Definition at line 692 of file devreq.cpp.

693{
696
697 if (Child->m_ExtProperties == NULL)
698 {
699 DPRINT1("Device %p has no extended properties buffer\n", Child);
700 Child->Post(DsmEvent::TransferFailed);
701 return;
702 }
703
705}
#define XFER_VENDOR_FROM_INTERFACE
Definition: devreq.cpp:21
#define HUB_MSOS_INDEX_EXT_PROPERTIES
Definition: devreq.h:14
uint32_t * PULONG
Definition: typedefs.h:59

Referenced by MsOsExtHeaderRead().

◆ ReadExtPropertiesHeader()

VOID DeviceMachine::ReadExtPropertiesHeader ( )
private

Definition at line 681 of file devreq.cpp.

Referenced by MsOsInstallStart().

◆ ReadFirstDescriptor()

VOID DeviceMachine::ReadFirstDescriptor ( )
private

Definition at line 409 of file devreq.cpp.

Referenced by EnterReadingFirstDescriptor().

◆ ReadFullConfigDescriptor()

VOID DeviceMachine::ReadFullConfigDescriptor ( )
private

Definition at line 450 of file devreq.cpp.

451{
453 USHORT Total = ((PUSB_CONFIGURATION_DESCRIPTOR)Child->m_ScratchBuffer)->wTotalLength;
454
456 Total,
458 if (Child->m_ConfigDescriptor == NULL)
459 {
460 DPRINT1("Device %p no memory for a %u byte configuration\n", Child, Total);
461 Child->Post(DsmEvent::TransferFailed);
462 return;
463 }
464
466}

Referenced by AltConfigHeaderRead(), and EnterReadingConfigDescriptor().

◆ ReadLanguageIds()

VOID DeviceMachine::ReadLanguageIds ( )
private

Definition at line 567 of file devreq.cpp.

Referenced by EnterReadingLanguages().

◆ ReadMsOs20Set()

VOID DeviceMachine::ReadMsOs20Set ( )
private

Definition at line 711 of file devreq.cpp.

712{
715
716 HubFreeDevicePool(&Child->m_MsOs20Set);
717 Child->m_MsOs20SetLength = 0;
718
720 if (Child->m_MsOs20Set == NULL)
721 {
722 DPRINT1("Device %p no memory for a %u byte MS OS 2.0 set\n", Child, Length);
723 Child->Post(DsmEvent::TransferFailed);
724 return;
725 }
726
727 Child->m_MsOsVendorCode = Child->m_MsOs20SetInfo.bVendorCode;
728 Child->m_Control.UsbdFlags = UCXHUB_URB_FLAG_ALLOW_LARGE_TRANSFER;
729
731}
#define HUB_MSOS20_INDEX_SET
Definition: devreq.h:16
#define UCXHUB_URB_FLAG_ALLOW_LARGE_TRANSFER
Definition: hubucx.h:101

Referenced by BosMsOs20().

◆ ReadMsOsDescriptor()

VOID DeviceMachine::ReadMsOsDescriptor ( )
private

Definition at line 620 of file devreq.cpp.

621{
625 0,
627 sizeof(m_Device->m_MsOsString));
628}
#define HUB_MSOS_STRING_INDEX
Definition: devreq.h:20

Referenced by MsOsStart().

◆ ReadProductName()

VOID DeviceMachine::ReadProductName ( )
private

Definition at line 575 of file devreq.cpp.

576{
578
579 if (Child->m_DeviceDescriptor.iProduct == 0 && Child->HasHack(ChildHack::DisableSerialNumber))
580 {
581 DPRINT("Device %p has no product string\n", Child);
582 Child->Post(DsmEvent::TransferFailed);
583 return;
584 }
585
586 HubFreeDevicePool((PVOID*)&Child->m_ProductString);
587 HubDeviceGetString(Child, Child->m_DeviceDescriptor.iProduct, Child->m_LanguageId);
588}

Referenced by EnterReadingDeviceText(), and EnterReadingProductName().

◆ ReadQualifier()

VOID DeviceMachine::ReadQualifier ( )
private

Definition at line 607 of file devreq.cpp.

608{
611 0,
612 0,
614 sizeof(m_Device->m_Qualifier));
615}
#define USB_DEVICE_QUALIFIER_DESCRIPTOR_TYPE
Definition: usb200.h:94

Referenced by EnterReadingQualifier().

◆ ReadSerialNumber()

VOID DeviceMachine::ReadSerialNumber ( )
private

Definition at line 592 of file devreq.cpp.

593{
595
596 if (Child->m_DeviceDescriptor.iSerialNumber == 0)
597 {
598 DPRINT("Device %p has no serial number string\n", Child);
599 Child->Post(DsmEvent::TransferFailed);
600 return;
601 }
602
603 HubDeviceGetString(Child, Child->m_DeviceDescriptor.iSerialNumber, XFER_SERIAL_LANGUAGE);
604}
#define XFER_SERIAL_LANGUAGE
Definition: devreq.cpp:36

Referenced by MsOsSerial(), and ReenumSerialNumber().

◆ ReconfiguredAfterHubResume()

SM_RESULT DeviceMachine::ReconfiguredAfterHubResume ( _In_ DsmEvent  Event)
private

Definition at line 1342 of file devsm_reenum.cpp.

1344{
1345 switch (Event)
1346 {
1347 case DsmEvent::Succeeded:
1348 return SmTransition(&ConfiguredOn);
1349
1350 case DsmEvent::Failed:
1352
1353 case DsmEvent::PortDetached:
1355
1356 default:
1357 return SmUnhandled();
1358 }
1359}
SM_RESULT ReenumPortOffAfterConfigFailure(_In_ DsmEvent Event)

Referenced by ReenumDoneForHubResumeConfigured().

◆ ReconfiguredAfterResume()

SM_RESULT DeviceMachine::ReconfiguredAfterResume ( _In_ DsmEvent  Event)
private

Definition at line 1447 of file devsm_reenum.cpp.

1449{
1450 switch (Event)
1451 {
1452 case DsmEvent::Succeeded:
1454 return SmTransition(&ConfiguredOn);
1455
1456 case DsmEvent::Failed:
1458
1459 case DsmEvent::PortDetached:
1461 return DetachConfigured();
1462
1463 default:
1464 return SmUnhandled();
1465 }
1466}
SM_RESULT ReenumCycleAfterResumeFailure()

Referenced by ReenumDoneForResumeConfigured().

◆ ReconfiguredBootAfterResume()

SM_RESULT DeviceMachine::ReconfiguredBootAfterResume ( _In_ DsmEvent  Event)
private

Definition at line 1501 of file devsm_reenum.cpp.

1503{
1504 switch (Event)
1505 {
1506 case DsmEvent::Failed:
1507 return SmTransition(&BugChecking);
1508
1509 case DsmEvent::Succeeded:
1511 return SmTransition(&ConfiguredOn);
1512
1513 case DsmEvent::PortDetached:
1516
1517 default:
1518 return SmUnhandled();
1519 }
1520}
static const State BugChecking
Definition: devsm.h:1322

Referenced by ReenumDoneForBootResume().

◆ ReconfiguredBootDevice()

SM_RESULT DeviceMachine::ReconfiguredBootDevice ( _In_ DsmEvent  Event)
private

Definition at line 1115 of file devsm_reenum.cpp.

1117{
1118 switch (Event)
1119 {
1120 case DsmEvent::Succeeded:
1123 return SmTransition(&ConfiguredOn);
1124
1125 case DsmEvent::Failed:
1126 return SmTransition(&BugChecking);
1127
1128 case DsmEvent::PortDetached:
1131
1132 default:
1133 return SmUnhandled();
1134 }
1135}
SM_RESULT BootDeviceDisabledForReset(_In_ DsmEvent Event)
VOID NotifyReconnected()
Definition: childpdo.cpp:3969

Referenced by ReenumDoneForBootDevice().

◆ ReconfiguredForClient()

SM_RESULT DeviceMachine::ReconfiguredForClient ( _In_ DsmEvent  Event)
private

Definition at line 1061 of file devsm_reenum.cpp.

1063{
1064 switch (Event)
1065 {
1066 case DsmEvent::Failed:
1068 return BackToUnconfigured();
1069
1070 case DsmEvent::Succeeded:
1071 return ClientDoneOk();
1072
1073 case DsmEvent::PortDetached:
1075 return DetachConfigured();
1076
1077 default:
1078 return SmUnhandled();
1079 }
1080}

Referenced by ReenumDoneForClientConfigured().

◆ RecordDeviceVersion()

VOID DeviceMachine::RecordDeviceVersion ( )
private

Definition at line 149 of file devmisc.cpp.

150{
153
154 if (BcdUsb == 0x0100)
155 {
157 }
158 else if (BcdUsb < 0x0200)
159 {
160 if (BcdUsb < 0x0100)
161 DPRINT1("Device %p reports bad bcdUSB 0x%x\n", m_Device, BcdUsb);
163 }
164 else if (BcdUsb == 0x0200)
165 {
167 }
168 else if (BcdUsb < 0x0300)
169 {
171 }
172 else if (m_Device->m_Kind & DSM_KIND_PORT30)
173 {
175 }
176 else
177 {
178 DPRINT1("Device %p on a USB 2 port reports bcdUSB 0x%x\n", m_Device, BcdUsb);
180 }
181
182 m_Device->m_Kind = (m_Device->m_Kind & ~DSM_KIND_ANY_VERSION) | Version;
183}
#define DSM_KIND_USB1X
Definition: devsm.h:142
#define DSM_KIND_USB10
Definition: devsm.h:141
_Must_inspect_result_ _In_ WDFDEVICE _In_ LPCGUID _Out_ PINTERFACE _In_ USHORT _In_ USHORT Version
Definition: wdffdo.h:469

Referenced by AltDeviceDescriptorRead(), EnterUpdatingDefaultEndpoint(), and OnReadingDeviceDescriptor().

◆ RecordResetTimeout()

VOID DeviceMachine::RecordResetTimeout ( )
private

Definition at line 398 of file devmisc.cpp.

399{
400 DPRINT1("Device %p port %u reset timed out\n", m_Device, m_Device->m_Port->Number());
402}
#define HUB_ENUM_PORT_RESET_FAILED
Definition: hubid.h:13

Referenced by Again20FirstResetDone(), Again20SecondResetDone(), SuperSpeedResetDone(), Zero20FirstResetDone(), and Zero20SecondResetDone().

◆ ReenumAltEnumSent()

SM_RESULT DeviceMachine::ReenumAltEnumSent ( _In_ DsmEvent  Event)
private

Definition at line 832 of file devsm_reenum.cpp.

834{
835 switch (Event)
836 {
837 case DsmEvent::TransferFailed:
838 return ReenumRetryOrFail();
839
840 case DsmEvent::TransferDone:
841 return ReenumSerialNumber();
842
843 default:
844 return SmUnhandled();
845 }
846}
SM_RESULT ReenumSerialNumber()

Referenced by ReenumDescriptorRead().

◆ ReenumClaimEndedOnDetach()

SM_RESULT DeviceMachine::ReenumClaimEndedOnDetach ( _In_ DsmEvent  Event)
private

Definition at line 281 of file devsm_reenum.cpp.

283{
284 switch (Event)
285 {
286 case DsmEvent::ControllerIoctlFailed:
287 return EndWith(DsmEvent::DetachedDeviceEnabled);
288
289 case DsmEvent::ControllerIoctlDone:
291 return EndWith(DsmEvent::DetachedDeviceEnabled);
292
293 default:
294 return SmUnhandled();
295 }
296}

Referenced by OnClaimingAddressZeroAgain().

◆ ReenumCleanUpOldConfig()

SM_RESULT DeviceMachine::ReenumCleanUpOldConfig ( )
private

Definition at line 1229 of file devsm_reenum.cpp.

1230{
1234}

Referenced by ReenumDoneForStart().

◆ ReenumConfigDescriptor()

SM_RESULT DeviceMachine::ReenumConfigDescriptor ( )
private

Definition at line 879 of file devsm_reenum.cpp.

880{
881 if (!ConfigReadOnReset())
883
886}
SM_RESULT ReenumConfigRead(_In_ DsmEvent Event)
BOOLEAN ConfigReadOnReset()
Definition: devmisc.cpp:255
static const State LinkPowerAgain
Definition: devsm.h:1318

Referenced by ReenumSerialNumber(), and ReenumSerialRead().

◆ ReenumConfigRead()

SM_RESULT DeviceMachine::ReenumConfigRead ( _In_ DsmEvent  Event)
private

Definition at line 889 of file devsm_reenum.cpp.

891{
892 switch (Event)
893 {
894 case DsmEvent::TransferDone:
896
897 case DsmEvent::TransferFailed:
898 return ReenumRetryOrFail();
899
900 default:
901 return SmUnhandled();
902 }
903}

Referenced by ReenumConfigDescriptor().

◆ ReenumCycleAfterResumeFailure()

SM_RESULT DeviceMachine::ReenumCycleAfterResumeFailure ( )
private

◆ ReenumDescriptorRead()

SM_RESULT DeviceMachine::ReenumDescriptorRead ( _In_ DsmEvent  Event)
private

Definition at line 785 of file devsm_reenum.cpp.

787{
788 switch (Event)
789 {
790 case DsmEvent::TransferDone:
791 if (!SameDeviceConnected())
792 return ReenumWrongDevice();
793
795 {
798 }
799
800 return ReenumSerialNumber();
801
802 case DsmEvent::TransferFailed:
803 return ReenumRetryOrFail();
804
805 default:
806 return SmUnhandled();
807 }
808}
BOOLEAN AltEnumNeededOnReenum()
Definition: hubmsos.cpp:111
SM_RESULT ReenumAltEnumSent(_In_ DsmEvent Event)
BOOLEAN SameDeviceConnected()
Definition: devmisc.cpp:238
SM_RESULT ReenumWrongDevice()

Referenced by OnAddressingAgain().

◆ ReenumDisabledForHub()

SM_RESULT DeviceMachine::ReenumDisabledForHub ( _In_ DsmEvent  Event)
private

Definition at line 324 of file devsm_reenum.cpp.

326{
327 if (Event != DsmEvent::ControllerIoctlDone)
328 return SmUnhandled();
329
331}
SM_RESULT ReenumPortOffForHub(_In_ DsmEvent Event)

Referenced by ReenumDisableForHub().

◆ ReenumDisabledThenAckAndCycle()

SM_RESULT DeviceMachine::ReenumDisabledThenAckAndCycle ( _In_ DsmEvent  Event)
private

Definition at line 1278 of file devsm_reenum.cpp.

1280{
1281 if (Event != DsmEvent::ControllerIoctlDone)
1282 return SmUnhandled();
1283
1285 return CycleAndPark();
1286}
SM_RESULT CycleAndPark()

Referenced by ReenumDoneForPreStart().

◆ ReenumDisabledThenCycle()

SM_RESULT DeviceMachine::ReenumDisabledThenCycle ( _In_ DsmEvent  Event)
private

Definition at line 1189 of file devsm_reenum.cpp.

1191{
1192 if (Event != DsmEvent::ControllerIoctlDone)
1193 return SmUnhandled();
1194
1195 return CycleAndPark();
1196}

Referenced by ReenumDoneForHubStart().

◆ ReenumDisabledThenPark()

SM_RESULT DeviceMachine::ReenumDisabledThenPark ( _In_ DsmEvent  Event)
private

Definition at line 422 of file devsm_reenum.cpp.

424{
425 if (Event != DsmEvent::ControllerIoctlDone)
426 return SmUnhandled();
427
428 return ReenumParkForHub();
429}

Referenced by ReenumPortOffForHubDeviceEnabled().

◆ ReenumDisabledThenReport()

SM_RESULT DeviceMachine::ReenumDisabledThenReport ( _In_ DsmEvent  Event)
private

Definition at line 1179 of file devsm_reenum.cpp.

1181{
1182 if (Event != DsmEvent::ControllerIoctlDone)
1183 return SmUnhandled();
1184
1186}

Referenced by ReenumDoneForHubStart().

◆ ReenumDisabledThenSignalAndCycle()

SM_RESULT DeviceMachine::ReenumDisabledThenSignalAndCycle ( _In_ DsmEvent  Event)
private

Definition at line 1237 of file devsm_reenum.cpp.

1239{
1240 if (Event != DsmEvent::ControllerIoctlDone)
1241 return SmUnhandled();
1242
1244 return CycleAndPark();
1245}

Referenced by ReenumDoneForStart().

◆ ReenumDisableForHub()

SM_RESULT DeviceMachine::ReenumDisableForHub ( )
private

◆ ReenumDoneForBootDevice()

SM_RESULT DeviceMachine::ReenumDoneForBootDevice ( _In_ DsmEvent  Event)
private

Definition at line 1084 of file devsm_reenum.cpp.

1086{
1087 switch (Event)
1088 {
1089 case DsmEvent::Succeeded:
1090 if (!PrepareListsForReset())
1091 return SmTransition(&BugChecking);
1092
1094 return SmTransition(&Configuring);
1095
1096 case DsmEvent::DetachedDeviceEnabled:
1098
1099 case DsmEvent::Failed:
1100 case DsmEvent::FailedDeviceEnabled:
1101 return SmTransition(&BugChecking);
1102
1103 case DsmEvent::PortDetached:
1104 if (!m_DetachEndsReset)
1105 return SmUnhandled();
1106
1108
1109 default:
1110 return SmUnhandled();
1111 }
1112}
SM_RESULT ReconfiguredBootDevice(_In_ DsmEvent Event)
SM_RESULT BootDeviceDetachDuringReset(_In_ BOOLEAN ContextGone)
Definition: devsm_boot.cpp:142
BOOLEAN PrepareListsForReset()
Definition: devconfig.cpp:872
static const State Configuring
Definition: devsm.h:1064

Referenced by ReenumForBootClient().

◆ ReenumDoneForBootResume()

SM_RESULT DeviceMachine::ReenumDoneForBootResume ( _In_ DsmEvent  Event)
private

Definition at line 1470 of file devsm_reenum.cpp.

1472{
1473 switch (Event)
1474 {
1475 case DsmEvent::Failed:
1476 case DsmEvent::FailedDeviceEnabled:
1477 return SmTransition(&BugChecking);
1478
1479 case DsmEvent::Succeeded:
1480 if (!PrepareListsForReset())
1481 return SmTransition(&BugChecking);
1482
1484 return SmTransition(&Configuring);
1485
1486 case DsmEvent::DetachedDeviceEnabled:
1490
1491 case DsmEvent::PortDetached:
1494
1495 default:
1496 return SmUnhandled();
1497 }
1498}
SM_RESULT ReconfiguredBootAfterResume(_In_ DsmEvent Event)

Referenced by ReenumForBootResume().

◆ ReenumDoneForClientConfigured()

SM_RESULT DeviceMachine::ReenumDoneForClientConfigured ( _In_ DsmEvent  Event)
private

Definition at line 1044 of file devsm_reenum.cpp.

1046{
1047 if (Event != DsmEvent::Succeeded)
1049
1050 if (!PrepareListsForReset())
1051 {
1053 return BackToUnconfigured();
1054 }
1055
1057 return SmTransition(&Configuring);
1058}
SM_RESULT ReconfiguredForClient(_In_ DsmEvent Event)
SM_RESULT ReenumFailedForClient(_In_ DsmEvent Event)

Referenced by ReenumForClientConfigured().

◆ ReenumDoneForClientUnconfigured()

SM_RESULT DeviceMachine::ReenumDoneForClientUnconfigured ( _In_ DsmEvent  Event)
private

Definition at line 1000 of file devsm_reenum.cpp.

1002{
1003 switch (Event)
1004 {
1005 case DsmEvent::Succeeded:
1007 return BackToUnconfigured();
1008
1009 default:
1011 }
1012}

Referenced by ReenumForClientUnconfigured().

◆ ReenumDoneForHubResumeConfigured()

SM_RESULT DeviceMachine::ReenumDoneForHubResumeConfigured ( _In_ DsmEvent  Event)
private

Definition at line 1328 of file devsm_reenum.cpp.

1330{
1331 if (Event != DsmEvent::Succeeded)
1333
1334 if (!PrepareListsForReset())
1336
1338 return SmTransition(&Configuring);
1339}
SM_RESULT ReenumFailedForHubResume(_In_ DsmEvent Event)
SM_RESULT ReconfiguredAfterHubResume(_In_ DsmEvent Event)

Referenced by ReenumForHubResume().

◆ ReenumDoneForHubResumeUnconfigured()

SM_RESULT DeviceMachine::ReenumDoneForHubResumeUnconfigured ( _In_ DsmEvent  Event)
private

Definition at line 1290 of file devsm_reenum.cpp.

1292{
1293 switch (Event)
1294 {
1295 case DsmEvent::Succeeded:
1297
1298 default:
1300 }
1301}

Referenced by ReenumForHubResume().

◆ ReenumDoneForHubStart()

SM_RESULT DeviceMachine::ReenumDoneForHubStart ( _In_ DsmEvent  Event)
private

Definition at line 1150 of file devsm_reenum.cpp.

1152{
1153 switch (Event)
1154 {
1155 case DsmEvent::Succeeded:
1157
1158 case DsmEvent::Failed:
1159 return CycleAndPark();
1160
1161 case DsmEvent::DetachedDeviceEnabled:
1163
1164 case DsmEvent::FailedDeviceEnabled:
1166
1167 case DsmEvent::PdoCleanup:
1169
1170 case DsmEvent::PortDetached:
1172
1173 default:
1174 return SmUnhandled();
1175 }
1176}
SM_RESULT ReenumDisabledThenReport(_In_ DsmEvent Event)
SM_RESULT ReenumDisabledThenCycle(_In_ DsmEvent Event)

Referenced by ReenumForHubStart().

◆ ReenumDoneForPreStart()

SM_RESULT DeviceMachine::ReenumDoneForPreStart ( _In_ DsmEvent  Event)
private

Definition at line 1249 of file devsm_reenum.cpp.

1251{
1252 switch (Event)
1253 {
1254 case DsmEvent::Succeeded:
1255 return StoppedAckPreStart();
1256
1257 case DsmEvent::FailedDeviceEnabled:
1259
1260 case DsmEvent::DetachedDeviceEnabled:
1262 return DetachUnconfigured();
1263
1264 case DsmEvent::Failed:
1266 return CycleAndPark();
1267
1268 case DsmEvent::PortDetached:
1271
1272 default:
1273 return SmUnhandled();
1274 }
1275}
SM_RESULT ReenumDisabledThenAckAndCycle(_In_ DsmEvent Event)

Referenced by ReenumForPreStart().

◆ ReenumDoneForResumeConfigured()

SM_RESULT DeviceMachine::ReenumDoneForResumeConfigured ( _In_ DsmEvent  Event)
private

Definition at line 1425 of file devsm_reenum.cpp.

1427{
1428 if (Event != DsmEvent::Succeeded)
1430
1431 if (!PrepareListsForReset())
1433
1435 return SmTransition(&Configuring);
1436}
SM_RESULT ReconfiguredAfterResume(_In_ DsmEvent Event)
SM_RESULT ReenumFailedForResume(_In_ DsmEvent Event)

Referenced by ReenumForResume().

◆ ReenumDoneForResumeUnconfigured()

SM_RESULT DeviceMachine::ReenumDoneForResumeUnconfigured ( _In_ DsmEvent  Event)
private

Definition at line 1382 of file devsm_reenum.cpp.

1384{
1385 switch (Event)
1386 {
1387 case DsmEvent::Succeeded:
1390
1391 default:
1393 }
1394}

Referenced by ReenumForResume().

◆ ReenumDoneForStart()

SM_RESULT DeviceMachine::ReenumDoneForStart ( _In_ DsmEvent  Event)
private

Definition at line 1200 of file devsm_reenum.cpp.

1202{
1203 switch (Event)
1204 {
1205 case DsmEvent::Succeeded:
1207
1208 case DsmEvent::Failed:
1210 return CycleAndPark();
1211
1212 case DsmEvent::DetachedDeviceEnabled:
1214 return DetachUnconfigured();
1215
1216 case DsmEvent::FailedDeviceEnabled:
1218
1219 case DsmEvent::PortDetached:
1222
1223 default:
1224 return SmUnhandled();
1225 }
1226}
SM_RESULT ReenumCleanUpOldConfig()
SM_RESULT ReenumDisabledThenSignalAndCycle(_In_ DsmEvent Event)

Referenced by ReenumForStart().

◆ ReenumEnabled()

SM_RESULT DeviceMachine::ReenumEnabled ( _In_ DsmEvent  Event)
private

Definition at line 161 of file devsm_reenum.cpp.

163{
164 switch (Event)
165 {
166 case DsmEvent::ControllerIoctlFailed:
167 if (!EnumRetriesUsedUp())
169
172
173 case DsmEvent::ControllerIoctlDone:
175
176 default:
177 return SmUnhandled();
178 }
179}
static const State ClaimingAddressZeroAgain
Definition: devsm.h:1320
VOID FailIoAndDisablePort()
SM_RESULT ReenumPortOffDeviceDisabled(_In_ DsmEvent Event)

Referenced by EnterReenumerating(), OnParkedForHubAgain(), ReenumEnabled(), ReenumTreePurgedConfigured(), and ReenumTreePurgedUnconfigured().

◆ ReenumEndpointsDisabled()

SM_RESULT DeviceMachine::ReenumEndpointsDisabled ( _In_ DsmEvent  Event)
private

Definition at line 138 of file devsm_reenum.cpp.

140{
141 if (Event != DsmEvent::ControllerIoctlDone)
142 return SmUnhandled();
143
145}

Referenced by ReenumTreePurgedConfigured().

◆ Reenumerate()

SM_RESULT DeviceMachine::Reenumerate ( _In_ const State *  Target,
_In_ DSM_REENUM  Kind,
_In_ BOOLEAN  ForceReset,
_In_ DSM_NEXT  After 
)
private

◆ ReenumFailedForClient()

SM_RESULT DeviceMachine::ReenumFailedForClient ( _In_ DsmEvent  Event)
private

Definition at line 1015 of file devsm_reenum.cpp.

1017{
1018 switch (Event)
1019 {
1020 case DsmEvent::Failed:
1022 return CycleAndPark();
1023
1024 case DsmEvent::FailedDeviceEnabled:
1026 AskPortCycle();
1028
1029 case DsmEvent::DetachedDeviceEnabled:
1031 return DetachUnconfigured();
1032
1033 case DsmEvent::PortDetached:
1036
1037 default:
1038 return SmUnhandled();
1039 }
1040}

Referenced by ReenumDoneForClientConfigured(), and ReenumDoneForClientUnconfigured().

◆ ReenumFailedForHubResume()

SM_RESULT DeviceMachine::ReenumFailedForHubResume ( _In_ DsmEvent  Event)
private

Definition at line 1304 of file devsm_reenum.cpp.

1306{
1307 switch (Event)
1308 {
1309 case DsmEvent::DetachedDeviceEnabled:
1310 return DetachUnconfigured();
1311
1312 case DsmEvent::Failed:
1313 return CycleAndPark();
1314
1315 case DsmEvent::FailedDeviceEnabled:
1316 AskPortCycle();
1318
1319 case DsmEvent::PortDetached:
1321
1322 default:
1323 return SmUnhandled();
1324 }
1325}

Referenced by ReenumDoneForHubResumeConfigured(), and ReenumDoneForHubResumeUnconfigured().

◆ ReenumFailedForResume()

SM_RESULT DeviceMachine::ReenumFailedForResume ( _In_ DsmEvent  Event)
private

Definition at line 1397 of file devsm_reenum.cpp.

1399{
1400 switch (Event)
1401 {
1402 case DsmEvent::FailedDeviceEnabled:
1403 AskPortCycle();
1406
1407 case DsmEvent::Failed:
1409 return CycleAndPark();
1410
1411 case DsmEvent::DetachedDeviceEnabled:
1413 return DetachUnconfigured();
1414
1415 case DsmEvent::PortDetached:
1418
1419 default:
1420 return SmUnhandled();
1421 }
1422}

Referenced by ReenumDoneForResumeConfigured(), and ReenumDoneForResumeUnconfigured().

◆ ReenumForBootClient()

SM_RESULT DeviceMachine::ReenumForBootClient ( _In_ BOOLEAN  AfterReattach)
private

Definition at line 1540 of file devsm_reenum.cpp.

1542{
1544
1545 if (AfterReattach)
1547
1548 m_DetachEndsReset = AfterReattach;
1550}
static const State Reenumerating
Definition: devsm.h:1313
SM_RESULT ReenumDoneForBootDevice(_In_ DsmEvent Event)
SM_RESULT Reenumerate(_In_ const State *Target, _In_ DSM_REENUM Kind, _In_ BOOLEAN ForceReset, _In_ DSM_NEXT After)
enum _DSM_REENUM DSM_REENUM

Referenced by ConfiguredResetBootDevice(), OnBootDeviceAwaitingReset(), and OnBootDeviceResetPending().

◆ ReenumForBootResume()

SM_RESULT DeviceMachine::ReenumForBootResume ( )
private

Definition at line 1602 of file devsm_reenum.cpp.

1603{
1606}
static const State ReenumeratingForPower
Definition: devsm.h:1315
SM_RESULT ReenumDoneForBootResume(_In_ DsmEvent Event)

Referenced by OnBootDeviceSuspended().

◆ ReenumForClientConfigured()

SM_RESULT DeviceMachine::ReenumForClientConfigured ( )
private

Definition at line 1532 of file devsm_reenum.cpp.

1533{
1536}
SM_RESULT ReenumDoneForClientConfigured(_In_ DsmEvent Event)

Referenced by OnConfigured().

◆ ReenumForClientUnconfigured()

SM_RESULT DeviceMachine::ReenumForClientUnconfigured ( )
private

Definition at line 1525 of file devsm_reenum.cpp.

1526{
1529}
SM_RESULT ReenumDoneForClientUnconfigured(_In_ DsmEvent Event)

Referenced by OnStoppedAddressed(), and OnUnconfiguredOn().

◆ ReenumForHubResume()

SM_RESULT DeviceMachine::ReenumForHubResume ( _In_ BOOLEAN  Configured)
private

Definition at line 1574 of file devsm_reenum.cpp.

1576{
1577 if (Configured)
1578 {
1581 }
1582
1585}
SM_RESULT ReenumDoneForHubResumeConfigured(_In_ DsmEvent Event)
static const State Configured
Definition: devsm.h:1061
SM_RESULT ReenumDoneForHubResumeUnconfigured(_In_ DsmEvent Event)

Referenced by OnConfiguredHubSuspended(), and OnUnconfiguredHubSuspended().

◆ ReenumForHubStart()

SM_RESULT DeviceMachine::ReenumForHubStart ( )
private

Definition at line 1553 of file devsm_reenum.cpp.

1554{
1557}
static const State ReenumeratingForHubStart
Definition: devsm.h:1314
SM_RESULT ReenumDoneForHubStart(_In_ DsmEvent Event)

Referenced by OnStoppedEnumeratedHubSuspended(), and StoppedPortResumed().

◆ ReenumForPreStart()

SM_RESULT DeviceMachine::ReenumForPreStart ( )
private

Definition at line 1567 of file devsm_reenum.cpp.

1568{
1571}
SM_RESULT ReenumDoneForPreStart(_In_ DsmEvent Event)

Referenced by ConfiguredRestartWhileSuspended(), OnStopped(), and UnconfiguredDisabledForRestart().

◆ ReenumForResume()

SM_RESULT DeviceMachine::ReenumForResume ( _In_ BOOLEAN  Configured)
private

Definition at line 1588 of file devsm_reenum.cpp.

1590{
1591 if (Configured)
1592 {
1595 }
1596
1599}
SM_RESULT ReenumDoneForResumeUnconfigured(_In_ DsmEvent Event)
SM_RESULT ReenumDoneForResumeConfigured(_In_ DsmEvent Event)

Referenced by OnSuspendedConfigured(), and OnSuspendedUnconfigured().

◆ ReenumForStart()

SM_RESULT DeviceMachine::ReenumForStart ( _In_ DSM_REENUM  Kind)
private

Definition at line 1560 of file devsm_reenum.cpp.

1562{
1564}
SM_RESULT ReenumDoneForStart(_In_ DsmEvent Event)

Referenced by OnStopped(), and OnStoppedReady().

◆ ReenumParkForHub()

SM_RESULT DeviceMachine::ReenumParkForHub ( )
private

◆ ReenumPdCharging()

SM_RESULT DeviceMachine::ReenumPdCharging ( )
private

Definition at line 955 of file devsm_reenum.cpp.

956{
957 if (SupportsPdCharging())
959
960 return EndWith(DsmEvent::Succeeded);
961}
SM_RESULT ReenumPdChargingSet(_In_ DsmEvent Event)

Referenced by EnterLinkPowerAgain(), and OnLinkPowerAgain().

◆ ReenumPdChargingSet()

SM_RESULT DeviceMachine::ReenumPdChargingSet ( _In_ DsmEvent  Event)
private

Definition at line 964 of file devsm_reenum.cpp.

966{
967 switch (Event)
968 {
969 case DsmEvent::TransferDone:
970 return EndWith(DsmEvent::Succeeded);
971
972 case DsmEvent::TransferFailed:
973 return ReenumRetryOrFail();
974
975 default:
976 return SmUnhandled();
977 }
978}

Referenced by ReenumPdCharging().

◆ ReenumPortOffAfterConfigFailure()

SM_RESULT DeviceMachine::ReenumPortOffAfterConfigFailure ( _In_ DsmEvent  Event)
private

Definition at line 1363 of file devsm_reenum.cpp.

1365{
1366 switch (Event)
1367 {
1368 case DsmEvent::PortDisableDone:
1369 case DsmEvent::PortFault:
1371
1372 case DsmEvent::PortDetached:
1373 return DetachUnconfigured();
1374
1375 default:
1376 return SmUnhandled();
1377 }
1378}

Referenced by ReconfiguredAfterHubResume(), ReenumCycleAfterResumeFailure(), and ReenumDoneForHubResumeConfigured().

◆ ReenumPortOffAfterFailure()

SM_RESULT DeviceMachine::ReenumPortOffAfterFailure ( _In_ DsmEvent  Event)
private

Definition at line 382 of file devsm_reenum.cpp.

384{
385 switch (Event)
386 {
387 case DsmEvent::PortDetached:
388 return EndWith(DsmEvent::DetachedDeviceEnabled);
389
390 case DsmEvent::PortFault:
391 case DsmEvent::PortDisableDone:
392 return EndWith(DsmEvent::FailedDeviceEnabled);
393
394 case DsmEvent::HubSuspending:
395 case DsmEvent::HubStopping:
397
398 default:
399 return SmUnhandled();
400 }
401}
SM_RESULT ReenumPortOffForHubDeviceEnabled(_In_ DsmEvent Event)

Referenced by ReenumPurgedAfterFailure().

◆ ReenumPortOffDeviceDisabled()

SM_RESULT DeviceMachine::ReenumPortOffDeviceDisabled ( _In_ DsmEvent  Event)
private

Definition at line 190 of file devsm_reenum.cpp.

192{
193 switch (Event)
194 {
195 case DsmEvent::PortDetached:
196 return EndWith(DsmEvent::PortDetached);
197
198 case DsmEvent::PortFault:
199 case DsmEvent::PortDisableDone:
200 return EndWith(DsmEvent::Failed);
201
202 case DsmEvent::HubSuspending:
203 case DsmEvent::HubStopping:
205
206 default:
207 return SmUnhandled();
208 }
209}
SM_RESULT ReenumPortOffForHubDeviceDisabled(_In_ DsmEvent Event)

Referenced by ReenumEnabled().

◆ ReenumPortOffForHub()

SM_RESULT DeviceMachine::ReenumPortOffForHub ( _In_ DsmEvent  Event)
private

Definition at line 334 of file devsm_reenum.cpp.

336{
337 switch (Event)
338 {
339 case DsmEvent::PortDetached:
340 return EndWith(DsmEvent::PortDetached);
341
342 case DsmEvent::PortFault:
343 case DsmEvent::PortDisableDone:
344 return ReenumParkForHub();
345
346 default:
347 return SmUnhandled();
348 }
349}

Referenced by ReenumDisabledForHub().

◆ ReenumPortOffForHubDeviceDisabled()

SM_RESULT DeviceMachine::ReenumPortOffForHubDeviceDisabled ( _In_ DsmEvent  Event)
private

Definition at line 212 of file devsm_reenum.cpp.

214{
215 if ((Event != DsmEvent::PortDisableDone) && (Event != DsmEvent::PortFault))
216 return SmUnhandled();
217
218 return ReenumParkForHub();
219}

Referenced by ReenumPortOffDeviceDisabled().

◆ ReenumPortOffForHubDeviceEnabled()

SM_RESULT DeviceMachine::ReenumPortOffForHubDeviceEnabled ( _In_ DsmEvent  Event)
private

Definition at line 404 of file devsm_reenum.cpp.

406{
407 switch (Event)
408 {
409 case DsmEvent::PortDetached:
410 return EndWith(DsmEvent::DetachedDeviceEnabled);
411
412 case DsmEvent::PortFault:
413 case DsmEvent::PortDisableDone:
415
416 default:
417 return SmUnhandled();
418 }
419}
SM_RESULT ReenumDisabledThenPark(_In_ DsmEvent Event)

Referenced by ReenumPortOffAfterFailure(), and ReenumPortOffHoldingAddressZero().

◆ ReenumPortOffHoldingAddressZero()

SM_RESULT DeviceMachine::ReenumPortOffHoldingAddressZero ( _In_ DsmEvent  Event)
private

Definition at line 558 of file devsm_reenum.cpp.

560{
561 switch (Event)
562 {
563 case DsmEvent::PortDetached:
565 return EndWith(DsmEvent::DetachedDeviceEnabled);
566
567 case DsmEvent::HubSuspending:
568 case DsmEvent::HubStopping:
571
572 case DsmEvent::PortDisableDone:
573 case DsmEvent::PortFault:
575 return EndWith(DsmEvent::FailedDeviceEnabled);
576
577 default:
578 return SmUnhandled();
579 }
580}

Referenced by ReenumPurgedHoldingAddressZero().

◆ ReenumPurgedAfterFailure()

SM_RESULT DeviceMachine::ReenumPurgedAfterFailure ( _In_ DsmEvent  Event)
private

Definition at line 371 of file devsm_reenum.cpp.

373{
374 if (Event != DsmEvent::ControllerIoctlDone)
375 return SmUnhandled();
376
378}
SM_RESULT ReenumPortOffAfterFailure(_In_ DsmEvent Event)

Referenced by ReenumRetryOrFail().

◆ ReenumPurgedHoldingAddressZero()

SM_RESULT DeviceMachine::ReenumPurgedHoldingAddressZero ( _In_ DsmEvent  Event)
private

Definition at line 548 of file devsm_reenum.cpp.

550{
551 if (Event != DsmEvent::ControllerIoctlDone)
552 return SmUnhandled();
553
555}
SM_RESULT ReenumPortOffHoldingAddressZero(_In_ DsmEvent Event)

Referenced by ReenumRetryOrFailHoldingAddressZero().

◆ ReenumRetryDelayEnded()

SM_RESULT DeviceMachine::ReenumRetryDelayEnded ( _In_ DsmEvent  Event)
private

Definition at line 432 of file devsm_reenum.cpp.

434{
435 switch (Event)
436 {
437 case DsmEvent::TimerFired:
439
440 case DsmEvent::PortDetached:
442
443 case DsmEvent::HubSuspending:
444 case DsmEvent::HubStopping:
445 return ReenumStopRetryForHub();
446
447 default:
448 return SmUnhandled();
449 }
450}
SM_RESULT ReenumStopRetryForHub()
SM_RESULT ReenumStopRetryOnDetach()

Referenced by ReenumRetryOrFail().

◆ ReenumRetryDelayEndedHoldingAddressZero()

SM_RESULT DeviceMachine::ReenumRetryDelayEndedHoldingAddressZero ( _In_ DsmEvent  Event)
private

Definition at line 583 of file devsm_reenum.cpp.

585{
586 switch (Event)
587 {
588 case DsmEvent::HubSuspending:
589 case DsmEvent::HubStopping:
591 return ReenumStopRetryForHub();
592
593 case DsmEvent::PortDetached:
596
597 case DsmEvent::TimerFired:
599
600 default:
601 return SmUnhandled();
602 }
603}

Referenced by ReenumRetryOrFailHoldingAddressZero().

◆ ReenumRetryOrFail()

SM_RESULT DeviceMachine::ReenumRetryOrFail ( )
private

◆ ReenumRetryOrFailHoldingAddressZero()

SM_RESULT DeviceMachine::ReenumRetryOrFailHoldingAddressZero ( )
private

Definition at line 536 of file devsm_reenum.cpp.

537{
538 if (EnumRetriesUsedUp())
539 {
542 }
543
545}
SM_RESULT ReenumPurgedHoldingAddressZero(_In_ DsmEvent Event)
SM_RESULT ReenumRetryDelayEndedHoldingAddressZero(_In_ DsmEvent Event)

Referenced by OnAddressingAgain(), and OnAtAddressZeroAgain().

◆ ReenumSerialNumber()

SM_RESULT DeviceMachine::ReenumSerialNumber ( )
private

Definition at line 849 of file devsm_reenum.cpp.

850{
852 return ReenumConfigDescriptor();
853
856}
BOOLEAN SerialNumberCompared()
Definition: hubid.cpp:1208
SM_RESULT ReenumSerialRead(_In_ DsmEvent Event)
SM_RESULT ReenumConfigDescriptor()

Referenced by ReenumAltEnumSent(), and ReenumDescriptorRead().

◆ ReenumSerialRead()

SM_RESULT DeviceMachine::ReenumSerialRead ( _In_ DsmEvent  Event)
private

Definition at line 859 of file devsm_reenum.cpp.

861{
862 switch (Event)
863 {
864 case DsmEvent::TransferFailed:
865 return ReenumRetryOrFail();
866
867 case DsmEvent::TransferDone:
868 if (SameSerialNumber())
869 return ReenumConfigDescriptor();
870
871 return ReenumWrongDevice();
872
873 default:
874 return SmUnhandled();
875 }
876}
BOOLEAN SameSerialNumber()
Definition: hubid.cpp:1218

Referenced by ReenumSerialNumber().

◆ ReenumStopRetryForHub()

SM_RESULT DeviceMachine::ReenumStopRetryForHub ( )
private

Definition at line 472 of file devsm_reenum.cpp.

473{
474 if (StopTimer())
475 return ReenumDisableForHub();
476
478}
SM_RESULT ReenumTimerFlushedForHub(_In_ DsmEvent Event)

Referenced by ReenumRetryDelayEnded(), and ReenumRetryDelayEndedHoldingAddressZero().

◆ ReenumStopRetryOnDetach()

SM_RESULT DeviceMachine::ReenumStopRetryOnDetach ( )
private

Definition at line 453 of file devsm_reenum.cpp.

454{
455 if (StopTimer())
456 return EndWith(DsmEvent::DetachedDeviceEnabled);
457
459}
SM_RESULT ReenumTimerFlushedOnDetach(_In_ DsmEvent Event)

Referenced by ReenumRetryDelayEnded(), and ReenumRetryDelayEndedHoldingAddressZero().

◆ ReenumTimerFlushedForHub()

SM_RESULT DeviceMachine::ReenumTimerFlushedForHub ( _In_ DsmEvent  Event)
private

Definition at line 481 of file devsm_reenum.cpp.

483{
484 switch (Event)
485 {
486 case DsmEvent::TimerFired:
487 return ReenumDisableForHub();
488
489 case DsmEvent::PortDetached:
491
492 default:
493 return SmUnhandled();
494 }
495}

Referenced by ReenumStopRetryForHub().

◆ ReenumTimerFlushedOnDetach()

SM_RESULT DeviceMachine::ReenumTimerFlushedOnDetach ( _In_ DsmEvent  Event)
private

Definition at line 462 of file devsm_reenum.cpp.

464{
465 if (Event != DsmEvent::TimerFired)
466 return SmUnhandled();
467
468 return EndWith(DsmEvent::DetachedDeviceEnabled);
469}

Referenced by ReenumStopRetryOnDetach(), and ReenumTimerFlushedForHub().

◆ ReenumTreePurgedConfigured()

SM_RESULT DeviceMachine::ReenumTreePurgedConfigured ( _In_ DsmEvent  Event)
private

Definition at line 125 of file devsm_reenum.cpp.

127{
128 if (Event != DsmEvent::ControllerIoctlDone)
129 return SmUnhandled();
130
133
135}
SM_RESULT ReenumEndpointsDisabled(_In_ DsmEvent Event)

Referenced by EnterReenumerating().

◆ ReenumTreePurgedUnconfigured()

SM_RESULT DeviceMachine::ReenumTreePurgedUnconfigured ( _In_ DsmEvent  Event)
private

Definition at line 148 of file devsm_reenum.cpp.

150{
151 if (Event != DsmEvent::ControllerIoctlDone)
152 return SmUnhandled();
153
156
158}

Referenced by EnterReenumerating().

◆ ReenumWrongDevice()

SM_RESULT DeviceMachine::ReenumWrongDevice ( )
private

Definition at line 812 of file devsm_reenum.cpp.

813{
814 if (!IsBootDevice())
815 return ReenumRetryOrFail();
816
819}
SM_RESULT ReenumWrongDeviceLeft(_In_ DsmEvent Event)
VOID NotifyWrongDevice()
Definition: bootdev.cpp:371

Referenced by ReenumDescriptorRead(), and ReenumSerialRead().

◆ ReenumWrongDeviceLeft()

SM_RESULT DeviceMachine::ReenumWrongDeviceLeft ( _In_ DsmEvent  Event)
private

Definition at line 822 of file devsm_reenum.cpp.

824{
825 if (Event != DsmEvent::PortDetached)
826 return SmUnhandled();
827
828 return EndWith(DsmEvent::DetachedDeviceEnabled);
829}

Referenced by ReenumWrongDevice().

◆ ReferenceDevice()

VOID DeviceMachine::ReferenceDevice ( )
private

Definition at line 268 of file hubchild.cpp.

269{
271}
#define WdfObjectReference(Handle)
Definition: wdfobject.h:803

Referenced by SmReference().

◆ ReferenceDevicePower()

◆ ReferenceHubPower()

BOOLEAN DeviceMachine::ReferenceHubPower ( )
private

Definition at line 3982 of file childpdo.cpp.

3983{
3985 KIRQL OldIrql;
3986
3990
3991 if (NT_SUCCESS(Status))
3993 else
3994 DPRINT1("Port %u hub power reference failed 0x%lx\n", m_Device->m_Port->Number(), Status);
3995
3996 return TRUE;
3997}
#define WdfDeviceStopIdle(Device, WaitForD0)
Definition: wdfdevice.h:1977

Referenced by OnAwaitingAttach().

◆ ReferencePort()

VOID DeviceMachine::ReferencePort ( )
private

Definition at line 319 of file hubchild.cpp.

320{
322}
#define WdfObjectReferenceWithTag(Handle, Tag)
Definition: wdfobject.h:806

Referenced by OnAwaitingAttach().

◆ RegisterWithHub()

BOOLEAN DeviceMachine::RegisterWithHub ( )
private

Definition at line 1026 of file fanout.cpp.

1027{
1029}
BOOLEAN RegisterDevice(_In_ HubChild *Child)
Definition: fanout.cpp:586

Referenced by OnAwaitingAttach().

◆ ReleaseAddressZero()

◆ ReleasePnpWaiter()

VOID DeviceMachine::ReleasePnpWaiter ( )
private

Definition at line 4039 of file childpdo.cpp.

4040{
4042}
KEVENT m_PnpEvent
Definition: hubchild.h:341

Referenced by OnStoppedEnumeratedHubSuspended(), and OnStoppedHubSuspended().

◆ RemovalAckAndPark()

SM_RESULT DeviceMachine::RemovalAckAndPark ( )
private

◆ RemovalAckHubStop()

SM_RESULT DeviceMachine::RemovalAckHubStop ( )
private

Definition at line 256 of file devsm_remove.cpp.

257{
259 return RemovalHubStopped();
260}
SM_RESULT RemovalHubStopped()

Referenced by OnDetachedReported().

◆ RemovalDeleteAfterLeaving()

SM_RESULT DeviceMachine::RemovalDeleteAfterLeaving ( )
private

Definition at line 221 of file devsm_remove.cpp.

Referenced by OnDetachedMissing(), and OnDetachedReported().

◆ RemovalDeleteAndFinish()

SM_RESULT DeviceMachine::RemovalDeleteAndFinish ( )
private

◆ RemovalDeleteForget()

SM_RESULT DeviceMachine::RemovalDeleteForget ( )
private

◆ RemovalDeleteForgetAndPark()

SM_RESULT DeviceMachine::RemovalDeleteForgetAndPark ( )
private

◆ RemovalDeleteForgetPortOn()

SM_RESULT DeviceMachine::RemovalDeleteForgetPortOn ( )
private

◆ RemovalDeviceDisabled()

SM_RESULT DeviceMachine::RemovalDeviceDisabled ( _In_ DsmEvent  Event)
private

Definition at line 211 of file devsm_remove.cpp.

213{
214 if (Event != DsmEvent::ControllerIoctlDone)
215 return SmUnhandled();
216
217 return (this->*m_AfterDisable)();
218}

Referenced by DisableForRemoval(), and RemovalEndpointsDisabled().

◆ RemovalDropPowerAndPark()

SM_RESULT DeviceMachine::RemovalDropPowerAndPark ( )
private

◆ RemovalDropPowerForHubStop()

SM_RESULT DeviceMachine::RemovalDropPowerForHubStop ( )
private

Definition at line 263 of file devsm_remove.cpp.

264{
266 return RemovalHubStopped();
267}

Referenced by OnDetachedReported().

◆ RemovalEndpointsDisabled()

SM_RESULT DeviceMachine::RemovalEndpointsDisabled ( _In_ DsmEvent  Event)
private

Definition at line 201 of file devsm_remove.cpp.

203{
204 if (Event != DsmEvent::ControllerIoctlDone)
205 return SmUnhandled();
206
208}

Referenced by DisableForRemoval().

◆ RemovalHubStopped()

SM_RESULT DeviceMachine::RemovalHubStopped ( )
private

Definition at line 270 of file devsm_remove.cpp.

271{
275}

Referenced by RemovalAckHubStop(), and RemovalDropPowerForHubStop().

◆ RemovalLeaveHub()

SM_RESULT DeviceMachine::RemovalLeaveHub ( )
private

Definition at line 247 of file devsm_remove.cpp.

248{
253}

Referenced by OnDetachedMissing(), and RemovalPowerDownDone().

◆ RemovalNotifyThenReport()

◆ RemovalPowerDownDone()

SM_RESULT DeviceMachine::RemovalPowerDownDone ( )
private

Definition at line 240 of file devsm_remove.cpp.

241{
243 return RemovalLeaveHub();
244}

Referenced by OnDetachedMissing(), and OnDetachedReported().

◆ ReportAddChild()

SM_RESULT DeviceMachine::ReportAddChild ( )
private

Definition at line 87 of file devsm_report.cpp.

88{
89 switch (AddChildToHub())
90 {
91 case DsmAddChildDone:
92 return ReportCreatePdo();
93
96
97 default:
100
102 return ReportCreatePdo();
103 }
104}
DSM_ADD_CHILD AddChildToHub()
Definition: devmisc.cpp:419
SM_RESULT ReportDuplicateWaitEnded(_In_ DsmEvent Event)
VOID DropSerialNumber()
Definition: hubid.cpp:1198
BOOLEAN DuplicateRetriesUsedUp()
Definition: devmisc.cpp:98
SM_RESULT ReportCreatePdo()

Referenced by EnterReportingToPnp(), and ReportDuplicateWaitEnded().

◆ ReportCreatePdo()

SM_RESULT DeviceMachine::ReportCreatePdo ( )
private

Definition at line 107 of file devsm_report.cpp.

108{
109 if (CreatePdo())
110 return EndWith(DsmEvent::Succeeded);
111
112 AskPortCycle();
113 ForgetChild();
115}
BOOLEAN CreatePdo()
Definition: childpdo.cpp:3893
SM_RESULT EndOnDetach(_In_ DsmEvent Event)
static const State IgnoringHub
Definition: devsm.h:237

Referenced by ReportAddChild().

◆ ReportCycledWithTimer()

SM_RESULT DeviceMachine::ReportCycledWithTimer ( _In_ DsmEvent  Event)
private

Definition at line 150 of file devsm_report.cpp.

152{
153 switch (Event)
154 {
155 case DsmEvent::PortDetached:
157
158 case DsmEvent::TimerFired:
160
161 default:
162 return SmUnhandled();
163 }
164}

Referenced by ReportDuplicateWaitEnded().

◆ ReportDeviceMissing()

VOID DeviceMachine::ReportDeviceMissing ( )
private

Definition at line 3932 of file childpdo.cpp.

3933{
3935 KIRQL OldIrql;
3936
3937 DPRINT("Port %u device marked missing\n", m_Device->m_Port->Number());
3938
3940 Status = WdfPdoMarkMissing(m_Device->m_Pdo->m_Device);
3942
3943 if (!NT_SUCCESS(Status))
3944 {
3945 DPRINT1("Marking the PDO missing failed 0x%lx\n", Status);
3947 }
3948}

Referenced by EnterDetachedReported(), EnterDetachedReportedConfigured(), EnterFailedDeviceGone(), and ReportMissingAndLeave().

◆ ReportDuplicateWaitEnded()

SM_RESULT DeviceMachine::ReportDuplicateWaitEnded ( _In_ DsmEvent  Event)
private

Definition at line 119 of file devsm_report.cpp.

121{
122 BOOLEAN stopped;
123
124 switch (Event)
125 {
126 case DsmEvent::HubStopping:
127 case DsmEvent::HubSuspending:
128 stopped = StopTimer();
129 AskPortCycle();
130 if (stopped)
132
134
135 case DsmEvent::TimerFired:
137
138 case DsmEvent::PortDetached:
139 if (StopTimer())
140 return EndWith(DsmEvent::PortDetached);
141
143
144 default:
145 return SmUnhandled();
146 }
147}
SM_RESULT ReportCycledWithTimer(_In_ DsmEvent Event)

Referenced by ReportAddChild().

◆ ReportEnumFailure()

VOID DeviceMachine::ReportEnumFailure ( )
private

Definition at line 3922 of file childpdo.cpp.

3923{
3925
3926 DPRINT1("Port %u enumeration failed, message %lu\n", Child->m_Port->Number(), Child->m_EnumMessageId);
3927 HubCreateReport(Child->m_Hub->m_Device, HubReport::DeviceEnumerationFailed, Child->m_EnumMessageId);
3928 WdfDeviceSetFailed(Child->m_Pdo->m_Device, WdfDeviceFailedAttemptRestart);
3929}
NTSTATUS NTAPI HubCreateReport(_In_ WDFDEVICE HubFdo, _In_ HubReport Type, _In_ ULONG SubReason)
Definition: errreport.cpp:151
@ WdfDeviceFailedAttemptRestart
Definition: wdfdevice.h:469

Referenced by ReportUnknownPdo().

◆ ReportMissingAndLeave()

◆ ReportUnknownPdo()

SM_RESULT DeviceMachine::ReportUnknownPdo ( )
private

Definition at line 185 of file devsm_report.cpp.

186{
188 {
190 return EndWith(DsmEvent::Succeeded);
191 }
192
193 AskPortCycle();
195}
BOOLEAN CreatePlaceholderPdo()
Definition: childpdo.cpp:3913
VOID ReportEnumFailure()
Definition: childpdo.cpp:3922

Referenced by EnterReportingUnknown().

◆ Request()

SM_RESULT DeviceMachine::Request ( _In_ const State *  Target,
_In_ DSM_ACTION  Start,
_In_ DSM_NEXT  Next 
)
private

Definition at line 568 of file devsm.cpp.

572{
573 m_Start = Start;
574 return Wait(Target, Next);
575}

◆ RequestHibernationPrep()

VOID DeviceMachine::RequestHibernationPrep ( )
private

Definition at line 692 of file hubport.cpp.

693{
694 m_Device->m_Port->Post(PortEvent::HibernateRequest);
695}

Referenced by EnterPreparingHibernation().

◆ RequestPortDisable()

VOID DeviceMachine::RequestPortDisable ( )
private

◆ RequestPortReset()

VOID DeviceMachine::RequestPortReset ( )
private

Definition at line 662 of file hubport.cpp.

663{
664 m_Device->m_Port->Post(PortEvent::ResetRequest);
665}

Referenced by EnterResettingPort(), and StartSuperSpeedReset().

◆ RequestPortResume()

VOID DeviceMachine::RequestPortResume ( )
private

Definition at line 650 of file hubport.cpp.

651{
652 m_Device->m_Port->Post(PortEvent::ResumeRequest);
653}

Referenced by EnterResumingPort(), HubResumeWithPortSuspended(), and OnDeviceSuspended().

◆ RequestPortSuspend()

VOID DeviceMachine::RequestPortSuspend ( )
private

Definition at line 644 of file hubport.cpp.

645{
646 m_Device->m_Port->Post(PortEvent::SuspendRequest);
647}

Referenced by EnterSuspendingPort(), and SuspendedPurgedAfterWake().

◆ RequestPortWarmReset()

VOID DeviceMachine::RequestPortWarmReset ( )
private

Definition at line 668 of file hubport.cpp.

669{
670 m_Device->m_Port->Post(PortEvent::WarmResetRequest);
671}

Referenced by StartSuperSpeedReset().

◆ RequestSuperSpeedDisable()

VOID DeviceMachine::RequestSuperSpeedDisable ( )
private

Definition at line 674 of file hubport.cpp.

675{
676 m_Device->m_Port->Post(PortEvent::DisableSuperSpeedRequest);
677}

Referenced by EnterDisablingSuperSpeed().

◆ RequestU1Timeout()

VOID DeviceMachine::RequestU1Timeout ( )
private

Definition at line 680 of file hubport.cpp.

681{
682 m_Device->m_Port->Post(PortEvent::SetU1Timeout);
683}

Referenced by LpmU1().

◆ RequestU2Timeout()

VOID DeviceMachine::RequestU2Timeout ( )
private

Definition at line 686 of file hubport.cpp.

687{
688 m_Device->m_Port->Post(PortEvent::SetU2Timeout);
689}

Referenced by LpmU2(), and U2TimeoutStart().

◆ ResetAtResumeMarked()

BOOLEAN DeviceMachine::ResetAtResumeMarked ( )
private

Definition at line 4116 of file childpdo.cpp.

4117{
4118 return m_Device->m_Pdo->HasFlag(PdoFlag::WasResetAtResume);
4119}

Referenced by OnSuspendedHubSuspended(), and SuspendedResumeDone().

◆ ResetEndpoint()

VOID DeviceMachine::ResetEndpoint ( )
private

Definition at line 965 of file devhcd.cpp.

966{
968}
static VOID NTAPI HubChildResetTargetEndpoint(_In_ HubChild *Child, _In_ ULONG Flags)
Definition: devhcd.cpp:945
@ FlagEndpointResetPreserveTransferState
Definition: ucxendpoint.h:16

Referenced by OnConfigured().

◆ ResetEndpointAndTransfers()

VOID DeviceMachine::ResetEndpointAndTransfers ( )
private

Definition at line 971 of file devhcd.cpp.

Referenced by ClientHaltCleared(), and OnConfigured().

◆ ResetKindNeeded()

DSM_RESET_KIND DeviceMachine::ResetKindNeeded ( )
private

Definition at line 187 of file devmisc.cpp.

188{
192
193 if (Child->m_EnumRetryCount > 0)
194 {
195 Kind = DsmResetWarm;
196 }
197 else
198 {
200
201 if (Now.QuadPart - Child->m_LastResetTime.QuadPart < DEVICE_FAST_RESET_WINDOW)
202 Kind = DsmResetWarm;
203 else if (Child->HasState(ChildState::WarmResetOnEnumeration))
204 Kind = DsmResetWarm;
205 else if (Child->HasState(ChildState::HotResetOnEnumeration))
206 Kind = Child->HasHack(ChildHack::DisableHotReset) ? DsmResetWarm : DsmResetHot;
207
208 Child->m_LastResetTime = Now;
209 }
210
211 Child->ClearState(ChildState::WarmResetOnEnumeration);
212 Child->ClearState(ChildState::HotResetOnEnumeration);
213 return Kind;
214}
#define DEVICE_FAST_RESET_WINDOW
Definition: devmisc.cpp:17
enum _DSM_RESET_KIND DSM_RESET_KIND
@ DsmResetWarm
Definition: devsm.h:102
@ DsmResetHot
Definition: devsm.h:101
@ DsmResetNone
Definition: devsm.h:100
#define KeQuerySystemTime(t)
Definition: env_spec_w32.h:570
void ClearState()
struct tm * Now
Definition: output.c:19

Referenced by StartSuperSpeedReset().

◆ ResetOnResumeFromS0()

BOOLEAN DeviceMachine::ResetOnResumeFromS0 ( )
private

Definition at line 339 of file devmisc.cpp.

340{
341 return m_Device->HasHack(ChildHack::ResetAfterIdleResume);
342}

Referenced by SuspendedResumeDone().

◆ ResetOnResumeFromSx()

BOOLEAN DeviceMachine::ResetOnResumeFromSx ( )
private

Definition at line 345 of file devmisc.cpp.

346{
347 return m_Device->HasHack(ChildHack::ResetAfterSystemResume);
348}

Referenced by HubEndResumedOrReenumerate(), and HubResumeWithPortSuspended().

◆ SameDeviceConnected()

BOOLEAN DeviceMachine::SameDeviceConnected ( )
private

Definition at line 238 of file devmisc.cpp.

239{
241
244
246 {
247 DPRINT("Device %p descriptor differs from the cached one\n", m_Device);
248 return FALSE;
249 }
250
251 return TRUE;
252}
_In_ BOOLEAN Known
Definition: childpdo.cpp:3265

Referenced by ReenumDescriptorRead().

◆ SameSerialNumber()

BOOLEAN DeviceMachine::SameSerialNumber ( )
private

Definition at line 1218 of file hubid.cpp.

1219{
1223 PCWSTR Stored;
1224 ULONG StoredLength;
1225
1226 if (!HubIdGetSerialNumberText(Child, &Stored, &StoredLength) || Returned < 2)
1227 return FALSE;
1228
1229 if (StoredLength == Returned - 2 &&
1230 RtlEqualMemory(Descriptor->bString, Stored, StoredLength))
1231 {
1232 return TRUE;
1233 }
1234
1235 DPRINT1("Device %p came back with a different serial number\n", Child);
1236 return FALSE;
1237}
static ULONG NTAPI HubIdBytesReturned(_In_ HubChild *Child)
Definition: hubid.cpp:1087
BOOLEAN NTAPI HubIdGetSerialNumberText(_In_ HubChild *Child, _Outptr_result_bytebuffer_(*Length) PCWSTR *Text, _Out_ PULONG Length)
Definition: hubid.cpp:1111
ULONG Returned
const uint16_t * PCWSTR
Definition: typedefs.h:57
struct _USB_STRING_DESCRIPTOR * PUSB_STRING_DESCRIPTOR

Referenced by ReenumSerialRead().

◆ SelectConfigCleanUp()

SM_RESULT DeviceMachine::SelectConfigCleanUp ( )
private

Definition at line 546 of file devsm_config.cpp.

Referenced by SelectConfigDone().

◆ SelectConfigDone()

SM_RESULT DeviceMachine::SelectConfigDone ( _In_ DsmEvent  Event)
private

Definition at line 523 of file devsm_config.cpp.

525{
526 switch (Event)
527 {
528 case DsmEvent::Succeeded:
531 return BackToConfigured();
532
533 case DsmEvent::Failed:
535
536 case DsmEvent::PortDetached:
538 return DetachConfigured();
539
540 default:
541 return SmUnhandled();
542 }
543}
VOID SetConfigInfoInRequest()
Definition: devconfig.cpp:939
SM_RESULT SelectConfigCleanUp()

Referenced by SelectConfigValidate().

◆ SelectConfigFailed()

SM_RESULT DeviceMachine::SelectConfigFailed ( _In_ BOOLEAN  LastStatus)
private

Definition at line 508 of file devsm_config.cpp.

510{
511 if (LastStatus)
513 else
515
517 return BackToConfigured();
518
519 return BackToUnconfigured();
520}

Referenced by SelectConfigValidate().

◆ SelectConfigValid()

BOOLEAN DeviceMachine::SelectConfigValid ( )
private

Definition at line 3617 of file childpdo.cpp.

3618{
3620 HubPdo* Pdo = Child->m_Pdo;
3621 HubFdo* Hub = Child->m_Hub;
3622 ULONG Code;
3623 PURB Urb = HubClientUrb(Child->m_ClientRequest, &Code);
3624 PUSB_CONFIGURATION_DESCRIPTOR Descriptor = Urb->UrbSelectConfiguration.ConfigurationDescriptor;
3625 PUCHAR Entry;
3626 PUCHAR End;
3629 ULONG Count = 0;
3630
3631 PAGED_CODE();
3632
3633 if (Descriptor == NULL)
3634 {
3635 Pdo->m_ConfigPowerDraw = 0;
3636 return TRUE;
3637 }
3638
3642
3643 Pdo->m_ConfigPowerDraw = Descriptor->MaxPower * 2;
3644 if (!Hub->IsRootHub() && Pdo->m_ConfigPowerDraw > Hub->m_MaxPortPower)
3645 {
3646 DPRINT1("Port %u configuration needs %lu mA, the port has %lu mA\n",
3647 Pdo->m_PortNumber, Pdo->m_ConfigPowerDraw, Hub->m_MaxPortPower);
3648 Child->m_LastNtStatus = STATUS_INSUFFICIENT_RESOURCES;
3649 Child->m_LastUsbdStatus = USBD_STATUS_INSUFFICIENT_RESOURCES;
3650 Child->m_Port->m_ConnectionStatus = DeviceNotEnoughPower;
3651 HubWmiNotifyInsufficientPower(Hub, Pdo->m_PortNumber);
3652 return FALSE;
3653 }
3654
3655 /* SuperSpeed units are 8 mA with a 150 or 900 mA budget; only reported, for compatibility */
3656 if ((Child->m_Kind & DSM_KIND_SUPER_SPEED) &&
3657 (ULONG)Descriptor->MaxPower * 8 > (Hub->m_MaxPortPower == 100 ? 150UL : 900UL))
3658 {
3659 DPRINT1("Port %u SuperSpeed configuration asks for more power than the port has\n", Pdo->m_PortNumber);
3660 }
3661
3662 Entry = (PUCHAR)&Urb->UrbSelectConfiguration.Interface;
3663 End = (PUCHAR)Urb + Urb->UrbHeader.Length;
3664
3665 while (Entry + sizeof(USHORT) < End && Count < Descriptor->bNumInterfaces)
3666 {
3668 if (Interface->Length < FIELD_OFFSET(USBD_INTERFACE_INFORMATION, Pipes) ||
3669 Entry + Interface->Length > End)
3670 {
3671 DPRINT1("Port %u select config interface %lu has bad length %u\n",
3672 Pdo->m_PortNumber, Count, Interface->Length);
3673 Child->m_LastNtStatus = STATUS_UNSUCCESSFUL;
3675 return FALSE;
3676 }
3677
3678 Count++;
3679 Entry += Interface->Length;
3680 }
3681
3682 if (Descriptor->bNumInterfaces == 0 || Count != Descriptor->bNumInterfaces)
3684
3685 return TRUE;
3686}
static BOOLEAN NTAPI HubFailClientCheck(_In_ HubChild *Child, _In_ USBD_STATUS UsbdStatus)
Definition: childpdo.cpp:3605
static USBD_STATUS NTAPI HubCheckConfigDescriptor(_In_ HubChild *Child, _In_ PUSB_CONFIGURATION_DESCRIPTOR Descriptor)
Definition: childpdo.cpp:3570
ULONG m_MaxPortPower
Definition: fdo.h:384
BOOLEAN IsRootHub() const
Definition: fdo.h:174
LONG USBD_STATUS
Definition: usb.h:172
@ DeviceNotEnoughPower
Definition: usbioctl.h:283
_In_ NTSTATUS _In_ USBD_STATUS UsbdStatus
Definition: wdfusb.h:403

Referenced by SelectConfigValidate().

◆ SelectConfigValidate()

SM_RESULT DeviceMachine::SelectConfigValidate ( )
private

Definition at line 494 of file devsm_config.cpp.

495{
496 if (!SelectConfigValid())
497 return SelectConfigFailed(TRUE);
498
499 if (!PrepareConfigLists())
501
503 return SmTransition(&Configuring);
504}
SM_RESULT SelectConfigDone(_In_ DsmEvent Event)
BOOLEAN PrepareConfigLists()
Definition: devconfig.cpp:557
SM_RESULT SelectConfigFailed(_In_ BOOLEAN LastStatus)
BOOLEAN SelectConfigValid()
Definition: childpdo.cpp:3617

Referenced by OnConfigured(), OnStoppedAddressed(), and OnUnconfiguredOn().

◆ SelectInterfaceValid()

BOOLEAN DeviceMachine::SelectInterfaceValid ( )
private

Definition at line 3819 of file childpdo.cpp.

3820{
3822 HubPdo* Pdo = Child->m_Pdo;
3823 HubConfiguration* Current = Child->m_CurrentConfig;
3824 ULONG Code;
3825 PURB Urb = HubClientUrb(Child->m_ClientRequest, &Code);
3826 struct _URB_SELECT_INTERFACE* Select = &Urb->UrbSelectInterface;
3830
3831 /* Clients that never declared a USBD contract (pre Windows 8 style), like a buggy KMDF usbser filter, send no handle */
3832 if (Handle == NULL && Pdo->m_ClientContractVersion == HUB_PDO_CONTRACT_UNKNOWN && Current != NULL)
3833 {
3834 DPRINT1("Select interface without a configuration handle\n");
3836 Select->ConfigurationHandle = Handle;
3837 }
3838
3841
3843
3844 /* Clients commonly get the URB length wrong */
3845 Expected = (USHORT)(Select->Interface.Length + sizeof(struct _URB_HEADER) + sizeof(PVOID));
3846 if (Select->Hdr.Length != Expected)
3847 Select->Hdr.Length = Expected;
3848
3849 UsbdStatus = HubInitInterfaceInformation(&Current->Descriptor, &Select->Interface);
3852
3853 return TRUE;
3854}
BOOLEAN Expected
static USBD_STATUS NTAPI HubInitInterfaceInformation(_In_ PUSB_CONFIGURATION_DESCRIPTOR Config, _Inout_ PUSBD_INTERFACE_INFORMATION Info)
Definition: childpdo.cpp:3757
#define HUB_PDO_CONTRACT_UNKNOWN
Definition: childpdo.h:42
ULONG Handle
Definition: gdb_input.c:15
struct _URB_HEADER Hdr
Definition: usb.h:314
USBD_INTERFACE_INFORMATION Interface
Definition: usb.h:316
USBD_CONFIGURATION_HANDLE ConfigurationHandle
Definition: usb.h:315
USBD_INTERFACE_HANDLE InterfaceHandle
Definition: usb.h:296
void * PVOID
Definition: typedefs.h:50
#define USBD_STATUS_INVALID_PARAMETER
Definition: usb.h:203
PVOID USBD_CONFIGURATION_HANDLE
Definition: usb.h:242

Referenced by OnConfigured().

◆ SelSkipped()

BOOLEAN DeviceMachine::SelSkipped ( )
private

Definition at line 311 of file devmisc.cpp.

312{
313 return m_Device->HasHack(ChildHack::NoExitLatencyRequest);
314}

Referenced by LinkExitLatency().

◆ SendAltEnumCommand()

VOID DeviceMachine::SendAltEnumCommand ( )
private

Definition at line 735 of file devreq.cpp.

736{
738
741 Child->m_MsOsVendorCode,
742 (USHORT)(Child->m_MsOs20SetInfo.bAltEnumCode << 8),
744 NULL,
745 0,
746 TRUE))
747 {
748 Child->SetState(ChildState::AltEnumCommandSent);
749 }
750}
#define XFER_VENDOR_TO_DEVICE
Definition: devreq.cpp:19
#define HUB_MSOS20_INDEX_ALT_ENUM
Definition: devreq.h:17

Referenced by BosAltEnum(), DescriptorsQueryRegistry(), and ReenumDescriptorRead().

◆ SendUsbFeatures()

VOID DeviceMachine::SendUsbFeatures ( )
private

Definition at line 500 of file devreq.cpp.

501{
503 ULONG Features = Child->m_DualRoleLocalFeatures;
504
507 Child->m_DualRoleRequestCode,
508 (USHORT)(Features & 0xFFFF),
509 (USHORT)(Features >> 16),
510 NULL,
511 0,
512 TRUE))
513 {
514 Child->SetState(ChildState::DualRoleCommandSent);
515 }
516}
_In_ BOOLEAN _In_ ULONG Features
Definition: devdesc.cpp:445

Referenced by BosValidate().

◆ SerialNumberCompared()

BOOLEAN DeviceMachine::SerialNumberCompared ( )
private

Definition at line 1208 of file hubid.cpp.

1209{
1211 return FALSE;
1212
1213 return m_Device->m_DeviceDescriptor.bcdUSB > 0x0200 || IsBootDevice();
1214}

Referenced by ReenumSerialNumber().

◆ SerialNumberIndexZero()

BOOLEAN DeviceMachine::SerialNumberIndexZero ( )
private

Definition at line 1137 of file hubid.cpp.

1138{
1140}

Referenced by MsOsSerial().

◆ SerialNumberValid()

BOOLEAN DeviceMachine::SerialNumberValid ( )
private

Definition at line 1144 of file hubid.cpp.

1145{
1151 PCWSTR Prefix;
1152 ULONG PrefixBytes;
1153 PWCHAR Buffer;
1154
1156 Child->m_DeviceDescriptor.bcdUSB,
1157 Child->Speed(),
1158 Child->HasHack(ChildHack::UseWin8DescriptorValidation),
1159 Child->m_Port->m_Info.SspIsochBurstCount,
1160 Child->m_ValidationBits);
1161
1163 {
1164 DPRINT1("Device %p serial number string is invalid (%lu bytes)\n", Child, Returned);
1165 Child->m_EnumMessageId = HUB_ENUM_BAD_SERIAL_NUMBER;
1166 return FALSE;
1167 }
1168
1169 if (Child->m_SerialNumber != NULL)
1170 {
1171 ExFreePoolWithTag(Child->m_SerialNumber, HUB_TAG_DEVICE);
1172 Child->m_SerialNumber = NULL;
1173 }
1174
1176 PrefixBytes = (Prefix != NULL) ? HUB_SERIAL_PREFIX_BYTES : 0;
1177
1179 if (Buffer == NULL)
1180 {
1181 DPRINT1("Device %p serial number could not be allocated\n", Child);
1182 return FALSE;
1183 }
1184
1185 if (Prefix != NULL)
1186 RtlCopyMemory(Buffer, Prefix, PrefixBytes);
1187
1188 /* Length is bLength now: the string bytes plus room for the NUL */
1189 RtlCopyMemory((PUCHAR)Buffer + PrefixBytes, Descriptor->bString, Length - sizeof(WCHAR));
1190
1191 Child->m_SerialNumber = Buffer;
1192 Child->m_SerialNumberLength = Returned + PrefixBytes;
1193 Child->m_SerialPrefixLength = PrefixBytes;
1194 return TRUE;
1195}
VOID NTAPI HubDescInitDeviceContext(_Out_ HubDescContext *Context, _In_ USHORT BcdUsb, _In_ USB_DEVICE_SPEED Speed, _In_ BOOLEAN Win8Behavior, _In_ ULONG SspIsochBurstCount, _In_opt_ PULONG Bitmap)
Definition: desccheck.cpp:91
BOOLEAN NTAPI HubDescCheckSerialNumber(_In_ const HubDescContext *Context, _In_reads_bytes_(*Length) PUSB_STRING_DESCRIPTOR Descriptor, _Inout_ PULONG Length)
Definition: desccheck.cpp:2418
static PCWSTR NTAPI HubIdSerialPrefix(_In_ HubChild *Child)
Definition: hubid.cpp:1097
#define HUB_ENUM_BAD_SERIAL_NUMBER
Definition: hubid.h:31
#define HUB_SERIAL_PREFIX_BYTES
Definition: hubid.h:42
static PVOID ExAllocatePoolZero(ULONG PoolType, SIZE_T NumberOfBytes, ULONG Tag)
Definition: precomp.h:45
short WCHAR
Definition: pedump.c:58
uint16_t * PWCHAR
Definition: typedefs.h:56
_In_ __drv_aliasesMem PSTRING Prefix
Definition: rtlfuncs.h:1647

Referenced by MsOsSerialRead().

◆ SetConfigInfoInRequest()

VOID DeviceMachine::SetConfigInfoInRequest ( )
private

Definition at line 939 of file devconfig.cpp.

940{
942 HubConfiguration* Config = Child->m_CurrentConfig;
944 PUSBD_INTERFACE_INFORMATION Info = &Urb->UrbSelectConfiguration.Interface;
946 HubPipe* Pipe;
948 ULONG Index;
949
950 if (Config == NULL)
951 return;
952
953 for (Entry = Config->Interfaces.Flink;
954 Entry != &Config->Interfaces;
956 {
958
959 for (Index = 0; Index < Interface->PipeCount; Index++)
960 {
961 Pipe = &Interface->Pipes[Index];
962
963 Info->Pipes[Index].PipeHandle = HubChildExposePipe(Child, Pipe);
964 Info->Pipes[Index].MaximumTransferSize =
965 Child->m_Hub->m_Stack.EndpointGetMaxTransferSize(Pipe->Endpoint);
966 }
967 }
968}
static USBD_PIPE_HANDLE NTAPI HubChildExposePipe(_In_ HubChild *Child, _Inout_ HubPipe *Pipe)
Definition: devconfig.cpp:923

Referenced by SelectConfigDone().

◆ SetConfiguration()

VOID DeviceMachine::SetConfiguration ( )
private

Definition at line 755 of file devreq.cpp.

756{
758
759 if (Child->m_CurrentConfig == NULL)
760 {
761 DPRINT1("Device %p has no configuration to select\n", Child);
762 Child->Post(DsmEvent::TransferFailed);
763 return;
764 }
765
769 Child->m_CurrentConfig->Descriptor.bConfigurationValue,
770 0,
771 NULL,
772 0,
773 FALSE);
774}
#define XFER_STD_TO_DEVICE
Definition: devreq.cpp:15
#define USB_REQUEST_SET_CONFIGURATION
Definition: usb100.h:85

Referenced by ConfigureDeleteOld().

◆ SetDeviceAddress()

VOID DeviceMachine::SetDeviceAddress ( )
private

Definition at line 607 of file devhcd.cpp.

608{
610
611 Payload->Address.Address = 0;
613}
#define UCX_SIZE_ADDRESS
Definition: devhcd.cpp:18
#define IOCTL_UCXHUB_DEVICE_ADDRESS
Definition: hubucx.h:55
USBDEVICE_ADDRESS Address
Definition: hubchild.h:211

Referenced by EnterSettingAddress().

◆ SetExtPropertiesSemaphore()

BOOLEAN DeviceMachine::SetExtPropertiesSemaphore ( )
private

Definition at line 374 of file hubmsos.cpp.

375{
376 DECLARE_CONST_UNICODE_STRING(Name, L"ExtPropDescSemaphore");
377 ULONG Value = 1;
378
379 PAGED_CODE();
380
382}
LPWSTR Name
Definition: desk.c:124
return HubWriteDeviceValue(Child, &ValueName, Property->wPropertyDataType, DataLength,(PVOID)(Tail+sizeof(DataLength)))
#define REG_DWORD
Definition: sdbapi.c:615
#define DECLARE_CONST_UNICODE_STRING(_variablename, _string)
Definition: wdfcore.h:161
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
Definition: wdfregistry.h:413

Referenced by MsOsInstallStart().

◆ SetFailIo()

VOID DeviceMachine::SetFailIo ( )
private

Definition at line 4084 of file childpdo.cpp.

4085{
4087}

Referenced by FailIoAndDisablePort(), and FailIoAndPurge().

◆ SetInterface()

VOID DeviceMachine::SetInterface ( )
private

Definition at line 806 of file devreq.cpp.

807{
809 HubInterface* Interface = Child->m_NextInterface;
810
811 if (Interface == NULL)
812 {
813 DPRINT("Device %p has no alternate setting left to select\n", Child);
814 Child->Post(DsmEvent::TransferDone);
815 return;
816 }
817
818 Child->m_Control.SetSetup(XFER_STD_TO_INTERFACE,
820 Interface->Descriptor->bAlternateSetting,
821 Interface->Descriptor->bInterfaceNumber,
822 0);
823
824 Interface->NeedsSetInterface = FALSE;
825 Child->m_NextInterface = NULL;
826
827 if (!HubDeviceSend(Child, NULL, 0, FALSE))
828 Child->Post(DsmEvent::TransferFailed);
829}
#define USB_REQUEST_SET_INTERFACE
Definition: usb100.h:87

Referenced by ConfigureInterfaceSet(), InterfaceProgrammed(), and InterfaceRestoreOld().

◆ SetInterfaceInfoInRequest()

VOID DeviceMachine::SetInterfaceInfoInRequest ( )
private

Definition at line 972 of file devconfig.cpp.

973{
975 HubConfiguration* Config = Child->m_CurrentConfig;
977 PUSBD_INTERFACE_INFORMATION Info = &Urb->UrbSelectInterface.Interface;
980 ULONG Index;
981
982 if (Config == NULL)
983 return;
984
985 for (Entry = Config->Interfaces.Flink; Entry != &Config->Interfaces; Entry = Entry->Flink)
986 {
988 if (Interface->Descriptor->bInterfaceNumber != Info->InterfaceNumber)
989 continue;
990
991 for (Index = 0; Index < Interface->PipeCount; Index++)
992 Info->Pipes[Index].PipeHandle = HubChildExposePipe(Child, &Interface->Pipes[Index]);
993
994 return;
995 }
996
997 DPRINT1("Device %p selected interface %u is not in the configuration\n", Child, Info->InterfaceNumber);
998}

Referenced by OnSettingInterface().

◆ SetIsochDelay()

VOID DeviceMachine::SetIsochDelay ( )
private

Definition at line 1068 of file devreq.cpp.

1069{
1071 HubFdo* Hub = Child->m_Hub;
1072 USHORT Delay;
1073
1076 Child->m_TxTpDelay);
1077
1079}
#define USB_REQUEST_ISOCH_DELAY
Definition: usb300.h:330

Referenced by LinkStart().

◆ SetNullConfiguration()

VOID DeviceMachine::SetNullConfiguration ( )
private

◆ SetPdChargingPolicy()

VOID DeviceMachine::SetPdChargingPolicy ( )
private

Definition at line 969 of file devreq.cpp.

970{
973
978 Policy,
979 NULL,
980 0,
981 TRUE);
982}
#define XFER_LOW_POWER_PORT
Definition: devreq.cpp:42
#define USB_CHARGING_POLICY_ICCLPF
Definition: usb300.h:345
#define USB_FEATURE_CHARGING_POLICY
Definition: usb300.h:341
#define USB_CHARGING_POLICY_ICCHPF
Definition: usb300.h:344
_In_ WDFINTERRUPT _In_ WDF_INTERRUPT_POLICY Policy
Definition: wdfinterrupt.h:653

Referenced by EnterSettingPdCharging().

◆ SetSel()

VOID DeviceMachine::SetSel ( )
private

Definition at line 1011 of file devreq.cpp.

1012{
1014 HubFdo* Hub = Child->m_Hub;
1017 ULONG DecodeLatency = (Hub->m_HubDescriptor.Usb30.bHubHdrDecLat + 5) / 10;
1018 ULONG LinkDelay = Child->m_RxTpDelay + Child->m_TxTpDelay;
1019 USHORT LinkU1;
1020 USHORT LinkU2;
1021 UCHAR PelU1;
1022 USHORT PelU2;
1023 ULONG Erdy;
1024
1025 PelU1 = (UCHAR)HubSelPathLatency(Child->m_U1ExitLatency,
1026 Parent->U1ExitLatency,
1027 Parent->SlowestLinkU1ExitLatency,
1028 Parent->SlowestLinkU1Depth,
1029 Depth,
1030 &LinkU1,
1031 &Child->m_SlowestLinkU1);
1032
1033 PelU2 = HubSelPathLatency(Child->m_U2ExitLatency,
1034 Parent->U2ExitLatency,
1035 Parent->SlowestLinkU2ExitLatency,
1036 Parent->SlowestLinkU2Depth,
1037 Depth,
1038 &LinkU2,
1039 &Child->m_SlowestLinkU2);
1040
1041 Child->m_HostU1ExitLatency = (USHORT)(Parent->HostInitiatedU1ExitLatency + LinkU1 + DecodeLatency);
1042 Child->m_HostU2ExitLatency = (USHORT)(Parent->HostInitiatedU2ExitLatency + LinkU2 + DecodeLatency);
1043
1044 /* 2100 ns forwarding, 400 ns per hub each way, plus the link delays, rounded to us */
1045 if (Depth == 0)
1046 Erdy = LinkDelay;
1047 else
1048 Erdy = ((Depth + 1) * LinkDelay + 800 * Depth + 2200) / 1000;
1049
1050 /* 5 us host response time */
1051 Child->m_Sel.U1Pel = PelU1;
1052 Child->m_Sel.U1Sel = (UCHAR)(PelU1 + Erdy + 5);
1053 Child->m_Sel.U2Pel = PelU2;
1054 Child->m_Sel.U2Sel = (USHORT)(PelU2 + Erdy + 5);
1055
1059 0,
1060 0,
1061 &Child->m_Sel,
1062 sizeof(Child->m_Sel),
1063 TRUE);
1064}
ACPI_PHYSICAL_ADDRESS ACPI_SIZE BOOLEAN Warn UINT32 *TableIdx UINT32 ACPI_TABLE_HEADER *OutTableHeader ACPI_TABLE_HEADER **OutTable ACPI_HANDLE UINT32 ACPI_WALK_CALLBACK ACPI_WALK_CALLBACK void void **ReturnValue UINT32 ACPI_BUFFER *RetPathPtr ACPI_OBJECT_HANDLER void *Data ACPI_OBJECT_HANDLER void **Data ACPI_STRING ACPI_OBJECT_LIST ACPI_BUFFER *ReturnObjectBuffer ACPI_DEVICE_INFO **ReturnBuffer ACPI_HANDLE Parent
Definition: acpixf.h:732
UCXHUB_PARENT_INTERFACE m_Parent
Definition: fdo.h:355
UINT Depth
Definition: d3d12.idl:4644
static USHORT NTAPI HubSelPathLatency(_In_ USHORT DeviceLatency, _In_ USHORT UpstreamLatency, _In_ USHORT SlowestLatency, _In_ UCHAR SlowestDepth, _In_ LONG Depth, _Out_ PUSHORT Link, _Inout_ PBOOLEAN Slowest)
Definition: devreq.cpp:988
#define USB_REQUEST_SET_SEL
Definition: usb300.h:329

Referenced by LinkExitLatency().

◆ SetSpeedFor20()

BOOLEAN DeviceMachine::SetSpeedFor20 ( )
private

Definition at line 115 of file devmisc.cpp.

116{
119 ULONG NewSpeed;
120
121 if (Status & PS_HIGH_SPEED)
122 {
123 NewSpeed = DSM_KIND_HIGH_SPEED;
124 m_Device->SetProperty(ChildProperty::HighSpeedCapable);
125 }
126 else if (Status & PS_LOW_SPEED)
127 {
128 NewSpeed = DSM_KIND_LOW_SPEED;
129 }
130 else
131 {
132 NewSpeed = DSM_KIND_FULL_SPEED;
133 }
134
135 m_Device->m_Kind = (m_Device->m_Kind & ~DSM_KIND_ANY_SPEED) | NewSpeed;
136
137 if (OldSpeed != 0 && OldSpeed != NewSpeed)
138 {
139 DPRINT1("Device %p changed speed 0x%lx to 0x%lx\n", m_Device, OldSpeed, NewSpeed);
140 if (OldSpeed == DSM_KIND_HIGH_SPEED)
141 return FALSE;
142 }
143
144 return TRUE;
145}

Referenced by Zero20FirstResetDone().

◆ SetSpeedFor30()

BOOLEAN DeviceMachine::SetSpeedFor30 ( )
private

Definition at line 641 of file devlpm.cpp.

642{
644 HubPort* Port = Child->m_Port;
646 USB_PORT_EXT_STATUS Extended;
647
648 Child->m_RxTpDelay = TP_DELAY_5GBPS_NS;
649 Child->m_TxTpDelay = TP_DELAY_5GBPS_NS;
650
651 if (!Port->HasProperty(PortProperty::EnhancedSuperSpeed))
652 return TRUE;
653
654 Extended.AsUlong32 = Port->m_Current.ExtendedStatus;
655
656 /* No matching attribute keeps the Gen 1 value; a bad Rx one leaves Tx untouched */
658 if (Attribute != NULL && !HubTpDelayFromAttribute(Attribute, Extended.RxLaneCount, &Child->m_RxTpDelay))
659 {
660 DPRINT1("Port %u receive sublink speed %u is unusable\n", Port->Number(), Extended.RxSublinkSpeedID);
661 return FALSE;
662 }
663
665 if (Attribute != NULL && !HubTpDelayFromAttribute(Attribute, Extended.TxLaneCount, &Child->m_TxTpDelay))
666 {
667 DPRINT1("Port %u transmit sublink speed %u is unusable\n", Port->Number(), Extended.TxSublinkSpeedID);
668 return FALSE;
669 }
670
671 return TRUE;
672}
static BOOLEAN NTAPI HubTpDelayFromAttribute(_In_ const USB_DEVICE_CAPABILITY_SUPERSPEEDPLUS_SPEED *Attribute, _In_ ULONG LaneCount, _Out_ PUSHORT Delay)
Definition: devlpm.cpp:600
static const USB_DEVICE_CAPABILITY_SUPERSPEEDPLUS_SPEED *NTAPI HubPortFindSpeed(_In_ HubPort *Port, _In_ ULONG SpeedId, _In_ ULONG Direction)
Definition: devlpm.cpp:620
#define TP_DELAY_5GBPS_NS
Definition: devlpm.cpp:34
CPPORT Port[4]
Definition: headless.c:38
ULONG TxSublinkSpeedID
Definition: usb300.h:300
ULONG RxSublinkSpeedID
Definition: usb300.h:299
#define USB_DEVICE_CAPABILITY_SUPERSPEEDPLUS_SPEED_DIR_RX
Definition: usb300.h:59
#define USB_DEVICE_CAPABILITY_SUPERSPEEDPLUS_SPEED_DIR_TX
Definition: usb300.h:60

Referenced by OnResettingSuperSpeed().

◆ SignalPnpPowerFailure()

VOID DeviceMachine::SignalPnpPowerFailure ( )
private

Definition at line 4031 of file childpdo.cpp.

4032{
4035 m_Device->ClearState(ChildState::ActivityIdSet);
4036}
NTSTATUS m_PnpStatus
Definition: hubchild.h:342

Referenced by OnPortOffEvents(), and OnPortOnEvents().

◆ SignalPnpWaiter()

◆ SignalQueryText()

◆ SmCancelTimer()

BOOLEAN DeviceMachine::SmCancelTimer ( )
private

Definition at line 149 of file devsm.cpp.

150{
151 return CancelStateTimer();
152}
BOOLEAN CancelStateTimer()
Definition: hubchild.cpp:289

◆ SmDereference()

VOID DeviceMachine::SmDereference ( )
private

Definition at line 137 of file devsm.cpp.

138{
140}
VOID DereferenceDevice()
Definition: hubchild.cpp:274

◆ SmQueuePassive()

VOID DeviceMachine::SmQueuePassive ( )
private

Definition at line 143 of file devsm.cpp.

144{
146}
VOID QueuePassiveWork()
Definition: hubchild.cpp:280

◆ SmReference()

VOID DeviceMachine::SmReference ( )
private

Definition at line 131 of file devsm.cpp.

132{
134}
VOID ReferenceDevice()
Definition: hubchild.cpp:268

◆ StartDeviceIo()

VOID DeviceMachine::StartDeviceIo ( )
private

◆ StartDriverWaitTimer()

VOID DeviceMachine::StartDriverWaitTimer ( )
private

Definition at line 4015 of file childpdo.cpp.

4016{
4018}
#define HUB_PDO_DRIVER_WAIT_TIME
Definition: childpdo.cpp:20

Referenced by EnterStoppedAddressed().

◆ StartDuplicateRetries()

VOID DeviceMachine::StartDuplicateRetries ( )
private

Definition at line 92 of file devmisc.cpp.

93{
95}

Referenced by EnterReportingToPnp().

◆ StartEnumRetries()

VOID DeviceMachine::StartEnumRetries ( )
private

Definition at line 59 of file devmisc.cpp.

60{
61 m_Device->ClearState(ChildState::ConfigurationValid);
62 m_Device->ClearState(ChildState::AltEnumCompleted);
63 m_Device->ClearState(ChildState::AltEnumCommandSent);
64 m_Device->ClearState(ChildState::U1EnabledUpstream);
65 m_Device->ClearState(ChildState::U2EnabledUpstream);
71}
UCHAR m_U1Timeout
Definition: hubchild.h:421
UCHAR m_U2Timeout
Definition: hubchild.h:422

Referenced by EnterEnumerating(), and EnterReenumerating().

◆ StartLongPostResetTimer()

VOID DeviceMachine::StartLongPostResetTimer ( )
private

Definition at line 346 of file hubchild.cpp.

347{
349}
#define DEVICE_POST_RESET_TIME_LONG
Definition: hubchild.cpp:20

Referenced by EnterDelaying().

◆ StartPostResetTimer()

VOID DeviceMachine::StartPostResetTimer ( )
private

Definition at line 340 of file hubchild.cpp.

341{
343}
#define DEVICE_POST_RESET_TIME_20
Definition: hubchild.cpp:19

Referenced by EnterDelaying().

◆ StartRetryTimer()

VOID DeviceMachine::StartRetryTimer ( )
private

Definition at line 333 of file hubchild.cpp.

334{
335 DPRINT1("Device %p retrying enumeration in %lu ms\n", m_Device, (ULONG)DEVICE_ENUM_RETRY_TIME);
337}
#define DEVICE_ENUM_RETRY_TIME
Definition: hubchild.cpp:18

Referenced by EnterDelaying().

◆ StartSuperSpeedPostResetTimer()

VOID DeviceMachine::StartSuperSpeedPostResetTimer ( )
private

Definition at line 352 of file hubchild.cpp.

353{
355}
#define DEVICE_POST_RESET_TIME_30
Definition: hubchild.cpp:21

Referenced by EnterDelaying().

◆ StartSuperSpeedReset()

SM_RESULT DeviceMachine::StartSuperSpeedReset ( )
private

Definition at line 406 of file devsm_zero.cpp.

407{
408 switch (ResetKindNeeded())
409 {
410 case DsmResetHot:
413
414 case DsmResetWarm:
417
418 default:
420 }
421}
VOID RequestPortWarmReset()
Definition: hubport.cpp:668
SM_RESULT SuperSpeedResetDone(_In_ DsmEvent Event)
Definition: devsm_zero.cpp:434
SM_RESULT SuperSpeedResetNotified(_In_ DsmEvent Event)
Definition: devsm_zero.cpp:424
DSM_RESET_KIND ResetKindNeeded()
Definition: devmisc.cpp:187

Referenced by EnterAtAddressZeroAgain(), and EnterResettingSuperSpeed().

◆ StopDecision()

SM_RESULT DeviceMachine::StopDecision ( )
private

◆ StoppedAckHubStop()

SM_RESULT DeviceMachine::StoppedAckHubStop ( )
private

Definition at line 645 of file devsm_stopped.cpp.

Referenced by OnStoppedHubSuspended().

◆ StoppedAckPreStart()

SM_RESULT DeviceMachine::StoppedAckPreStart ( )
private

Definition at line 155 of file devsm_stopped.cpp.

156{
158 AllowIo();
160}

Referenced by OnStoppedAddressed(), and ReenumDoneForPreStart().

◆ StoppedDisabledForCleanup()

SM_RESULT DeviceMachine::StoppedDisabledForCleanup ( _In_ DsmEvent  Event)
private

Definition at line 730 of file devsm_stopped.cpp.

732{
733 if (Event != DsmEvent::ControllerIoctlDone)
734 return SmUnhandled();
735
737}

Referenced by OnStoppedEnumeratedHubSuspended().

◆ StoppedDisabledForHub()

SM_RESULT DeviceMachine::StoppedDisabledForHub ( _In_ DsmEvent  Event)
private

Definition at line 218 of file devsm_stopped.cpp.

220{
221 if (Event != DsmEvent::ControllerIoctlDone)
222 return SmUnhandled();
223
226}

Referenced by OnStoppedEnumeratedHubSuspended(), and StoppedPortOffForHubStop().

◆ StoppedDisabledForNoDriver()

SM_RESULT DeviceMachine::StoppedDisabledForNoDriver ( _In_ DsmEvent  Event)
private

Definition at line 171 of file devsm_stopped.cpp.

173{
174 if (Event != DsmEvent::ControllerIoctlDone)
175 return SmUnhandled();
176
178}
SM_RESULT StoppedPortOffForNoDriver(_In_ DsmEvent Event)

Referenced by OnStoppedAddressed().

◆ StoppedDropPower()

SM_RESULT DeviceMachine::StoppedDropPower ( )
private

Definition at line 569 of file devsm_stopped.cpp.

Referenced by OnStopped(), and OnStoppedHubSuspended().

◆ StoppedEnabledDisabledForHub()

SM_RESULT DeviceMachine::StoppedEnabledDisabledForHub ( _In_ DsmEvent  Event)
private

Definition at line 486 of file devsm_stopped.cpp.

488{
489 if (Event != DsmEvent::ControllerIoctlDone)
490 return SmUnhandled();
491
494}
SM_RESULT StoppedPortOffAfterDisable(_In_ DsmEvent Event)

Referenced by OnStoppedReady().

◆ StoppedHubStarted()

SM_RESULT DeviceMachine::StoppedHubStarted ( )
private

Definition at line 652 of file devsm_stopped.cpp.

653{
655 return SmTransition(&Stopped);
656}

Referenced by OnStoppedHubSuspended().

◆ StoppedPortOffAfterDisable()

SM_RESULT DeviceMachine::StoppedPortOffAfterDisable ( _In_ DsmEvent  Event)
private

Definition at line 498 of file devsm_stopped.cpp.

500{
501 switch (Event)
502 {
503 case DsmEvent::PortDetached:
505
506 case DsmEvent::PortFault:
507 case DsmEvent::PortDisableDone:
510
511 default:
512 return SmUnhandled();
513 }
514}

Referenced by StoppedEnabledDisabledForHub(), and StoppedPortOffAfterHubResume().

◆ StoppedPortOffAfterHubResume()

SM_RESULT DeviceMachine::StoppedPortOffAfterHubResume ( _In_ DsmEvent  Event)
private

Definition at line 659 of file devsm_stopped.cpp.

661{
662 switch (Event)
663 {
664 case DsmEvent::PortDisableDone:
665 case DsmEvent::PortFault:
666 return SmTransition(&Stopped);
667
668 case DsmEvent::HubStopping:
669 case DsmEvent::HubSuspending:
671
672 case DsmEvent::PortDetached:
674
675 default:
676 return SmUnhandled();
677 }
678}

Referenced by OnStoppedHubSuspended().

◆ StoppedPortOffForHubStop()

SM_RESULT DeviceMachine::StoppedPortOffForHubStop ( _In_ DsmEvent  Event)
private

Definition at line 199 of file devsm_stopped.cpp.

201{
202 switch (Event)
203 {
204 case DsmEvent::PortDetached:
206 return DetachUnconfigured();
207
208 case DsmEvent::PortFault:
209 case DsmEvent::PortDisableDone:
211
212 default:
213 return SmUnhandled();
214 }
215}

Referenced by ConfiguredNotStartedHubStop(), OnStoppedAddressed(), and StoppedResumeEndedForStop().

◆ StoppedPortOffForNoDriver()

SM_RESULT DeviceMachine::StoppedPortOffForNoDriver ( _In_ DsmEvent  Event)
private

Definition at line 181 of file devsm_stopped.cpp.

183{
184 switch (Event)
185 {
186 case DsmEvent::PortDetached:
188
189 case DsmEvent::PortFault:
190 case DsmEvent::PortDisableDone:
191 return SmTransition(&Stopped);
192
193 default:
194 return SmUnhandled();
195 }
196}

Referenced by StoppedDisabledForNoDriver().

◆ StoppedPortResumed()

SM_RESULT DeviceMachine::StoppedPortResumed ( _In_ DsmEvent  Event)
private

Definition at line 740 of file devsm_stopped.cpp.

742{
743 switch (Event)
744 {
745 case DsmEvent::PortResumeDone:
746 case DsmEvent::PortNowDisabled:
747 case DsmEvent::PortNowEnabledOnReconnect:
749
750 case DsmEvent::PortResumeTimeout:
751 return ReenumForHubStart();
752
753 case DsmEvent::HubStopping:
755
756 case DsmEvent::PortDetached:
757 return DetachUnconfigured();
758
759 case DsmEvent::PortFault:
761
762 case DsmEvent::HubSuspending:
764
765 default:
766 return SmUnhandled();
767 }
768}
SM_RESULT StoppedResumeEndedForSuspend(_In_ DsmEvent Event)
SM_RESULT StoppedResumeEndedForStop(_In_ DsmEvent Event)

Referenced by OnStoppedEnumeratedHubSuspended().

◆ StoppedPortSuspendedForHub()

SM_RESULT DeviceMachine::StoppedPortSuspendedForHub ( _In_ DsmEvent  Event)
private

Definition at line 229 of file devsm_stopped.cpp.

231{
232 switch (Event)
233 {
234 case DsmEvent::PortSuspendDone:
236
237 case DsmEvent::PortFault:
240
241 case DsmEvent::PortDetached:
243 return DetachUnconfigured();
244
245 default:
246 return SmUnhandled();
247 }
248}
static const State StoppedEnumeratedHubSuspended
Definition: devsm.h:838

Referenced by ConfiguredNotStartedHubSuspend(), OnStoppedAddressed(), and StoppedResumeEndedForSuspend().

◆ StoppedPoweredUp()

SM_RESULT DeviceMachine::StoppedPoweredUp ( )
private

Definition at line 163 of file devsm_stopped.cpp.

164{
167}

Referenced by OnStoppedAddressed().

◆ StoppedResumeEndedForStop()

SM_RESULT DeviceMachine::StoppedResumeEndedForStop ( _In_ DsmEvent  Event)
private

Definition at line 771 of file devsm_stopped.cpp.

773{
774 switch (Event)
775 {
776 case DsmEvent::PortResumeDone:
777 case DsmEvent::PortNowDisabled:
778 case DsmEvent::PortNowEnabledOnReconnect:
780
781 case DsmEvent::PortFault:
782 case DsmEvent::PortResumeTimeout:
784
785 case DsmEvent::PortDetached:
786 return DetachUnconfigured();
787
788 default:
789 return SmUnhandled();
790 }
791}

Referenced by StoppedPortResumed().

◆ StoppedResumeEndedForSuspend()

SM_RESULT DeviceMachine::StoppedResumeEndedForSuspend ( _In_ DsmEvent  Event)
private

Definition at line 794 of file devsm_stopped.cpp.

796{
797 switch (Event)
798 {
799 case DsmEvent::PortFault:
800 case DsmEvent::PortResumeTimeout:
802
803 case DsmEvent::PortResumeDone:
805
806 case DsmEvent::PortDetached:
807 return DetachUnconfigured();
808
809 default:
810 return SmUnhandled();
811 }
812}

Referenced by StoppedPortResumed().

◆ StopTimer()

BOOLEAN DeviceMachine::StopTimer ( )
private

◆ StoreMsOsVendorCode()

VOID DeviceMachine::StoreMsOsVendorCode ( )
private

Definition at line 344 of file hubmsos.cpp.

345{
346 UCHAR Record[2];
347
348 PAGED_CODE();
349
350 Record[0] = 1;
352 HubWriteUsbflagsValue(m_Device, L"osvc", Record, sizeof(Record));
353}
UCHAR m_MsOsVendorCode
Definition: hubchild.h:490

Referenced by MsOsStoreVendorCode().

◆ StringError()

SM_RESULT DeviceMachine::StringError ( )
private

Definition at line 873 of file devsm_desc.cpp.

874{
877
878 return EndWith(DsmEvent::Failed);
879}

Referenced by OnReadingLanguages(), and OnReadingProductName().

◆ SuperSpeedDelayEnded()

SM_RESULT DeviceMachine::SuperSpeedDelayEnded ( _In_ DsmEvent  Event)
private

Definition at line 469 of file devsm_zero.cpp.

471{
472 switch (Event)
473 {
474 case DsmEvent::TimerFired:
476
477 case DsmEvent::HubStopping:
478 case DsmEvent::HubSuspending:
479 case DsmEvent::PortDetached:
480 return EndAfterTimer(Event);
481
482 default:
483 return SmUnhandled();
484 }
485}

Referenced by SuperSpeedResetDone().

◆ SuperSpeedMustBeDisabled()

BOOLEAN DeviceMachine::SuperSpeedMustBeDisabled ( )
private

Definition at line 287 of file devmisc.cpp.

288{
289 return m_Device->HasHack(ChildHack::DisableSuperSpeed) && (m_Device->m_Kind & DSM_KIND_SUPER_SPEED);
290}

Referenced by DescriptorsQueryRegistry().

◆ SuperSpeedResetDone()

SM_RESULT DeviceMachine::SuperSpeedResetDone ( _In_ DsmEvent  Event)
private

Definition at line 434 of file devsm_zero.cpp.

436{
437 switch (Event)
438 {
439 case DsmEvent::HubStopping:
440 case DsmEvent::HubSuspending:
443
444 case DsmEvent::PortResetDone:
445 if (IsFirstEnumTry())
447
449
450 case DsmEvent::PortResetAbortedForSuspend:
452
453 case DsmEvent::PortResetTimeout:
455 return EndWith(DsmEvent::Failed);
456
457 case DsmEvent::PortFault:
458 return EndWith(DsmEvent::Failed);
459
460 case DsmEvent::PortDetached:
461 return EndWith(DsmEvent::PortDetached);
462
463 default:
464 return SmUnhandled();
465 }
466}
SM_RESULT SuperSpeedDelayEnded(_In_ DsmEvent Event)
Definition: devsm_zero.cpp:469

Referenced by StartSuperSpeedReset().

◆ SuperSpeedResetNotified()

SM_RESULT DeviceMachine::SuperSpeedResetNotified ( _In_ DsmEvent  Event)
private

Definition at line 424 of file devsm_zero.cpp.

426{
427 if (Event != DsmEvent::ControllerIoctlDone)
428 return SmUnhandled();
429
430 return EndWith(DsmEvent::Succeeded);
431}

Referenced by StartSuperSpeedReset(), SuperSpeedDelayEnded(), and SuperSpeedResetDone().

◆ SupportsPdCharging()

BOOLEAN DeviceMachine::SupportsPdCharging ( )
private

Definition at line 293 of file devmisc.cpp.

294{
295 return m_Device->HasProperty(ChildProperty::ChargingPolicySupported);
296}

Referenced by OnUpdatingDevice(), and ReenumPdCharging().

◆ SuspendArmed()

SM_RESULT DeviceMachine::SuspendArmed ( _In_ DsmEvent  Event)
private

Definition at line 380 of file devsm_power.cpp.

382{
383 switch (Event)
384 {
385 case DsmEvent::TransferDone:
387 break;
388
389 case DsmEvent::TransferFailed:
391 break;
392
393 default:
394 return SmUnhandled();
395 }
396
399}
SM_RESULT SuspendPortArmed(_In_ DsmEvent Event)
SM_RESULT SuspendPortArmFailed(_In_ DsmEvent Event)
SM_RESULT SuspendIoPurged(_In_ DsmEvent Event)

Referenced by SuspendIoAborted().

◆ SuspendedBackDown()

SM_RESULT DeviceMachine::SuspendedBackDown ( _In_ DsmEvent  Event)
private

Definition at line 562 of file devsm_power.cpp.

564{
565 switch (Event)
566 {
567 case DsmEvent::PortSuspendDone:
569
570 case DsmEvent::HubSuspending:
572
573 case DsmEvent::PortDetached:
574 return EndWith(DsmEvent::PortDetached);
575
576 case DsmEvent::PortFault:
577 return EndWith(DsmEvent::PortFault);
578
579 default:
580 return SmUnhandled();
581 }
582}
SM_RESULT SuspendedPortDownForHub(_In_ DsmEvent Event)

Referenced by SuspendedResumedByPort().

◆ SuspendedDisarmed()

SM_RESULT DeviceMachine::SuspendedDisarmed ( _In_ DsmEvent  Event)
private

Definition at line 656 of file devsm_power.cpp.

658{
659 if ((Event != DsmEvent::TransferDone) && (Event != DsmEvent::TransferFailed))
660 return SmUnhandled();
661
662 return SuspendedResumeDone();
663}
SM_RESULT SuspendedResumeDone()

Referenced by OnAwaitingPowerUpAfterWake(), and SuspendedIoStarted().

◆ SuspendedIoStarted()

SM_RESULT DeviceMachine::SuspendedIoStarted ( _In_ DsmEvent  Event)
private

Definition at line 639 of file devsm_power.cpp.

641{
642 if ((Event != DsmEvent::ControllerIoctlDone) && (Event != DsmEvent::ControllerIoctlFailed))
643 return SmUnhandled();
644
645 if (DisarmOnResume())
646 {
650 }
651
652 return SuspendedResumeDone();
653}
BOOLEAN DisarmOnResume()
Definition: devmisc.cpp:518

Referenced by SuspendedPortResumed().

◆ SuspendedIoStartedOnWake()

SM_RESULT DeviceMachine::SuspendedIoStartedOnWake ( _In_ DsmEvent  Event)
private

Definition at line 551 of file devsm_power.cpp.

553{
554 if ((Event != DsmEvent::ControllerIoctlDone) && (Event != DsmEvent::ControllerIoctlFailed))
555 return SmUnhandled();
556
558}
static const State AwaitingPowerUpAfterWake
Definition: devsm.h:954

Referenced by SuspendedResumedByPort().

◆ SuspendedNeedsReset()

SM_RESULT DeviceMachine::SuspendedNeedsReset ( )
private

Definition at line 679 of file devsm_power.cpp.

680{
683 return EndWith(DsmEvent::NeedsReenumeration);
684}

Referenced by OnAwaitingPowerUpForReset(), and SuspendedResumeDone().

◆ SuspendedPortDownForHub()

SM_RESULT DeviceMachine::SuspendedPortDownForHub ( _In_ DsmEvent  Event)
private

Definition at line 585 of file devsm_power.cpp.

587{
588 switch (Event)
589 {
590 case DsmEvent::PortSuspendDone:
591 m_D3Cold = FALSE;
593
594 case DsmEvent::PortDetached:
596 return EndWith(DsmEvent::PortDetached);
597
598 case DsmEvent::PortFault:
600 return EndWith(DsmEvent::PortFault);
601
602 default:
603 return SmUnhandled();
604 }
605}

Referenced by SuspendedBackDown(), and SuspendedPurgedAfterWake().

◆ SuspendedPortOffForReset()

SM_RESULT DeviceMachine::SuspendedPortOffForReset ( _In_ DsmEvent  Event)
private

Definition at line 815 of file devsm_power.cpp.

817{
818 switch (Event)
819 {
820 case DsmEvent::PortDetached:
822 return EndWith(DsmEvent::PortDetached);
823
824 case DsmEvent::PortFault:
825 return EndWith(DsmEvent::PortFault);
826
827 case DsmEvent::PortDisableDone:
828 m_D3Cold = FALSE;
830
831 default:
832 return SmUnhandled();
833 }
834}

Referenced by SuspendedPurgedForReset().

◆ SuspendedPortOffForStop()

SM_RESULT DeviceMachine::SuspendedPortOffForStop ( _In_ DsmEvent  Event)
private

Definition at line 728 of file devsm_power.cpp.

730{
731 switch (Event)
732 {
733 case DsmEvent::PortDetached:
734 return EndWith(DsmEvent::PortDetached);
735
736 case DsmEvent::PortFault:
737 case DsmEvent::PortDisableDone:
738 return EndWith(DsmEvent::HubStopping);
739
740 default:
741 return SmUnhandled();
742 }
743}

Referenced by OnAwaitingPowerUpAfterWake().

◆ SuspendedPortResumed()

SM_RESULT DeviceMachine::SuspendedPortResumed ( _In_ DsmEvent  Event)
private

Definition at line 609 of file devsm_power.cpp.

611{
612 switch (Event)
613 {
614 case DsmEvent::PortFault:
615 case DsmEvent::PortResumeTimeout:
616 case DsmEvent::PortResumeAbortedForSuspend:
618 return EndWith(DsmEvent::PortFault);
619
620 case DsmEvent::PortResumeDone:
623
624 case DsmEvent::PortDetached:
626 return EndWith(DsmEvent::PortDetached);
627
628 case DsmEvent::PortNowDisabled:
629 case DsmEvent::PortNowEnabledOnReconnect:
631 return EndWith(DsmEvent::NeedsReenumeration);
632
633 default:
634 return SmUnhandled();
635 }
636}
SM_RESULT SuspendedIoStarted(_In_ DsmEvent Event)

Referenced by OnDeviceSuspended().

◆ SuspendedPurgedAfterWake()

SM_RESULT DeviceMachine::SuspendedPurgedAfterWake ( _In_ DsmEvent  Event)
private

Definition at line 717 of file devsm_power.cpp.

719{
720 if (Event != DsmEvent::ControllerIoctlDone)
721 return SmUnhandled();
722
725}

Referenced by OnAwaitingPowerUpAfterWake().

◆ SuspendedPurgedForReset()

SM_RESULT DeviceMachine::SuspendedPurgedForReset ( _In_ DsmEvent  Event)
private

Definition at line 796 of file devsm_power.cpp.

798{
799 if (Event != DsmEvent::ControllerIoctlDone)
800 return SmUnhandled();
801
804}
SM_RESULT SuspendedPortOffForReset(_In_ DsmEvent Event)
VOID DisablePortMarkingReset()

Referenced by OnAwaitingPowerUpForReset().

◆ SuspendedResumedByPort()

SM_RESULT DeviceMachine::SuspendedResumedByPort ( )
private

Definition at line 539 of file devsm_power.cpp.

540{
541 if (DeviceArmedForWake())
542 {
545 }
546
548}
BOOLEAN DeviceArmedForWake()
Definition: devmisc.cpp:509
SM_RESULT SuspendedIoStartedOnWake(_In_ DsmEvent Event)
SM_RESULT SuspendedBackDown(_In_ DsmEvent Event)

Referenced by OnDeviceSuspended(), and OnSuspendedHubSuspended().

◆ SuspendedResumeDone()

SM_RESULT DeviceMachine::SuspendedResumeDone ( )
private

Definition at line 667 of file devsm_power.cpp.

668{
670 return SuspendedNeedsReset();
671
673 return EndWith(DsmEvent::NeedsReenumeration);
674
675 return EndWith(DsmEvent::ResumeDone);
676}
BOOLEAN ResetOnResumeFromS0()
Definition: devmisc.cpp:339

Referenced by SuspendedDisarmed(), and SuspendedIoStarted().

◆ SuspendEndedForHub()

SM_RESULT DeviceMachine::SuspendEndedForHub ( _In_ DsmEvent  Event)
private

Definition at line 484 of file devsm_power.cpp.

486{
487 switch (Event)
488 {
489 case DsmEvent::PortSuspendDone:
490 case DsmEvent::PortFault:
491 case DsmEvent::PortDisableDone:
492 return EndWith(DsmEvent::HubSuspending);
493
494 case DsmEvent::PortDetached:
495 return EndWith(DsmEvent::PortDetached);
496
497 default:
498 return SmUnhandled();
499 }
500}

Referenced by SuspendPortArmed(), SuspendPortArmFailed(), and SuspendPortPlain().

◆ SuspendIoAborted()

SM_RESULT DeviceMachine::SuspendIoAborted ( _In_ DsmEvent  Event)
private

Definition at line 369 of file devsm_power.cpp.

371{
372 if ((Event != DsmEvent::ControllerIoctlDone) && (Event != DsmEvent::ControllerIoctlFailed))
373 return SmUnhandled();
374
377}
VOID ArmForWake()
Definition: devreq.cpp:887
SM_RESULT SuspendArmed(_In_ DsmEvent Event)

Referenced by SuspendStart().

◆ SuspendIoPurged()

SM_RESULT DeviceMachine::SuspendIoPurged ( _In_ DsmEvent  Event)
private

Definition at line 402 of file devsm_power.cpp.

404{
405 if (Event != DsmEvent::ControllerIoctlDone)
406 return SmUnhandled();
407
409}

Referenced by SuspendArmed(), and SuspendStart().

◆ SuspendPortArmed()

SM_RESULT DeviceMachine::SuspendPortArmed ( _In_ DsmEvent  Event)
private

Definition at line 435 of file devsm_power.cpp.

437{
438 switch (Event)
439 {
440 case DsmEvent::PortFault:
442 return EndWith(DsmEvent::Failed);
443
444 case DsmEvent::HubSuspending:
446
447 case DsmEvent::PortSuspendDone:
448 return EndWith(DsmEvent::Succeeded);
449
450 case DsmEvent::PortDetached:
452 return EndWith(DsmEvent::PortDetached);
453
454 default:
455 return SmUnhandled();
456 }
457}
SM_RESULT SuspendEndedForHub(_In_ DsmEvent Event)

Referenced by SuspendArmed().

◆ SuspendPortArmFailed()

SM_RESULT DeviceMachine::SuspendPortArmFailed ( _In_ DsmEvent  Event)
private

Definition at line 461 of file devsm_power.cpp.

463{
464 switch (Event)
465 {
466 case DsmEvent::PortFault:
467 case DsmEvent::PortSuspendDone:
469 return EndWith(DsmEvent::Failed);
470
471 case DsmEvent::HubSuspending:
473
474 case DsmEvent::PortDetached:
476 return EndWith(DsmEvent::PortDetached);
477
478 default:
479 return SmUnhandled();
480 }
481}

Referenced by SuspendArmed().

◆ SuspendPortPlain()

SM_RESULT DeviceMachine::SuspendPortPlain ( _In_ DsmEvent  Event)
private

Definition at line 412 of file devsm_power.cpp.

414{
415 switch (Event)
416 {
417 case DsmEvent::PortSuspendDone:
418 return EndWith(DsmEvent::Succeeded);
419
420 case DsmEvent::HubSuspending:
422
423 case DsmEvent::PortFault:
424 return EndWith(DsmEvent::Failed);
425
426 case DsmEvent::PortDetached:
427 return EndWith(DsmEvent::PortDetached);
428
429 default:
430 return SmUnhandled();
431 }
432}

Referenced by SuspendStart().

◆ SuspendStart()

SM_RESULT DeviceMachine::SuspendStart ( )
private

Definition at line 355 of file devsm_power.cpp.

356{
357 if (ArmForWakeWanted())
358 {
361 }
362
366}
BOOLEAN ArmForWakeWanted()
Definition: devmisc.cpp:501
VOID AbortDeviceIo()
Definition: devhcd.cpp:901
SM_RESULT SuspendIoAborted(_In_ DsmEvent Event)
SM_RESULT SuspendPortPlain(_In_ DsmEvent Event)

Referenced by EnterSuspendingConfigured(), and EnterSuspendingUnconfigured().

◆ Then()

◆ ToAwaitingDetachOrRemove()

◆ U1Change()

DSM_FEATURE_CHANGE DeviceMachine::U1Change ( )
private

Definition at line 496 of file devlpm.cpp.

497{
499 m_Device->HasState(ChildState::U1EnabledUpstream));
500}
static DSM_FEATURE_CHANGE NTAPI HubLinkChange(_In_ BOOLEAN Wanted, _In_ BOOLEAN Enabled)
Definition: devlpm.cpp:485

Referenced by LpmEnableU1().

◆ U1TimeoutChanged()

BOOLEAN DeviceMachine::U1TimeoutChanged ( )
private

Definition at line 463 of file devlpm.cpp.

464{
466 return FALSE;
467
469 return TRUE;
470}

Referenced by LpmU1().

◆ U2Change()

DSM_FEATURE_CHANGE DeviceMachine::U2Change ( )
private

Definition at line 503 of file devlpm.cpp.

504{
506 m_Device->HasState(ChildState::U2EnabledUpstream));
507}

Referenced by LpmEnableU2().

◆ U2NeededForEnumerated()

BOOLEAN DeviceMachine::U2NeededForEnumerated ( )
private

Definition at line 151 of file devlpm.cpp.

152{
154}
BOOLEAN NTAPI HubChildU2ForEnumerated(_In_ HubChild *Child)
Definition: devlpm.cpp:135

Referenced by U2TimeoutStart().

◆ U2TimeoutChanged()

BOOLEAN DeviceMachine::U2TimeoutChanged ( )
private

Definition at line 473 of file devlpm.cpp.

474{
476 return FALSE;
477
479 return TRUE;
480}

Referenced by LpmU2().

◆ U2TimeoutSet()

SM_RESULT DeviceMachine::U2TimeoutSet ( _In_ DsmEvent  Event)
private

Definition at line 854 of file devsm_stopped.cpp.

856{
857 switch (Event)
858 {
859 case DsmEvent::PortTimeoutSet:
860 return EndWith(DsmEvent::Succeeded);
861
862 case DsmEvent::PortFault:
863 return EndWith(DsmEvent::Failed);
864
865 default:
866 return SmUnhandled();
867 }
868}

Referenced by U2TimeoutStart().

◆ U2TimeoutStart()

SM_RESULT DeviceMachine::U2TimeoutStart ( )
private

Definition at line 844 of file devsm_stopped.cpp.

845{
847 return EndWith(DsmEvent::Succeeded);
848
851}
SM_RESULT U2TimeoutSet(_In_ DsmEvent Event)
BOOLEAN U2NeededForEnumerated()
Definition: devlpm.cpp:151

Referenced by EnterSettingU2Timeout().

◆ UnconfiguredByClient()

SM_RESULT DeviceMachine::UnconfiguredByClient ( _In_ DsmEvent  Event)
private

Definition at line 252 of file devsm_stopped.cpp.

254{
255 if ((Event != DsmEvent::TransferDone) && (Event != DsmEvent::TransferFailed))
256 return SmUnhandled();
257
259 return BackToUnconfigured();
260}

Referenced by OnStoppedAddressed(), and OnUnconfiguredOn().

◆ UnconfiguredDisabledForRestart()

SM_RESULT DeviceMachine::UnconfiguredDisabledForRestart ( _In_ DsmEvent  Event)
private

Definition at line 296 of file devsm_power.cpp.

298{
299 if (Event != DsmEvent::ControllerIoctlDone)
300 return SmUnhandled();
301
302 return ReenumForPreStart();
303}

Referenced by OnSuspendedUnconfigured().

◆ UnconfiguredDisabledForStop()

SM_RESULT DeviceMachine::UnconfiguredDisabledForStop ( _In_ DsmEvent  Event)
private

Definition at line 162 of file devsm_power.cpp.

164{
165 if (Event != DsmEvent::ControllerIoctlDone)
166 return SmUnhandled();
167
169}
SM_RESULT UnconfiguredPortOffForStop(_In_ DsmEvent Event)

Referenced by OnUnconfiguredOn(), and StopDecision().

◆ UnconfiguredPortOffForStop()

SM_RESULT DeviceMachine::UnconfiguredPortOffForStop ( _In_ DsmEvent  Event)
private

Definition at line 172 of file devsm_power.cpp.

174{
175 switch (Event)
176 {
177 case DsmEvent::PortDetached:
180
181 case DsmEvent::PortDisableDone:
182 case DsmEvent::PortFault:
184 return SmTransition(&Stopped);
185
186 default:
187 return SmUnhandled();
188 }
189}

Referenced by UnconfiguredDisabledForStop().

◆ UnconfiguredResumedWithHub()

SM_RESULT DeviceMachine::UnconfiguredResumedWithHub ( _In_ DsmEvent  Event)
private

Definition at line 329 of file devsm_power.cpp.

331{
332 switch (Event)
333 {
334 case DsmEvent::PortResumeDone:
336
337 case DsmEvent::PortFault:
338 case DsmEvent::PortResumeTimeout:
339 case DsmEvent::PortNowDisabled:
340 case DsmEvent::PortNowEnabledOnReconnect:
342
343 case DsmEvent::PortDetached:
344 return DetachUnconfigured();
345
346 default:
347 return SmUnhandled();
348 }
349}

Referenced by OnUnconfiguredHubSuspended().

◆ UnconfiguredSuspendedForHub()

SM_RESULT DeviceMachine::UnconfiguredSuspendedForHub ( _In_ DsmEvent  Event)
private

Definition at line 140 of file devsm_power.cpp.

142{
143 switch (Event)
144 {
145 case DsmEvent::PortFault:
148
149 case DsmEvent::PortSuspendDone:
151
152 case DsmEvent::PortDetached:
153 return DetachUnconfigured();
154
155 default:
156 return SmUnhandled();
157 }
158}

Referenced by OnUnconfiguredOn().

◆ UnregisterFromHub()

VOID DeviceMachine::UnregisterFromHub ( )
private

Definition at line 1032 of file fanout.cpp.

1033{
1035}
VOID UnregisterDevice(_In_ HubChild *Child)
Definition: fanout.cpp:638

Referenced by EndAfterDetach(), LeaveHub(), OnAwaitingRemove(), RemovalDeleteAfterLeaving(), RemovalLeaveHub(), and ReportMissingAndLeave().

◆ UpdateDefaultEndpoint()

VOID DeviceMachine::UpdateDefaultEndpoint ( )
private

Definition at line 596 of file devhcd.cpp.

597{
599
603}
USHORT m_MaxPacketSize0
Definition: hubchild.h:351
#define UCX_SIZE_EP0_UPDATE
Definition: devhcd.cpp:25
#define IOCTL_UCXHUB_DEFAULT_ENDPOINT_UPDATE
Definition: hubucx.h:62
UCXENDPOINT DefaultEndpoint
Definition: ucxendpoint.h:55
DEFAULT_ENDPOINT_UPDATE DefaultEndpoint
Definition: hubchild.h:220

Referenced by EnterUpdatingDefaultEndpoint().

◆ UpdateDeviceInController()

VOID DeviceMachine::UpdateDeviceInController ( )
private

Definition at line 753 of file devhcd.cpp.

754{
757 PUSBDEVICE_UPDATE Update = &Payload->Update;
758 BOOLEAN IsHub = Child->HasProperty(ChildProperty::IsHub);
759
760 /* Only ports bound to a USB4 host ask; the U2 decision below sees the preset, not the answer */
761 Child->m_TunnelState = HUB_TUNNEL_STATE_NOT_USB4;
762 if (Child->m_Port->HasFlag(PortFlag::Usb4Host))
763 {
764 Child->m_TunnelState = HUB_TUNNEL_STATE_UNKNOWN;
765 Update->Flags.UpdateTunnelState = 1;
766 }
767
768 Update->Flags.UpdateDeviceDescriptor = 1;
769 Update->Flags.UpdateBosDescriptor = 1;
770 Update->Flags.UpdateMaxExitLatency = 1;
771 Update->Flags.UpdateIsHub = 1;
772 if (Child->HasHack(ChildHack::TolerateStalePipes))
773 Update->Flags.UpdateAllowIoOnInvalidPipeHandles = 1;
774
775 Update->DeviceDescriptor = &Child->m_DeviceDescriptor;
776 Update->BosDescriptor = Child->m_Bos;
777 Update->MaxExitLatency = HubChildU2ForEnumerated(Child) ? Child->m_HostU2ExitLatency : 0;
778 Update->IsHub = IsHub;
779
781
782 /* Only a root port uses the device's own resume signaling time */
783 if (Child->m_HasResumeRecoveryTime &&
784 Child->HasProperty(ChildProperty::NotRemovable) &&
785 !IsHub &&
786 Child->m_Port->m_Info.Protocol == 0x200)
787 {
788 Update->Flags.UpdateRootPortResumeTime = 1;
789 Update->RootPortResumeTime = Child->m_Hub->IsRootHub() ? Child->m_ResumeSignalingTime
791 }
792
794}
@ Update
Definition: registry.c:565
#define HUB_ROOT_RESUME_SIGNAL_MS
Definition: devhcd.cpp:45
static BOOLEAN NTAPI HubChildComputeLpm20(_In_ HubChild *Child, _Inout_ PUSBDEVICE_UPDATE Update)
Definition: devhcd.cpp:694
#define UCX_SIZE_UPDATE
Definition: devhcd.cpp:19
#define HUB_TUNNEL_STATE_UNKNOWN
Definition: hubchild.h:54
#define HUB_TUNNEL_STATE_NOT_USB4
Definition: hubchild.h:51
#define IOCTL_UCXHUB_DEVICE_UPDATE
Definition: hubucx.h:56
USBDEVICE_UPDATE Update
Definition: hubchild.h:212

Referenced by EnterUpdatingDevice().

◆ UpdateExitLatency()

VOID DeviceMachine::UpdateExitLatency ( )
private

Definition at line 812 of file devhcd.cpp.

813{
815 HubUcxPayload* Payload;
816
817 if (Child->m_MaxExitLatencyFromEld != 0 &&
818 Child->m_TargetExitLatency > Child->m_MaxExitLatencyFromEld)
819 {
820 DPRINT1("Device %p exit latency %u is above the controller limit %lu\n",
821 Child, Child->m_TargetExitLatency, Child->m_MaxExitLatencyFromEld);
822 Child->Post(DsmEvent::ControllerExitLatencyTooLarge);
823 return;
824 }
825
827 Payload->Update.Flags.UpdateMaxExitLatency = 1;
828 Payload->Update.MaxExitLatency = Child->m_TargetExitLatency;
830}
USBDEVICE_UPDATE_FLAGS Flags
Definition: ucxusbdevice.h:121

Referenced by LpmCompute(), LpmLower(), and LpmProgrammedBeforeRaise().

◆ UpdateLpm20()

BOOLEAN DeviceMachine::UpdateLpm20 ( )
private

Definition at line 798 of file devhcd.cpp.

799{
801
802 RtlZeroMemory(Child->m_UcxPayload, sizeof(*Child->m_UcxPayload));
803 if (!HubChildComputeLpm20(Child, &Child->m_UcxPayload->Update))
804 return FALSE;
805
808 return TRUE;
809}
static VOID NTAPI HubChildSetPayloadHeader(_In_ HubChild *Child, _In_ ULONG Size)
Definition: devhcd.cpp:58

Referenced by Link20Start().

◆ Wait()

SM_RESULT DeviceMachine::Wait ( _In_ const State *  Target,
_In_ DSM_NEXT  Next 
)
private

Definition at line 167 of file devsm.cpp.

170{
171 m_Next = Next;
172 return SmTransition(Target);
173}

◆ WaitNeededAfterAddress()

BOOLEAN DeviceMachine::WaitNeededAfterAddress ( )
private

Definition at line 281 of file devmisc.cpp.

282{
283 return !(m_Device->m_Kind & DSM_KIND_SUPER_SPEED) || m_Device->HasState(ChildState::FailedAnEnumeration);
284}

Referenced by OnSettingAddress().

◆ WriteCustomProperties()

BOOLEAN DeviceMachine::WriteCustomProperties ( )
private

Definition at line 522 of file hubmsos.cpp.

523{
525 const UCHAR* Cursor = (const UCHAR*)Child->m_ExtProperties + sizeof(HubMsOsExtPropHeader);
526 USHORT Count = ((const HubMsOsExtPropHeader*)Child->m_ExtProperties)->wCount;
529 const UCHAR* Tail;
532
533 PAGED_CODE();
534
535 for (Index = 0; Index < Count; Index++)
536 {
538
540 Tail = (const UCHAR*)(Property + 1) + Property->wPropertyNameLength;
542
544 &Name,
545 Property->dwPropertyDataType,
547 (PVOID)(Tail + sizeof(DataLength)))))
548 {
549 return FALSE;
550 }
551
552 Cursor += Property->dwSize;
553 }
554
555 return TRUE;
556}
PUCHAR Cursor
Definition: desccheck.cpp:2228
_In_ D3DDDI_VIDEO_PRESENT_TARGET_ID _In_ ULONG _In_ ULONG DataLength
Definition: dispmprt.h:233
const UCHAR * Tail
Definition: hubmsos.cpp:145
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)

Referenced by MsOsWriteProperties().

◆ Zero20CreateDevice()

SM_RESULT DeviceMachine::Zero20CreateDevice ( )
private

Definition at line 79 of file devsm_zero.cpp.

80{
82 return EndWith(DsmEvent::Failed);
83
85 {
87 return EndWith(DsmEvent::Failed);
88 }
89
91}
BOOLEAN CreateDeviceInController()
Definition: devhcd.cpp:488
BOOLEAN CreateDefaultEndpoint()
Definition: devhcd.cpp:535
SM_RESULT Zero20Enabled(_In_ DsmEvent Event)
Definition: devsm_zero.cpp:94

Referenced by Zero20FirstResetDone().

◆ Zero20Enabled()

SM_RESULT DeviceMachine::Zero20Enabled ( _In_ DsmEvent  Event)
private

Definition at line 94 of file devsm_zero.cpp.

96{
97 switch (Event)
98 {
99 case DsmEvent::ControllerIoctlDone:
102
103 case DsmEvent::ControllerIoctlFailed:
105
106 default:
107 return SmUnhandled();
108 }
109}
SM_RESULT Zero20FirstDelayEnded(_In_ DsmEvent Event)
Definition: devsm_zero.cpp:112

Referenced by Zero20CreateDevice().

◆ Zero20EndpointUpdated()

SM_RESULT DeviceMachine::Zero20EndpointUpdated ( _In_ DsmEvent  Event)
private

Definition at line 196 of file devsm_zero.cpp.

198{
199 switch (Event)
200 {
201 case DsmEvent::ControllerIoctlDone:
202 if (NeedsSecondReset())
204
206
207 case DsmEvent::ControllerIoctlFailed:
209
210 default:
211 return SmUnhandled();
212 }
213}
SM_RESULT Zero20ResetNotified(_In_ DsmEvent Event)
Definition: devsm_zero.cpp:216
SM_RESULT Zero20SecondResetDone(_In_ DsmEvent Event)
Definition: devsm_zero.cpp:233
BOOLEAN NeedsSecondReset()
Definition: devmisc.cpp:262

Referenced by Zero20FirstDescriptorRead().

◆ Zero20FirstDelayEnded()

SM_RESULT DeviceMachine::Zero20FirstDelayEnded ( _In_ DsmEvent  Event)
private

Definition at line 112 of file devsm_zero.cpp.

114{
115 if (Event == DsmEvent::TimerFired)
117
118 return Zero20StopDelay(Event);
119}
SM_RESULT Zero20StopDelay(_In_ DsmEvent Event)
Definition: devsm_zero.cpp:123
SM_RESULT Zero20FirstDescriptorRead(_In_ DsmEvent Event)
Definition: devsm_zero.cpp:175

Referenced by Zero20Enabled().

◆ Zero20FirstDescriptorRead()

SM_RESULT DeviceMachine::Zero20FirstDescriptorRead ( _In_ DsmEvent  Event)
private

Definition at line 175 of file devsm_zero.cpp.

177{
178 if ((Event != DsmEvent::TransferDone) && (Event != DsmEvent::TransferFailed))
179 return SmUnhandled();
180
183
185}
SM_RESULT Zero20EndpointUpdated(_In_ DsmEvent Event)
Definition: devsm_zero.cpp:196
static const State UpdatingDefaultEndpoint
Definition: devsm.h:471

Referenced by Zero20FirstDelayEnded().

◆ Zero20FirstResetDone()

SM_RESULT DeviceMachine::Zero20FirstResetDone ( _In_ DsmEvent  Event)
private

Definition at line 34 of file devsm_zero.cpp.

36{
37 switch (Event)
38 {
39 case DsmEvent::PortResetDone:
40 if (!SetSpeedFor20())
41 return EndWith(DsmEvent::Failed);
42
44
45 case DsmEvent::PortResetAbortedForSuspend:
47
48 case DsmEvent::HubStopping:
49 case DsmEvent::HubSuspending:
52
53 case DsmEvent::PortResetTimeout:
55 return EndWith(DsmEvent::Failed);
56
57 case DsmEvent::PortFault:
58 return EndWith(DsmEvent::Failed);
59
60 case DsmEvent::PortDetached:
61 return EndWith(DsmEvent::PortDetached);
62
63 default:
64 return SmUnhandled();
65 }
66}
BOOLEAN SetSpeedFor20()
Definition: devmisc.cpp:115
SM_RESULT Zero20CreateDevice()
Definition: devsm_zero.cpp:79
SM_RESULT Zero20FirstResetEndedForHub(_In_ DsmEvent Event)
Definition: devsm_zero.cpp:69

Referenced by EnterAtAddressZero().

◆ Zero20FirstResetEndedForHub()

SM_RESULT DeviceMachine::Zero20FirstResetEndedForHub ( _In_ DsmEvent  Event)
private

Definition at line 69 of file devsm_zero.cpp.

71{
72 if (Event == DsmEvent::PortDisableDone)
73 return EndWith(m_HubEvent);
74
75 return EndOnResetForHub(Event);
76}

Referenced by Zero20FirstResetDone().

◆ Zero20PortOffForHub()

SM_RESULT DeviceMachine::Zero20PortOffForHub ( _In_ DsmEvent  Event)
private

Definition at line 307 of file devsm_zero.cpp.

309{
310 switch (Event)
311 {
312 case DsmEvent::PortFault:
313 case DsmEvent::PortDisableDone:
315
316 case DsmEvent::PortDetached:
318
319 default:
320 return SmUnhandled();
321 }
322}

Referenced by Zero20SecondResetAwaitHub(), and Zero20SecondResetEndedForHub().

◆ Zero20ResetNotified()

SM_RESULT DeviceMachine::Zero20ResetNotified ( _In_ DsmEvent  Event)
private

Definition at line 216 of file devsm_zero.cpp.

218{
219 switch (Event)
220 {
221 case DsmEvent::ControllerIoctlDone:
222 return EndWith(DsmEvent::Succeeded);
223
224 case DsmEvent::ControllerIoctlFailed:
226
227 default:
228 return SmUnhandled();
229 }
230}

Referenced by Zero20EndpointUpdated(), and Zero20SecondDelayEnded().

◆ Zero20SecondDelayEnded()

SM_RESULT DeviceMachine::Zero20SecondDelayEnded ( _In_ DsmEvent  Event)
private

Definition at line 325 of file devsm_zero.cpp.

327{
328 if (Event == DsmEvent::TimerFired)
330
331 return Zero20StopDelay(Event);
332}

Referenced by Zero20SecondResetDone().

◆ Zero20SecondResetAwaitHub()

SM_RESULT DeviceMachine::Zero20SecondResetAwaitHub ( _In_ DsmEvent  Event)
private

Definition at line 288 of file devsm_zero.cpp.

290{
291 switch (Event)
292 {
293 case DsmEvent::PortDetached:
295
296 case DsmEvent::HubStopping:
297 case DsmEvent::HubSuspending:
300
301 default:
302 return SmUnhandled();
303 }
304}
SM_RESULT Zero20PortOffForHub(_In_ DsmEvent Event)
Definition: devsm_zero.cpp:307

Referenced by Zero20SecondResetDone().

◆ Zero20SecondResetDone()

SM_RESULT DeviceMachine::Zero20SecondResetDone ( _In_ DsmEvent  Event)
private

Definition at line 233 of file devsm_zero.cpp.

235{
236 switch (Event)
237 {
238 case DsmEvent::PortResetDone:
241
242 case DsmEvent::PortDetached:
244
245 case DsmEvent::PortResetTimeout:
248
249 case DsmEvent::HubStopping:
250 case DsmEvent::HubSuspending:
253
254 case DsmEvent::PortFault:
256
257 case DsmEvent::PortResetAbortedForSuspend:
259
260 default:
261 return SmUnhandled();
262 }
263}
SM_RESULT Zero20SecondResetEndedForHub(_In_ DsmEvent Event)
Definition: devsm_zero.cpp:266
SM_RESULT Zero20SecondDelayEnded(_In_ DsmEvent Event)
Definition: devsm_zero.cpp:325
SM_RESULT Zero20SecondResetAwaitHub(_In_ DsmEvent Event)
Definition: devsm_zero.cpp:288

Referenced by Zero20EndpointUpdated().

◆ Zero20SecondResetEndedForHub()

SM_RESULT DeviceMachine::Zero20SecondResetEndedForHub ( _In_ DsmEvent  Event)
private

Definition at line 266 of file devsm_zero.cpp.

268{
269 switch (Event)
270 {
271 case DsmEvent::PortDetached:
273
274 case DsmEvent::PortResetTimeout:
275 case DsmEvent::PortFault:
276 case DsmEvent::PortResetDone:
278
279 case DsmEvent::PortResetAbortedForSuspend:
281
282 default:
283 return SmUnhandled();
284 }
285}

Referenced by Zero20SecondResetDone().

◆ Zero20StopDelay()

SM_RESULT DeviceMachine::Zero20StopDelay ( _In_ DsmEvent  Event)
private

Definition at line 123 of file devsm_zero.cpp.

125{
126 switch (Event)
127 {
128 case DsmEvent::PortDetached:
129 if (StopTimer())
131
133
134 case DsmEvent::HubStopping:
135 case DsmEvent::HubSuspending:
137 if (StopTimer())
139
141
142 default:
143 return SmUnhandled();
144 }
145}
SM_RESULT Zero20TimerFlushedOnDetach(_In_ DsmEvent Event)
Definition: devsm_zero.cpp:148
SM_RESULT Zero20TimerFlushedForHub(_In_ DsmEvent Event)
Definition: devsm_zero.cpp:158

Referenced by Zero20FirstDelayEnded(), and Zero20SecondDelayEnded().

◆ Zero20TimerFlushedForHub()

SM_RESULT DeviceMachine::Zero20TimerFlushedForHub ( _In_ DsmEvent  Event)
private

Definition at line 158 of file devsm_zero.cpp.

160{
161 switch (Event)
162 {
163 case DsmEvent::PortDetached:
165
166 case DsmEvent::TimerFired:
168
169 default:
170 return SmUnhandled();
171 }
172}

Referenced by Zero20StopDelay().

◆ Zero20TimerFlushedOnDetach()

SM_RESULT DeviceMachine::Zero20TimerFlushedOnDetach ( _In_ DsmEvent  Event)
private

Definition at line 148 of file devsm_zero.cpp.

150{
151 if (Event != DsmEvent::TimerFired)
152 return SmUnhandled();
153
155}

Referenced by Zero20StopDelay(), and Zero20TimerFlushedForHub().

◆ Zero30CreateDevice()

SM_RESULT DeviceMachine::Zero30CreateDevice ( )
private

Definition at line 337 of file devsm_zero.cpp.

338{
340 return EndWith(DsmEvent::Failed);
341
343 {
345 return EndWith(DsmEvent::Failed);
346 }
347
349}
static const State ResettingSuperSpeed
Definition: devsm.h:470

Referenced by EnterAtAddressZero().

◆ Zero30Enabled()

SM_RESULT DeviceMachine::Zero30Enabled ( _In_ DsmEvent  Event)
private

Definition at line 386 of file devsm_zero.cpp.

388{
389 switch (Event)
390 {
391 case DsmEvent::ControllerIoctlDone:
392 return EndWith(DsmEvent::Succeeded);
393
394 case DsmEvent::ControllerIoctlFailed:
396
397 default:
398 return SmUnhandled();
399 }
400}

Referenced by OnResettingSuperSpeed().

Friends And Related Function Documentation

◆ SmMachine< DeviceMachine, DsmEvent >

Definition at line 1 of file devsm.h.

Member Data Documentation

◆ AddressingAgain

const DeviceMachine::State DeviceMachine::AddressingAgain
staticprivate
Initial value:
=
SM_RESULT OnAddressingAgain(_In_ DsmEvent Event)
SM_RESULT EnterAddressing()
Definition: devsm_enum.cpp:460

Definition at line 1317 of file devsm.h.

Referenced by OnAtAddressZeroAgain().

◆ AddressingInEnum

const DeviceMachine::State DeviceMachine::AddressingInEnum
staticprivate
Initial value:
=
{ NULL, "AddressingInEnum", 0,
SM_RESULT OnAddressingInEnum(_In_ DsmEvent Event)
Definition: devsm_enum.cpp:466

Definition at line 333 of file devsm.h.

Referenced by OnAtAddressZero().

◆ AtAddressZero

const DeviceMachine::State DeviceMachine::AtAddressZero
staticprivate
Initial value:
=
SM_RESULT OnAtAddressZero(_In_ DsmEvent Event)
Definition: devsm_enum.cpp:378
SM_RESULT EnterAtAddressZero()
Definition: devsm_enum.cpp:366

Definition at line 332 of file devsm.h.

Referenced by EnumRetryDelayEndedHoldingAddressZero(), and OnClaimingAddressZero().

◆ AtAddressZeroAgain

const DeviceMachine::State DeviceMachine::AtAddressZeroAgain
staticprivate
Initial value:
=
{ NULL, "AtAddressZeroAgain", 0,
SM_RESULT EnterAtAddressZeroAgain()
SM_RESULT OnAtAddressZeroAgain(_In_ DsmEvent Event)

Definition at line 1316 of file devsm.h.

Referenced by OnClaimingAddressZeroAgain(), and ReenumRetryDelayEndedHoldingAddressZero().

◆ AwaitingAttach

const DeviceMachine::State DeviceMachine::AwaitingAttach
staticprivate
Initial value:
=
{ NULL, "AwaitingAttach", 0, &DeviceMachine::OnAwaitingAttach, NULL }
SM_RESULT OnAwaitingAttach(_In_ DsmEvent Event)
Definition: devsm_enum.cpp:70

Definition at line 327 of file devsm.h.

Referenced by Initialize().

◆ AwaitingDelete

const DeviceMachine::State DeviceMachine::AwaitingDelete
staticprivate
Initial value:
=
{ NULL, "AwaitingDelete", 0, NULL, NULL, DeleteDiscards }
static const DsmEvent DeleteDiscards[]
Definition: devsm_enum.cpp:14

Definition at line 328 of file devsm.h.

Referenced by EndAfterDetach(), LeaveHub(), OnAwaitingAttach(), and RemovalDeleteAndFinish().

◆ AwaitingDetachOrRemove

const DeviceMachine::State DeviceMachine::AwaitingDetachOrRemove
staticprivate
Initial value:
=
{ NULL, "AwaitingDetachOrRemove", SM_STATE_TAKES_REQUESTS,
SM_RESULT OnAwaitingDetachOrRemove(_In_ DsmEvent Event)
SM_RESULT EnterDetachedEvents()
#define SM_STATE_TAKES_REQUESTS
Definition: smengine.h:39

Definition at line 752 of file devsm.h.

Referenced by OnAwaitingDetachOrRemove(), and ToAwaitingDetachOrRemove().

◆ AwaitingMsOsInstall

const DeviceMachine::State DeviceMachine::AwaitingMsOsInstall
staticprivate
Initial value:
=
{ NULL, "AwaitingMsOsInstall", SM_STATE_YIELDS_TO_CALLER,
SM_RESULT OnAwaitingMsOsInstall(_In_ DsmEvent Event)
#define SM_STATE_YIELDS_TO_CALLER
Definition: smengine.h:42

Definition at line 840 of file devsm.h.

Referenced by EnterStoppedAddressed(), EnterWithMsOsInstall(), and MsOsInstallDone().

◆ AwaitingPort

◆ AwaitingPortYielding

const DeviceMachine::State DeviceMachine::AwaitingPortYielding
staticprivate
Initial value:
=

Definition at line 240 of file devsm.h.

Referenced by LpmU1(), LpmU2(), and U2TimeoutStart().

◆ AwaitingPowerUpAfterWake

const DeviceMachine::State DeviceMachine::AwaitingPowerUpAfterWake
staticprivate
Initial value:
=
{ NULL, "AwaitingPowerUpAfterWake", SM_STATE_YIELDS_TO_CALLER,
SM_RESULT OnAwaitingPowerUpAfterWake(_In_ DsmEvent Event)
SM_RESULT EnterAwaitingPowerUpAfterWake()

Definition at line 954 of file devsm.h.

Referenced by SuspendedIoStartedOnWake().

◆ AwaitingPowerUpForReset

const DeviceMachine::State DeviceMachine::AwaitingPowerUpForReset
staticprivate
Initial value:
=
{ NULL, "AwaitingPowerUpForReset", SM_STATE_YIELDS_TO_CALLER,
SM_RESULT OnAwaitingPowerUpForReset(_In_ DsmEvent Event)

Definition at line 953 of file devsm.h.

Referenced by OnSuspendedHubSuspended().

◆ AwaitingRemove

const DeviceMachine::State DeviceMachine::AwaitingRemove
staticprivate
Initial value:
=
{ NULL, "AwaitingRemove", SM_STATE_TAKES_REQUESTS,
SM_RESULT OnAwaitingRemove(_In_ DsmEvent Event)
SM_RESULT EnterWithPortOff()

Definition at line 751 of file devsm.h.

Referenced by OnAwaitingRemove(), RemovalHubStopped(), RemovalLeaveHub(), and ReportMissingAndLeave().

◆ BootDeviceAwaitingReset

const DeviceMachine::State DeviceMachine::BootDeviceAwaitingReset
staticprivate
Initial value:
=
{ NULL, "BootDeviceAwaitingReset", SM_STATE_TAKES_REQUESTS,
SM_RESULT EnterBootDeviceEvents()
Definition: devsm_boot.cpp:49
SM_RESULT OnBootDeviceAwaitingReset(_In_ DsmEvent Event)
Definition: devsm_boot.cpp:151

Definition at line 1270 of file devsm.h.

Referenced by BootDeviceDisabledOnFailure(), OnBootDeviceAwaitingReset(), and OnBootDeviceDetached().

◆ BootDeviceDetached

const DeviceMachine::State DeviceMachine::BootDeviceDetached
staticprivate
Initial value:
=
{ NULL, "BootDeviceDetached", SM_STATE_TAKES_REQUESTS,
SM_RESULT OnBootDeviceDetached(_In_ DsmEvent Event)
Definition: devsm_boot.cpp:217
SM_RESULT EnterBootDeviceDetached()
Definition: devsm_boot.cpp:200

Definition at line 1271 of file devsm.h.

Referenced by BootDeviceDisabledOnDetach(), OnBootDeviceAwaitingReset(), OnBootDeviceDetached(), and ReenumDoneForBootResume().

◆ BootDeviceDetachedContextGone

const DeviceMachine::State DeviceMachine::BootDeviceDetachedContextGone
staticprivate
Initial value:
=
{ NULL, "BootDeviceDetachedContextGone", SM_STATE_TAKES_REQUESTS,
SM_RESULT EnterBootDeviceDetachedContextGone()
Definition: devsm_boot.cpp:208
static const DsmEvent BootDiscards[]
Definition: devsm_boot.cpp:16

Definition at line 1272 of file devsm.h.

Referenced by OnBootDeviceAwaitingReset(), OnBootDeviceDetached(), and ReenumDoneForBootResume().

◆ BootDeviceEvents

const DeviceMachine::State DeviceMachine::BootDeviceEvents
staticprivate
Initial value:
=
SM_RESULT OnBootDeviceEvents(_In_ DsmEvent Event)
Definition: devsm_boot.cpp:276

Definition at line 1274 of file devsm.h.

Referenced by EnterBootDeviceDetached(), EnterBootDeviceDetachedContextGone(), EnterBootDeviceEvents(), and OnBootDeviceEvents().

◆ BootDeviceResetPending

const DeviceMachine::State DeviceMachine::BootDeviceResetPending
staticprivate
Initial value:
=
{ NULL, "BootDeviceResetPending", SM_STATE_TAKES_REQUESTS,
SM_RESULT OnBootDeviceResetPending(_In_ DsmEvent Event)
Definition: devsm_boot.cpp:266
SM_RESULT EnterBootDeviceResetPending()
Definition: devsm_boot.cpp:259

Definition at line 1273 of file devsm.h.

Referenced by BootDeviceDetachDuringReset(), BootDeviceDisabledForReset(), and OnBootDeviceDetached().

◆ BootDeviceSuspended

const DeviceMachine::State DeviceMachine::BootDeviceSuspended
staticprivate
Initial value:
=
{ NULL, "BootDeviceSuspended", SM_STATE_TAKES_REQUESTS,
SM_RESULT EnterSuspended()
SM_RESULT OnBootDeviceSuspended(_In_ DsmEvent Event)

Definition at line 1071 of file devsm.h.

Referenced by OnBootDeviceSuspended(), OnBootDeviceSuspending(), and OnPreparingHibernation().

◆ BootDeviceSuspending

const DeviceMachine::State DeviceMachine::BootDeviceSuspending
staticprivate
Initial value:
=
{ NULL, "BootDeviceSuspending", 0,
SM_RESULT EnterSuspendingConfigured()
SM_RESULT OnBootDeviceSuspending(_In_ DsmEvent Event)

Definition at line 1069 of file devsm.h.

Referenced by OnConfiguredOn().

◆ BugChecking

const DeviceMachine::State DeviceMachine::BugChecking
staticprivate
Initial value:
=
{ NULL, "BugChecking", 0, NULL, &DeviceMachine::EnterBugChecking }
SM_RESULT EnterBugChecking()

Definition at line 1322 of file devsm.h.

Referenced by ReconfiguredBootAfterResume(), ReconfiguredBootDevice(), ReenumDoneForBootDevice(), and ReenumDoneForBootResume().

◆ CancelingClaimAgain

const DeviceMachine::State DeviceMachine::CancelingClaimAgain
staticprivate
Initial value:
=
{ NULL, "CancelingClaimAgain", SM_STATE_CRITICAL_ONLY,
SM_RESULT EnterCancelingClaim()
Definition: devsm_enum.cpp:193
SM_RESULT OnCancelingClaimAgain(_In_ DsmEvent Event)
#define SM_STATE_CRITICAL_ONLY
Definition: smengine.h:41

Definition at line 1321 of file devsm.h.

Referenced by OnClaimingAddressZeroAgain().

◆ CancelingClaimForHub

const DeviceMachine::State DeviceMachine::CancelingClaimForHub
staticprivate
Initial value:
=
{ NULL, "CancelingClaimForHub", 0,
SM_RESULT OnCancelingClaimForHub(_In_ DsmEvent Event)
Definition: devsm_enum.cpp:200

Definition at line 331 of file devsm.h.

Referenced by OnClaimingAddressZero().

◆ CancelingTransfer

const DeviceMachine::State DeviceMachine::CancelingTransfer
staticprivate
Initial value:

Definition at line 234 of file devsm.h.

Referenced by CancelTransferAndEnd().

◆ ClaimingAddressZero

const DeviceMachine::State DeviceMachine::ClaimingAddressZero
staticprivate
Initial value:
=
{ NULL, "ClaimingAddressZero", 0,
SM_RESULT EnterClaimingAddressZero()
Definition: devsm_enum.cpp:143
SM_RESULT OnClaimingAddressZero(_In_ DsmEvent Event)
Definition: devsm_enum.cpp:150

Definition at line 330 of file devsm.h.

Referenced by EnterEnumerating(), EnumRetryDelayEnded(), and OnParkedForHubInEnum().

◆ ClaimingAddressZeroAgain

const DeviceMachine::State DeviceMachine::ClaimingAddressZeroAgain
staticprivate
Initial value:
=
{ NULL, "ClaimingAddressZeroAgain", 0,
SM_RESULT OnClaimingAddressZeroAgain(_In_ DsmEvent Event)

Definition at line 1320 of file devsm.h.

Referenced by ReenumEnabled(), ReenumEndpointsDisabled(), ReenumRetryDelayEnded(), and ReenumTreePurgedUnconfigured().

◆ CollectingDescriptors

const DeviceMachine::State DeviceMachine::CollectingDescriptors
staticprivate
Initial value:
=
{ NULL, "CollectingDescriptors", 0, &DeviceMachine::OnCollectingDescriptors, NULL }
SM_RESULT OnCollectingDescriptors(_In_ DsmEvent Event)
Definition: devsm_desc.cpp:60

Definition at line 548 of file devsm.h.

◆ Configured

const DeviceMachine::State DeviceMachine::Configured
staticprivate
Initial value:
=
{ NULL, "Configured", 0, &DeviceMachine::OnConfigured, NULL }
SM_RESULT OnConfigured(_In_ DsmEvent Event)

Definition at line 1061 of file devsm.h.

Referenced by ReenumForHubResume(), ReenumForResume(), and ToAwaitingDetachOrRemove().

◆ ConfiguredHubSuspended

const DeviceMachine::State DeviceMachine::ConfiguredHubSuspended
staticprivate
Initial value:
=
{ NULL, "ConfiguredHubSuspended", 0,
SM_RESULT OnConfiguredHubSuspended(_In_ DsmEvent Event)
SM_RESULT EnterHubSuspendedReleasingPower()

Definition at line 1072 of file devsm.h.

Referenced by ConfiguredPurgedWhileSuspending(), and ConfiguredSuspendedForHub().

◆ ConfiguredNotStarted

const DeviceMachine::State DeviceMachine::ConfiguredNotStarted
staticprivate
Initial value:
=
{ &Configured, "ConfiguredNotStarted", SM_STATE_TAKES_REQUESTS,
SM_RESULT EnterWithMsOsInstall()
SM_RESULT OnConfiguredNotStarted(_In_ DsmEvent Event)
static const DsmEvent ConfigLpmDiscards[]

Definition at line 1063 of file devsm.h.

Referenced by BackToConfigured().

◆ ConfiguredOn

◆ Configuring

const DeviceMachine::State DeviceMachine::Configuring
staticprivate

◆ Delaying

const DeviceMachine::State DeviceMachine::Delaying
staticprivate
Initial value:
=
SM_RESULT EnterDelaying()
Definition: devsm.cpp:258

Definition at line 223 of file devsm.h.

Referenced by Delay().

◆ DetachedEvents

const DeviceMachine::State DeviceMachine::DetachedEvents
staticprivate
Initial value:
=
{ NULL, "DetachedEvents", SM_STATE_YIELDS_TO_CALLER,
SM_RESULT OnDetachedEvents(_In_ DsmEvent Event)
static const DsmEvent DetachedEventDiscards[]

Definition at line 757 of file devsm.h.

Referenced by EnterDetachedEvents(), EnterDetachedMissing(), EnterDetachedReported(), EnterDetachedReportedConfigured(), and OnDetachedEvents().

◆ DetachedMissing

const DeviceMachine::State DeviceMachine::DetachedMissing
staticprivate
Initial value:
=
{ NULL, "DetachedMissing", SM_STATE_TAKES_REQUESTS,
SM_RESULT EnterDetachedMissing()
SM_RESULT OnDetachedMissing(_In_ DsmEvent Event)

Definition at line 750 of file devsm.h.

Referenced by OnDetachedReported().

◆ DetachedReported

const DeviceMachine::State DeviceMachine::DetachedReported
staticprivate
Initial value:
=
SM_RESULT EnterDetachedReported()
SM_RESULT OnDetachedReported(_In_ DsmEvent Event)
#define SM_STATE_NEEDS_PASSIVE
Definition: smengine.h:40

Definition at line 748 of file devsm.h.

Referenced by DetachUnconfigured().

◆ DetachedReportedConfigured

const DeviceMachine::State DeviceMachine::DetachedReportedConfigured
staticprivate
Initial value:

Definition at line 749 of file devsm.h.

Referenced by DetachConfigured().

◆ DeviceSuspended

const DeviceMachine::State DeviceMachine::DeviceSuspended
staticprivate
Initial value:
=
SM_RESULT OnDeviceSuspended(_In_ DsmEvent Event)

Definition at line 951 of file devsm.h.

Referenced by EnterSuspended(), OnSuspendedHubSuspended(), and SuspendedBackDown().

◆ DisablingDevice

◆ DisablingEndpoints

const DeviceMachine::State DeviceMachine::DisablingEndpoints
staticprivate

◆ DisablingPort

◆ DisablingSuperSpeed

const DeviceMachine::State DeviceMachine::DisablingSuperSpeed
staticprivate
Initial value:
=
{ NULL, "DisablingSuperSpeed", SM_STATE_YIELDS_TO_CALLER,
SM_RESULT EnterDisablingSuperSpeed()
Definition: devsm_desc.cpp:146

Definition at line 551 of file devsm.h.

Referenced by DescriptorsQueryRegistry().

◆ EnablingDevice

◆ Ending

const DeviceMachine::State DeviceMachine::Ending
staticprivate
Initial value:
=
{ NULL, "Ending", 0, NULL, &DeviceMachine::EnterEnding }
SM_RESULT EnterEnding()
Definition: devsm.cpp:208

Definition at line 218 of file devsm.h.

Referenced by EndWith().

◆ Enumerating

const DeviceMachine::State DeviceMachine::Enumerating
staticprivate
Initial value:
=
{ NULL, "Enumerating", SM_STATE_TAKES_REQUESTS,
SM_RESULT OnEnumerating(_In_ DsmEvent Event)
Definition: devsm_enum.cpp:96
SM_RESULT EnterEnumerating()
Definition: devsm_enum.cpp:89
static const DsmEvent LpmDiscards[]
Definition: devsm_enum.cpp:20

Definition at line 329 of file devsm.h.

Referenced by OnAwaitingAttach().

◆ EventInfo

const SM_EVENT_INFO DeviceMachine::EventInfo
static

Definition at line 171 of file devsm.h.

◆ FailedDevice

const DeviceMachine::State DeviceMachine::FailedDevice
staticprivate
Initial value:
=
{ NULL, "FailedDevice", SM_STATE_TAKES_REQUESTS,
SM_RESULT OnFailedDevice(_In_ DsmEvent Event)
SM_RESULT EnterFailedDevice()

Definition at line 695 of file devsm.h.

Referenced by FailedPortDisabledAgain(), OnFailedDevice(), and OnReportingUnknown().

◆ FailedDeviceEvents

const DeviceMachine::State DeviceMachine::FailedDeviceEvents
staticprivate
Initial value:
=
{ NULL, "FailedDeviceEvents", SM_STATE_YIELDS_TO_CALLER,
SM_RESULT OnFailedDeviceEvents(_In_ DsmEvent Event)
static const DsmEvent ReportLpmDiscards[]

Definition at line 697 of file devsm.h.

Referenced by EnterFailedDevice(), OnFailedDeviceEvents(), and OnFailedHubSuspended().

◆ FailedDeviceGone

const DeviceMachine::State DeviceMachine::FailedDeviceGone
staticprivate
Initial value:
=
{ NULL, "FailedDeviceGone", SM_STATE_TAKES_REQUESTS,
SM_RESULT OnFailedDeviceGone(_In_ DsmEvent Event)
SM_RESULT EnterFailedDeviceGone()
static const DsmEvent MissingDiscards[]

Definition at line 696 of file devsm.h.

Referenced by FailedPortDisabledAgain(), and OnFailedDevice().

◆ FailedHubSuspended

const DeviceMachine::State DeviceMachine::FailedHubSuspended
staticprivate
Initial value:
=
{ NULL, "FailedHubSuspended", SM_STATE_YIELDS_TO_CALLER,
SM_RESULT OnFailedHubSuspended(_In_ DsmEvent Event)
SM_RESULT EnterFailedHubSuspended()

Definition at line 698 of file devsm.h.

Referenced by FailedPortOffForHub().

◆ ForwardingStreams

const DeviceMachine::State DeviceMachine::ForwardingStreams
staticprivate
Initial value:
=
SM_RESULT OnForwardingStreams(_In_ DsmEvent Event)
Definition: devsm.cpp:660
SM_RESULT EnterForwardingStreams()
Definition: devsm.cpp:653

Definition at line 238 of file devsm.h.

Referenced by ForwardStreams().

◆ HubSuspended

const DeviceMachine::State DeviceMachine::HubSuspended
staticprivate

◆ HubSuspendedPortOff

const DeviceMachine::State DeviceMachine::HubSuspendedPortOff
staticprivate
Initial value:
=
{ NULL, "HubSuspendedPortOff", SM_STATE_YIELDS_TO_CALLER,
SM_RESULT OnHubSuspendedPortOff(_In_ DsmEvent Event)
Definition: devsm_hub.cpp:64

Definition at line 423 of file devsm.h.

Referenced by HubPortSuspendedAgain(), HubPortSyncedForSuspend(), and HubResumeEndedForSuspend().

◆ IgnoringHub

const DeviceMachine::State DeviceMachine::IgnoringHub
staticprivate
Initial value:
=
static const DsmEvent HubEventDiscards[]
Definition: devsm.cpp:215

Definition at line 237 of file devsm.h.

Referenced by ReportCreatePdo(), and ReportUnknownPdo().

◆ IoctlAfterDetach

const DeviceMachine::State DeviceMachine::IoctlAfterDetach
staticprivate
Initial value:
=
{ NULL, "IoctlAfterDetach", 0, &DeviceMachine::OnShared, NULL, HubEventDiscards }

Definition at line 241 of file devsm.h.

Referenced by OnCancelingClaimForHub(), OnClaimingAddressZero(), and OnClaimingAddressZeroAgain().

◆ LinkPowerAgain

const DeviceMachine::State DeviceMachine::LinkPowerAgain
staticprivate
Initial value:
=
SM_RESULT EnterLinkPowerAgain()
SM_RESULT OnLinkPowerAgain(_In_ DsmEvent Event)

Definition at line 1318 of file devsm.h.

Referenced by ReenumConfigDescriptor(), and ReenumConfigRead().

◆ LinkPowerInEnum

const DeviceMachine::State DeviceMachine::LinkPowerInEnum
staticprivate
Initial value:
=
{ NULL, "LinkPowerInEnum", 0,
SM_RESULT OnLinkPowerInEnum(_In_ DsmEvent Event)
Definition: devsm_enum.cpp:558
SM_RESULT EnterLinkPowerInEnum()
Definition: devsm_enum.cpp:549

Definition at line 335 of file devsm.h.

Referenced by OnReadingDescriptors().

◆ m_AfterConfigure

◆ m_AfterDelete

DSM_THEN DeviceMachine::m_AfterDelete
private

◆ m_AfterDisable

DSM_THEN DeviceMachine::m_AfterDisable
private

Definition at line 1844 of file devsm.h.

Referenced by DisableForRemoval(), Initialize(), and RemovalDeviceDisabled().

◆ m_AfterProgram

DSM_NEXT DeviceMachine::m_AfterProgram
private

◆ m_AfterPurge

DSM_NEXT DeviceMachine::m_AfterPurge
private

Definition at line 1855 of file devsm.h.

Referenced by Initialize(), SuspendArmed(), SuspendIoPurged(), and SuspendStart().

◆ m_AfterReenum

DSM_NEXT DeviceMachine::m_AfterReenum
private

Definition at line 1849 of file devsm.h.

Referenced by Initialize(), OnReenumerating(), and Reenumerate().

◆ m_ChildForgotten

◆ m_ConfigFullLength

BOOLEAN DeviceMachine::m_ConfigFullLength
private

◆ m_ContextGone

◆ m_D3Cold

◆ m_DelayKind

DSM_DELAY DeviceMachine::m_DelayKind
private

Definition at line 1856 of file devsm.h.

Referenced by Delay(), EnterDelaying(), and Initialize().

◆ m_DetachEndsReset

BOOLEAN DeviceMachine::m_DetachEndsReset
private

Definition at line 1848 of file devsm.h.

Referenced by Initialize(), ReenumDoneForBootDevice(), and ReenumForBootClient().

◆ m_Device

HubChild* DeviceMachine::m_Device
private

Definition at line 1832 of file devsm.h.

Referenced by AbortDeviceIo(), AckPreStart(), AddChildToHub(), AdjustLatencyForNoPing(), AllocateExtPropertiesBuffer(), AllowIo(), AltEnumNeededAfterBos(), AltEnumNeededInEnum(), AltEnumNeededOnReenum(), AlternateSettingLeft(), AltModeStringValid(), AltModeStringWanted(), ArmDuplicateDeviceTimer(), ArmForWake(), ArmForWakeWanted(), ArmPostAddressTimer(), AskPortCycle(), BillboardStringValid(), BillboardStringWanted(), BosComplete(), BosHeaderValid(), BosQuerySkipped(), BosValid(), BugCheckForBootDevice(), CalcU1Timeout(), CalcU2Timeout(), CancelControllerIoctl(), CancelStateTimer(), CancelTransfer(), ClaimAddressZero(), ClearEndpointHalt(), ClearReprogramNeeded(), ClearResetAtResume(), CompleteClientRequest(), CompleteClientRequestFailed(), CompleteClientRequestLastStatus(), CompletePreStart(), CompleteQueryText(), ComputeExitLatency(), ConfigDescriptorValid(), ConfigLongerThanRead(), ConfigReadOnReset(), ConfirmStopWhileSuspended(), ContainerIdHeaderValid(), ContainerIdKnown(), ContainerIdWanted(), CreateDefaultEndpoint(), CreateDeviceInController(), CreateEndpoints(), CreatePdo(), CreatePlaceholderPdo(), CyclePortForClient(), DeleteConfigEndpoints(), DeleteDefaultEndpoint(), DeleteDeviceInController(), DeleteNewInterfaceEndpoints(), DeleteOldConfigEndpoints(), DeleteOldInterfaceEndpoints(), DereferenceDevice(), DereferenceDevicePower(), DereferenceHubPower(), DereferencePort(), Device(), DeviceArmedForWake(), DeviceDescriptorValid(), DeviceKind(), DeviceProgrammingLost(), DeviceSpeedChanged(), DisableAllEndpoints(), DisableDeviceInController(), DisableLinkStatesForLatency(), DisableNewInterfaceEndpoints(), DisablePendingEndpoints(), DisableU1(), DisableU2(), DisableWhenUnused(), DisarmOnResume(), DisarmWake(), DropSerialNumber(), DualRoleSupported(), DuplicateRetriesUsedUp(), EnableDeviceInController(), EnableLtm(), EnableU1(), EnableU2(), EndpointsNeedDisableOnFailure(), EndpointsNeedProgramming(), EnumRetriesUsedUp(), ExitLatencyMayDrop(), ExitLatencyMustRise(), ExtendedConfigHeaderValid(), ExtendedConfigValid(), ExtPropertiesHeaderValid(), ExtPropertiesValid(), ExtPropertiesWanted(), FailClientRequest(), FailHubDescriptorRequest(), FindClientPipe(), FinishWaitWake(), FirstDescriptorValid(), ForceResetOnNextStart(), ForgetChild(), ForwardToController(), FreeExtPropertiesBuffer(), GetDescriptorForHub(), HasBillboard(), IgnoreDescriptorError(), IgnoreSerialNumber(), Initialize(), InitLinkStates(), InstallMsOs20Values(), IsBootDevice(), IsFirstEnumTry(), IsochDelaySkipped(), LanguageIdsValid(), LogReenumeration(), LtmWanted(), MarkAttachFailed(), MarkAttachSucceeded(), MarkContainerIdUnsupported(), MarkDisconnected(), MarkMsOsInstallHandled(), MarkMsOsUnsupported(), MarkPendingEndpointsDisabled(), MarkPowerLost(), MarkResetAtResume(), MarkSystemWakeSource(), MarkU1Disabled(), MarkU1Enabled(), MarkU2Disabled(), MarkU2Enabled(), MsOs20SetValid(), MsOs20Supported(), MsOs20ValuesWanted(), MsOsContainerIdSupported(), MsOsDescriptorValid(), MsOsExtendedConfigSupported(), MsOsQueryWanted(), NeedsSecondReset(), NotifyDeviceReset(), NotifyDisconnected(), NotifyPortDetached(), NotifyReconnected(), NotifyWrongDevice(), PdoStarted(), PipeIsIsochronous(), PipeIsZeroBandwidth(), PrepareConfigLists(), PrepareInterfaceLists(), PrepareListsForReset(), ProductNameValid(), ProductNameWanted(), ProductStringIndexZero(), ProgramEndpoints(), PurgeDeviceIo(), PurgeDeviceTreeIo(), PurgeIoForSuspend(), QualifierValid(), QueryRegistryValues(), QueuePassiveWork(), ReadAltModeString(), ReadBillboardString(), ReadBos(), ReadBosHeader(), ReadConfigDescriptorHeader(), ReadContainerId(), ReadContainerIdHeader(), ReadDeviceDescriptor(), ReadExtendedConfig(), ReadExtendedConfigHeader(), ReadExtProperties(), ReadExtPropertiesHeader(), ReadFirstDescriptor(), ReadFullConfigDescriptor(), ReadLanguageIds(), ReadMsOs20Set(), ReadMsOsDescriptor(), ReadProductName(), ReadQualifier(), ReadSerialNumber(), RecordDeviceVersion(), RecordResetTimeout(), ReferenceDevice(), ReferenceDevicePower(), ReferenceHubPower(), ReferencePort(), RegisterWithHub(), ReleaseAddressZero(), ReleasePnpWaiter(), ReportDeviceMissing(), ReportEnumFailure(), RequestHibernationPrep(), RequestPortDisable(), RequestPortReset(), RequestPortResume(), RequestPortSuspend(), RequestPortWarmReset(), RequestSuperSpeedDisable(), RequestU1Timeout(), RequestU2Timeout(), ResetAtResumeMarked(), ResetEndpoint(), ResetEndpointAndTransfers(), ResetKindNeeded(), ResetOnResumeFromS0(), ResetOnResumeFromSx(), SameDeviceConnected(), SameSerialNumber(), SelectConfigValid(), SelectInterfaceValid(), SelSkipped(), SendAltEnumCommand(), SendUsbFeatures(), SerialNumberCompared(), SerialNumberIndexZero(), SerialNumberValid(), SetConfigInfoInRequest(), SetConfiguration(), SetDeviceAddress(), SetExtPropertiesSemaphore(), SetFailIo(), SetInterface(), SetInterfaceInfoInRequest(), SetIsochDelay(), SetNullConfiguration(), SetPdChargingPolicy(), SetSel(), SetSpeedFor20(), SetSpeedFor30(), SignalPnpPowerFailure(), SignalPnpWaiter(), SignalQueryText(), StartDeviceIo(), StartDriverWaitTimer(), StartDuplicateRetries(), StartEnumRetries(), StartLongPostResetTimer(), StartPostResetTimer(), StartRetryTimer(), StartSuperSpeedPostResetTimer(), StopTimer(), StoreMsOsVendorCode(), SuperSpeedMustBeDisabled(), SupportsPdCharging(), U1Change(), U1TimeoutChanged(), U2Change(), U2NeededForEnumerated(), U2TimeoutChanged(), UnregisterFromHub(), UpdateDefaultEndpoint(), UpdateDeviceInController(), UpdateExitLatency(), UpdateLpm20(), WaitNeededAfterAddress(), and WriteCustomProperties().

◆ m_EndpointsConfigured

◆ m_FailedPoweredUp

BOOLEAN DeviceMachine::m_FailedPoweredUp
private

Definition at line 1839 of file devsm.h.

Referenced by FailedPortDisabledAgain(), Initialize(), OnFailedDevice(), and OnReportingUnknown().

◆ m_FromConfigured

BOOLEAN DeviceMachine::m_FromConfigured
private

◆ m_HubEvent

◆ m_Next

DSM_NEXT DeviceMachine::m_Next
private

Definition at line 1833 of file devsm.h.

Referenced by CallWait(), Initialize(), OnShared(), and Wait().

◆ m_PortMayResume

BOOLEAN DeviceMachine::m_PortMayResume
private

◆ m_ReenumForceReset

BOOLEAN DeviceMachine::m_ReenumForceReset
private

Definition at line 1847 of file devsm.h.

Referenced by EnterReenumerating(), Initialize(), and Reenumerate().

◆ m_ReenumKind

DSM_REENUM DeviceMachine::m_ReenumKind
private

Definition at line 1846 of file devsm.h.

Referenced by EnterReenumerating(), Initialize(), and Reenumerate().

◆ m_Result

DsmEvent DeviceMachine::m_Result
private

Definition at line 1837 of file devsm.h.

Referenced by EndWith(), EnterEnding(), and Initialize().

◆ m_Resume

◆ m_ReturnTo

const State* DeviceMachine::m_ReturnTo
private

Definition at line 1836 of file devsm.h.

Referenced by ForwardStreams(), Initialize(), and OnForwardingStreams().

◆ m_Start

DSM_ACTION DeviceMachine::m_Start
private

Definition at line 1857 of file devsm.h.

Referenced by CallRequest(), EnterRequesting(), Initialize(), and Request().

◆ m_Then

DSM_THEN DeviceMachine::m_Then
private

◆ m_Unregistered

BOOLEAN DeviceMachine::m_Unregistered
private

◆ NotifyingReset

◆ OffAfterD3Cold

const DeviceMachine::State DeviceMachine::OffAfterD3Cold
staticprivate
Initial value:
=
{ NULL, "OffAfterD3Cold", SM_STATE_YIELDS_TO_CALLER,
SM_RESULT OnOffAfterD3Cold(_In_ DsmEvent Event)

Definition at line 955 of file devsm.h.

Referenced by OnDeviceSuspended(), and OnSuspendedHubSuspended().

◆ ParkedForHubAgain

const DeviceMachine::State DeviceMachine::ParkedForHubAgain
staticprivate
Initial value:
=
{ NULL, "ParkedForHubAgain", SM_STATE_YIELDS_TO_CALLER,
SM_RESULT OnParkedForHubAgain(_In_ DsmEvent Event)
SM_RESULT EnterParkedForHub()
Definition: devsm_enum.cpp:620

Definition at line 1319 of file devsm.h.

Referenced by ReenumParkForHub().

◆ ParkedForHubInEnum

const DeviceMachine::State DeviceMachine::ParkedForHubInEnum
staticprivate
Initial value:
=
{ NULL, "ParkedForHubInEnum", SM_STATE_YIELDS_TO_CALLER,
SM_RESULT OnParkedForHubInEnum(_In_ DsmEvent Event)
Definition: devsm_enum.cpp:626

Definition at line 337 of file devsm.h.

Referenced by EnumParkForHub().

◆ ParkedPortOff

const DeviceMachine::State DeviceMachine::ParkedPortOff
staticprivate
Initial value:

Definition at line 753 of file devsm.h.

Referenced by CycleAndPark(), OnParkedPortOn(), RemovalAckAndPark(), and RemovalDropPowerAndPark().

◆ ParkedPortOn

const DeviceMachine::State DeviceMachine::ParkedPortOn
staticprivate
Initial value:
=
{ NULL, "ParkedPortOn", SM_STATE_TAKES_REQUESTS,
SM_RESULT OnParkedPortOn(_In_ DsmEvent Event)
SM_RESULT EnterWithPortOn()

Definition at line 754 of file devsm.h.

Referenced by OnParkedPortOff().

◆ PassiveStep

const DeviceMachine::State DeviceMachine::PassiveStep
staticprivate
Initial value:
=
SM_RESULT EnterPassiveStep()
Definition: devsm.cpp:202

Definition at line 217 of file devsm.h.

Referenced by AtPassive(), and CallAtPassive().

◆ PortOffEvents

const DeviceMachine::State DeviceMachine::PortOffEvents
staticprivate
Initial value:
=
{ NULL, "PortOffEvents", SM_STATE_YIELDS_TO_CALLER,
SM_RESULT OnPortOffEvents(_In_ DsmEvent Event)
static const DsmEvent PortOffDiscards[]

Definition at line 699 of file devsm.h.

Referenced by EnterFailedDeviceGone(), EnterWithPortOff(), and OnPortOffEvents().

◆ PortOnEvents

const DeviceMachine::State DeviceMachine::PortOnEvents
staticprivate
Initial value:
=
SM_RESULT OnPortOnEvents(_In_ DsmEvent Event)

Definition at line 758 of file devsm.h.

Referenced by EnterWithPortOn(), and OnPortOnEvents().

◆ PreparingHibernation

const DeviceMachine::State DeviceMachine::PreparingHibernation
staticprivate
Initial value:
=
{ NULL, "PreparingHibernation", 0,
SM_RESULT EnterPreparingHibernation()
SM_RESULT OnPreparingHibernation(_In_ DsmEvent Event)

Definition at line 1073 of file devsm.h.

Referenced by ConfiguredPurgedForHibernation().

◆ ProgrammingEndpoints

const DeviceMachine::State DeviceMachine::ProgrammingEndpoints
staticprivate
Initial value:
=
{ NULL, "ProgrammingEndpoints", SM_STATE_YIELDS_TO_CALLER,
SM_RESULT EnterProgrammingEndpoints()
SM_RESULT OnProgrammingEndpoints(_In_ DsmEvent Event)

Definition at line 1066 of file devsm.h.

Referenced by ConfigureCreateEndpoints(), and InterfaceCreateEndpoints().

◆ ReadingBos

const DeviceMachine::State DeviceMachine::ReadingBos
staticprivate
Initial value:
=
{ &CollectingDescriptors, "ReadingBos", 0,
SM_RESULT OnReadingBos(_In_ DsmEvent Event)
Definition: devsm_desc.cpp:225
SM_RESULT EnterReadingBos()
Definition: devsm_desc.cpp:216
static const State CollectingDescriptors
Definition: devsm.h:548

Definition at line 553 of file devsm.h.

Referenced by EnterRemainingDescriptors().

◆ ReadingConfigDescriptor

const DeviceMachine::State DeviceMachine::ReadingConfigDescriptor
staticprivate
Initial value:
=
{ &CollectingDescriptors, "ReadingConfigDescriptor", 0,
SM_RESULT EnterReadingConfigDescriptor()
Definition: devsm_desc.cpp:153
SM_RESULT OnReadingConfigDescriptor(_In_ DsmEvent Event)
Definition: devsm_desc.cpp:164

Definition at line 550 of file devsm.h.

Referenced by DescriptorsQueryRegistry(), and OnReadingConfigDescriptor().

◆ ReadingDescriptors

const DeviceMachine::State DeviceMachine::ReadingDescriptors
staticprivate
Initial value:
=
{ NULL, "ReadingDescriptors", 0,
SM_RESULT EnterReadingDescriptors()
Definition: devsm_desc.cpp:76
SM_RESULT OnReadingDescriptors(_In_ DsmEvent Event)
Definition: devsm_enum.cpp:505

Definition at line 334 of file devsm.h.

Referenced by OnAddressingInEnum().

◆ ReadingDeviceDescriptor

const DeviceMachine::State DeviceMachine::ReadingDeviceDescriptor
staticprivate
Initial value:
=
{ &CollectingDescriptors, "ReadingDeviceDescriptor", SM_STATE_TAKES_REQUESTS,
SM_RESULT OnReadingDeviceDescriptor(_In_ DsmEvent Event)
Definition: devsm_desc.cpp:89
SM_RESULT EnterReadingDeviceDescriptor()
Definition: devsm_desc.cpp:82

Definition at line 549 of file devsm.h.

Referenced by DescriptorsAltEnumSent(), and EnterReadingDescriptors().

◆ ReadingDeviceText

const DeviceMachine::State DeviceMachine::ReadingDeviceText
staticprivate
Initial value:
=
{ NULL, "ReadingDeviceText", 0,
SM_RESULT OnReadingDeviceText(_In_ DsmEvent Event)
SM_RESULT EnterReadingDeviceText()

Definition at line 839 of file devsm.h.

Referenced by OnConfigured(), and OnStoppedAddressed().

◆ ReadingFirstDescriptor

const DeviceMachine::State DeviceMachine::ReadingFirstDescriptor
staticprivate
Initial value:

Definition at line 227 of file devsm.h.

Referenced by Again20FirstDelayEnded(), and Zero20FirstDelayEnded().

◆ ReadingLanguages

const DeviceMachine::State DeviceMachine::ReadingLanguages
staticprivate
Initial value:
=
{ &CollectingDescriptors, "ReadingLanguages", 0,
SM_RESULT OnReadingLanguages(_In_ DsmEvent Event)
Definition: devsm_desc.cpp:850
SM_RESULT EnterReadingLanguages()
Definition: devsm_desc.cpp:843

Definition at line 555 of file devsm.h.

Referenced by OnReadingMsOs().

◆ ReadingMsOs

const DeviceMachine::State DeviceMachine::ReadingMsOs
staticprivate
Initial value:
=
{ &CollectingDescriptors, "ReadingMsOs", 0,
SM_RESULT EnterReadingMsOs()
Definition: devsm_desc.cpp:606
SM_RESULT OnReadingMsOs(_In_ DsmEvent Event)
Definition: devsm_desc.cpp:612

Definition at line 554 of file devsm.h.

Referenced by EnterReadingBos(), and OnReadingBos().

◆ ReadingProductName

const DeviceMachine::State DeviceMachine::ReadingProductName
staticprivate
Initial value:
=
{ &CollectingDescriptors, "ReadingProductName", 0,
SM_RESULT OnReadingProductName(_In_ DsmEvent Event)
Definition: devsm_desc.cpp:889
SM_RESULT EnterReadingProductName()
Definition: devsm_desc.cpp:882

Definition at line 556 of file devsm.h.

Referenced by OnReadingLanguages().

◆ ReadingQualifier

const DeviceMachine::State DeviceMachine::ReadingQualifier
staticprivate
Initial value:
=
{ &CollectingDescriptors, "ReadingQualifier", 0,
SM_RESULT EnterReadingQualifier()
Definition: devsm_desc.cpp:909
SM_RESULT OnReadingQualifier(_In_ DsmEvent Event)
Definition: devsm_desc.cpp:921

Definition at line 557 of file devsm.h.

Referenced by OnReadingLanguages(), OnReadingMsOs(), OnReadingProductName(), and StringError().

◆ Reenumerating

const DeviceMachine::State DeviceMachine::Reenumerating
staticprivate
Initial value:
=
SM_RESULT EnterReenumerating()
SM_RESULT OnReenumerating(_In_ DsmEvent Event)

Definition at line 1313 of file devsm.h.

Referenced by ReenumForBootClient(), ReenumForClientConfigured(), and ReenumForClientUnconfigured().

◆ ReenumeratingForHubStart

const DeviceMachine::State DeviceMachine::ReenumeratingForHubStart
staticprivate
Initial value:
=
{ NULL, "ReenumeratingForHubStart", SM_STATE_TAKES_REQUESTS,
static const DsmEvent ReenumLpmDiscards[]

Definition at line 1314 of file devsm.h.

Referenced by ReenumForHubStart().

◆ ReenumeratingForPower

const DeviceMachine::State DeviceMachine::ReenumeratingForPower
staticprivate
Initial value:
=
{ NULL, "ReenumeratingForPower", SM_STATE_TAKES_REQUESTS,
static const DsmEvent ReenumQuietDiscards[]

Definition at line 1315 of file devsm.h.

Referenced by ReenumForBootResume(), ReenumForHubResume(), ReenumForPreStart(), ReenumForResume(), and ReenumForStart().

◆ RemainingDescriptors

const DeviceMachine::State DeviceMachine::RemainingDescriptors
staticprivate
Initial value:
=
{ NULL, "RemainingDescriptors", 0,
SM_RESULT EnterRemainingDescriptors()
Definition: devsm_desc.cpp:190
SM_RESULT OnRemainingDescriptors(_In_ DsmEvent Event)
Definition: devsm_desc.cpp:196

Definition at line 552 of file devsm.h.

Referenced by OnReadingConfigDescriptor().

◆ RemovedPortOff

const DeviceMachine::State DeviceMachine::RemovedPortOff
staticprivate
Initial value:

Definition at line 755 of file devsm.h.

Referenced by OnRemovedPortOn(), and RemovalDeleteForget().

◆ RemovedPortOn

const DeviceMachine::State DeviceMachine::RemovedPortOn
staticprivate
Initial value:

Definition at line 756 of file devsm.h.

Referenced by CleanupDone(), OnFailedDevice(), OnRemovedPortOff(), and RemovalDeleteForgetPortOn().

◆ ReportingToPnp

const DeviceMachine::State DeviceMachine::ReportingToPnp
staticprivate
Initial value:

Definition at line 693 of file devsm.h.

Referenced by OnEnumerating().

◆ ReportingUnknown

const DeviceMachine::State DeviceMachine::ReportingUnknown
staticprivate
Initial value:

Definition at line 694 of file devsm.h.

Referenced by OnEnumerating().

◆ Requesting

const DeviceMachine::State DeviceMachine::Requesting
staticprivate
Initial value:
=
SM_RESULT EnterRequesting()
Definition: devsm.cpp:560

Definition at line 229 of file devsm.h.

Referenced by DescriptorsQueryRegistry(), ReenumEnabled(), ReenumWrongDevice(), and SuspendedPurgedForReset().

◆ RequestingCritical

◆ RequestingCriticalPassive

const DeviceMachine::State DeviceMachine::RequestingCriticalPassive
staticprivate
Initial value:

Definition at line 233 of file devsm.h.

Referenced by BootDeviceFailed(), PurgeOnDetach(), and ReconfiguredBootDevice().

◆ RequestingYielding

◆ ResettingPort

const DeviceMachine::State DeviceMachine::ResettingPort
staticprivate
Initial value:
=
SM_RESULT EnterResettingPort()
Definition: devsm.cpp:367

Definition at line 225 of file devsm.h.

Referenced by Again20FirstDescriptorRead(), EnterAtAddressZero(), EnterAtAddressZeroAgain(), and Zero20EndpointUpdated().

◆ ResettingSuperSpeed

const DeviceMachine::State DeviceMachine::ResettingSuperSpeed
staticprivate
Initial value:
=
{ NULL, "ResettingSuperSpeed", SM_STATE_YIELDS_TO_CALLER,
SM_RESULT EnterResettingSuperSpeed()
Definition: devsm_zero.cpp:352
SM_RESULT OnResettingSuperSpeed(_In_ DsmEvent Event)
Definition: devsm_zero.cpp:358

Definition at line 470 of file devsm.h.

Referenced by Zero30CreateDevice().

◆ ResumingPort

◆ SettingAddress

const DeviceMachine::State DeviceMachine::SettingAddress
staticprivate
Initial value:
=
{ NULL, "SettingAddress", SM_STATE_CRITICAL_ONLY,
SM_RESULT EnterSettingAddress()
Definition: devsm_zero.cpp:490
SM_RESULT OnSettingAddress(_In_ DsmEvent Event)
Definition: devsm_zero.cpp:497

Definition at line 472 of file devsm.h.

Referenced by EnterAddressing().

◆ SettingInterface

const DeviceMachine::State DeviceMachine::SettingInterface
staticprivate
Initial value:
=
{ NULL, "SettingInterface", 0,
SM_RESULT EnterSettingInterface()
SM_RESULT OnSettingInterface(_In_ DsmEvent Event)

Definition at line 1065 of file devsm.h.

Referenced by OnConfigured().

◆ SettingPdCharging

const DeviceMachine::State DeviceMachine::SettingPdCharging
staticprivate
Initial value:

Definition at line 244 of file devsm.h.

Referenced by OnUpdatingDevice(), and ReenumPdCharging().

◆ SettingU2Timeout

const DeviceMachine::State DeviceMachine::SettingU2Timeout
staticprivate
Initial value:
=
{ NULL, "SettingU2Timeout", 0,
SM_RESULT EnterSettingU2Timeout()
SM_RESULT OnSettingU2Timeout(_In_ DsmEvent Event)

Definition at line 841 of file devsm.h.

Referenced by OnStoppedReady(), and OnUnconfiguredOn().

◆ SmCompletionsFirst

const BOOLEAN DeviceMachine::SmCompletionsFirst = FALSE
staticprivate

Definition at line 184 of file devsm.h.

◆ SmTimerEventId

const USHORT DeviceMachine::SmTimerEventId = static_cast<USHORT>(DsmEvent::TimerFired)
staticprivate

Definition at line 185 of file devsm.h.

◆ Starting

const DeviceMachine::State DeviceMachine::Starting
staticprivate
Initial value:
=
{ NULL, "Starting", 0, NULL, &DeviceMachine::EnterStarting }
SM_RESULT EnterStarting()
Definition: devsm.cpp:546

Definition at line 228 of file devsm.h.

Referenced by CallStep(), and Then().

◆ Stopped

const DeviceMachine::State DeviceMachine::Stopped
staticprivate
Initial value:
=
SM_RESULT OnStopped(_In_ DsmEvent Event)
static const DsmEvent StoppedLpmDiscards[]

Definition at line 836 of file devsm.h.

Referenced by OnStopped(), StoppedHubStarted(), StoppedPortOffAfterHubResume(), StoppedPortOffForNoDriver(), and UnconfiguredPortOffForStop().

◆ StoppedAddressed

const DeviceMachine::State DeviceMachine::StoppedAddressed
staticprivate

◆ StoppedEnumeratedHubSuspended

const DeviceMachine::State DeviceMachine::StoppedEnumeratedHubSuspended
staticprivate
Initial value:

Definition at line 838 of file devsm.h.

Referenced by StoppedPortSuspendedForHub().

◆ StoppedHubSuspended

const DeviceMachine::State DeviceMachine::StoppedHubSuspended
staticprivate

◆ StoppedReady

const DeviceMachine::State DeviceMachine::StoppedReady
staticprivate
Initial value:

Definition at line 835 of file devsm.h.

Referenced by GoStoppedEnabled(), OnStoppedAddressed(), OnStoppedReady(), OnUnconfiguredOn(), and StopDecision().

◆ SuspendedConfigured

const DeviceMachine::State DeviceMachine::SuspendedConfigured
staticprivate
Initial value:
=
{ NULL, "SuspendedConfigured", SM_STATE_TAKES_REQUESTS,
SM_RESULT OnSuspendedConfigured(_In_ DsmEvent Event)

Definition at line 1070 of file devsm.h.

Referenced by OnSuspendedConfigured(), and OnSuspendingConfigured().

◆ SuspendedHubSuspended

const DeviceMachine::State DeviceMachine::SuspendedHubSuspended
staticprivate

◆ SuspendedUnconfigured

const DeviceMachine::State DeviceMachine::SuspendedUnconfigured
staticprivate
Initial value:
=
{ NULL, "SuspendedUnconfigured", SM_STATE_TAKES_REQUESTS,
SM_RESULT OnSuspendedUnconfigured(_In_ DsmEvent Event)
static const DsmEvent PowerLpmDiscards[]
Definition: devsm_power.cpp:15

Definition at line 949 of file devsm.h.

Referenced by OnSuspendedUnconfigured(), and OnSuspendingUnconfigured().

◆ SuspendingConfigured

const DeviceMachine::State DeviceMachine::SuspendingConfigured
staticprivate
Initial value:
=
{ NULL, "SuspendingConfigured", 0,
SM_RESULT OnSuspendingConfigured(_In_ DsmEvent Event)

Definition at line 1068 of file devsm.h.

Referenced by OnConfiguredOn().

◆ SuspendingPort

◆ SuspendingUnconfigured

const DeviceMachine::State DeviceMachine::SuspendingUnconfigured
staticprivate
Initial value:
=
{ NULL, "SuspendingUnconfigured", 0,
SM_RESULT OnSuspendingUnconfigured(_In_ DsmEvent Event)
SM_RESULT EnterSuspendingUnconfigured()

Definition at line 948 of file devsm.h.

Referenced by OnUnconfiguredOn().

◆ TimerAfterDetach

◆ UnconfiguredHubSuspended

const DeviceMachine::State DeviceMachine::UnconfiguredHubSuspended
staticprivate
Initial value:
=
{ NULL, "UnconfiguredHubSuspended", 0,
SM_RESULT OnUnconfiguredHubSuspended(_In_ DsmEvent Event)

Definition at line 950 of file devsm.h.

Referenced by OnSuspendingUnconfigured(), and UnconfiguredSuspendedForHub().

◆ UnconfiguredOn

◆ UpdatingDefaultEndpoint

const DeviceMachine::State DeviceMachine::UpdatingDefaultEndpoint
staticprivate
Initial value:

Definition at line 471 of file devsm.h.

Referenced by Zero20FirstDescriptorRead().

◆ UpdatingDevice

const DeviceMachine::State DeviceMachine::UpdatingDevice
staticprivate
Initial value:
=
{ NULL, "UpdatingDevice", SM_STATE_CRITICAL_ONLY,
SM_RESULT EnterUpdatingDevice()
Definition: devsm_enum.cpp:575
SM_RESULT OnUpdatingDevice(_In_ DsmEvent Event)
Definition: devsm_enum.cpp:582

Definition at line 336 of file devsm.h.

Referenced by EnterLinkPowerInEnum(), and OnLinkPowerInEnum().

◆ UpdatingLinkPower

const DeviceMachine::State DeviceMachine::UpdatingLinkPower
staticprivate
Initial value:
=
{ NULL, "UpdatingLinkPower", 0,
SM_RESULT OnUpdatingLinkPower(_In_ DsmEvent Event)
SM_RESULT EnterUpdatingLinkPower()

Definition at line 1067 of file devsm.h.

Referenced by OnConfiguredOn().

◆ WaitingForController

const DeviceMachine::State DeviceMachine::WaitingForController
staticprivate
Initial value:
=
{ NULL, "WaitingForController", SM_STATE_CRITICAL_ONLY, &DeviceMachine::OnShared, NULL }

Definition at line 232 of file devsm.h.

Referenced by Link20Start().


The documentation for this class was generated from the following files: