Energisparfunktioner för enheten

Specifikationen ACPI 6.3 definierar en uppsättning namnområdesobjekt för att ange ströminformation för en enhet. Till exempel kan en uppsättning objekt ange de energiresurser som en enhet kräver i varje enhets energisparläge som stöds. En annan objekttyp kan beskriva enhetens förmåga att vakna från ett lågeffektstillstånd som svar på maskinvaruhändelser.

Energisparfunktioner för enheter i Windows

När ett system körs (det vill säga att systemet är i det ACPI-definierade arbetstillståndet S0) kan enskilda enheter göra övergångar mellan enhetskrafttillstånd, beroende på aktivitet, för att spara ström. I traditionella datorsystem används även ACPI-definierade vilolägen (S1 till S4) för att spara ström, men dessa frånkopplade vilolägen med hög latens används inte på Windows SoC-plattformar. Därför är batteritiden mycket beroende av hur plattformar implementerar strömsparhantering för enheters körningstid.

Enheter som är integrerade i SoC kan strömhanteras via Windows Power Framework (PoFx). Dessa ramverksintegrerade enheter strömhanteras av PoFx via ett SoC-specifikt plugin-program (microPEP) som känner till detaljerna i SoC:s ström- och klockkontroller. Mer information om PoFx finns i Översikt över Power Management Framework.

För kringutrustning som inte är integrerade i SoC använder Windows ACPI Device Power Management. För dessa ACPI-hanterade enheter fattar energiprincipägaren i en enhetsdrivrutinsstack (vanligtvis funktionen eller klassdrivrutinen) beslut om övergången till enhetskrafttillstånd, och Windows ACPI-drivrutinen, Acpi.sys, anropar ASL-kontrollmetoder för att tillämpa nödvändiga plattformsspecifika energikontroller.

Det är möjligt att, och vissa enhetsstackar gör det, enbart använda ACPI Device Power Management eller i kombination med microPEP för energisparfunktioner på SoC-enheter.

Som beskrivs i Enhetskrafthantering i ACPI stöder Windows de D3cold-energisparfunktioner som definieras i ACPI 5.0-specifikationen. Med hjälp av det här stödet kan enheter, plattformar och drivrutiner välja att helt ta bort enhetens ström under inaktiva körningsperioder. Den här funktionen kan avsevärt förbättra batteritiden. Borttagning av ström måste dock stödjas av alla berörda komponenter för att kunna återgå till D0. Av den anledningen måste förare (buss och funktion) samt själva plattformen ange att de stöder den. Mer information om att välja D3cold-drivrutin finns i Stöd för D3cold i en drivrutin.

Energisparfunktioner för enheter i ACPI

Namnområdesenheter stöder upp till fyra enhetskrafttillstånd, numrerade D0 (fullfunktion eller "på") till D3 (ingen funktion eller "av"). Varje tillstånd kan ha olika energikrav, med högre antal tillstånd som förbrukar mindre ström än lägre numrerade tillstånd. Dessutom har D3-tillståndet (av) två undertillstånd: D3hot och D3cold. D3hot-undertillståndet kräver att enheten förblir tillgänglig på den överordnade bussen så att den kan svara på bussspecifika programvarukommandon. Det här kravet, och den kraft som används för att uppfylla det, tas bort i D3cold. Slutligen kan en enhet konfigureras för att väcka sig själv från ett strömbesparande läge på grund av en maskinvaruhändelse och, om det behövs, även för att få plattformen ur viloläget.

Plattformen anger sitt stöd för D3cold genom att ge operativsystemet kontroll över funktionen "_PR3 Support" (bit 2) när den begärs med hjälp av ospm-kapacitetsmetoden för hela plattformen. Mer information finns i avsnitt 6.2.10.2, "Plattformsomfattande OSPM-funktioner", i ACPI 5.0-specifikationen.

Energihanterade enheter använder underordnade objekt för att beskriva sina energikapaciteter i operativsystemet. I följande avsnitt beskrivs dessa funktioner och objekt.

Energiresurser och tillstånd

En enhet deklarerar sitt stöd för ett energitillstånd genom att ange den uppsättning energiresurser som krävs för att vara i det tillståndet. ACPI Power Resources representerar de spänningsskenor som driver enheter och klocksignalerna som driver dem. Dessa resurser deklareras i roten för namnområdet. Varje energiresurs har en _ON och en _OFF metod som den styrs med och en _STA metod för att rapportera dess tillstånd. Mer information finns i avsnitt 7.1, "Deklarera ett power resource-objekt", i ACPI 5.0-specifikationen.

Windows ACPI-drivrutinen, Acpi.sys, övervakar energiberoendena mellan enheter som delar resurser, och när dessa enheter övergår mellan energitillstånd ser du till att endast de energiresurser som faktiskt behövs av en enhet aktiveras vid en viss tidpunkt.

Energiresurskrav (_PRx)

Det finns ett power resource requirements-objekt (_PRx) där x = 0, 1, 2 eller 3 för varje enhetskrafttillstånd som stöds. När enhetsdrivrutinen bestämmer sig för att övergå till ett nytt energitillstånd ser Acpi.sys till att alla energiresurser som krävs för det nya tillståndet är aktiverade och att alla resurser som inte längre används är avstängda.

Enhetstillstånd stöds Resurskravsobjekt som ska användas Resurser som ska inkluderas i kravobjektet
D0 (krävs) _PR0 Alla ström- och klockor som krävs för enhetens fullständiga funktion.
D1 _PR1 Alla ström- och klockfunktioner som krävs för klassdefinierad reducerad funktionalitet i detta tillstånd.
D2 _PR2 Alla ström- eller klockor som krävs för den klassdefinierade reducerade funktionaliteten i det här tillståndet.
D3hot (krävs) _PR3 Endast den strömförbrukning eller de klocksignaler som krävs för att enheten ska kunna visas på bussen och besvara ett bussspecifikt kommando.

