38#if defined(EVENT_TRACING)
39#include "PowerPolicyStateMachine.tmh"
61 #define ASSERT_PWR_POL_STATE(_This, _State) \
62 ASSERT((_This)->m_Device->GetDevicePowerPolicyState() == (_State))
64 #define ASSERT_PWR_POL_STATE(_This, _State) (0)
67#if FX_STATE_MACHINE_VERIFY
68 #define VALIDATE_PWR_POL_STATE(_CurrentState, _NewState) \
69 ValidatePwrPolStateEntryFunctionReturnValue((_CurrentState), (_NewState))
71 #define VALIDATE_PWR_POL_STATE(_CurrentState, _NewState) (0)
2115 LONG idleTimeoutStatusSnapshot;
2116 LONG updatedIdleTimeoutStatus;
2117 LONG preInterlockedIdleTimeoutStatus;
2127 if (0 != (idleTimeoutStatusSnapshot &
Flag)) {
2146 updatedIdleTimeoutStatus = idleTimeoutStatusSnapshot |
Flag;
2150 updatedIdleTimeoutStatus,
2151 idleTimeoutStatusSnapshot
2153 if (preInterlockedIdleTimeoutStatus != idleTimeoutStatusSnapshot) {
2155 if (0 != (preInterlockedIdleTimeoutStatus &
2203 switch (statusUpdateResult) {
2212 "WDFDEVICE %p !devobj %p If the power framework is made "
2213 "responsible for determining the idle timeout, then the "
2214 "first call to assign S0-idle policy must occur before the "
2215 "first start IRP is completed. However, in this case, it "
2216 "occurred after the first start IRP was completed. "
2219 device->GetDeviceObject(),
2235 "WDFDEVICE %p !devobj %p Calls to assign S0-idle settings "
2236 "and to specify power framework settings are happening in "
2237 "parallel. The driver needs to serialize these calls with "
2238 "respect to each other. %!STATUS!.",
2240 device->GetDeviceObject(),
2254 "IdleTimeoutManagement::UseSystemManagedIdleTimeout was "
2255 "called more than once\n",
FALSE);
2272 ASSERTMSG(
"Unexpected IdleTimeoutStatusUpdateResult value\n",
2294 LONG idleTimeoutSnapshot;
2295 LONG idleTimeoutStatus;
2296 LONG idleTimeoutPreviousStatus;
2320 if (idleTimeoutPreviousStatus != idleTimeoutSnapshot) {
2327 "WDFDEVICE %p !devobj %p The driver's S0-idle settings and/or power"
2328 " framework settings did not take effect because they were supplied"
2329 " too late. The driver must ensure that the settings are provided "
2330 "before the first start IRP is completed.",
2332 device->GetDeviceObject()
2347 "WDFDEVICE %p !devobj %p The driver specified power framework "
2348 "settings, but did not opt for system-managed idle timeout.",
2350 device->GetDeviceObject()
2407 if (
NULL != oldPoxSettings) {
2416 "WDFDEVICE %p !devobj %p The driver attempted to specify power "
2417 "framework settings more than once. %!STATUS!.",
2419 device->GetDeviceObject(),
2425 settingsSuccessfullySaved =
TRUE;
2435 switch (statusUpdateResult) {
2444 "WDFDEVICE %p !devobj %p Power framework settings must be "
2445 "specified before the first start IRP is completed. %!STATUS!.",
2447 device->GetDeviceObject(),
2464 "WDFDEVICE %p !devobj %p Calls to assign S0-idle settings and "
2465 "to specify power framework settings are happening in parallel."
2466 " The driver needs to serialize these calls with respect to "
2467 "each other. %!STATUS!.",
2469 device->GetDeviceObject(),
2486 "Attempt to set the IdleTimeoutPoxSettingsSpecified flag more "
2487 "than once\n",
FALSE);
2500 ASSERTMSG(
"Unexpected IdleTimeoutStatusUpdateResult value\n",
2514 if (settingsSuccessfullySaved) {
2578 if (pInfo ==
NULL) {
2609 ) : m_PoxInterface(PkgPnp)
2925 "WDFDEVICE 0x%p !devobj 0x%p current pwr pol state "
2926 "%!WDF_DEVICE_POWER_POLICY_STATE! dropping event "
2927 "%!FxPowerPolicyEvent! because the Event is already enqueued.",
2943 ASSERT(!
"The Power queue is full. This shouldn't be able to happen.");
2950 "WDFDEVICE 0x%p !devobj 0x%p current pwr pol state "
2951 "%!WDF_DEVICE_POWER_POLICY_STATE! dropping event "
2952 "%!FxPowerPolicyEvent! because of a closed queue",
3001 ProcessOnDifferentThread
3009 if (FxWaitLockInternal::IsLockAcquired(
status)) {
3026 info.Evaluate(
this);
3060 This->m_PowerPolicyMachine.m_StateMachineLock.AcquireLock(
3061 This->GetDriverGlobals()
3067 This->PowerPolicyProcessEventInner(
Info);
3078 This->m_PowerPolicyMachine.m_StateMachineLock.ReleaseLock(
3079 This->GetDriverGlobals()
3134 if (
entry->StateInfo.Bits.QueueOpen ==
FALSE) {
3161 if (
entry->FirstTargetState.PowerPolicyEvent ==
event) {
3162 newState =
entry->FirstTargetState.TargetState;
3166 else if (
entry->OtherTargetStates !=
NULL) {
3170 if (
entry->OtherTargetStates[
i].PowerPolicyEvent ==
event) {
3171 newState =
entry->OtherTargetStates[
i].TargetState;
3185 "WDFDEVICE 0x%p !devobj 0x%p current pwr pol state "
3186 "%!WDF_DEVICE_POWER_POLICY_STATE! dropping event "
3191 if ((
entry->StateInfo.Bits.KnownDroppedEvents &
event) == 0) {
3196 "WDFDEVICE 0x%p !devobj 0x%p current state "
3197 "%!WDF_DEVICE_POWER_POLICY_STATE!, policy event "
3198 "%!FxPowerPolicyEvent! is not a known dropped "
3199 "event, known dropped events are %!FxPowerPolicyEvent!",
3202 event,
entry->StateInfo.Bits.KnownDroppedEvents);
3274#pragma prefast(suppress:__WARNING_DEREF_NULL_PTR, "The current power policy state will always be in the table so entry will never be NULL")
3331 for (
i = 0;
i <
entry->TargetStatesCount;
i++) {
3332 if (
event ==
entry->TargetStates[
i].PowerPolicyEvent) {
3339 entry->TargetStates[
i].TargetState);
3372 newState = NewState;
3377 "WDFDEVICE 0x%p !devobj 0x%p entering power policy state "
3378 "%!WDF_DEVICE_POWER_POLICY_STATE! from "
3389 data.Data.LeaveState.CurrentState = currentState;
3390 data.Data.LeaveState.NewState = newState;
3408 data.Data.EnterState.CurrentState = currentState;
3409 data.Data.EnterState.NewState = newState;
3418 currentState = newState;
3427 newState =
entry->StateFunc(
this);
3447 data.Data.PostProcessState.CurrentState = currentState;
3549 This->m_PowerPolicyMachine.m_Owner->m_PowerIdleMachine.Start();
3594 This->m_PowerPolicyMachine.m_Owner->
3595 m_IdleSettings.m_TimeoutMgmt.FreezeIdleTimeoutManagementStatus(
3596 This->GetDriverGlobals()
3599 status =
This->m_PowerPolicyMachine.m_Owner->
3600 m_PoxInterface.InitializeComponents();
3682 This->m_PowerPolicyMachine.m_Owner->m_PowerIdleMachine.Stop();
3692 Mx::MxLowerIrql(
irql);
3704 This->PowerPolicyChildrenCanPowerUp();
3715 This->m_PowerPolicyMachine.m_Owner->m_PoxInterface.UpdateIdleTimeoutHint();
3717 if (
This->m_PowerPolicyMachine.m_Owner->m_IdleSettings.Enabled) {
3718 if (
This->m_PowerPolicyMachine.m_Owner->m_IdleSettings.WakeFromS0Capable) {
3746 This->m_PowerPolicyMachine.m_Owner->m_PowerIdleMachine.EnableTimer();
3772 canPowerDown =
This->m_PowerPolicyMachine.m_Owner->
3773 m_PoxInterface.DeclareComponentIdle();
3781 return (canPowerDown ?
3805 This->m_PowerPolicyMachine.m_Owner->
3806 m_PoxInterface.RequestComponentActive();
3837 This->m_PowerPolicyMachine.m_Owner->
3838 m_PoxInterface.RequestComponentActive();
3869 This->m_PowerPolicyMachine.m_Owner->
3870 m_PoxInterface.RequestComponentActive();
3889 notifyPowerDownStatus =
This->m_PowerPolicyMachine.m_Owner->
3890 m_PoxInterface.NotifyDevicePowerDown();
3901 poweredDown =
This->PowerPolicyCanIdlePowerDown(
3902 This->m_PowerPolicyMachine.m_Owner->m_IdleSettings.DxState
3905 if (poweredDown ==
FALSE) {
3968 if (
This->m_PowerPolicyMachine.m_Owner->m_PowerIdleMachine.QueryReturnToIdle()) {
3988 This->m_PowerPolicyMachine.m_Owner->
3989 m_PoxInterface.RequestComponentActive();
4022 This->m_PowerPolicyMachine.m_Owner->
4023 m_PoxInterface.DeviceIsPoweredOn();
4040 systemState =
This->PowerPolicyGetPendingSystemState();
4042 if (
This->PowerPolicyIsWakeEnabled() &&
4043 This->PowerPolicyCanWakeFromSystemState(systemState)) {
4061 result =
This->m_PowerPolicyMachine.m_Owner->m_PowerIdleMachine.DisableTimer();
4075 "Failed to allocate D0 request to disarm from wake from S0 to allow "
4076 "arm for wake from Sx, %!STATUS!",
status);
4140 This->PowerPolicyCompleteSystemPowerIrp();
4209 ASSERT(
This->PowerPolicyCanWakeFromSystemState(
4210 This->PowerPolicyGetPendingSystemState()
4213 wakeReason =
This->PowerPolicyGetCurrentWakeReason();
4215 status =
This->m_PowerPolicyMachine.m_Owner->m_DeviceArmWakeFromSx.Invoke(
4216 This->m_Device->GetHandle(),
4224 "WDFDEVICE %p Failed to arm for wake from Sx, %!STATUS!",
4234 if (
This->m_Device->IsPdo()) {
4235 status =
This->PowerEnableWakeAtBusOverload();
4239 "WDFDEVICE %p Failed to Enable Wake at Bus, %!STATUS!",
4260 "reverting arm for wake from Sx due to failure to allocate wait wake "
4261 "request or wait wake request completed immeidately. Device will *NOT* "
4262 "be armed for wake from Sx");
4271 This->PowerPolicyDisarmWakeFromSx();
4276 if (
This->PowerPolicyCancelWaitWake() ==
FALSE &&
4277 This->m_PowerPolicyMachine.m_Owner->m_WakeCompletionEventDropped) {
4290 This->PowerPolicyCompleteSystemPowerIrp();
4303 if (
This->PowerPolicyCancelWaitWake() ==
FALSE &&
4304 This->m_PowerPolicyMachine.m_Owner->m_WakeCompletionEventDropped) {
4323 This->m_SystemWokenByWakeInterrupt =
TRUE;
4325 if (
This->PowerPolicyCancelWaitWake() ==
FALSE &&
4326 This->m_PowerPolicyMachine.m_Owner->m_WakeCompletionEventDropped) {
4366 if (
This->m_Device->IsPdo()) {
4367 This->PowerDisableWakeAtBusOverload();
4370 This->PowerPolicyDisarmWakeFromSx();
4407 if (
This->m_Device->IsPdo()) {
4408 This->PowerDisableWakeAtBusOverload();
4411 This->m_PowerPolicyMachine.m_Owner->m_DeviceWakeFromSxTriggered.Invoke(
4412 This->m_Device->GetHandle()
4415 This->PowerPolicyDisarmWakeFromSx();
4445 ASSERT(
This->PowerPolicyCanWakeFromSystemState(
4446 This->PowerPolicyGetPendingSystemState()
4449 wakeReason =
This->PowerPolicyGetCurrentWakeReason();
4451 status =
This->m_PowerPolicyMachine.m_Owner->m_DeviceArmWakeFromSx.Invoke(
4452 This->m_Device->GetHandle(),
4460 "WDFDEVICE %p Failed to arm for wake from Sx, %!STATUS!",
4470 if (
This->m_Device->IsPdo()) {
4471 status =
This->PowerEnableWakeAtBusOverload();
4475 "WDFDEVICE %p Failed to Enable Wake at Bus, %!STATUS!",
4496 "reverting arm for wake from Sx due to failure to allocate wait wake "
4497 "request or wait wake request completed immeidately. Device will *NOT* "
4498 "be armed for wake from Sx");
4507 This->PowerPolicyDisarmWakeFromSx();
4512 if (
This->PowerPolicyCancelWaitWake() ==
FALSE &&
4513 This->m_PowerPolicyMachine.m_Owner->m_WakeCompletionEventDropped) {
4542 if (
This->PowerPolicyCancelWaitWake() ==
FALSE &&
4543 This->m_PowerPolicyMachine.m_Owner->m_WakeCompletionEventDropped) {
4571 This->PowerPolicyCompleteSystemPowerIrp();
4583 This->PowerPolicyCompleteSystemPowerIrp();
4595 if (
This->PowerPolicyCancelWaitWake() ==
FALSE &&
4596 This->m_PowerPolicyMachine.m_Owner->m_WakeCompletionEventDropped) {
4615 This->m_SystemWokenByWakeInterrupt =
TRUE;
4617 if (
This->PowerPolicyCancelWaitWake() ==
FALSE &&
4618 This->m_PowerPolicyMachine.m_Owner->m_WakeCompletionEventDropped) {
4656 if (
This->m_Device->IsPdo()) {
4657 This->PowerDisableWakeAtBusOverload();
4660 This->PowerPolicyDisarmWakeFromSx();
4695 if (
This->m_Device->IsPdo()) {
4696 This->PowerDisableWakeAtBusOverload();
4699 This->m_PowerPolicyMachine.m_Owner->m_DeviceWakeFromSxTriggered.Invoke(
4700 This->m_Device->GetHandle()
4703 This->PowerPolicyDisarmWakeFromSx();
4736 This->m_PowerPolicyMachine.m_Owner->
4737 m_PoxInterface.SimulateDevicePowerRequired();
4742 This->m_PowerPolicyMachine.m_Owner->
4743 m_PoxInterface.DeviceIsPoweredOn();
4779 This->m_PowerPolicyMachine.m_Owner->m_ChildrenPoweredOnCount > 0) {
4782 "WDFDEVICE %p powering down before child devices have powered down. "
4783 "This usually indicates a faulty child device that completed the Sx "
4784 "irp before sending the Dx irp",
4785 This->m_Device->GetHandle());
4788 This->m_Device->GetDriverGlobals());
4796 This->m_PowerPolicyMachine.m_Owner->
4797 m_PoxInterface.SimulateDevicePowerNotRequired();
4803 notifyPowerDownStatus =
This->m_PowerPolicyMachine.m_Owner->
4804 m_PoxInterface.NotifyDevicePowerDown();
4814 systemState =
This->PowerPolicyGetPendingSystemState();
4816 if (
This->PowerPolicyIsWakeEnabled() &&
4817 This->PowerPolicyCanWakeFromSystemState(systemState)) {
4849 This->m_PowerPolicyMachine.m_Owner->m_IdealDxStateForSx;
4859 This->PowerPolicyGetPendingSystemState(),
4860 This->m_PowerPolicyMachine.m_Owner->m_SystemToDeviceStateMap
4867 if (dxState < dxMappedState) {
4868 dxState = dxMappedState;
4920 This->SetInternalFailure();
4921 This->PowerPolicyCompleteSystemPowerIrp();
4923 if (
FALSE ==
This->m_ReleaseHardwareAfterDescendantsOnFailure) {
4954 This->m_PowerPolicyMachine.m_Owner->m_WakeSettings.DxState,
NoRetry
4992 This->m_WakeInterruptsKeepConnected =
TRUE;
5001 systemState =
This->PowerPolicyGetDeviceDeepestSystemWakeState();
5003 status =
This->PowerPolicySendWaitWakeRequest(systemState);
5008 "Attempting to send wait wake request for EvtDeviceArmWakeFromSx() "
5009 "failed, %!STATUS!",
status);
5026 This->PowerPolicyCompleteSystemPowerIrp();
5059 if ((
This->m_PowerPolicyMachine.m_Owner->
5060 m_IdleSettings.m_TimeoutMgmt.UsingSystemManagedIdleTimeout() ==
FALSE)
5062 (
This->m_PowerPolicyMachine.m_Owner->m_IdleSettings.Enabled)
5064 (
This->m_PowerPolicyMachine.m_Owner->
5065 m_IdleSettings.WakeFromS0Capable ==
FALSE)
5067 (
This->m_PowerPolicyMachine.m_Owner->
5068 m_IdleSettings.PowerUpIdleDeviceOnSystemWake ==
FALSE)) {
5123 This->m_PowerPolicyMachine.m_Owner->
5124 m_PoxInterface.SimulateDevicePowerRequired();
5129 This->m_PowerPolicyMachine.m_Owner->
5130 m_PoxInterface.DeviceIsPoweredOn();
5149 This->m_PowerPolicyMachine.m_Owner->
5150 m_IdleSettings.m_TimeoutMgmt.UsingSystemManagedIdleTimeout() ==
FALSE
5153 if (
This->m_PowerPolicyMachine.m_Owner->m_PowerIdleMachine.QueryReturnToIdle()) {
5173 This->m_PowerPolicyMachine.m_Owner->m_PowerIdleMachine.EnableTimer();
5200 canPowerDown =
This->m_PowerPolicyMachine.m_Owner->
5201 m_PoxInterface.DeclareComponentIdle();
5209 return (canPowerDown ?
5243 notifyPowerDownStatus =
This->m_PowerPolicyMachine.m_Owner->
5244 m_PoxInterface.NotifyDevicePowerDown();
5255 if (
This->m_PowerPolicyMachine.m_Owner->m_IdleSettings.UsbSSCapable) {
5289 poweredDown =
This->PowerPolicyCanIdlePowerDown(
5290 This->m_PowerPolicyMachine.m_Owner->m_IdleSettings.DxState
5293 if (poweredDown ==
FALSE) {
5316 This->m_WakeInterruptsKeepConnected =
TRUE;
5323 "Could not allocate wake request for wake from S0, revert arming,"
5353 This->PowerPolicySubmitUsbIdleNotification();
5384 This->m_PowerPolicyMachine.m_Owner->
5385 m_PoxInterface.DeviceIsPoweredOn();
5387 This->m_PowerPolicyMachine.m_Owner->
5388 m_PoxInterface.RequestComponentActive();
5417 status =
This->m_PowerPolicyMachine.m_Owner->m_DeviceArmWakeFromS0.Invoke(
5418 This->m_Device->GetHandle()
5429 if (
This->m_Device->IsPdo()) {
5430 status =
This->PowerEnableWakeAtBusOverload();
5434 "WDFDEVICE %p Failed to Enable Wake at Bus, %!STATUS!",
5467 if (
This->PowerPolicyCancelWaitWake() ==
FALSE) {
5520 if (
This->m_PowerPolicyMachine.m_Owner->m_IdleSettings.UsbSSCapable) {
5522 This->m_PowerPolicyMachine.UsbSSCallbackProcessingComplete();
5528 if (
This->PowerPolicyCancelUsbSSIfCapable()) {
5560 if (
This->m_PowerPolicyMachine.m_Owner->m_IdleSettings.UsbSSCapable) {
5562 This->m_PowerPolicyMachine.UsbSSCallbackProcessingComplete();
5568 if (
This->PowerPolicyCancelUsbSSIfCapable()) {
5605 This->m_PowerPolicyMachine.m_Owner->
5606 m_PoxInterface.DeviceIsPoweredOn();
5662 This->m_PowerPolicyMachine.m_Owner->
5663 m_PoxInterface.RequestComponentActive();
5670 result =
This->m_PowerPolicyMachine.m_Owner->m_PowerIdleMachine.DisableTimer();
5710 This->m_PowerPolicyMachine.m_Owner->
5711 m_PoxInterface.DeviceIsPoweredOn();
5737 if (
This->m_PowerPolicyMachine.m_Owner->m_IdleSettings.UsbSSCapable) {
5738 This->m_PowerPolicyMachine.UsbSSCallbackProcessingComplete();
5746 result =
This->m_PowerPolicyMachine.m_Owner->m_PowerIdleMachine.DisableTimer();
5785 if (
This->m_PowerPolicyMachine.m_Owner->m_PowerIdleMachine.QueryReturnToIdle()) {
5800 if (
This->PowerPolicyCancelWaitWake() ==
FALSE &&
5801 This->m_PowerPolicyMachine.m_Owner->m_WakeCompletionEventDropped) {
5816 if (
This->PowerPolicyCancelWaitWake() ==
FALSE &&
5817 This->m_PowerPolicyMachine.m_Owner->m_WakeCompletionEventDropped) {
5833 This->m_PowerPolicyMachine.m_Owner->
5834 m_PoxInterface.RequestComponentActive();
5853 This->m_PowerPolicyMachine.m_Owner->
5854 m_PoxInterface.DeviceIsPoweredOn();
5860 if (
This->m_Device->IsPdo()) {
5861 This->PowerDisableWakeAtBusOverload();
5864 This->m_PowerPolicyMachine.m_Owner->m_DeviceDisarmWakeFromS0.Invoke(
5865 This->m_Device->GetHandle()
5917 This->m_PowerPolicyMachine.m_Owner->m_DeviceWakeFromS0Triggered.Invoke(
5918 This->m_Device->GetHandle()
5949 if (
This->m_Device->IsPdo()) {
5950 This->PowerDisableWakeAtBusOverload();
5953 This->m_PowerPolicyMachine.m_Owner->m_DeviceDisarmWakeFromS0.Invoke(
5954 This->m_Device->GetHandle()
5983 if (
This->m_PowerPolicyMachine.m_Owner->m_IdleSettings.UsbSSCapable) {
5984 This->m_PowerPolicyMachine.UsbSSCallbackProcessingComplete();
5992 result =
This->m_PowerPolicyMachine.m_Owner->m_PowerIdleMachine.DisableTimer();
5999 if (
This->PowerPolicyCancelUsbSSIfCapable()) {
6031 if (
This->PowerPolicyCancelWaitWake() ==
FALSE) {
6088 if (
This->m_PowerPolicyMachine.m_Owner->m_IdleSettings.UsbSSCapable) {
6089 This->m_PowerPolicyMachine.UsbSSCallbackProcessingComplete();
6092 if (
This->PowerPolicyCancelUsbSSIfCapable()) {
6109 if (
This->PowerPolicyCancelWaitWake() ==
FALSE &&
6110 This->m_PowerPolicyMachine.m_Owner->m_WakeCompletionEventDropped) {
6163 if (
This->m_Device->IsPdo()) {
6164 This->PowerDisableWakeAtBusOverload();
6167 This->m_PowerPolicyMachine.m_Owner->m_DeviceDisarmWakeFromS0.Invoke(
6168 This->m_Device->GetHandle()
6198 This->PowerPolicyCompleteSystemPowerIrp();
6225 if (
This->m_PowerPolicyMachine.m_Owner->m_IdleSettings.UsbSSCapable) {
6226 This->m_PowerPolicyMachine.UsbSSCallbackProcessingComplete();
6234 result =
This->m_PowerPolicyMachine.m_Owner->m_PowerIdleMachine.DisableTimer();
6241 if (
This->PowerPolicyCancelUsbSSIfCapable()) {
6260 This->m_PowerPolicyMachine.m_Owner->
6261 m_PoxInterface.RequestComponentActive();
6292 This->m_PowerPolicyMachine.m_Owner->m_DeviceWakeFromS0Triggered.Invoke(
6293 This->m_Device->GetHandle()
6323 This->m_PowerPolicyMachine.m_Owner->
6324 m_PoxInterface.RequestComponentActive();
6326 result =
This->m_PowerPolicyMachine.m_Owner->m_PowerIdleMachine.DisableTimer();
6363 This->m_PowerPolicyMachine.m_Owner->
6364 m_PoxInterface.DeviceIsPoweredOn();
6393 This->m_PowerPolicyMachine.m_Owner->m_PowerFailed =
TRUE;
6400 This->m_PowerPolicyMachine.m_Owner->
6401 m_PoxInterface.DeviceIsPoweredOn();
6415 This->m_PowerPolicyMachine.m_Owner->
6416 m_PoxInterface.RequestComponentActive();
6418 This->m_PowerPolicyMachine.m_Owner->m_PowerIdleMachine.DisableTimer();
6450 This->m_PowerPolicyMachine.m_Owner->m_PowerFailed =
TRUE;
6457 This->m_PowerPolicyMachine.m_Owner->
6458 m_PoxInterface.DeviceIsPoweredOn();
6470 This->m_PowerPolicyMachine.m_Owner->
6471 m_PoxInterface.DeviceIsPoweredOn();
6477 if (
This->m_Device->IsPdo()) {
6478 This->PowerDisableWakeAtBusOverload();
6481 This->m_PowerPolicyMachine.m_Owner->m_DeviceDisarmWakeFromS0.Invoke(
6482 This->m_Device->GetHandle()
6498 if (
This->PowerPolicyCancelWaitWake() ==
FALSE &&
6499 This->m_PowerPolicyMachine.m_Owner->m_WakeCompletionEventDropped) {
6531 This->PowerPolicyBlockChildrenPowerUp();
6561 This->m_PowerPolicyMachine.m_Owner->m_PowerFailed =
TRUE;
6589 This->m_PowerPolicyMachine.m_Owner->m_PowerIdleMachine.Stop();
6598 This->PnpProcessEvent(
6599 This->m_PowerPolicyMachine.m_Owner->m_PowerFailed
6603 Mx::MxLowerIrql(
irql);
6608 This->m_PowerPolicyMachine.m_Owner->m_PowerFailed =
FALSE;
6633 This->m_PowerPolicyMachine.m_Owner->
6634 m_PoxInterface.UninitializeComponents();
6669 Mx::MxLowerIrql(
irql);
6693 This->m_PowerPolicyMachine.m_Owner->m_PowerIdleMachine.Start();
6726 This->m_PowerPolicyMachine.m_Owner->m_PowerIdleMachine.Stop();
6736 Mx::MxLowerIrql(
irql);
6760 if (
This->m_PowerPolicyMachine.m_Owner->m_PowerIdleMachine.DisableTimer()) {
6797 This->m_PowerPolicyMachine.m_Owner->
6798 m_PoxInterface.DeviceIsPoweredOn();
6800 This->m_PowerPolicyMachine.m_Owner->
6801 m_PoxInterface.RequestComponentActive();
6803 if (
This->PowerPolicyCancelUsbSSIfCapable() ==
FALSE) {
6834 if (
This->PowerPolicyCancelWaitWake() ==
FALSE &&
6835 This->m_PowerPolicyMachine.m_Owner->m_WakeCompletionEventDropped) {
6870 This->m_PowerPolicyMachine.m_Owner->
6871 m_PoxInterface.DeviceIsPoweredOn();
6873 This->m_PowerPolicyMachine.m_Owner->
6874 m_PoxInterface.RequestComponentActive();
6876 if (
This->PowerPolicyCancelUsbSSIfCapable() ==
FALSE) {
6916 This->m_PowerPolicyMachine.m_Owner->m_PowerIdleMachine.DisableTimer();
6940 if (
This->m_PowerPolicyMachine.m_Owner->m_PowerIdleMachine.DisableTimer()) {
6970 if (
This->m_PowerPolicyMachine.m_Owner->m_PowerIdleMachine.DisableTimer()) {
7002 result =
This->m_PowerPolicyMachine.m_Owner->m_PowerIdleMachine.DisableTimer();
7013 This->PowerPolicyCancelUsbSS();
7039 if (
This->m_PowerPolicyMachine.m_Owner->m_PowerIdleMachine.DisableTimer()) {
7069 This->SetInternalFailure();
7071 if (
FALSE ==
This->m_ReleaseHardwareAfterDescendantsOnFailure) {
7103 This->PowerPolicyChildrenCanPowerUp();
7105 This->m_PowerPolicyMachine.m_Owner->m_PowerFailed =
TRUE;
7112 This->m_PowerPolicyMachine.m_Owner->
7113 m_PoxInterface.DeviceIsPoweredOn();
7139 This->SetInternalFailure();
7166 This->SetInternalFailure();
7193 This->SetInternalFailure();
7225 This->m_PowerPolicyMachine.m_Owner->
7226 m_PoxInterface.DeviceIsPoweredOn();
7254 This->m_PowerPolicyMachine.m_Owner->
7255 m_PoxInterface.RequestComponentActive();
7290 result =
This->m_PowerPolicyMachine.m_Owner->m_PowerIdleMachine.DisableTimer();
7320 if (
This->m_PendingSystemPowerIrp !=
NULL) {
7321 This->PowerPolicyCompleteSystemPowerIrp();
7509 "PowerDeviceD0 requested by WDFDEVICE 0x%p !devobj 0x%p, "
7510 "is being completed by upper driver without sending it to "
7511 "driver that requested it",
7601 for (
i = 0;
i < 100;
i++) {
7634 "Could not request D%d irp for device %p (WDFDEVICE %p), "
7642 "Requesting D%d irp, %!STATUS!",
7657 state.SystemState = SystemState;
7677 "Requesting wait wake irp for S%d", SystemState-1);
7687 "Requesting wait wake irp for S%d failed, %!STATUS!",
7713 "Completing system power irp %p (S%d), %!STATUS!",
7754 if (wwIrp !=
NULL) {
7758 "Successfully got WaitWake irp %p for cancelling", wwIrp);
7763 "Cancel of irp %p returned %d", wwIrp,
result);
7782 "No WaitWake irp to cancel");
7806 if (originalIrp.PendingReturned()) {
7807 originalIrp.MarkIrpPending();
7812 "WDFDEVICE %p !devobj %p Completion of WaitWake irp %p,"
7815 originalIrp.GetStatus());
7850 ASSERT(pOldIrp ==
NULL || pOldIrp == originalIrp.GetIrp());
7852 if (pOldIrp !=
NULL ||
7856 "Completion of WaitWake irp %p",
7857 originalIrp.GetIrp());
7859 originalIrp.StartNextPowerIrp();
7866 originalIrp.GetIrp()
7878 "Not completing WaitWake irp %p in completion routine",
7879 originalIrp.GetIrp());
7906#if FX_IS_KERNEL_MODE
7909 "WDFDEVICE %p, !devobj %p Completion of UsbSS irp %p, %!STATUS!",
7910 This->m_Device,
This->m_Device->GetDeviceObject(),
7913#elif FX_IS_USER_MODE
7918 "WDFDEVICE %p, !devobj %p Completion of UsbSS irp",
7919 This->m_Device,
This->m_Device->GetDeviceObject());
7925 This->PowerPolicyProcessEvent(
7974 "WDFDEVICE %p !devobj 0x%p not idling out because there are %d "
8032 ((
FxChildList*)
ple->GetTransactionedObject())->PostParentToD0();
8142 IndicateWakeStatus(wwStatus);
8176 This->m_PowerPolicyMachine.m_Owner->m_PowerIdleMachine.DisableTimer();
8183 if (
This->PowerPolicyCancelUsbSSIfCapable()) {
8216 if (
This->PowerPolicyCancelUsbSSIfCapable()) {
8249 if (
This->PowerPolicyCancelUsbSSIfCapable()) {
8282 if (
This->PowerPolicyCancelUsbSSIfCapable()) {
8315 if (
This->PowerPolicyCancelUsbSSIfCapable()) {
8347 if (
This->PowerPolicyCancelUsbSSIfCapable()) {
8395 if (
This->PowerPolicyCancelWaitWake() ==
FALSE &&
8396 This->m_PowerPolicyMachine.m_Owner->m_WakeCompletionEventDropped) {
#define InterlockedExchange
WDFDEVICE __inline GetHandle(VOID)
MdDeviceObject __inline GetDeviceObject(VOID)
__inline VOID SetDevicePowerPolicyState(__in WDF_DEVICE_POWER_POLICY_STATE DeviceState)
__inline WDF_DEVICE_POWER_POLICY_STATE GetDevicePowerPolicyState()
static FxWdmDeviceExtension * _GetFxWdmExtension(__in MdDeviceObject DeviceObject)
SYSTEM_POWER_STATE GetParameterPowerStateSystemState()
static _Must_inspect_result_ NTSTATUS RequestPowerIrp(__in MdDeviceObject DeviceObject, __in UCHAR MinorFunction, __in POWER_STATE PowerState, __in MdRequestPowerComplete CompletionFunction, __in PVOID Context)
__inline PFX_DRIVER_GLOBALS GetDriverGlobals(VOID)
__inline CfxDevice * GetDevice(VOID)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolSystemWakeDeviceWakeCompletePowerUp(__inout FxPkgPnp *This)
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolStoppingD0OtherStates[]
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolSystemWakeDeviceWakeCompletePowerUpOtherStates[]
static WDF_DEVICE_POWER_POLICY_STATE PowerPolDeviceIdleSleeping(__inout FxPkgPnp *This)
static CPPOWER_POLICY_STATE_TABLE GetPowerPolicyTableEntry(__in WDF_DEVICE_POWER_POLICY_STATE State)
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolCancelingWakeForSystemSleepWakeCanceledOtherStates[]
static WDF_DEVICE_POWER_POLICY_STATE PowerPolTimerExpiredWakeCapablePowerDownNotProcessed(__inout FxPkgPnp *This)
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolSystemAsleepWakeArmedOtherStates[]
static WDF_DEVICE_POWER_POLICY_STATE PowerPolSleepingWakePowerDownFailedWakeCanceled(__inout FxPkgPnp *This)
VOID PowerPolicyPostParentToD0ToChildren(VOID)
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolSystemAsleepWakeArmedNPOtherStates[]
static WDF_DEVICE_POWER_POLICY_STATE PowerPolSystemAsleepNoWake(__inout FxPkgPnp *This)
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolWaitingArmedWakeInterruptFiredOtherStates[]
static WDF_DEVICE_POWER_POLICY_STATE PowerPolTimerExpiredWakeCapableWakeCanceled(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolTimerExpiredNoWakePowerDownNotProcessed(__inout FxPkgPnp *This)
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolSystemWakeDeviceWakeEnabledWakeCanceledNPOtherStates[]
static WDF_DEVICE_POWER_POLICY_STATE PowerPolStarted(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolSleepingWakeRevertArmWakeNP(__inout FxPkgPnp *This)
VOID __inline PowerPolicyDisarmWakeFromSx(VOID)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolSleepingNoWakeDxRequestFailed(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolStoppingFailed(__inout FxPkgPnp *This)
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolS0WakeCompletePowerUpOtherStates[]
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolWakeCapableDeviceIdleOtherStates[]
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolTimerExpiredWakeCapablePowerDownFailedWakeInterruptArrivedOtherStates[]
static WDF_DEVICE_POWER_POLICY_STATE PowerPolSystemSleepNeedWakeCompletePowerUp(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolSystemWakeQueryIdle(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolTimerExpiredNoWakePoweredDownDisableIdleTimer(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolStopping(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolStartingDecideS0Wake(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolStartedCancelTimer(__inout FxPkgPnp *This)
BOOLEAN m_ReleaseHardwareAfterDescendantsOnFailure
BOOLEAN PowerPolicyCancelWaitWake(VOID)
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolTimerExpiredWakeCapableWakeSucceededOtherStates[]
static WDF_DEVICE_POWER_POLICY_STATE PowerPolTimerExpiredWakeCapableWakeArrived(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolS0WakeDisarm(__inout FxPkgPnp *This)
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolObjectCreatedOtherStates[]
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolTimerExpiredWakeCapablePowerDownFailedCancelWakeOtherStates[]
static WDF_DEVICE_POWER_POLICY_STATE PowerPolSystemWakeDeviceWakeTriggeredS0(__inout FxPkgPnp *This)
FxPowerMachine m_PowerMachine
static WDF_DEVICE_POWER_POLICY_STATE PowerPolTimerExpiredWakeCompletedPowerDown(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolCancelingUsbSSForSystemSleep(__inout FxPkgPnp *This)
BOOLEAN ShouldProcessPowerPolicyEventOnDifferentThread(__in KIRQL CurrentIrql, __in BOOLEAN CallerSpecifiedProcessingOnDifferentThread)
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolTimerExpiredWakeCapableCancelWakeOtherStates[]
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolIdleCapableDeviceIdleOtherStates[]
static WDF_DEVICE_POWER_POLICY_STATE PowerPolCancelUsbSS(__inout FxPkgPnp *This)
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolStartedWakeCapableOtherStates[]
_Must_inspect_result_ NTSTATUS PowerPolicySendDevicePowerRequest(__in DEVICE_POWER_STATE DeviceState, __in SendDeviceRequestAction Action)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolTimerExpiredWakeCompletedHardwareStarted(__inout FxPkgPnp *This)
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolStoppedOtherStates[]
static WDF_DEVICE_POWER_POLICY_STATE PowerPolWakeCapableUsbSSCompleted(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolDeviceIdleStopping(__inout FxPkgPnp *This)
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolCancelingWakeForSystemSleepOtherStates[]
FxEnumerationInfo * m_EnumInfo
static WDF_DEVICE_POWER_POLICY_STATE PowerPolSleepingSendWake(__inout FxPkgPnp *This)
VOID PowerPolicyCompleteSystemPowerIrp(VOID)
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolSystemWakeDeviceWakeEnabledNPOtherStates[]
static WDF_DEVICE_POWER_POLICY_STATE PowerPolSleeping(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolTimerExpiredWakeCapableWakeInterruptArrived(__inout FxPkgPnp *This)
static MdRequestPowerCompleteType _PowerPolDeviceWaitWakeComplete
static WDF_DEVICE_POWER_POLICY_STATE PowerPolStoppedRemoving(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolSystemWakeDeviceWakeDisarm(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolSystemWakeDeviceWokeDisarm(__inout FxPkgPnp *This)
static VOID _SetPowerCapState(__in ULONG Index, __in DEVICE_POWER_STATE State, __out PULONG Result)
_Must_inspect_result_ NTSTATUS PowerPolicySendWaitWakeRequest(__in SYSTEM_POWER_STATE SystemState)
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolSystemWakeDeviceToD0OtherStates[]
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolSleepingSendWakeOtherStates[]
static MdRequestPowerCompleteType _PowerPolDevicePowerDownComplete
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolTimerExpiredWakeCompletedPowerDownOtherStates[]
static WDF_DEVICE_POWER_POLICY_STATE PowerPolTimerExpiredNoWakeCompletePowerDown(__inout FxPkgPnp *This)
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolStartedIdleCapableOtherStates[]
static WDF_DEVICE_POWER_POLICY_STATE PowerPolTimerExpiredWakeCapableSendWake(__inout FxPkgPnp *This)
VOID PowerPolicyProcessEventInner(__inout FxPostProcessInfo *Info)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolStoppingResetDevice(__inout FxPkgPnp *This)
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolTimerExpiredNoWakeCompletePowerDownOtherStates[]
static WDF_DEVICE_POWER_POLICY_STATE PowerPolDevicePowerRequestFailed(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolWokeFromS0NotifyDriver(__inout FxPkgPnp *This)
FxPowerPolicyStateCallback * m_PowerPolicyStateCallbacks
VOID PowerPolicyChildrenCanPowerUp(VOID)
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolIoPresentArmedOtherStates[]
static WDF_DEVICE_POWER_POLICY_STATE PowerPolStartingFailed(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolTimerExpiredDecideUsbSS(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolDeviceIdleReturnToActive(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolSystemAsleepWakeArmedNP(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolStartingPoweredUp(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolStoppingD0Failed(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolRestartingFailed(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolWaitingArmedWakeSucceededCancelUsbSS(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolTimerExpiredWakeCapablePowerDownFailedUsbSS(__inout FxPkgPnp *This)
BOOLEAN PowerPolicyCancelUsbSSIfCapable(VOID)
VOID PowerPolicyUpdateSystemWakeSource(__in FxIrp *Irp)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolSystemWakeDeviceToD0(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolWaitingArmedWakeInterruptFired(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolWokeFromS0UsbSS(__inout FxPkgPnp *This)
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolStartedOtherStates[]
static WDF_DEVICE_POWER_POLICY_STATE PowerPolTimerExpiredWakeCapablePowerDownFailedCancelWake(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolSystemAsleepWakeArmed(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolSystemWakeDeviceWakeEnabledWakeCanceled(__inout FxPkgPnp *This)
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolS0NoWakePowerUpOtherStates[]
static WDF_DEVICE_POWER_POLICY_STATE PowerPolPowerUpForSystemSleepNotSeen(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolSystemWakeDeviceWakeDisabled(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolSystemSleepNeedWake(__inout FxPkgPnp *This)
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolWaitingUnarmedOtherStates[]
static WDF_DEVICE_POWER_POLICY_STATE PowerPolWakeCapableDeviceIdle(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolTimerExpiredNoWakeReturnToActive(__inout FxPkgPnp *This)
VOID SaveState(__in BOOLEAN UseCanSaveState)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolStartedIdleCapable(__inout FxPkgPnp *This)
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolSystemWakeDeviceWakeInterruptFiredOtherStates[]
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolTimerExpiredWakeCapableWakeArrivedOtherStates[]
MdIrp m_PendingSystemPowerIrp
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolRestartingOtherStates[]
static WDF_DEVICE_POWER_POLICY_STATE PowerPolSleepingPowerDownNotProcessed(__inout FxPkgPnp *This)
BOOLEAN __inline PowerPolicyShouldPropagateWakeStatusToChildren(VOID)
static VOID _PowerSetSystemWakeSource(__in FxIrp *Irp)
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolSleepingNoWakeCompletePowerDownOtherStates[]
VOID NotPowerPolicyOwnerEnterNewState(__in WDF_DEVICE_POWER_POLICY_STATE NewState)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolRemoved(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolStartedWakeCapableCancelTimerForSleep(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolSleepingWakePowerDownFailed(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolStoppingCancelWake(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolStartingSucceeded(__inout FxPkgPnp *This)
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolSystemSleepNeedWakeCompletePowerUpOtherStates[]
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolTimerExpiredWakeCapableUsbSSOtherStates[]
static WDF_DEVICE_POWER_POLICY_STATE PowerPolTimerExpiredWakeCompletedPowerUp(__inout FxPkgPnp *This)
VOID PowerPolicyCancelUsbSS(VOID)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolWaitingArmedQueryIdle(__inout FxPkgPnp *This)
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolS0NoWakeCompletePowerUpOtherStates[]
static WDF_DEVICE_POWER_POLICY_STATE PowerPolSleepingWakeWakeArrivedNP(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolTimerExpiredWakeCapableUndoPowerDown(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolSystemWakeDeviceWakeDisarmNP(__inout FxPkgPnp *This)
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolWokeFromS0OtherStates[]
BOOLEAN PowerIndicateWaitWakeStatus(__in NTSTATUS WaitWakeStatus)
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolSleepingWakeRevertArmWakeNPOtherStates[]
static WDF_DEVICE_POWER_POLICY_STATE PowerPolCheckPowerPageable(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolStoppingResetDeviceFailed(__inout FxPkgPnp *This)
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolSystemWakeDeviceWakeTriggeredS0OtherStates[]
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolStoppingResetDeviceOtherStates[]
static WDF_DEVICE_POWER_POLICY_STATE PowerPolDeviceD0PowerRequestFailed(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolSystemWakeDeviceWakeEnabled(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolWaitingArmedUsbSS(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolSleepingWakeWakeArrived(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolTimerExpiredWakeSucceeded(__inout FxPkgPnp *This)
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolStoppingResetDeviceCompletePowerUpOtherStates[]
static WDF_DEVICE_POWER_POLICY_STATE PowerPolSleepingWakePowerDown(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolTimerExpiredNoWakeUndoPowerDown(__inout FxPkgPnp *This)
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolSystemWakeDeviceToD0CompletePowerUpOtherStates[]
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolSleepingWakeWakeArrivedNPOtherStates[]
static WDF_DEVICE_POWER_POLICY_STATE PowerPolIoPresentArmedWakeCanceled(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolWaitingArmedStoppingCancelUsbSS(__inout FxPkgPnp *This)
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolIoPresentArmedWakeCanceledOtherStates[]
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolSystemWakeDeviceWakeEnabledOtherStates[]
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolSystemWakeDeviceWakeEnabledWakeCanceledOtherStates[]
SharedPowerData m_SharedPower
static MdCompletionRoutineType _PowerPolicyUsbSelectiveSuspendCompletionRoutine
static WDF_DEVICE_POWER_POLICY_STATE PowerPolStoppingDisarmWakeWakeCanceled(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolTimerExpiredWakeCompletedDisarm(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolSystemSleepPowerRequestFailed(__inout FxPkgPnp *This)
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolStoppingCancelWakeOtherStates[]
static WDF_DEVICE_POWER_POLICY_STATE PowerPolStoppingResetDeviceCompletePowerUp(__inout FxPkgPnp *This)
static const POWER_POLICY_STATE_TABLE m_WdfPowerPolicyStates[]
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolStartingOtherStates[]
static MdRequestPowerCompleteType _PowerPolDevicePowerUpComplete
static WDF_DEVICE_POWER_POLICY_STATE PowerPolSystemWakeDeviceWokeDisarmNP(__inout FxPkgPnp *This)
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolRemovedOtherStates[]
static WDF_DEVICE_POWER_POLICY_STATE PowerPolSystemSleepFromDeviceWaitingUnarmed(__inout FxPkgPnp *This)
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolWaitingArmedWakeInterruptFiredDuringPowerDownOtherStates[]
static WDF_DEVICE_POWER_POLICY_STATE PowerPolTimerExpiredWakeCapableCancelWake(__inout FxPkgPnp *This)
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolStoppingDisarmWakeOtherStates[]
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolStartedWaitForIdleTimeoutOtherStates[]
VOID PnpProcessEvent(__in FxPnpEvent Event, __in BOOLEAN ProcessEventOnDifferentThread=FALSE)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolStoppingD0(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolPowerUpForSystemSleepFailed(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolTimerExpiredWakeCapablePowerDown(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolStoppingD0CancelUsbSS(__inout FxPkgPnp *This)
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolSleepingNoWakePowerDownOtherStates[]
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolTimerExpiredWakeCapableWakeFailedOtherStates[]
static WDF_DEVICE_POWER_POLICY_STATE PowerPolStarting(__inout FxPkgPnp *This)
static VOID _PowerPolicyProcessEventInner(__inout FxPkgPnp *This, __inout FxPostProcessInfo *Info, __in PVOID WorkerContext)
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolTimerExpiredWakeCapableSendWakeOtherStates[]
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolSystemWakeDeviceWakeInterruptFiredNPOtherStates[]
static WDF_DEVICE_POWER_POLICY_STATE PowerPolCancelingWakeForSystemSleep(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolStoppingDisarmWake(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolSystemWakeDeviceWakeEnabledNP(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolIdleCapableDeviceIdle(__inout FxPkgPnp *This)
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolSleepingWakePowerDownOtherStates[]
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolStoppingDisarmWakeCancelWakeOtherStates[]
NTSTATUS CompletePowerRequest(__inout FxIrp *Irp, __in NTSTATUS Status)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolSystemWakeDeviceWakeEnabledWakeCanceledNP(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolS0NoWakePowerUp(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolWaitingArmedWakeFailedCancelUsbSS(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolTimerExpiredWakeCapableCleanup(__inout FxPkgPnp *This)
BOOLEAN PowerPolicyCanIdlePowerDown(__in DEVICE_POWER_STATE DxState)
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolTimerExpiredWakeCapableWakeInterruptArrivedOtherStates[]
static WDF_DEVICE_POWER_POLICY_STATE PowerPolWaitingUnarmedQueryIdle(__inout FxPkgPnp *This)
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolTimerExpiredWakeCompletedPowerUpOtherStates[]
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolSleepingWakeWakeArrivedOtherStates[]
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolDevicePowerRequestFailedOtherStates[]
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolDisarmingWakeForSystemSleepCompletePowerUpOtherStates[]
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolSleepingWakePowerDownFailedOtherStates[]
static WDF_DEVICE_POWER_POLICY_STATE PowerPolStartingPoweredUpFailed(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolStoppingDisarmWakeCancelWake(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolTimerExpiredWakeCapablePowerDownFailedWakeCanceled(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolWokeFromS0(__inout FxPkgPnp *This)
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolCancelUsbSSOtherStates[]
FxPowerPolicyMachine m_PowerPolicyMachine
static WDF_DEVICE_POWER_POLICY_STATE PowerPolTimerExpiredWakeCapableDxAllocFailed(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolSystemWakeDeviceWakeTriggeredS0NP(__inout FxPkgPnp *This)
static _Must_inspect_result_ CPNOT_POWER_POLICY_OWNER_STATE_TABLE GetNotPowerPolicyOwnerTableEntry(__in WDF_DEVICE_POWER_POLICY_STATE State)
static DEVICE_POWER_STATE _GetPowerCapState(__in ULONG Index, __in ULONG State)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolWakeFailedUsbSS(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolSystemWakeDeviceWakeInterruptFired(__inout FxPkgPnp *This)
VOID PowerPolicyEnterNewState(__in WDF_DEVICE_POWER_POLICY_STATE State)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolSystemWakeDeviceToD0CompletePowerUp(__inout FxPkgPnp *This)
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolTimerExpiredNoWakeOtherStates[]
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolStoppingOtherStates[]
static WDF_DEVICE_POWER_POLICY_STATE PowerPolSleepingNoWakePowerDown(__inout FxPkgPnp *This)
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolSystemWakeDeviceWakeTriggeredS0NPOtherStates[]
static WDF_DEVICE_POWER_POLICY_STATE PowerPolStartedWakeCapableSleepingUsbSS(__inout FxPkgPnp *This)
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolSystemSleepNeedWakeOtherStates[]
static WDF_DEVICE_POWER_POLICY_STATE PowerPolStartedIdleCapableCancelTimerForSleep(__inout FxPkgPnp *This)
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolWaitingArmedOtherStates[]
static WDF_DEVICE_POWER_POLICY_STATE PowerPolCancelingWakeForSystemSleepWakeCanceled(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolIoPresentArmed(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolS0WakeCompletePowerUp(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolStoppingCancelUsbSS(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolStoppingCancelTimer(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolDisarmingWakeForSystemSleepCompletePowerUp(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolWaitingArmedIoPresentCancelUsbSS(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolS0NoWakeCompletePowerUp(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolTimerExpiredWakeCapableUsbSS(__inout FxPkgPnp *This)
VOID PowerPolicyCheckAssumptions(VOID)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolSleepingWakeRevertArmWake(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolSleepingNoWakeCompletePowerDown(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolStartedWakeCapable(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolRestarting(__inout FxPkgPnp *This)
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolSleepingWakeRevertArmWakeOtherStates[]
static const POWER_POLICY_EVENT_TARGET_STATE m_PowerPolTimerExpiredWakeCapablePowerDownOtherStates[]
static WDF_DEVICE_POWER_POLICY_STATE PowerPolStoppingSendStatus(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolTimerExpiredNoWake(__inout FxPkgPnp *This)
static WDF_DEVICE_POWER_POLICY_STATE PowerPolSystemWakeDeviceWakeInterruptFiredNP(__inout FxPkgPnp *This)
static MdCompletionRoutineType _PowerPolicyWaitWakeCompletionRoutine
BOOLEAN m_SystemWokenByWakeInterrupt
VOID PowerPolicyProcessEvent(__in FxPowerPolicyEvent Event, __in BOOLEAN ProcessEventOnDifferentThread=FALSE)
VOID Invoke(__in WDFDEVICE Device)
_Must_inspect_result_ NTSTATUS Init(VOID)
_Must_inspect_result_ FxTransactionedEntry * GetNextEntry(__in_opt FxTransactionedEntry *Entry)
VOID UnlockFromEnum(__in PFX_DRIVER_GLOBALS FxDriverGlobals)
VOID LockForEnum(__in PFX_DRIVER_GLOBALS FxDriverGlobals)
@ IdleTimeoutSystemManaged
@ IdleTimeoutPoxSettingsSpecified
@ IdleTimeoutStatusFrozen
LONG volatile m_IdleTimeoutStatus
IdleTimeoutStatusUpdateResult UpdateIdleTimeoutStatus(__in IdleTimeoutStatusFlag Flag)
NTSTATUS UseSystemManagedIdleTimeout(__in PFX_DRIVER_GLOBALS DriverGlobals)
PPOX_SETTINGS m_PoxSettings
static BOOLEAN _SystemManagedIdleTimeoutAvailable(VOID)
CfxDevice * GetDevice(VOID)
BOOLEAN DriverSpecifiedPowerFrameworkSettings(VOID)
BOOLEAN UsingSystemManagedIdleTimeout(VOID)
IdleTimeoutStatusUpdateResult
@ IdleTimeoutStatusFlagsAlreadyFrozen
@ IdleTimeoutStatusFlagAlreadySet
@ IdleTimeoutStatusFlagsUnexpected
@ IdleTimeoutStatusFlagsUpdated
NTSTATUS CommitPowerFrameworkSettings(__in PFX_DRIVER_GLOBALS DriverGlobals, __in PPOX_SETTINGS PoxSettings)
VOID FreezeIdleTimeoutManagementStatus(__in PFX_DRIVER_GLOBALS DriverGlobals)
__inline VOID SetObject(__in_opt MdDeviceObject DeviceObject)
static __inline VOID UnregisterCallback(__in PVOID CbRegistration)
static __inline VOID MxReleaseRemoveLock(__in MdRemoveLock RemoveLock, __in PVOID Tag)
static __inline NTSTATUS CreateCallback(__out PCALLBACK_OBJECT *CallbackObject, __in POBJECT_ATTRIBUTES ObjectAttributes, __in BOOLEAN Create, __in BOOLEAN AllowMultipleCallbacks)
static __inline VOID MxDereferenceObject(__in PVOID Object)
static __inline PVOID RegisterCallback(__in PCALLBACK_OBJECT CallbackObject, __in MdCallbackFunction CallbackFunction, __in PVOID CallbackContext)
static __inline VOID MxDelayExecutionThread(__in KPROCESSOR_MODE WaitMode, __in BOOLEAN Alertable, __in PLARGE_INTEGER Interval)
_In_ PTRANSFER_PACKET _In_ ULONG _In_ PIRP OriginalIrp
#define STATUS_NOT_SUPPORTED
#define TRACINGPNPPOWERSTATES
#define NT_SUCCESS(StatCode)
#define InterlockedExchangePointer(Target, Value)
DoTraceLevelMessage(pFxDriverGlobals, TRACE_LEVEL_VERBOSE, TRACINGPNP, "Enter, WDFDEVICE %p", Device)
MxDeviceObject deviceObject
FxVerifierDbgBreakPoint(pFxDriverGlobals)
#define FLAG_TO_BOOL(_Flags, _FlagMask)
const UCHAR FxPowerPolicyEventQueueDepth
@ PnpEventPwrPolStopFailed
@ PnpEventPwrPolStartFailed
@ PnpEventPowerDownFailed
@ FxPowerPolicySxWakeDeviceEnabledFlag
@ FxPowerPolicySxWakeChildrenArmedFlag
@ PwrPolPowerTimeoutExpired
@ PwrPolWakeInterruptFired
@ PwrPolPowerDownIoStopped
@ PwrPolPriorityEventsMask
@ PwrPolUsbSelectiveSuspendCompleted
@ PwrPolDevicePowerNotRequired
@ PwrPolDevicePowerRequired
@ PwrPolS0IdlePolicyChanged
@ PowerPolSingularEventMask
@ PwrPolUsbSelectiveSuspendCallback
@ PwrPolNotOwnerPriorityEventsMask
@ CancelOwnershipUnclaimed
__inline VOID FxVerifierBreakOnDeviceStateError(__in PFX_DRIVER_GLOBALS FxDriverGlobals)
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
#define OBJ_CASE_INSENSITIVE
#define InterlockedCompareExchangePointer
#define InterlockedCompareExchange
#define InitializeObjectAttributes(p, n, a, r, s)
REQUEST_POWER_COMPLETE * MdRequestPowerComplete
__in UCHAR __in POWER_STATE __in_opt PVOID __in PIO_STATUS_BLOCK IoStatus
#define _Must_inspect_result_
#define ASSERTMSG(msg, exp)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define UNREFERENCED_PARAMETER(P)
enum _DEVICE_POWER_STATE DEVICE_POWER_STATE
enum _SYSTEM_POWER_STATE SYSTEM_POWER_STATE
#define STATUS_INTERNAL_ERROR
#define VALIDATE_PWR_POL_STATE(_CurrentState, _NewState)
#define ASSERT_PWR_POL_STATE(_This, _State)
#define STATUS_MORE_PROCESSING_REQUIRED
#define __in_xcount_opt(size)
#define TRACE_LEVEL_WARNING
#define TRACE_LEVEL_VERBOSE
#define TRACE_LEVEL_ERROR
#define TRACE_LEVEL_INFORMATION
FxWaitLockTransactionedList m_ChildListList
UCHAR IncrementHistoryIndex(VOID)
FxWaitLockInternal m_StateMachineLock
BOOLEAN IsClosedLocked(VOID)
VOID GetFinishedState(__inout FxPostProcessInfo *Info)
BOOLEAN m_PowerDownFailure
ULONG m_SingularEventsPresent
FxPowerPolicyMachineStateHistory m_States
~FxPowerPolicyMachine(VOID)
VOID UsbSSCallbackProcessingComplete(VOID)
_Must_inspect_result_ NTSTATUS InitUsbSS(VOID)
FxPowerPolicyMachine(VOID)
FxPowerPolicyOwnerSettings * m_Owner
BOOLEAN CanCompleteWaitWakeIrp(VOID)
FxPowerPolicyEvent m_Queue[FxPowerPolicyEventQueueDepth]
BOOLEAN m_RequestedPowerUpIrp
NTSTATUS m_WaitWakeStatus
FxPowerPolicyOwnerSettings(__in FxPkgPnp *PkgPnp)
FxUsbIdleInfo * m_UsbIdle
PVOID m_PowerCallbackRegistration
static MdCallbackFunctionType _PowerStateCallback
~FxPowerPolicyOwnerSettings(VOID)
FxPowerDeviceDisarmWakeFromSx m_DeviceDisarmWakeFromSx
BOOLEAN m_WakeCompletionEventDropped
ULONG m_SystemToDeviceStateMap
PCALLBACK_OBJECT m_PowerCallbackObject
FxPowerIdleMachine m_PowerIdleMachine
BOOLEAN m_ChildrenCanPowerUp
LONG m_WaitWakeCancelCompletionOwnership
_Must_inspect_result_ NTSTATUS Init(VOID)
VOID CleanupPowerCallback(VOID)
BOOLEAN m_RequestedWaitWakeIrp
BOOLEAN m_RequestedPowerDownIrp
LONG m_ChildrenArmedCount
BOOLEAN m_SystemWakeSource
ULONG m_ChildrenPoweredOnCount
VOID Invoke(__in WDF_DEVICE_POWER_POLICY_STATE State, __in WDF_STATE_NOTIFICATION_TYPE Type, __in WDFDEVICE Device, __in PCWDF_DEVICE_POWER_POLICY_NOTIFICATION_DATA NotificationData)
_Must_inspect_result_ NTSTATUS Initialize(VOID)
VOID StartTimer(__in ULONG State)
VOID CancelTimer(__in ULONG State)
#define RtlZeroMemory(Destination, Length)
#define CONTAINING_RECORD(address, type, field)
#define STATUS_INVALID_DEVICE_REQUEST
#define STATUS_UNSUCCESSFUL
#define STATUS_INSUFFICIENT_RESOURCES
USHORT History[FxPowerPolicyEventQueueDepth]
_Must_inspect_result_ _In_ WDFCHILDLIST _In_ PWDF_CHILD_LIST_ITERATOR _Out_ WDFDEVICE _Inout_opt_ PWDF_CHILD_RETRIEVE_INFO Info
FORCEINLINE LONGLONG WDF_REL_TIMEOUT_IN_MS(_In_ ULONGLONG Time)
_In_ PDEVICE_OBJECT DeviceObject
_In_ PWDFDEVICE_INIT _In_ BOOLEAN IsPowerPolicyOwner
_In_ WDFDEVICE _Out_ PWDF_DEVICE_STATE DeviceState
@ StateNotificationEnterState
@ StateNotificationPostProcessState
@ StateNotificationLeaveState
@ WdfSpecialFileHibernation
enum _WDF_DEVICE_POWER_POLICY_STATE WDF_DEVICE_POWER_POLICY_STATE
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_ WDF_DEVICE_POWER_STATE PowerState
@ WdfDevStatePwrPolSleepingWakePowerDownFailed
@ WdfDevStatePwrPolStopping
@ WdfDevStatePwrPolCancelingWakeForSystemSleepWakeCanceled
@ WdfDevStatePwrPolWaitingArmed
@ WdfDevStatePwrPolStartingFailed
@ WdfDevStatePwrPolStoppingSendStatus
@ WdfDevStatePwrPolTimerExpiredWakeCompletedPowerUp
@ WdfDevStatePwrPolRestartingFailed
@ WdfDevStatePwrPolSystemSleepFromDeviceWaitingUnarmed
@ WdfDevStatePwrPolStartedWakeCapableWaitForIdleTimeout
@ WdfDevStatePwrPolStoppingCancelTimer
@ WdfDevStatePwrPolTimerExpiredWakeCapableWakeInterruptArrived
@ WdfDevStatePwrPolWaitingArmedWakeInterruptFired
@ WdfDevStatePwrPolWaitingUnarmed
@ WdfDevStatePwrPolTimerExpiredNoWakeCompletePowerDown
@ WdfDevStatePwrPolStoppingResetDevice
@ WdfDevStatePwrPolStoppingDisarmWake
@ WdfDevStatePwrPolWaitingArmedIoPresentCancelUsbSS
@ WdfDevStatePwrPolSleepingNoWakeCompletePowerDown
@ WdfDevStatePwrPolTimerExpiredWakeCapableCancelWake
@ WdfDevStatePwrPolS0NoWakeCompletePowerUp
@ WdfDevStatePwrPolSleepingSendWake
@ WdfDevStatePwrPolSystemSleepNeedWake
@ WdfDevStatePwrPolSleepingWakeWakeArrived
@ WdfDevStatePwrPolWakeCapableDeviceIdle
@ WdfDevStatePwrPolTimerExpiredNoWakePoweredDownDisableIdleTimer
@ WdfDevStatePwrPolS0NoWakePowerUp
@ WdfDevStatePwrPolStoppingCancelUsbSS
@ WdfDevStatePwrPolIoPresentArmedWakeCanceled
@ WdfDevStatePwrPolTimerExpiredNoWakeUndoPowerDown
@ WdfDevStatePwrPolSleepingNoWakeDxRequestFailed
@ WdfDevStatePwrPolWaitingArmedWakeInterruptFiredDuringPowerDown
@ WdfDevStatePwrPolDeviceIdleSleeping
@ WdfDevStatePwrPolRemoved
@ WdfDevStatePwrPolTimerExpiredWakeCapablePowerDown
@ WdfDevStatePwrPolSystemWakeQueryIdle
@ WdfDevStatePwrPolWaitingUnarmedQueryIdle
@ WdfDevStatePwrPolSystemWakeDeviceWakeDisarmNP
@ WdfDevStatePwrPolDeviceIdleReturnToActive
@ WdfDevStatePwrPolTimerExpiredWakeCompletedPowerDown
@ WdfDevStatePwrPolSleepingWakePowerDownFailedWakeCanceled
@ WdfDevStatePwrPolTimerExpiredWakeCapablePowerDownNotProcessed
@ WdfDevStatePwrPolCancelingWakeForSystemSleep
@ WdfDevStatePwrPolWaitingArmedQueryIdle
@ WdfDevStatePwrPolStoppingDisarmWakeWakeCanceled
@ WdfDevStatePwrPolTimerExpiredWakeCapableWakeArrived
@ WdfDevStatePwrPolStartingPoweredUpFailed
@ WdfDevStatePwrPolStarted
@ WdfDevStatePwrPolSystemWakeDeviceWakeTriggeredNP
@ WdfDevStatePwrPolStartedWakeCapable
@ WdfDevStatePwrPolStopped
@ WdfDevStatePwrPolIdleCapableDeviceIdle
@ WdfDevStatePwrPolTimerExpiredNoWakeReturnToActive
@ WdfDevStatePwrPolStoppingCancelWake
@ WdfDevStatePwrPolSleepingWakeWakeArrivedNP
@ WdfDevStatePwrPolIoPresentArmed
@ WdfDevStatePwrPolTimerExpiredWakeCapableUndoPowerDown
@ WdfDevStatePwrPolStartedWakeCapableCancelTimerForSleep
@ WdfDevStatePwrPolSleepingWakeRevertArmWake
@ WdfDevStatePwrPolSystemWakeDeviceToD0
@ WdfDevStatePwrPolTimerExpiredWakeSucceeded
@ WdfDevStatePwrPolCheckPowerPageable
@ WdfDevStatePwrPolSystemWakeDeviceWakeTriggeredS0
@ WdfDevStatePwrPolSystemWakeDeviceWokeDisarm
@ WdfDevStatePwrPolWokeFromS0
@ WdfDevStatePwrPolSystemWakeDeviceWakeCompletePowerUp
@ WdfDevStatePwrPolStartedCancelTimer
@ WdfDevStatePwrPolSleepingNoWakePowerDown
@ WdfDevStatePwrPolSystemWakeDeviceWakeInterruptFired
@ WdfDevStatePwrPolStartedIdleCapableWaitForIdleTimeout
@ WdfDevStatePwrPolTimerExpiredWakeCapablePowerDownFailedWakeInterruptArrived
@ WdfDevStatePwrPolStartedIdleCapable
@ WdfDevStatePwrPolSystemWakeDeviceWakeEnabledWakeCanceledNP
@ WdfDevStatePwrPolStartingDecideS0Wake
@ WdfDevStatePwrPolSystemWakeDeviceToD0CompletePowerUp
@ WdfDevStatePwrPolStartedWaitForIdleTimeout
@ WdfDevStatePwrPolRestarting
@ WdfDevStatePwrPolSystemWakeDeviceWakeInterruptFiredNP
@ WdfDevStatePwrPolDeviceD0PowerRequestFailed
@ WdfDevStatePwrPolStoppingD0
@ WdfDevStatePwrPolDisarmingWakeForSystemSleepCompletePowerUp
@ WdfDevStatePwrPolS0WakeCompletePowerUp
@ WdfDevStatePwrPolSystemWakeDeviceWakeDisarm
@ WdfDevStatePwrPolStoppingWaitForUsbSSCompletion
@ WdfDevStatePwrPolTimerExpiredWakeCapablePowerDownFailedCancelWake
@ WdfDevStatePwrPolSystemWakeDeviceWakeEnabled
@ WdfDevStatePwrPolStartingSucceeded
@ WdfDevStatePwrPolWaitingArmedWakeFailedCancelUsbSS
@ WdfDevStatePwrPolStartingPoweredUp
@ WdfDevStatePwrPolSystemWakeDeviceWakeEnabledWakeCanceled
@ WdfDevStatePwrPolStoppingResetDeviceCompletePowerUp
@ WdfDevStatePwrPolPowerUpForSystemSleepFailed
@ WdfDevStatePwrPolSystemAsleepNoWake
@ WdfDevStatePwrPolStoppingWaitForIdleTimeout
@ WdfDevStatePwrPolPowerUpForSystemSleepNotSeen
@ WdfDevStatePwrPolTimerExpiredWakeCapableWakeFailed
@ WdfDevStatePwrPolTimerExpiredWakeCapableUsbSS
@ WdfDevStatePwrPolSleeping
@ WdfDevStatePwrPolStartedWakeCapableSleepingUsbSS
@ WdfDevStatePwrPolDeviceIdleStopping
@ WdfDevStatePwrPolSystemWakeDeviceWakeTriggered
@ WdfDevStatePwrPolTimerExpiredNoWake
@ WdfDevStatePwrPolStoppingFailed
@ WdfDevStatePwrPolCancelUsbSS
@ WdfDevStatePwrPolStarting
@ WdfDevStatePwrPolTimerExpiredWakeCompletedDisarm
@ WdfDevStatePwrPolTimerExpiredWakeCapableCleanup
@ WdfDevStatePwrPolTimerExpiredNoWakePowerDownNotProcessed
@ WdfDevStatePwrPolStoppingD0CancelUsbSS
@ WdfDevStatePwrPolDevicePowerRequestFailed
@ WdfDevStatePwrPolSystemSleepNeedWakeCompletePowerUp
@ WdfDevStatePwrPolWaitingArmedUsbSS
@ WdfDevStatePwrPolSystemWakeDeviceWakeDisabled
@ WdfDevStatePwrPolTimerExpiredDecideUsbSS
@ WdfDevStatePwrPolSleepingWakePowerDown
@ WdfDevStatePwrPolStoppingResetDeviceFailed
@ WdfDevStatePwrPolTimerExpiredWakeCapableWakeCanceled
@ WdfDevStatePwrPolTimerExpiredWakeCapableDxAllocFailed
@ WdfDevStatePwrPolTimerExpiredWakeCapablePowerDownFailedUsbSS
@ WdfDevStatePwrPolTimerExpiredWakeCapablePowerDownFailedWakeCanceled
@ WdfDevStatePwrPolSystemWakeDeviceWakeTriggeredS0NP
@ WdfDevStatePwrPolSystemAsleepWakeArmed
@ WdfDevStatePwrPolCancelingUsbSSForSystemSleep
@ WdfDevStatePwrPolStoppingDisarmWakeCancelWake
@ WdfDevStatePwrPolStartedIdleCapableCancelTimerForSleep
@ WdfDevStatePwrPolSleepingWakeRevertArmWakeNP
@ WdfDevStatePwrPolSystemWakeDeviceWakeEnabledNP
@ WdfDevStatePwrPolSystemWakeDeviceWokeDisarmNP
@ WdfDevStatePwrPolStoppingD0Failed
@ WdfDevStatePwrPolS0WakeDisarm
@ WdfDevStatePwrPolWokeFromS0UsbSS
@ WdfDevStatePwrPolWokeFromS0NotifyDriver
@ WdfDevStatePwrPolSystemSleepPowerRequestFailed
@ WdfDevStatePwrPolTimerExpiredWakeCapableSendWake
@ WdfDevStatePwrPolSleepingPowerDownNotProcessed
@ WdfDevStatePwrPolStoppedRemoving
@ WdfDevStatePwrPolTimerExpiredWakeCapableWakeSucceeded
@ WdfDevStatePwrPolObjectCreated
@ WdfDevStatePwrPolWaitingArmedStoppingCancelUsbSS
@ WdfDevStatePwrPolWaitingArmedWakeSucceededCancelUsbSS
@ WdfDevStatePwrPolWakeCapableUsbSSCompleted
@ WdfDevStatePwrPolSystemAsleepWakeArmedNP
@ WdfDevStatePwrPolTimerExpiredWakeCompletedHardwareStarted
@ WdfDevStatePwrPolWakeFailedUsbSS
_In_ UCHAR _In_ UCHAR MinorFunction
_In_ WDFIOTARGET _In_ _Strict_type_match_ WDF_IO_TARGET_SENT_IO_ACTION Action
_IRQL_requires_same_ _In_opt_ PVOID Argument1
#define STATUS_CONTINUE_COMPLETION
#define PO_CB_SYSTEM_STATE_LOCK