Gestione delle prestazioni di prossimità nei campi vicini (NFP) per le piattaforme di standby moderne
Un dispositivo NFP (Near-Field Prossimità) è un dispositivo radio/ricevitore a breve intervallo che consente a un PC Windows di associare e associare altri computer dotati di NFP.
Un dispositivo NFP viene esposto al sistema operativo Windows tramite l'interfaccia GUID_DEVINTERFACE_NFP Plug and Play (PnP). Un driver di terze parti, fornito dal fornitore di dispositivi NFP, è responsabile dell'implementazione dell'interfaccia di GUI_DEVINTERFACE_NFP e della gestione della potenza del dispositivo NFP fisico. Il dispositivo NFP è in genere connesso ai pin dell'interfaccia I2C del sistema su un chip (SoC) o un core silicon.
In genere, il dispositivo NFP può immettere una modalità a bassa potenza (modalità standby o modalità di alimentazione rimossa) quando non sono presenti pubblicazioni o sottoscrizioni di prossimità o tutte le pubblicazioni e le sottoscrizioni sono disabilitate. Dal punto di vista dello sviluppo del driver, questa condizione si verifica quando non sono presenti handle in sospeso nel dispositivo. Il dispositivo NFP deve essere inserito in modalità standby o in modalità di alimentazione rimossa quando non vengono aperti e abilitati gli handle per il dispositivo.
Quando la piattaforma entra in Standby moderno e lo schermo viene disattivato, il dispositivo NFP deve immettere la modalità standby o la modalità di alimentazione rimossa. Se il consumo di energia di un dispositivo NFP in modalità standby è maggiore di un milliwatt in media, il dispositivo deve immettere una modalità a 0 watt, rimossa dall'alimentazione.
Il driver di dispositivo NFP non viene avvisato direttamente quando la piattaforma entra ed esce da Standby moderno. Windows invia invece una notifica al driver indirettamente disabilitando gli handle al driver all'ingresso in Standby moderno e abilitando questi stessi handle all'uscita dallo standby moderno. Dopo che la piattaforma entra in Standby moderno, Windows invia una notifica di disabilitazione a ogni handle aperto non già disabilitato. Quando la piattaforma chiude lo standby moderno, Windows invia una notifica di abilitazione a ogni handle disabilitato in precedenza. Un handle aperto già disabilitato prima dell'immissione di Modern Standby rimane disabilitato dopo l'uscita da Modern Standby.
Modalità di risparmio energia del dispositivo
A partire da Windows 8, si prevede che un dispositivo NFP per una piattaforma di standby moderno disponga di tre modalità di alimentazione, attiva, inattiva e standby, oltre a una modalità di alimentazione rimossa (in cui tutti gli input di alimentazione al dispositivo NFP sono stati disattivati da un meccanismo hardware esterno al dispositivo). Per informazioni dettagliate sulle modalità di risparmio energia supportate dal dispositivo, contattare il fornitore dell'hardware per un dispositivo NFP.
Nella tabella seguente vengono descritte le modalità di alimentazione del dispositivo per un dispositivo NFP.
Modalità di alimentazione del dispositivo | Descrizione | Consumo medio di energia elettrica | Uscire dalla latenza per l'attività | Meccanismo di transizione |
---|---|---|---|---|
Attivo |
Il dispositivo NFP comunica attivamente con un altro dispositivo NFP in un computer vicino. |
< 50 milliwatt |
N/D |
N/D |
Idle |
Il dispositivo NFP è in attesa che un altro computer con NFP venga vicino. Il driver per il dispositivo NFP ha pubblicazioni e sottoscrizioni aperte. |
< 5 milliwatts |
< 10 millisecondi (tipico) |
Hardware autonomo |
Standby |
Il dispositivo NFP ha una potenza applicata, ma non sono presenti pubblicazioni o sottoscrizioni in sospeso (nessun handle aperto). |
< 1 milliwatt (dipendente dal dispositivo) |
< 50 millisecondi (tipico) |
Comando driver o pin GPIO dal silicio SoC o core. |
Alimentazione rimossa |
Il dispositivo NFP non ha alcuna potenza applicata perché la piattaforma non è attivata o un'entità esterna ha disattivato l'alimentazione. |
0 watt |
< 100 millisecondi |
L'entità esterna rimuove l'alimentazione o applica l'alimentazione tramite il firmware ACPI in risposta a un'IRP D3. |
Nota
- Nella tabella precedente il termine standby fa riferimento a una modalità di alimentazione del dispositivo distinta da Modern Standby, ovvero uno stato di alimentazione a livello di piattaforma.
- Nella tabella precedente il termine IRP D3 fa riferimento a una richiesta IRP_MN_SET_POWER di tipo DevicePowerState.
Il consumo di energia specificato di un dispositivo NFP in modalità standby varia in base al numero di parte e al produttore. I progettisti di sistema devono lavorare con il fornitore del dispositivo per comprendere il consumo di energia di standby specifico del dispositivo. Se il consumo di energia in modalità standby è più di un milliwatt, il dispositivo NFP deve essere collegato a una barra di alimentazione commutabile in modo che il dispositivo possa essere inserito in modalità di alimentazione rimossa durante lo standby moderno.
Meccanismo di gestione energia software
Windows si basa sul fornitore di dispositivi NFP per fornire un driver di terze parti che gestisce il dispositivo NFP. Windows prevede che questo driver monitori il numero corrente di handle aperti al driver del dispositivo NFP e lo stato di questi handle per determinare quando inserire il dispositivo NFP in modalità a bassa potenza.
È consigliabile che gli sviluppatori di driver NFP usino User-Mode Driver Framework (UMDF) per sviluppare i driver. UMDF include numerose funzionalità che semplificano lo sviluppo di risparmio energia in fase di esecuzione del dispositivo.
Supporto D3
Gli sviluppatori di driver NFP sono invitati a inserire il dispositivo NFP in uno stato D3 quando tutti gli handle al dispositivo sono stati chiusi o tutti gli handle aperti al dispositivo hanno ricevuto la notifica di IOCTL_NFP_DISABLE . Tutti gli handle aperti riceveranno la notifica di IOCTL_NFP_DISABLE dopo che la piattaforma entra in Standby moderno e il desktop utente è bloccato.
Anche se il dispositivo NFP può ottenere un consumo di energia inferiore a un milliwatt in modalità di alimentazione inattiva, una transizione a D3 è comunque consigliata quando tutti gli handle vengono chiusi o hanno ricevuto la notifica di IOCTL_NFP_DISABLE . L'esecuzione di una transizione a D3 consente a tutti i driver nello stack di driver per il dispositivo NFP di ricevere una notifica che l'hardware sta immettendo una modalità a bassa potenza. Inoltre, una transizione a D3 può essere rilevata dalla strumentazione incorporata in Windows. Windows Performance Toolkit e altri strumenti di diagnostica delle prestazioni possono essere usati per osservare questa transizione. Questo supporto di diagnostica predefinito riduce il costo per un integratore di sistema per verificare che il dispositivo NFP sia IOCTL_NFP_DISABLE eseguire correttamente la gestione delle energia.
Per alcuni autobus, i dispositivi sul bus devono passare a D3 prima che il controller del bus possa immettere uno stato a bassa potenza. Per un dispositivo NFP connesso a I2C, non esiste alcuna dipendenza dal dispositivo NFP endpoint che immette D3 in modo che il controller del bus I2C venga disattivato.
Tuttavia, se le piattaforme di standby moderne in futuro usano il bus seriale universale (USB) per connettersi ai dispositivi NFP, un dispositivo NFP deve essere in grado di immettere D3 in modo che il controller host USB possa spegnere e il silicio soC o core può immettere uno stato di inattività a bassa potenza durante lo standby moderno. Gli sviluppatori di driver di dispositivi NFP sono invitati a eseguire la transizione dei dispositivi a D3 quando sono pronti per entrare in modalità a bassa potenza, indipendentemente dal bus sottostante, per abilitare di nuovo la diagnostica di risparmio energia e gestione delle energia future.
Se, per immettere la modalità di alimentazione in standby, il dispositivo NFP richiede l'invio di un comando dal driver del dispositivo NFP sul bus di comunicazione, questo comando deve essere inviato come parte della transizione a D3 nel driver.
Se il dispositivo NFP richiede un pin GPIO dal soC da attivare per immettere la modalità di alimentazione di standby, è necessaria una transizione a D3. L'avvio di una transizione a D3 notifica al driver ACPI di Windows, Acpi.sys, che esegue il metodo di controllo _PS3 implementato nello spazio dei nomi ACPI del dispositivo NFP. Il metodo _PS3 può attivare la riga GPIO tramite un'area dell'operazione GPIO. Per rendere più portatile il driver di dispositivo NFP, eventuali ritardi specifici della piattaforma o altri vincoli di intervallo devono essere implementati nel firmware della piattaforma in modo che il driver del dispositivo NFP non debba essere personalizzato per una piattaforma specifica.
Per abilitare la transizione del dispositivo NFP a D3 quando il dispositivo è inattivo e la piattaforma si trova nello stato di alimentazione del sistema S0 (funzionante), un driver UMDF chiama il metodo IWDFDevice2::AssignS0IdleSettingsEx. In questa chiamata il driver fornisce un puntatore a una struttura di WUDF_DEVICE_POWER_POLICY_IDLE_SETTINGS come parametro di input e imposta il membro DxState di questa struttura su PowerDeviceD3.
Se il consumo di energia del dispositivo NFP in modalità standby è maggiore di un milliwatt, il dispositivo deve essere inserito in modalità di rimozione dell'alimentazione quando tutti gli handle vengono chiusi o tutti gli handle sono stati inviati alla notifica di IOCTL_NFP_DISABLE . Per consentire al firmware e all'hardware sottostante di rimuovere l'alimentazione dal dispositivo NFP, il dispositivo deve già aver immesso D3 (ovvero D3hot) e il driver di dispositivo NFP deve in precedenza aver abilitato la transizione a D3cold. L'abilitazione di D3cold implica che il driver per il dispositivo NFP salva lo stato hardware del dispositivo prima della transizione a D3 in modo che tutta l'alimentazione possa essere rimossa dal dispositivo. Il dispositivo deve essere in grado di riprendere l'operazione normale in un secondo momento dopo che il dispositivo viene attivato (ovvero il dispositivo chiude D3cold) e il driver ripristina lo stato hardware del dispositivo. Per abilitare D3cold, un driver UMDF chiama il metodo IWDFDevice2::AssignS0IdleSettingsEx. In questa chiamata il driver fornisce un puntatore a una struttura WUDF_DEVICE_POWER_POLICY_IDLE_SETTINGS e imposta il membro ExcludeD3Cold di questa struttura su WdfFalse.
Per altre informazioni, vedere Supporto di D3cold in un driver.
Radio manager
Se il dispositivo NFP usa un meccanismo rf (radio) per rilevare gli eventi di prossimità, il fornitore del dispositivo NFP deve fornire un gestore radio oltre a un driver di dispositivo NFP. Il gestore radio è una DLL COM che implementa l'API dell'interfaccia utente di gestione radio e comunica privatamente con il driver di dispositivo NFP. Quando l'utente modifica lo stato di radio on/off del dispositivo NFP nell'applicazione Impostazioni di Windows, il driver del dispositivo NFP riceve la notifica della modifica tramite il gestore radio. Lo sviluppatore di driver deve definire un'interfaccia privata per comunicare lo stato di gestione radio tra l'oggetto COM di gestione radio e il driver di dispositivo NFP. Quando il driver del dispositivo NFP riceve un comando dall'oggetto gestione radio per impostare lo stato di attivazione/disattivazione della radio del dispositivo, il driver deve salvare lo stato hardware del dispositivo, disattivare eventuali componenti RF associati al dispositivo NFP e passare il dispositivo a D3. Si noti che la quantità e lo stato di tutti gli handle dell'interfaccia GUID_DEVINTERFACE_NFP già aperti quando il dispositivo entra in D3 deve essere mantenuto mentre il dispositivo è in D3.
Dopo che il gestore radio ha indicato che i componenti RF nel dispositivo NFP devono essere abilitati e attivati, il dispositivo NFP deve tornare immediatamente a D0 quando si verifica una delle operazioni seguenti:
- Un client apre un nuovo handle al driver di dispositivo NFP.
- Qualsiasi handle già aperto riceve la notifica di IOCTL_NFP_ENABLE .
La notifica di IOCTL_NFP_ENABLE verrà inviata da Windows al driver del dispositivo NFP quando la piattaforma esce dallo standby moderno e l'utente immette la password.
Se il gestore radio ha indicato che i componenti RF nel dispositivo NFP devono essere disabilitati e spenti, il dispositivo NFP deve rimanere in D3, anche se un nuovo handle è aperto o un handle esistente è abilitato, fino a quando il gestore radio indica che i componenti RF devono essere abilitati e attivati.
Se il dispositivo NFP richiede l'invio di un comando per restituire il dispositivo NFP in modalità inattiva, questo comando può essere inviato sul bus di comunicazione (in genere I2C) e deve verificarsi come parte del completamento della transizione a D0 nel driver del dispositivo NFP.
La transizione del dispositivo NFP a D0 consente l'esecuzione del metodo di controllo _PS0 nel dispositivo nello spazio dei nomi ACPI. Se necessario, questo metodo di controllo può attivare una riga GPIO dal soC al dispositivo NFP per restituire il dispositivo in modalità inattiva.
Configurazioni di alimentazione hardware supportate
Un dispositivo NFP non deve utilizzare più di un milliwatt di alimentazione, in media, mentre la piattaforma hardware è in standby moderno. Se il dispositivo utilizza non più di un milliwatt di alimentazione quando è in modalità standby, il driver del dispositivo NFP può posizionare il dispositivo in modalità standby quando il dispositivo non viene usato. In caso contrario, la finestra di progettazione del sistema deve collegare il dispositivo a una barra di alimentazione dedicata che può essere disattivata quando il dispositivo non viene usato.
La potenza di standby è minore di un milliwatt
Se il dispositivo NFP usa meno di un milliwatt di alimentazione in modalità standby, il dispositivo NFP può essere posizionato su qualsiasi barra di alimentazione del sistema e può condividere questa barra con qualsiasi numero di altri dispositivi. La transizione del dispositivo alla modalità di alimentazione standby si verifica come parte della transizione a D3.
La voce del dispositivo NFP in modalità standby può essere avviata inviando un comando sul bus di comunicazione (in genere I2C) o attivando una riga GPIO SoC instradata al dispositivo NFP.
Se il dispositivo NFP richiede l'attivazione di una riga GPIO dal soC per immettere la modalità standby, la riga GPIO deve essere descritta in un'area di operazione GPIO nello spazio dei nomi ACPI. L'integratore di sistema deve implementare i metodi di _PS3 e _PS0 nello spazio dei nomi ACPI. L'implementazione del metodo _PS3 deve attivare la riga GPIO per passare il dispositivo NFP alla modalità standby. L'implementazione del metodo _PS0 deve attivare la riga GPIO per passare il dispositivo NFP dalla modalità standby alla modalità inattiva. L'interruttore di questa riga potrebbe essere soggetto a vincoli di intervallo specifici della piattaforma o specifici del dispositivo.
Come descritto in precedenza, il driver del dispositivo NFP deve avviare una transizione a D3 quando tutti gli handle vengono chiusi o tutti gli handle hanno ricevuto la notifica di IOCTL_NFP_DISABLE oppure il gestore radio ha richiesto che i componenti RF del dispositivo NFP vengano disattivati.
La potenza di standby è più di un milliwatt
Se il consumo di energia del dispositivo NFP in modalità standby è più di un milliwatt, il dispositivo NFP deve essere posizionato su una barra di alimentazione dedicata che può essere attivata e disattivata in modo indipendente sotto il controllo di un GPIO dal SoC. Quando tutti gli handle vengono chiusi o tutti gli handle hanno ricevuto la notifica di IOCTL_NFP_DISABLE oppure il gestore radio ha richiesto che i componenti RF vengano disattivati, il dispositivo NFP passa prima a D3 e quindi passa alla modalità di rimozione dell'alimentazione quando la barra di alimentazione viene disattivata.
La barra di alimentazione commutabile deve essere controllata da una linea GPIO dal silicio SoC o core. La riga GPIO deve essere descritta come parte di un'area dell'operazione GPIO nello spazio dei nomi ACPI. Inoltre, lo spazio dei nomi ACPI deve includere una risorsa power che descrive la barra di alimentazione commutabile e che implementa _ON e _OFF metodi di controllo. I metodi di controllo _ON e _OFF attivano la linea GPIO descritta nell'area dell'operazione GPIO per attivare e disattivare la barra di alimentazione. _PR3 e _PR0 pacchetti devono essere inseriti nel dispositivo NFP nello spazio dei nomi ACPI e devono collegarsi alla risorsa di alimentazione che descrive la barra di alimentazione.
Come descritto in precedenza, il driver di dispositivo NFP deve abilitare D3cold. Inoltre, il driver deve avviare una transizione a D3 quando tutti gli handle vengono chiusi o tutti gli handle hanno ricevuto la notifica di IOCTL_NFP_DISABLE o le richieste di gestione radio che i componenti RF vengono disattivati. Quando il driver ACPI riceve l'IRP D3, eseguirà il metodo _OFF nella risorsa power indicato dal pacchetto _PR3. Questo metodo attiva la linea GPIO che controlla l'hardware di commutazione dell'alimentazione per rimuovere l'alimentazione dal dispositivo NFP.
Se il gestore radio ha indicato che i componenti RF devono essere abilitati, il driver del dispositivo NFP deve eseguire una transizione a D0 quando viene aperto un nuovo handle o un handle esistente ha ricevuto la notifica di IOCTL_NFP_ENABLE . Quando il driver ACPI riceve l'IRP D0 (una richiesta di IRP_MN_SET_POWER di tipo DevicePowerState), eseguirà il metodo _ON nella risorsa power indicata dal pacchetto _PR0. Questo metodo disattiva la linea GPIO che controlla l'hardware di commutazione dell'alimentazione per applicare nuovamente la potenza al dispositivo NFP.
Problemi di riattivazione
Non ci sono problemi di riattivazione per il dispositivo NFP. Il dispositivo NFP non è autorizzato a supportare la riattivazione del SoC mentre la piattaforma è in standby moderno.
Test e convalida
È fondamentale per la finestra di progettazione del sistema verificare che il dispositivo NFP entri in modo affidabile in modalità standby o in modalità rimossa quando lo schermo è disattivato per Standby moderno. La soluzione di risparmio energia per il dispositivo NFP dipende fortemente dall'implementazione del driver di terze parti. Pertanto, gli integratori di sistema sono invitati a discutere il metodo migliore per testare e convalidare la funzionalità del dispositivo NFP con il fornitore di dispositivi NFP.
Se il driver di dispositivo NFP avvia una transizione a D3 quando tutti gli handle al driver vengono chiusi o disabilitati, è possibile usare lo strumento XPerf per osservare questa transizione. Questo metodo di convalida è simile a quello descritto altrove per i controller touch e i dispositivi sensore.
Se il driver invia comandi sul bus di comunicazione per eseguire la transizione del dispositivo in modalità standby, il driver deve supportare la traccia degli eventi in modo che l'integratore di sistema possa facilmente convalidare le operazioni di gestione delle energia. La strumentazione può essere aggiunta facilmente ai driver Windows usando eventi Di traccia eventi per Windows (ETW). Per altre informazioni, vedere Aggiunta di Traccia eventi ai driver di Kernel-Mode. Un vantaggio della traccia ETW è che può essere visualizzato usando la suite di strumenti di Windows Performance Toolkit, che include XPerf.
Elenco di controllo del risparmio energia del dispositivo NFP
Gli integratori di sistema e i fornitori di NFP devono esaminare l'elenco di controllo seguente per verificare che la progettazione di risparmio energia del sistema sia compatibile con Windows 8 e versioni successive.
- Selezionare un dispositivo NFP con una modalità standby che utilizza una media di meno di un milliwatt di alimentazione.
- Verificare che il driver del dispositivo NFP avvia una transizione a D3 quando tutti gli handle del dispositivo vengono chiusi o tutti gli handle aperti hanno ricevuto la notifica di IOCTL_NFP_DISABLE o il gestore radio richiede che i componenti RF nel dispositivo NFP siano disabilitati e disattivati.
- Verificare che il driver di dispositivo NFP avvia una transizione a D0 se il gestore radio ha indicato che i componenti RF devono essere abilitati e successivamente il primo handle viene aperto al dispositivo o il primo handle aperto riceve la notifica di IOCTL_NFP_ENABLE.
- Se il driver del dispositivo NFP invia un comando personalizzato sul bus di comunicazione per indicare al dispositivo NFP di immettere la modalità standby, usare il fornitore del dispositivo NFP per determinare il modo migliore per verificare che il dispositivo NFP entri in modalità di alimentazione di standby in risposta a questo comando.
- Se il consumo di energia per il dispositivo NFP è maggiore di un milliwatt, assicurarsi che il dispositivo sia posizionato su una barra di alimentazione commutabile.
- Se il dispositivo NFP si trova su una barra di alimentazione commutabile:
- Verificare che il dispositivo supporti completamente la rimozione dell'alimentazione dal dispositivo quando è inutilizzato e che il ripristino automatico dell'alimentazione riabilita e inizializzi nuovamente il dispositivo.
- Verificare che la barra di alimentazione sia controllata da una linea GPIO dal silicio SoC o core.
- Eseguire il mapping della riga GPIO in un'area di operazione GPIO implementata nel firmware ACPI del sistema.
- Specificare una risorsa di alimentazione per descrivere la barra di alimentazione e includere i metodi di controllo _ON, _OFF e _STA in questa risorsa power.
- Specificare i pacchetti _PR0 e _PR3 nel dispositivo NFP nel firmware ACPI del sistema e assicurarsi che facciano riferimento alla risorsa power.
- Se il dispositivo NFP richiede un ritardo di alimentazione prima che il driver possa accedervi, codificare questo ritardo nell'implementazione del metodo di controllo _ON.
- Avviare più transizioni in e fuori standby moderno e quindi testare l'operazione del dispositivo NFP quando lo schermo è attivato.