Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
Från och med Windows 8 kan drivrutiner anropa rutinerna i GUID_D3COLD_SUPPORT_INTERFACE-gränssnittet för att fastställa D3cold-funktionerna för enheter och för att göra det möjligt för dessa enheter att använda D3cold. De två primära rutinerna i det här gränssnittet är SetD3ColdSupport och GetIdleWakeInfo.
GUID_D3COLD_SUPPORT_INTERFACE-drivrutinsgränssnittet ger stöd för undertillståndet D3cold i energiläget för D3-enheten. D3 är indelat i två undertillstånd, D3hot och D3cold. D3 är det lägsta strömförbrukningsläget för enheten och D3cold använder mindre ström än D3hot. En enhet kan endast ange D3cold om enheten, den överordnade bussdrivrutinen och plattformens inbyggda programvara stöder det här tillståndet. En enhet som stöder D3cold kan gå in i och lämna det här tillståndet när datorn är i systemets S0-strömtillstånd (fungerande).
Drivrutinen som är kraftpolicyägaren (PPO) för enheten anropar rutinerna i detta gränssnitt för att utföra följande:
- Upptäck om enheten, den överordnade bussdrivrutinen och plattformens inbyggda programvara stöder övergångar till D3cold-undertillståndet.
- Upptäck om enheten kan signalera en aktiveringshändelse till processorn när enheten finns i D3cold-undertillståndet.
- Aktivera och inaktivera övergångar till D3cold-undertillståndet för enheten.
Om du vill fråga efter det här gränssnittet skickar en enhetsdrivrutin en IRP_MN_QUERY_INTERFACE IRP nedåt i drivrutinsstacken. För den här IRP:en anger drivrutinen indataparametern InterfaceType till GUID_D3COLD_SUPPORT_INTERFACE. När IRP har slutförts är gränssnittsutdataparametern en pekare till en D3COLD_SUPPORT_INTERFACE struktur. Den här strukturen innehåller pekare till rutinerna i gränssnittet.
Mer information om D3cold-enhetens energitillstånd finns i Stöd för D3cold i en drivrutin.
En drivrutin anropar rutinen SetD3ColdSupport för att dynamiskt aktivera och inaktivera en enhets övergångar till D3cold som kan inträffa när datorn finns i S0. Om enheten måste kunna signalera en aktiveringshändelse från ett Dx-tillstånd med låg effekt som enheten går in i, bör drivrutinen endast tillåta att enheten får gå in i D3cold om enheten kan signalera aktiveringar från D3cold. Annars kan den vara otillgänglig när enheten har angett D3cold tills datorn lämnar S0-tillståndet.
Innan det första anropet till SetD3ColdSupport-rutinen inaktiveras D3hot-to-D3cold-övergångar som standard. Om du vill ändra den här standardinställningen så att D3hot-to-D3cold-övergångar aktiveras före det första SetD3ColdSupport-anropet kan drivrutinspaketet för enheten innehålla följande två rader i avsnittet DDInstall.HW i INF-filen som installerar drivrutinen:
Include = machine.inf
Needs = PciD3ColdSupported
Med getIdleWakeInfo-rutinen kan drivrutinen för en enhet identifiera de enhetskrafttillstånd som enheten kan signalera en aktiveringshändelse från när datorn är i ett visst systemkrafttillstånd. Anroparen till den här rutinen anger ett systemets energitillstånd som en indataparameter, och som utdataparameter rapporterar rutinen det lägsta möjliga enhetens energitillstånd från vilket enheten kan indikera en väntande händelse när datorn är i det angivna systemets energitillstånd. Till exempel kan rutinen GetIdleWakeInfo tala om för drivrutinen om enheten kan signalera en aktiveringshändelse från D3cold när datorn är i S0.
GetIdleWakeInfo-rutinen tillhandahåller mer fullständig enhet-wake-information än vad som är tillgängligt från IRP_MN_QUERY_CAPABILITIES begäran. Den här begäran, som alla versioner av Windows stöder, tillhandahåller en DEVICE_CAPABILITIES struktur som beskriver funktionerna i en enhet. DeviceWake-medlemmen i den här strukturen innehåller en delmängd av den information som är tillgänglig från GetIdleWakeInfo-rutinen. Den här medlemmen anger det lägst drivna enhetskrafttillståndet från vilket en enhet kan signalera en väntehändelse. Informationen i den här medlemmen är garanterad att vara korrekt endast om datorn är i systemets lågkraftstillstånd som anges av SystemWake-medlemmen i strukturen. Om SystemWake = PowerSystemSleeping3 är informationen i DeviceWake känd för att vara giltig för S3, kan ofta vara giltig för S1 och S2 och kan till och med vara giltig för S0.
Som en bästa praxis bör en drivrutin dock inte anta att informationen i DeviceWake-metoden är giltig för andra strömtillstånd än det tillstånd som anges av SystemWake. För vissa enheter varierar det lägsta Dx-tillstånd från vilket en enhet kan signalera en aktiveringshändelse beroende på om datorn är i fungerande tillstånd S0 eller i ett lågeffektstillstånd (S1, S2, S3 eller S4). För andra enheter kan bussarna som enheterna är anslutna till hantera aktiveringssignaler när datorn är i S0, men enheterna kan inte. Endast GetIdleWakeInfo-rutinen kan beskriva enheternas enhetsuppvakningsfunktioner korrekt.
PCI Express Base 3.0-specifikationen definierar till exempel två separata mekanismer för att signalera aktiveringshändelser – en mekanism används när PCI Express-länken (buss) är aktiverad och den andra används när länken är avstängd. När länken är aktiverad skickar enheten en ström med PM_PME TLP:er (Transaction Layer Packets) för att signalera att enheten ska flyttas från ett Dx-tillstånd med låg effekt till D0. När länken är avstängd begär enheten att länken ska aktiveras så att enheten kan skicka PM_PME TLP:er. För att begära att länken ska aktiveras kontrollerar enheten antingen sin WAKE#-signal (för den vanligare enhetsformfaktorn) eller använder mekanismen "beaconing" (mindre vanlig).
PCI Express-specifikationen kräver att alla enheter som annonserar möjligheten att signalera energisparhändelser (PME) från D3cold implementerar båda dessa mekanismer för enhetsuppvakning, men en drivrutinsutvecklare kan behöva aktivera en enhet som inte implementerar dessa mekanismer korrekt.
Om enheten kan leverera PM_PME TLP:er korrekt när länken är aktiverad kan drivrutinen aktivera enheten att gå in i D3hot när datorn är i S0. Om enheten korrekt kan bekräfta sin WAKE#-signal för att aktivera länken och sedan använda PM_PME TLP:er för att initiera övergången till D0, kan drivrutinen aktivera enheten att gå in i D3cold när datorn är i S0.
Drivrutinen bör dock inte aktivera enheten för att ange antingen D3hot eller D3cold om systemets inbyggda programvara (BIOS) inte kan garantera att PCI Express-mekanismerna för enhetsuppvakning hanteras korrekt av maskinvaruplattformen. En drivrutin kan anropa getIdleWakeInfo-rutinen för att ta reda på om den inbyggda programvaran har stöd för dessa mekanismer. Om en drivrutin använder Kernel-Mode Driver Framework (KMDF) 1.11 eller senare är ett praktiskt alternativ till att anropa GetIdleWakeInfo att tillåta metoden WdfDeviceAssignS0IdleSettings så att enheten kan vara inaktiv i det lägsta Dx-tillstånd som enheten kan signalera en aktiveringshändelse från.