Om en viss plattform stöder D3cold-funktionen och enhetsdrivrutinen för en enhet väljer D3cold, kommer enhetens _PR3 energiresurser, om de inte används av någon annan enhet, att stängas av någon gång efter övergången till D3Cold.

Mer information om energiresurskraven för en enhet som stöder D3cold finns i Krav för inbyggd programvara för D3cold.

Enhetens energitillstånd (_PSx)

Det finns en Power State-metod, _PSx, där x = 0, 1, 2 eller 3 för varje enhets energisparläge som stöds Dx. Den här metoden är valfri, men om den finns anropas den innan energiresurserna för tillståndet inaktiveras och när energiresurserna för tillståndet har aktiverats. _PSx är avsedd att utföra alla plattformsspecifika åtgärder som krävs runt energicykeln. _PSx får inte komma åt enhetsregister som har tilldelats funktionsdrivrutinen eller bussstandardregister som har tilldelats bussdrivrutinen, eller slå på eller av strömresurser, vilket är en åtgärd som är reserverad för Acpi.sys.

Väkningsfunktioner

Energihanterade enheter kanske kan identifiera händelser när de är i lågeffektstillstånd och få plattformen att vakna upp för att hantera dem. För att aktivera den här funktionen behöver Windows information om funktionerna i både plattformen och enheten.

Aktiveringstillstånd för Sx-enhet (_SxW)

På en viss plattform finns det en specifik mappning mellan enhetstillstånd som stöder aktiveringsfunktionen och systemtillstånd som kan svara på aktiveringshändelser. ACPI definierar det _SxW objektet för att tillhandahålla den här informationen till operativsystemet. Det finns ett SxW-objekt för varje systemkrafttillstånd som stöds, Sx. Eftersom SoC-plattformar alltid finns i S0 är det enda intressanta objektet här _S0W. Det här objektet anger plattformens förmåga att väcka från ett lågeffektviloläge som svar på enhetens väckningssignal. Objektet används av Windows för att fastställa mål-D-tillstånd för enheten under systemets lågeffektsaktivitet. Mer information om _S0W finns i avsnitt 7.2.20, "_S0W (S0 Device Wake State)", i ACPI 5.0-specifikationen.

För de flesta SoC-plattformar hanteras enheterna aggressivt för att komma till D3-tillståndet när de är inaktiva, och systemet kan vakna från sitt lågeffektläge medan enheten befinner sig i detta tillstånd. För ett sådant system returnerar _S0W-objektet 3 (eller 4, om det också stöder D3cold).

_S0W(4) är ett krav för D3Cold oavsett om enheten stöder väckning eller inte.

Alla D-tillstånd kan betecknas som det lägsta strömförbrukande väckningsbara tillståndet, och vissa enhetsklasser eller bussar har olika värden. Till exempel använder SDIO- och USB-anslutna enheter tillstånd D2 för det här tillståndet.

För att underlätta migreringen av enhetsdrivrutiner från Windows 7 till Windows 8 eller Windows 8.1 kan enheten också behöva ange _S4W. För närvarande är den enda enhetsklassen som har det här kravet nätverk (Ndis.sys).

Väckningskapabla avbrott (_CRS)

Resursbeskrivningen för en enhet anger att enheten kan identifiera och signalera en aktiveringshändelse genom att markera ett avbrott som "wake-capable" (antingen ExclusiveAndWake eller SharedAndWake). Windows- och enhetsdrivrutiner tillhandahåller särskild hantering av sådana avbrott för att säkerställa att de aktiveras när enheten övergår till ett lågeffekttillstånd. Mer information finns i beskrivningarna av resursbeskrivningarna Interrupt och GpioInt i avsnitt 6.4.3.6, "Extended Interrupt Descriptor" och section 6.4.3.8.1 , "GPIO Connection Descriptors" i ACPI 5.0-specifikationen.

Aktivering av väckning

Beroende på användarscenario eller systempolicy kan väckningskompatibla enheter vara redo eller inte redo för väckning. Därför kan väckningskompatibla avbrott vara aktiverade eller inte när enheten är inaktiv. Förutom att aktivera avbrott använder Windows följande mekanismer för att väcka en enhet.

Aktivering av enhetens viloläge (_DSW)

ACPI definierar _DSW-objektet som ett sätt för operativsystemet att informera ACPI-plattformens inbyggda programvara om nästa viloläge eller inaktiva lågeffektperiod. Det här objektet är valfritt och används endast om plattformen behöver konfigurera plattformsspecifik aktiveringsmaskinvara i förväg. Mål-D-tillståndet för enheten och mål-S-tillståndet för systemet tillhandahålls båda. Kombinationen D-tillstånd och S-tillstånd följer alltid den information som tillhandahålls av enhetens _SxW objekt.

Energiresurser för väckning (_PRW)

I vissa fall måste ytterligare energiresurser aktiveras för att en enhet ska kunna väckas. I det här fallet kan enheten ange det _PRW objektet för att visa de ytterligare energiresurserna. Windows ACPI-drivrutinen, Acpi.sys, hanterar dessa energiresurser som de normalt gör, och säkerställer att de aktiveras när de behövs av en enhet (dvs. en uppvakningskapabel enhet) och inaktiveras annars.

_PRW används också för att definiera uppvakningsfunktionen för traditionella PC-plattformar med full ACPI-maskinvara.