WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS struttura (wdfdevice.h)

[Si applica a KMDF e UMDF]

La struttura WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS contiene informazioni fornite dal driver usate dal framework quando un dispositivo è inattiva e il sistema si trova nello stato di lavoro del sistema (S0).

Sintassi

typedef struct _WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS {
  ULONG                                 Size;
  WDF_POWER_POLICY_S0_IDLE_CAPABILITIES IdleCaps;
  DEVICE_POWER_STATE                    DxState;
  ULONG                                 IdleTimeout;
  WDF_POWER_POLICY_S0_IDLE_USER_CONTROL UserControlOfIdleSettings;
  WDF_TRI_STATE                         Enabled;
  WDF_TRI_STATE                         PowerUpIdleDeviceOnSystemWake;
  WDF_POWER_POLICY_IDLE_TIMEOUT_TYPE    IdleTimeoutType;
  WDF_TRI_STATE                         ExcludeD3Cold;
} WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS, *PWDF_DEVICE_POWER_POLICY_IDLE_SETTINGS;

Members

Size

Dimensione, in byte, della struttura.

IdleCaps

Enumeratore WDF_POWER_POLICY_S0_IDLE_CAPABILITIES tipizzato che identifica la capacità del dispositivo di riattivarsi dopo essere stato impostato su uno stato a bassa potenza, mentre il sistema rimane nello stato di lavoro (S0).

DxState

Enumeratore DEVICE_POWER_STATE tipizzato che identifica lo stato di alimentazione del dispositivo basso immesso dal dispositivo dopo il termine del periodo di timeout inattiva. DEVICE_POWER_STATE valori sono definiti in wdm.h.

IdleTimeout

La quantità di tempo, in millisecondi, che il dispositivo rimarrà inattiva prima che il framework lo inserisca nello stato di bassa potenza fornito da DxState. Per usare il valore di timeout di inattività predefinito del framework, specificare IdleTimeoutDefaultValue. Per altre informazioni su quando il framework considera il dispositivo inattivo, vedere Supporto di Power-Down inattivo.

UserControlOfIdleSettings

Enumeratore WDF_POWER_POLICY_S0_IDLE_USER_CONTROL tipizzato che indica se gli utenti hanno la possibilità di modificare le impostazioni inattive del dispositivo.

Enabled

Enumeratore WDF_TRI_STATE tipizzato che indica se il dispositivo verrà spento se rimane inattivo e mentre la potenza del sistema è in corrispondenza di S0. Questo membro può avere uno dei valori seguenti:

WdfTrue : l'alimentazione è abilitata.

WdfFalse : l'alimentazione inattiva è disabilitata.

WdfUseDefault : il risparmio di energia è inizialmente abilitato per impostazione predefinita; ma se il membro UserControlOfIdleSettings è impostato su IdleAllowUserControl, l'impostazione dell'utente o il file INF dell'utente esegue l'override del valore iniziale.

Se l'alimentazione è abilitata, il dispositivo ha una funzionalità di riattivazione e il valore di timeout inattivo scade, il framework chiama la funzione di callback EvtDeviceArmWakeFromS0 del driver prima che il dispositivo entri in uno stato di bassa potenza.

PowerUpIdleDeviceOnSystemWake

Enumeratore WDF_TRI_STATE tipizzato che indica se il dispositivo restituirà lo stato di lavoro (D0) quando il sistema torna allo stato di lavoro (S0). Questo membro è valido solo se il driver imposta il membro IdleCaps su IdleCannotWakeFromS0. Il membro PowerUpIdleDeviceOnSystemWake può avere uno dei valori seguenti:

WdfTrue : se sia il dispositivo che il sistema si trovano in uno stato di bassa potenza, il dispositivo restituisce lo stato di funzionamento quando il sistema restituisce lo stato di lavoro.

