Anmerkung
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen, dich anzumelden oder die Verzeichnisse zu wechseln.
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen , die Verzeichnisse zu wechseln.
Ab Windows 8 können Treiber die Routinen in der GUID_D3COLD_SUPPORT_INTERFACE Schnittstelle aufrufen, um die D3cold-Funktionen von Geräten zu ermitteln und diese Geräte für die Verwendung von D3cold zu aktivieren. Die beiden primären Routinen in dieser Schnittstelle sind SetD3ColdSupport und GetIdleWakeInfo.
Die GUID_D3COLD_SUPPORT_INTERFACE Treiberschnittstelle bietet Unterstützung für den D3cold-Unterstatus des D3-Gerätestromzustands. D3 ist in zwei Unterzustände aufgeteilt, D3hot und D3cold. D3 ist der Stromzustand mit dem niedrigsten Energieverbrauch des Geräts, und D3cold verbraucht weniger Energie als D3hot. Ein Gerät kann D3cold nur eingeben, wenn das Gerät, der übergeordnete Bustreiber und die Plattformfirmware diesen Zustand unterstützen. Ein Gerät, das D3cold unterstützt, kann in diesen Zustand eintreten und ihn verlassen, wenn sich der Computer im S0-Systemleistungszustand (Betriebsmodus) befindet.
Der Treiber, der der Besitzer der Energierichtlinie (Power Policy Owner, PPO) für das Gerät ist, ruft die Routinen in dieser Schnittstelle auf, um Folgendes auszuführen:
- Ermitteln Sie, ob das Gerät, der übergeordnete Bustreiber und die Plattformfirmware Übergänge zum D3cold-Unterstatus unterstützen.
- Ermitteln Sie, ob das Gerät ein Aufweckereignis an den Prozessor signalisieren kann, wenn sich das Gerät im D3cold-Zustand befindet.
- Aktivieren und Deaktivieren von Übergängen in den D3cold-Unterzustand durch das Gerät.
Um diese Schnittstelle abzufragen, sendet ein Gerätetreiber einen IRP_MN_QUERY_INTERFACE IRP nach unten im Treiberstapel. Für dieses IRP legt der Treiber den InterfaceType-Eingabeparameter auf GUID_D3COLD_SUPPORT_INTERFACE fest. Nach erfolgreichem Abschluss des IRP ist der Schnittstellenausgabeparameter ein Zeiger auf eine D3COLD_SUPPORT_INTERFACE-Struktur. Diese Struktur enthält Zeiger auf die Routinen in der Schnittstelle.
Weitere Informationen zum D3cold-Gerätestromzustand finden Sie unter Unterstützen von D3cold in einem Treiber.
Ein Treiber ruft die SetD3ColdSupport-Routine auf, um die Übergänge eines Geräts zu D3cold dynamisch zu aktivieren und zu deaktivieren, die auftreten können, wenn sich der Computer in S0 befindet. Wenn das Gerät in der Lage sein muss, ein Wake-Ereignis aus jedem Dx-Zustand mit geringem Stromverbrauch zu signalisieren, sollte der Treiber das Gerät nur dann in D3cold versetzen, wenn das Gerät Wake-Ereignisse aus D3cold signalisieren kann. Andernfalls ist das Gerät nach der Eingabe von D3cold möglicherweise nicht verfügbar, bis der Computer den S0-Zustand verlässt.
Vor dem ersten Aufruf der SetD3ColdSupport-Routine sind standardmäßig D3hot-zu-D3cold-Übergänge deaktiviert. Um diesen Standardwert so zu ändern, dass D3hot-zu-D3cold-Übergänge vor dem ersten SetD3ColdSupport-Aufruf aktiviert sind, kann das Treiberpaket für das Gerät die folgenden beiden Zeilen im Abschnitt "DDInstall.HW" der INF-Datei enthalten, die den Treiber installiert:
Include = machine.inf
Needs = PciD3ColdSupported
Die GetIdleWakeInfo-Routine ermöglicht es dem Treiber für ein Gerät, die Energiezustände des Geräts zu ermitteln, von denen das Gerät ein Wake-Ereignis signalisieren kann, wenn sich der Computer in einem bestimmten Systemstromzustand befindet. Der Aufrufer dieser Routine gibt einen Systemleistungszustand als Eingabeparameter an, und als Ausgabeparameter meldet die Routine den Energiezustand des niedrigsten Geräts, aus dem das Gerät ein Warteereignis signalisieren kann, wenn sich der Computer im angegebenen Systemstromzustand befindet. Beispielsweise kann die GetIdleWakeInfo-Routine dem Treiber mitteilen, ob das Gerät ein Wake-Ereignis von D3cold signalisieren kann, wenn sich der Computer in S0 befindet.
Die GetIdleWakeInfo-Routine stellt umfassendere Geräte-Wake-Informationen bereit, als in der IRP_MN_QUERY_CAPABILITIES Anforderung verfügbar ist. Diese Anforderung, die alle Versionen von Windows unterstützt, stellt eine DEVICE_CAPABILITIES Struktur bereit, die die Funktionen eines Geräts beschreibt. Das DeviceWake-Element dieser Struktur enthält eine Teilmenge der Informationen, die aus der GetIdleWakeInfo-Routine verfügbar sind. Dieses Mitglied gibt den niedrigsten Energiestatus eines Geräts an, aus dem ein Gerät ein Warteereignis signalisieren kann. Die Informationen in diesem Mitglied sind garantiert nur korrekt, wenn sich der Computer im Systemzustand mit niedriger Leistung befindet, der durch das SystemWake-Mitglied der Struktur angegeben wird. Wenn SystemWake = PowerSystemSleeping3 auftritt, sind die Informationen in DeviceWake als gültig bekannt für S3, sie sind möglicherweise häufig gültig für S1 und S2 und könnten sogar für S0 gültig sein.
Als bewährte Methode sollte ein Treiber jedoch nicht davon ausgehen, dass die Informationen in der DeviceWake-Methode für einen anderen Systemleistungszustand als den durch SystemWake angegebenen Zustand gültig sind. Bei einigen Geräten variiert der niedrigste Dx-Zustand, von dem ein Gerät ein Wake-Ereignis signalisieren kann, je nachdem, ob sich der Computer im Arbeitszustand S0 oder in einem Energiesparzustand befindet (S1, S2, S3 oder S4). Bei anderen Geräten können die Busse, mit denen die Geräte verbunden sind, Wake-Signale verarbeiten, wenn sich der Computer in S0 befindet, die Geräte jedoch nicht. Nur die GetIdleWakeInfo-Routine kann die Gerätereaktivierungsfunktionen dieser Geräte genau beschreiben.
Die PCI Express Base 3.0-Spezifikation definiert z. B. zwei separate Mechanismen zum Signalisieren von Wake-Ereignissen – ein Mechanismus wird verwendet, wenn der PCI Express-Link (Bus) eingeschaltet ist, und der andere wird verwendet, wenn der Link deaktiviert ist. Wenn der Link aktiviert ist, sendet das Gerät einen Datenstrom von PM_PME Transaction Layer Packets (TLPs), um zu signalisieren, dass das Gerät von einem Dx-Zustand mit niedriger Leistung zu D0 wechseln soll. Wenn der Link deaktiviert ist, fordert das Gerät an, dass der Link aktiviert ist, damit das Gerät PM_PME TLPs senden kann. Um die Aktivierung des Links anzufordern, bestätigt das Gerät entweder sein WAKE#-Signal (für den häufigeren Geräteformfaktor) oder verwendet den Mechanismus "Beaconing" (weniger häufig).
Die PCI Express-Spezifikation erfordert, dass alle Geräte, die die Fähigkeit zur Signalisierung von Energieverwaltungsereignissen (PMEs) aus D3cold ankündigen, beide Mechanismen zur Gerätereaktivierung implementieren. Ein Treiberentwickler muss möglicherweise jedoch ein Gerät aktivieren, das diese Mechanismen nicht korrekt implementiert.
Wenn das Gerät PM_PME TLPs ordnungsgemäß liefern kann, wenn der Link eingeschaltet ist, kann der Treiber das Gerät so aktivieren, dass es D3hot eingibt, wenn sich der Computer in S0 befindet. Wenn das Gerät sein WAKE#-Signal korrekt ansetzen kann, um die Verbindung zu aktivieren und dann PM_PME TLPs zu verwenden, um den Übergang zu D0 zu initiieren, kann der Treiber es dem Gerät ermöglichen, in D3cold zu wechseln, wenn sich der Computer in S0 befindet.
Der Treiber sollte jedoch nicht aktivieren, dass das Gerät entweder D3hot oder D3cold eingibt, wenn die Systemfirmware (das BIOS) nicht garantieren kann, dass die PCI Express-Geräte-Wake-Mechanismen von der Hardwareplattform ordnungsgemäß verarbeitet werden. Ein Treiber kann die GetIdleWakeInfo-Routine aufrufen, um herauszufinden, ob die Firmware die Unterstützung für diese Mechanismen bietet. Wenn ein Treiber Kernel-Mode Driver Framework (KMDF) 1.11 oder höher verwendet, besteht eine bequeme Alternative zum Aufrufen von GetIdleWakeInfo darin, die WdfDeviceAssignS0IdleSettings-Methode zuzulassen, damit das Gerät im niedrigsten Stromverbrauchszustand Dx im Leerlauf ist, aus dem heraus das Gerät ein Wake-Ereignis signalisieren kann.