Device State D3 and System Wakeup (Windows CE 5.0)
The D3 device state deserves special consideration because it has special semantics not strictly related to its power consumption level. Devices in the D3 state are allowed, but not required, to awaken the system from a suspend state.
The following guidelines help support the D3 state in device drivers:
- Devices that can wake the system from a suspend state should not request the D3 state through DevicePowerNotify. This is because enabling a device as a wake source is not always appropriate, unless the system is going to enter a suspend state. The driver cannot distinguish IOCTL_POWER_SET requests for D3 that it has initiated itself from those initiated by the Power Manager as part of a system power state transition.
- If desired, wake-enabled devices can define D2 and D3 to be identical except for enabling wake functionality.
- Devices that cannot wake the system from a suspend state but that do have a lowest-power mode that can generate device activity are allowed to use D3 in self-management of power.
- If a non-wake-enabled device is in D3 and the system suspends, it should transition to D4 in its XXX_PowerDown (Device Manager) handler and back to D3 in its XXX_PowerUp (Device Manager) handler. If it cannot do this, it should not attempt to support D3, but should transition to D4 when requested to go into D3.
- The above guidelines imply that devices that support D3 are not guaranteed to be able to wake the system from a suspend state.
However, OEMs designing system power states and application developers calling SetPowerRequirement will consider the D3 state as having special properties when the system as a whole suspends. The D3 guidelines outlined here enable OEMs and application developers to request that any device go into D3 during a suspend state without concern for whether or not the device actually supports waking the system.
See Also
Device Power States | DevicePowerNotify | IOCTL_POWER_SET | XXX_PowerDown (Device Manager) | XXX_PowerUp (Device Manager) | SetPowerRequirement
Send Feedback on this topic to the authors