Supporting Functional Power States

Starting in Windows 8, the power manager includes the run-time power management framework (PoFx). PoFx supports power and clock management at the component (or subdevice) level.

Starting in KMDF version 1.11, KMDF drivers can take advantage of the fine-grained power control that PoFx offers. In particular, a KMDF driver can define multiple logical components within a single device, each of which can be independently power managed.

For example, a function driver might define a unique set of functional power states for each logical component of a device. Similar to device and system power states, F0 indicates that the component is fully on, while optional states F1, F2, and so on indicate progressively lower power states. To support Fx states, a driver must be the power policy owner for the device.

The following table summarizes framework support for different functional power state scenarios.

Type KMDF Support UMDF Support When to use/how to Implement

Single component, single state (F0)

Supported

Supported

When you want the power engine plug-in (PEP) to determine the idle timeout value, and your driver has only one F-state.

Call WdfDeviceAssignS0IdleSettings with IdleTimeoutType = SystemManagedIdleTimout or SystemManagedIdleTimoutWithHint.

Single component, multiple states (F0, F1, F2…)

Supported

Not supported

When your driver has more than one F-state.

In this case, KMDF handles most interactions with the PoFx.

For sample code, see PoFx sample drivers.

Multiple components, single or multiple states

Supported using WDM interfaces

Not supported

When your driver has multiple components. In this case, you must use the PoFx interfaces directly.

For sample code, see PoFx sample drivers.

Because KMDF adds minimal abstraction on top of PoFx, it is helpful to have a basic understanding of PoFx before writing your driver. Accordingly, we recommend that you read Overview of the Power Management Framework before reading these topics.