WdfFalse : se sia il dispositivo che il sistema si trovano in uno stato di bassa potenza, il dispositivo rimane nello stato di bassa potenza quando il sistema torna allo stato di funzionamento.

WdfUseDefault : valore predefinito usato dal framework se il driver non imposta un valore diverso. Questo valore ha lo stesso significato di WdfFalse.

Se il membro PowerUpIdleDeviceOnSystemWake è impostato su WdfFalse o WdfUseDefault, il dispositivo restituisce lo stato di lavoro solo quando il software accede al dispositivo, ad esempio quando un'applicazione invia una richiesta di I/O al dispositivo. Per altre informazioni, vedere Un dispositivo restituisce lo stato di lavoro.

Il membro PowerUpIdleDeviceOnSystemWake è disponibile nella versione 1.9 e versioni successive di KMDF e a partire dalla versione 2.0 di UMDF.

IdleTimeoutType

Enumeratore WDF_POWER_POLICY_IDLE_TIMEOUT_TYPE tipizzato che indica come viene usato il membro IdleTimeout .

Il membro IdleTimeoutType è disponibile nella versione 1.11 e versioni successive di KMDF e a partire dalla versione 2.0 di UMDF. Vedere altre informazioni nelle osservazioni.

ExcludeD3Cold

Un enumeratore WDF_TRI_STATE tipizzato che indica se lo stato di alimentazione D3cold deve essere una scelta consentita per lo stato di bassa potenza immesso dal dispositivo quando scade il periodo di timeout di inattività. Il membro ExcludeD3Cold può avere uno dei valori seguenti:

WdfTrue : il framework sposta un dispositivo in uno stato D di bassa potenza quando scade il periodo di timeout inattiva. Se tale stato D è D3, il dispositivo verrà spostato in D3hot. Se ExcludeD3Cold è impostato su WdfTrue, non sarà consentita alcuna ulteriore transizione da D3hot a D3cold.

WdfFalse : il dispositivo può immettere lo stato di alimentazione D3cold quando il periodo di timeout inattiva scade, se vengono soddisfatti tutti i criteri seguenti:

  • Il membro DxState di questa struttura specifica PowerDeviceD3 o PowerDeviceMaximum.
  • Il firmware ACPI indica che il dispositivo supporta lo stato di alimentazione D3cold.
  • Se il driver specificato IdleCanWakeFromS0 o IdleUsbSelectiveSuspend nel membro IdleCaps di questa struttura, il dispositivo può rispondere a un evento di riattivazione esterno durante lo stato di alimentazione D3cold. In caso contrario, questo requisito non si applica.
WdfUseDefault : il framework esamina DDInstall. Sezione HW del file INF del driver. Se le righe seguenti sono presenti, questo valore ha lo stesso significato di WdfFalse:
Include = machine.inf
Needs = PciD3ColdSupported
In caso contrario, questo valore ha lo stesso significato di WdfTrue.

Il membro ExcludeD3Cold è disponibile a partire dalla versione 1.11 di KMDF, nonché a partire dalla versione 2.0 di UMDF e viene ignorato nei sistemi operativi precedenti alla Windows 8. Vedere altre informazioni nelle osservazioni.

Commenti

La struttura WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS viene usata come input per WdfDeviceAssignS0IdleSettings.

La prima volta che un driver chiama WdfDeviceAssignS0IdleSettings, si verificano le azioni seguenti:

  • Il framework archivia i valori di tutti i membri della struttura WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS .
  • Se il membro UserControlOfIdleSettings è impostato su IdleAllowUserControl e se il membro Abilitato è impostato su WdfUseDefault, il framework legge il Registro di sistema per scoprire se l'utente ha abilitato l'alimentazione del dispositivo quando è inattivo.
