/*++
Copyright (c) Microsoft. All rights reserved.
Module Name:
PowerPolicyStateMachine.cpp
Abstract:
This module implements the Power Policy state machine for the driver
framework. This code was split out from FxPkgPnp.cpp.
Author:
Environment:
Both kernel and user mode
Revision History:
--*/
#include "pnppriv.hpp"
#if FX_IS_KERNEL_MODE
#include <usbdrivr.h>
#endif
#include "FxUsbIdleInfo.hpp"
extern "C" {
#if defined(EVENT_TRACING)
#include "PowerPolicyStateMachine.tmh"
#endif
}
//
// The Power Policy State Machine
//
// This state machine responds to the following events:
//
// PowerUp
// PowerDown
// PowerPolicyStart
// PowerPolicyStop
// IRP_MN_SET_POWER -- System State S0
// IRP_MN_SET_POWER -- System State Sx
// PowerTimeoutExpired
// IoPresent
// IRP_MN_WAIT_WAKE Complete
// IRP_MN_WAIT_WAKE Failed
//
#if FX_SUPER_DBG
#define ASSERT_PWR_POL_STATE(_This, _State) \
ASSERT((_This)->m_Device->GetDevicePowerPolicyState() == (_State))
#else
#define ASSERT_PWR_POL_STATE(_This, _State) (0)
#endif
#if FX_STATE_MACHINE_VERIFY
#define VALIDATE_PWR_POL_STATE(_CurrentState, _NewState) \
ValidatePwrPolStateEntryFunctionReturnValue((_CurrentState), (_NewState))
#else
#define VALIDATE_PWR_POL_STATE(_CurrentState, _NewState) (0)
#endif //FX_STATE_MACHINE_VERIFY
//
// Define to control whether Directed power transitions (DFx) should be
// supported for devices that are not idle-capable. By default, directed
// transitions are not supported for such devices. They can be enabled for
// testing purposes though.
//
// #define WDF_ALLOW_DFX_FOR_NON_IDLE_CAPABLE_DEVICES
// @@SMVERIFY_SPLIT_BEGIN
const POWER_POLICY_EVENT_TARGET_STATE FxPkgPnp::m_PowerPolObjectCreatedOtherStates[] =
{
{ PwrPolRemove, WdfDevStatePwrPolRemoved DEBUGGED_EVENT },
{ PwrPolNull, WdfDevStatePwrPolNull },
};
const POWER_POLICY_EVENT_TARGET_STATE FxPkgPnp::m_PowerPolStartingOtherStates[] =
{
{ PwrPolPowerUpFailed, WdfDevStatePwrPolStartingFailed DEBUGGED_EVENT },
{ PwrPolNull, WdfDevStatePwrPolNull },
};
const POWER_POLICY_EVENT_TARGET_STATE FxPkgPnp::m_PowerPolStartedIdleCapableOtherStates[] =
{
{ PwrPolSx, WdfDevStatePwrPolStartedIdleCapableCancelTimerForSleep DEBUGGED_EVENT },
{ PwrPolStop, WdfDevStatePwrPolStoppingCancelTimer DEBUGGED_EVENT },
{ PwrPolSurpriseRemove,WdfDevStatePwrPolStoppingCancelTimer DEBUGGED_EVENT },
{ PwrPolS0IdlePolicyChanged, WdfDevStatePwrPolStartedCancelTimer DEBUGGED_EVENT },
{ PwrPolDeviceDirectedPowerDown, WdfDevStatePwrPolStartedIdleCapableCancelTimerForSleep DEBUGGED_EVENT },
{ PwrPolNull, WdfDevStatePwrPolNull },
};
const POWER_POLICY_EVENT_TARGET_STATE FxPkgPnp::m_PowerPolIdleCapableDeviceIdleOtherStates[] =
{
{ PwrPolSx, WdfDevStatePwrPolDeviceIdleSleeping DEBUGGED_EVENT },
{ PwrPolStop, WdfDevStatePwrPolDeviceIdleStopping DEBUGGED_EVENT },
{ PwrPolSurpriseRemove,WdfDevStatePwrPolDeviceIdleStopping DEBUGGED_EVENT },
{ PwrPolS0IdlePolicyChanged, WdfDevStatePwrPolDeviceIdleReturnToActive DEBUGGED_EVENT },
{ PwrPolIoPresent, WdfDevStatePwrPolDeviceIdleReturnToActive DEBUGGED_EVENT },
{ PwrPolDeviceDirectedPowerDown, WdfDevStatePwrPolIdleCapableDirectedDownTriggerDPNR DEBUGGED_EVENT },
{ PwrPolNull, WdfDevStatePwrPolNull },
};
const POWER_POLICY_EVENT_TARGET_STATE FxPkgPnp::m_PowerPolTimerExpiredNoWakeOtherStates[] =
{
{ PwrPolPowerDown, WdfDevStatePwrPolTimerExpiredNoWakePowerDownNotProcessed TRAP_ON_EVENT },
{ PwrPolNull, WdfDevStatePwrPolNull },
};
const POWER_POLICY_EVENT_TARGET_STATE FxPkgPnp::m_PowerPolTimerExpiredNoWakeCompletePowerDownOtherStates[] =
{
{ PwrPolPowerDownFailed, WdfDevStatePwrPolDevicePowerRequestFailed DEBUGGED_EVENT },
{ PwrPolNull, WdfDevStatePwrPolNull },
};
const POWER_POLICY_EVENT_TARGET_STATE FxPkgPnp::m_PowerPolWaitingUnarmedOtherStates[] =
{
{ PwrPolSx, WdfDevStatePwrPolSystemSleepFromDeviceWaitingUnarmed DEBUGGED_EVENT },
{ PwrPolStop, WdfDevStatePwrPolStoppingResetDevice DEBUGGED_EVENT },
{ PwrPolSurpriseRemove, WdfDevStatePwrPolStoppingCancelTimer DEBUGGED_EVENT },
{ PwrPolS0IdlePolicyChanged, WdfDevStatePwrPolS0NoWakePowerUp DEBUGGED_EVENT },
{ PwrPolDevicePowerRequired, WdfDevStatePwrPolS0NoWakePowerUp DEBUGGED_EVENT },
{ PwrPolNull, WdfDevStatePwrPolNull },
};
const POWER_POLICY_EVENT_TARGET_STATE FxPkgPnp::m_PowerPolS0NoWakePowerUpOtherStates[] =
{
{ PwrPolPowerUpFailed, WdfDevStatePwrPolDevicePowerRequestFailed DEBUGGED_EVENT },
{ PwrPolPowerUpNotSeen, WdfDevStatePwrPolDeviceD0PowerRequestFailed TRAP_ON_EVENT },
{ PwrPolNull, WdfDevStatePwrPolNull },
};
const POWER_POLICY_EVENT_TARGET_STATE FxPkgPnp::m_PowerPolS0NoWakeCompletePowerUpOtherStates[] =
{
{ PwrPolPowerUpFailed, WdfDevStatePwrPolDevicePowerRequestFailed DEBUGGED_EVENT },
{ PwrPolNull, WdfDevStatePwrPolNull },
};
const POWER_POLICY_EVENT_TARGET_STATE FxPkgPnp::m_PowerPolSystemSleepNeedWakeOtherStates[] =
{
{ PwrPolPowerUpFailed, WdfDevStatePwrPolSystemSleepPowerRequestFailed DEBUGGED_EVENT },
{ PwrPolPowerUpNotSeen, WdfDevStatePwrPolPowerUpForSystemSleepNotSeen TRAP_ON_EVENT },
{ PwrPolNull, WdfDevStatePwrPolNull },
};
const POWER_POLICY_EVENT_TARGET_STATE FxPkgPnp::m_PowerPolSystemSleepNeedWakeCompletePowerUpOtherStates[] =
{
{ PwrPolPowerUpFailed, WdfDevStatePwrPolSystemSleepPowerRequestFailed DEBUGGED_EVENT },
{ PwrPolNull, WdfDevStatePwrPolNull },
};
const POWER_POLICY_EVENT_TARGET_STATE FxPkgPnp::m_PowerPolSystemAsleepWakeArmedOtherStates[] =
{
{ PwrPolWakeSuccess, WdfDevStatePwrPolSystemWakeDeviceWakeTriggered DEBUGGED_EVENT },
{ PwrPolWakeInterruptFired, WdfDevStatePwrPolSystemWakeDeviceWakeInterruptFired DEBUGGED_EVENT },
{ PwrPolNull, WdfDevStatePwrPolNull },
};
const POWER_POLICY_EVENT_TARGET_STATE FxPkgPnp::m_PowerPolSystemAsleepWakeArmedNPOtherStates[] =
{
{ PwrPolWakeSuccess, WdfDevStatePwrPolSystemWakeDeviceWakeTriggeredNP DEBUGGED_EVENT },
{ PwrPolWakeInterruptFired, WdfDevStatePwrPolSystemWakeDeviceWakeInterruptFiredNP TRAP_ON_EVENT },
{ PwrPolNull, WdfDevStatePwrPolNull },
};
const POWER_POLICY_EVENT_TARGET_STATE FxPkgPnp::m_PowerPolSystemWakeDeviceToD0OtherStates[] =
{
{ PwrPolPowerUpFailed, WdfDevStatePwrPolSystemWakeDevicePowerRequestFailed DEBUGGED_EVENT },
{ PwrPolPowerUpNotSeen, WdfDevStatePwrPolSystemWakeDeviceD0PowerRequestFailed TRAP_ON_EVENT },
{ PwrPolNull, WdfDevStatePwrPolNull },
};
const POWER_POLICY_EVENT_TARGET_STATE FxPkgPnp::m_PowerPolSystemWakeDeviceToD0CompletePowerUpOtherStates[] =
{
{ PwrPolPowerUpFailed, WdfDevStatePwrPolDevicePowerRequestFailed DEBUGGED_EVENT },
{ PwrPolNull, WdfDevStatePwrPolNull },
};
const POWER_POLICY_EVENT_TARGET_STATE FxPkgPnp::m_PowerPolStartedWakeCapableOtherStates[] =
{
{ PwrPolSx, WdfDevStatePwrPolStartedWakeCapableCancelTimerForSleep DEBUGGED_EVENT },
{ PwrPolStop, WdfDevStatePwrPolStoppingCancelTimer DEBUGGED_EVENT },
{ PwrPolSurpriseRemove, WdfDevStatePwrPolStoppingCancelTimer DEBUGGED_EVENT },
{ PwrPolS0IdlePolicyChanged, WdfDevStatePwrPolStartedCancelTimer DEBUGGED_EVENT },
{ PwrPolDeviceDirectedPowerDown, WdfDevStatePwrPolStartedWakeCapableCancelTimerForSleep DEBUGGED_EVENT },
{ PwrPolNull, WdfDevStatePwrPolNull },
};
const POWER_POLICY_EVENT_TARGET_STATE FxPkgPnp::m_PowerPolWakeCapableDeviceIdleOtherStates[] =
{
{ PwrPolSx, WdfDevStatePwrPolDeviceIdleSleeping DEBUGGED_EVENT },
{ PwrPolStop, WdfDevStatePwrPolDeviceIdleStopping TRAP_ON_EVENT },
{ PwrPolSurpriseRemove,WdfDevStatePwrPolDeviceIdleStopping DEBUGGED_EVENT },
{ PwrPolS0IdlePolicyChanged, WdfDevStatePwrPolDeviceIdleReturnToActive TRAP_ON_EVENT },
{ PwrPolIoPresent, WdfDevStatePwrPolDeviceIdleReturnToActive DEBUGGED_EVENT },
{ PwrPolDeviceDirectedPowerDown, WdfDevStatePwrPolWakeCapableDirectedDownTriggerDPNR DEBUGGED_EVENT },
{ PwrPolNull, WdfDevStatePwrPolNull },
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
Windows驱动开发框架WDF源码,来自微软Github (1193个子文件)
probeandlock.c 1KB
powerpolicystatemachine.cpp 322KB
vfwdfdynamics.cpp 225KB
fxpkgpnp.cpp 203KB
fxioqueue.cpp 188KB
powerstatemachine.cpp 151KB
vfwdfdynamics.cpp 135KB
pnpstatemachine.cpp 131KB
fxrequestapi.cpp 101KB
fxchildlist.cpp 99KB
fxdeviceapi.cpp 86KB
fxrequest.cpp 86KB
fxiotarget.cpp 76KB
fxdeviceinitapi.cpp 73KB
fxusbdevice.cpp 67KB
fxdevice.cpp 64KB
fxpkggeneral.cpp 60KB
fxiotargetapi.cpp 58KB
fxdeviceum.cpp 58KB
fxusbpipe.cpp 55KB
globals.cpp 54KB
fxwmiirphandler.cpp 52KB
interruptobject.cpp 52KB
fxpkgio.cpp 50KB
fxpkgpdo.cpp 47KB
pnpcallbacks.cpp 46KB
poweridlestatemachine.cpp 46KB
fxdeviceapium.cpp 44KB
fxregistryapi.cpp 43KB
fxdmatransactionapi.cpp 41KB
fxusbdeviceapi.cpp 40KB
fxpkgfdo.cpp 37KB
fxioqueueapi.cpp 37KB
fxdmatransactionpacket.cpp 37KB
fxobject.cpp 36KB
fxdmaenabler.cpp 36KB
fxusbdevicekm.cpp 33KB
fxpkgpnpkm.cpp 33KB
fxobjectstatemachine.cpp 33KB
fxirpum.cpp 33KB
fxbugcheckcallback.cpp 33KB
fxcxdeviceinitapi.cpp 32KB
fxusbinterface.cpp 31KB
fxinterruptapi.cpp 31KB
fxdmatransactionbase.cpp 31KB
fxresourceapi.cpp 30KB
fxdevicekm.cpp 29KB
fxusbdeviceum.cpp 29KB
fxverifierlock.cpp 27KB
fxchildlistapi.cpp 26KB
vfeventhooks.cpp 25KB
fxrequestkm.cpp 24KB
poxinterface.cpp 24KB
fxlibrarycommon.cpp 24KB
fxusbpipeapi.cpp 23KB
fxdeviceapikm.cpp 23KB
interruptobjectum.cpp 23KB
fxirpqueue.cpp 23KB
fxiotargetremote.cpp 23KB
fxrequestbase.cpp 22KB
version.cpp 21KB
fxdriverum.cpp 21KB
fxresourcecollectionum.cpp 21KB
fxtimer.cpp 20KB
fxtelemetrykm.cpp 20KB
fxlibrarycommon.cpp 20KB
fxdriver.cpp 20KB
handleapi.cpp 20KB
wdfpool.cpp 20KB
fxwmiinstance.cpp 20KB
fxdriverapi.cpp 20KB
usbutil.cpp 19KB
verifier.cpp 19KB
fxiotargetremoteum.cpp 19KB
fxresourcecollection.cpp 18KB
tracingifrreplay.cpp 18KB
tracingum.cpp 18KB
devicepwrreqstatemachine.cpp 17KB
poxinterfacekm.cpp 16KB
notpowerpolicyownerstatemachine.cpp 16KB
fxdmaenablerapi.cpp 16KB
cxpnppowercallbacks.cpp 16KB
selfmanagediostatemachine.cpp 15KB
fxfileobject.cpp 15KB
fxpkgfdokm.cpp 15KB
fxdmatransactionscattergather.cpp 15KB
fxiotargetkm.cpp 15KB
fxioqueuekm.cpp 15KB
tracing.cpp 14KB
interruptobjectkm.cpp 14KB
fxwmiprovider.cpp 14KB
wakeinterruptstatemachine.cpp 13KB
fxworkitem.cpp 13KB
fxdeviceinterfaceapi.cpp 13KB
fxtelemetryum.cpp 13KB
fxsystemthread.cpp 13KB
fdopower.cpp 13KB
fxtransactionedlist.cpp 13KB
fxdevicepdoapi.cpp 12KB
fxusbinterfaceapi.cpp 12KB
共 1193 条
- 1
- 2
- 3
- 4
- 5
- 6
- 12
资源评论
fangshy
- 粉丝: 133
- 资源: 11
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功