STOR_POFX_DEVICE_V3 structure (storport.h)

The STOR_POFX_DEVICE_V3 structure describes the power attributes of a storage device to the power management framework (PoFx). This structure is similar to STOR_POFX_DEVICE but allows the caller to specify an idle timeout value.

Syntax

typedef struct _STOR_POFX_DEVICE_V3 {
  ULONG               Version;
  ULONG               Size;
  ULONG               ComponentCount;
  ULONG               Flags;
  union {
    ULONG UnitMinIdleTimeoutInMS;
    ULONG AdapterIdleTimeoutInMS;
  };
  ULONG               MinimumPowerCyclePeriodInMS;
  STOR_POFX_COMPONENT Components[ANYSIZE_ARRAY];
} STOR_POFX_DEVICE_V3, *PSTOR_POFX_DEVICE_V3;

Members

Version

The version number of this structure. Set this member to STOR_POFX_DEVICE_VERSION_V3.

Size

The size of this structure. Set this value to STOR_POFX_DEVICE_V3_SIZE.

ComponentCount

The number of elements in the Components array. Set this member to 1. Currently, only a single component is supported for either a storage adapter or logical unit.

Flags

The device power state capabilities flags. The miniport sets one or more of the PoFx device flags to enable or disable power state capabilities. Flags is a bitwise OR combination of the following.

Flag value Meaning
STOR_POFX_DEVICE_FLAG_NO_D0 (0x01) Requests that a power up IRP not be sent to the device object for the adapter or unit.
STOR_POFX_DEVICE_FLAG_NO_D3 (0x02) Requests that a power down IRP not be sent to the device object for the adapter or unit.
STOR_POFX_DEVICE_FLAG_ENABLE_D3_COLD (0x04) Enables Storport to set the D3 Cold state for the adapter if it supports it. This flag applies to adapters only.
STOR_POFX_DEVICE_FLAG_NO_DUMP_ACTIVE (0x08) Indicates whether a device is available for dump when it is idle. The miniport is not able to bring the storage device active in dump mode if the device has entered the idle state or the power off when idle state.
STOR_POFX_DEVICE_FLAG_IDLE_TIMEOUT (0x10) If the STOR_POFX_DEVICE_V3 represents a unit, this flag indicates that the UnitMinIdleTimeoutInMS field should be honored. If the STOR_POFX_DEVICE_V3 represents an adapter, this indicates the AdapterIdleTimeoutInMS field should be honored.
STOR_POFX_DEVICE_FLAG_ADAPTIVE_D3_IDLE_TIMEOUT (0x20) Indicates that Storport should dynamically adjust the D3 idle timeout such that the device can aggressively enter D3 when necessary. This is valid only when STOR_POFX_DEVICE_V3 is used.
STOR_POFX_DEVICE_FLAG_NO_UNIT_REGISTRATION (0x40) Specifies that none of the units exposed by this adapter should be registered for runtime power management. This is valid only for STOR_POFX_DEVICE structures that represent an adapter.
STOR_POFX_DEVICE_FLAG_PERF_STATE_PEP_OPTIONAL (0x80) Indicates the miniport does not require P-State support from the platform extension plug-in (PEP). When in doubt, set this flag.
STOR_POFX_DEVICE_FLAG_NO_IDLE_DEBOUNCE (0x100) Checks how capable the dump version of the miniport is at powering on the device when the device is in lower power states.
STOR_POFX_DEVICE_FLAG_DUMP_ALWAYS_POWER_ON (0x200) The miniport wants the dump stack to attempt to power on the device.
STOR_POFX_DEVICE_FLAG_DISABLE_INTERRUPTS_ON_D3 (0x400) The miniport would like Storport to disable/ enable interrupts on Dx transitions.
STOR_POFX_DEVICE_FLAG_ADAPTER_D3_WAKE (0x800) The miniport isopt-in adapter D3 wake support.
STOR_POFX_DEVICE_FLAG_GET_PERF_STATE_FROM_PEP (0x1000) The miniport requires P-states from the PEP.

UnitMinIdleTimeoutInMS

The minimum idle time in milliseconds for an unit. This value is only valid when STOR_POFX_DEVICE_FLAG_IDLE_TIMEOUT is set in Flags.

AdapterIdleTimeoutInMS

The adapter idle timeout value in milliseconds. This value is only valid when STOR_POFX_DEVICE_FLAG_IDLE_TIMEOUT is set in Flags.

MinimumPowerCyclePeriodInMS

Indicates that the device should not be power cycled (D0 -> D3 -> D0) more than once per the given period in milliseconds. This member is only valid when the STOR_POFX_DEVICE_FLAG_ADAPTIVE_D3_IDLE_TIMEOUT flag has been set.

Components[ANYSIZE_ARRAY]

This member is the first element in an array of one or more STOR_POFX_COMPONENT elements. If the array contains more than one element, the additional elements immediately follow the STOR_POFX_DEVICE structure. The array contains one element for each component in the device. Currently, storage devices have only one component so additional component structures are unnecessary.

Remarks

To register a storage adapter for Storport PoFx support, the miniport driver calls StorPortEnablePassiveInitialization in its HwStorInitialize routine and implements a HwStorPassiveInitializeRoutine. The miniport calls StorPortInitializePoFxPower within it's HwStorPassiveInitializeRoutine to provide information about the adapter component.

To register a storage unit for Storport PoFx support, the miniport driver implements the HwStorUnitControl callback routine and provides handling of the ScsiUnitPoFxPowerInfo unit control code. When the handling the ScsiUnitPoFxPowerInfo control code, the miniport calls StorPortInitializePoFxPower if idle power management for the unit component is enabled.

The component for the storage device identified by its Components array index. Storage devices have only one component so the index of 0 is used. Routines such as StorPortPoFxActivateComponent and StorPortPoFxIdleComponent use the array index of a component to identify the component.

Requirements

Requirement Value
Minimum supported client Windows 10
Header storport.h

See also

STOR_POFX_COMPONENT

STOR_POFX_DEVICE

StorPortInitializePoFxPower

StorPortPoFxActivateComponent

StorPortPoFxIdleComponent