Nota
L'accesso a questa pagina richiede l'autorizzazione. Puoi provare ad accedere o a cambiare directory.
L'accesso a questa pagina richiede l'autorizzazione. Puoi provare a cambiare directory.
A partire da Windows 8, i driver possono chiamare le routine nell'interfaccia GUID_D3COLD_SUPPORT_INTERFACE per determinare le funzionalità D3cold dei dispositivi e per consentire a questi dispositivi di usare D3cold. Le due routine principali in questa interfaccia sono SetD3ColdSupport e GetIdleWakeInfo.
L'interfaccia del driver GUID_D3COLD_SUPPORT_INTERFACE fornisce il supporto per il sotto-stato D3cold dello stato di alimentazione del dispositivo D3. D3 è suddiviso in due sottostate, D3hot e D3cold. D3 è lo stato di alimentazione del dispositivo più basso e D3cold usa meno potenza di D3hot. Un dispositivo può entrare in D3cold solo se il dispositivo stesso, il driver del bus padre e il firmware della piattaforma supportano questo stato. Un dispositivo che supporta D3cold può entrare e uscire da questo stato quando il computer si trova nello stato di alimentazione del sistema S0 (funzionante).
Il driver proprietario dei criteri di alimentazione (PPO) per il dispositivo chiama le routine in questa interfaccia per eseguire le operazioni seguenti:
- Verificare se il dispositivo, il driver del bus padre e il firmware della piattaforma supportano la transizione al sottostato D3cold.
- Determinare se il dispositivo può segnalare un evento di riattivazione al processore quando il dispositivo si trova nello stato secondario D3cold.
- Abilitare e disabilitare le transizioni allo stato secondario D3cold dal dispositivo.
Per eseguire una query per questa interfaccia, un driver di dispositivo invia un IRP_MN_QUERY_INTERFACE IRP nello stack di driver. Per questo IRP, il driver imposta il parametro di input InterfaceType su GUID_D3COLD_SUPPORT_INTERFACE. Al completamento con successo dell'IRP, il parametro di output Interface è un puntatore a una struttura D3COLD_SUPPORT_INTERFACE. Questa struttura contiene puntatori alle routine nell'interfaccia .
Per altre informazioni sullo stato di alimentazione del dispositivo D3cold, vedere Supporto di D3cold in un driver.
Un driver chiama la routine SetD3ColdSupport per abilitare e disabilitare dinamicamente le transizioni di un dispositivo a D3cold che possono verificarsi quando il computer si trova in S0. Se il dispositivo deve essere in grado di segnalare un evento di riattivazione da qualsiasi stato Dx a basso consumo immesso dal dispositivo, il driver deve consentire al dispositivo di immettere D3cold solo se il dispositivo può segnalare gli eventi di riattivazione da D3cold. In caso contrario, dopo che il dispositivo entra in D3cold, potrebbe non essere disponibile fino a quando il computer non lascia lo stato S0.
Per impostazione predefinita, prima della prima chiamata alla routine SetD3ColdSupport, le transizioni da D3hot a D3cold sono disabilitate. Per modificare questa impostazione predefinita in modo che le transizioni D3hot-to-D3cold siano abilitate prima della prima chiamata a SetD3ColdSupport , il pacchetto driver per il dispositivo può includere le due righe seguenti nella sezione DDInstall.HW del file INF che installa il driver:
Include = machine.inf
Needs = PciD3ColdSupported
La routine GetIdleWakeInfo consente al driver di un dispositivo di individuare gli stati di alimentazione del dispositivo da cui il dispositivo può segnalare un evento di riattivazione quando il computer si trova in un determinato stato di alimentazione del sistema. Il chiamante di questa routine specifica uno stato di alimentazione del sistema come parametro di input e, come parametro di output, la routine segnala lo stato di alimentazione del dispositivo più basso da cui il dispositivo può segnalare un evento di attesa quando il computer si trova nello stato di alimentazione del sistema specificato. Ad esempio, la routine GetIdleWakeInfo può indicare al driver se il dispositivo può segnalare un evento di riattivazione da D3cold quando il computer si trova in S0.
La routine GetIdleWakeInfo fornisce informazioni di riattivazione del dispositivo più complete rispetto a quelle disponibili nella richiesta di IRP_MN_QUERY_CAPABILITIES . Questa richiesta, che tutte le versioni di Windows supportano, fornisce una struttura DEVICE_CAPABILITIES che descrive le funzionalità di un dispositivo. Il membro DeviceWake di questa struttura contiene un subset delle informazioni disponibili nella routine GetIdleWakeInfo . Questo membro indica lo stato di alimentazione del dispositivo più basso da cui un dispositivo può segnalare un evento di attesa. Le informazioni contenute in questo membro sono sicuramente accurate solo se il computer si trova nello stato di basso consumo di sistema indicato dal membro SystemWake della struttura. Se SystemWake = PowerSystemSleeping3, le informazioni in DeviceWake sono note come valide per S3, potrebbero essere spesso valide per S1 e S2 e potrebbero anche essere valide per S0.
Tuttavia, come procedura consigliata, un driver non deve presupporre che le informazioni nel metodo DeviceWake siano valide per qualsiasi stato di alimentazione del sistema diverso dallo stato indicato da SystemWake. Per alcuni dispositivi, lo stato Dx più basso da cui un dispositivo può segnalare un evento di riattivazione varia a seconda che il computer sia in stato di lavoro S0 o in uno stato a basso consumo (S1, S2, S3 o S4). Per altri dispositivi, gli autobus a cui sono connessi i dispositivi possono gestire i segnali di riattivazione quando il computer è in S0, ma i dispositivi non possono. Solo la routine GetIdleWakeInfo può descrivere in modo accurato le funzionalità di riattivazione del dispositivo di questi dispositivi.
Ad esempio, la specifica PCI Express Base 3.0 definisce due meccanismi separati per segnalare gli eventi di riattivazione: un meccanismo viene usato quando il collegamento PCI Express (bus) è attivato e l'altro viene usato quando il collegamento viene disattivato. Quando il collegamento è attivato, il dispositivo invia un flusso di pacchetti PM_PME del livello di transazione (TLP) per segnalare che il dispositivo deve passare da uno stato Dx a basso consumo energetico a D0. Quando il collegamento è disattivato, il dispositivo richiede che il collegamento sia attivato in modo che il dispositivo possa inviare PM_PME TLP. Per richiedere l'attivazione del collegamento, il dispositivo invia il segnale WAKE# (per la tipologia di dispositivo più comune) o utilizza il meccanismo di "beaconing" (meno comune).
La specifica PCI Express richiede che tutti i dispositivi che annunciano la possibilità di segnalare gli eventi di risparmio energia da D3cold implementano entrambi questi meccanismi di riattivazione del dispositivo, ma uno sviluppatore di driver potrebbe dover abilitare un dispositivo che non implementa correttamente questi meccanismi.
Se il dispositivo può correttamente recapitare i TLP PM_PME quando il collegamento è attivato, il driver può consentire al dispositivo di entrare in D3hot quando il computer è in S0. Se il dispositivo è in grado di asserire correttamente il segnale WAKE# per attivare il collegamento e poi utilizzare i TLP PM_PME per avviare la transizione a D0, il driver può consentire al dispositivo di passare a D3cold quando il computer è in S0.
Tuttavia, il driver non deve consentire al dispositivo di immettere D3hot o D3cold se il firmware di sistema (BIOS) non può garantire che i meccanismi di riattivazione del dispositivo PCI Express siano gestiti correttamente dalla piattaforma hardware. Un driver può chiamare la routine GetIdleWakeInfo per determinare se le attestazioni del firmware supportano questi meccanismi. Se un driver usa Kernel-Mode Driver Framework (KMDF) 1.11 o versione successiva, un'alternativa pratica alla chiamata a GetIdleWakeInfo consiste nel consentire al metodo WdfDeviceAssignS0IdleSettings di consentire al dispositivo di inattività nello stato Dx più basso da cui il dispositivo può segnalare un evento di riattivazione.