Durante le chiamate successive a WdfDeviceAssignS0IdleSettings, il framework archivia solo i valori dei membri DxState, IdleTimeout e Enabled . Inoltre, in KMDF 1.9 e versioni precedenti, il framework archivia il valore del membro IdleCapsa meno che il valore non sia IdleUsbSelectiveSuspend. Pertanto, il driver deve usare le regole seguenti:
  • Se il driver specifica IdleUsbSelectiveSuspend per il valore del membro IdleCaps , deve farlo la prima volta che chiama WdfDeviceAssignS0IdleSettings e non può successivamente modificare tale valore.
  • Se il driver specifica IdleCanWakeFromS0 o IdleCannotWakeFromS0 la prima volta che chiama WdfDeviceAssignS0IdleSettings, può successivamente chiamare WdfDeviceAssignAssignS0IdleSettings per modificare tale valore (ma non può modificare il valore in IdleUsbSelectiveSuspend).

A partire da KMDF 1.11 e UMDF 2.0, un driver KMDF può passare da IdleUsbSelectiveSuspend e IdleCannotWakeFromS0 in qualsiasi momento.

A partire da Windows 8, l'impostazione del membro IdleTimeoutType su SystemManagedIdleTimeout o SystemManagedIdleTimeoutWithHint causa la registrazione del framework con il framework di risparmio energia (PoFx).

Se il driver implementa il supporto dello stato di alimentazione funzionale per un dispositivo a più componenti, il driver deve impostare IdleTimeoutType su DriverManagedIdleTimeout o non chiamare WdfDeviceAssignS0IdleSettings .

Per altre informazioni, vedere Supporto degli stati di alimentazione funzionale e panoramica di Power Management Framework.

Le regole seguenti si applicano al valore specificato per il membro DxState :

  • Il valore non può essere PowerDeviceD0.
  • Per i dispositivi USB, il valore non può essere PowerDeviceD0 o PowerDeviceD3.
  • Se si specifica PowerDeviceMaximum, il framework usa il valore fornito dal driver per il bus del dispositivo nel membro DeviceWake della relativa struttura WDF_DEVICE_POWER_CAPABILITIES .
  • Se il valore del membro IdleCaps è IdleCanWakeFromS0, non è possibile specificare uno stato di alimentazione del dispositivo inferiore allo stato di alimentazione del dispositivo nel membro DeviceWake della struttura WDF_DEVICE_POWER_CAPABILITIES del driver del bus. In altre parole, se il valore deviceWake del driver del bus è PowerDeviceD2, il valore DxState del driver di funzione non può essere PowerDeviceD3.
Nei sistemi operativi precedenti alla Windows 8, lo stato di alimentazione D3 indica che il dispositivo è in uno stato di bassa potenza, ma che alcune potenza per il bus sono ancora mantenute. A partire da Windows 8, l'ex stato di alimentazione D3 è chiamato D3hot e è disponibile un nuovo stato di alimentazione (D3cold). Un dispositivo può immettere lo stato D3cold mentre il sistema si trova nello stato di lavoro (S0) o in uno stato a bassa potenza. Quando un dispositivo si trova nello stato di alimentazione D3cold, il bus è inattivo e il dispositivo deve attivare il proprio segnale di riattivazione quando un'azione esterna (ad esempio la connessione in un cavo di rete) causa un evento hardware.

A partire da KMDF 1.11 e UMDF 2.0, un dispositivo che supporta il risparmio di energia inattivo può usare il membro ExcludeD3Cold di questa struttura per specificare se lo stato di alimentazione D3cold deve essere una scelta consentita per lo stato di alimentazione basso del dispositivo immesso dopo il termine del timeout inattivo.

Per informazioni sulle voci del Registro di sistema che controllano le funzionalità inattive di un dispositivo, vedere Controllo utente dell'inattività del dispositivo e comportamento di riattivazione.

Per inizializzare la struttura WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS , il driver deve chiamare WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS_INIT.

Requisiti

Requisito Valore
Versione KMDF minima 1.0
Versione UMDF minima 2,0
Intestazione wdfdevice.h (includere Wdf.h)