Freigeben über


Verwenden der GUID_D3COLD_SUPPORT_INTERFACE-Treiberschnittstelle

Ab Windows 8 können Treiber die Routinen in der GUID_D3COLD_SUPPORT_INTERFACE-Schnittstelle aufrufen, um die D3cold-Funktionen von Geräten zu bestimmen und diesen Geräten die Verwendung von D3cold zu ermöglichen. 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-Unterzustand des D3-Gerätestromzustands. D3 ist in zwei Unterzustände unterteilt: D3hot und D3cold. D3 ist der leistungsschwächste Gerätezustand, und D3cold verbraucht weniger Strom als D3hot. Ein Gerät kann D3cold nur dann 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 wechseln und diesen beenden, wenn sich der Computer im Betriebszustand des S0-Systems befindet.

Der Treiber, der der Energierichtlinienbesitzer (Power Policy Owner, PPO) für das Gerät ist, ruft die Routinen in dieser Schnittstelle auf, um die folgenden Aktionen auszuführen:

  • Ermitteln Sie, ob das Gerät, der übergeordnete Bustreiber und die Plattformfirmware zum D3cold-Unterzustand übergehen.
  • Ermitteln Sie, ob das Gerät dem Prozessor ein Aktivierungsereignis signalisieren kann, wenn sich das Gerät im D3cold-Unterzustand befindet.
  • Aktivieren und deaktivieren Sie die Übergänge zum D3cold-Unterzustand durch das Gerät.

Um diese Schnittstelle abzufragen, sendet ein Gerätetreiber eine IRP_MN_QUERY_INTERFACE IRP nach unten im Treiberstapel. Für diese IRP legt der Treiber den Eingabeparameter InterfaceType auf GUID_D3COLD_SUPPORT_INTERFACE fest. Nach erfolgreichem Abschluss des IRP ist der Interface-Ausgabeparameter 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 Aktivierungsereignis aus einem Dx-Zustand mit geringem Stromverbrauch zu signalisieren, den das Gerät eintritt, sollte der Treiber dem Gerät die Eingabe von D3cold nur ermöglichen, wenn das Gerät Aktivierungsereignisse von D3cold signalisieren kann. Andernfalls ist das Gerät nach dem Wechsel in D3cold möglicherweise nicht mehr verfügbar, bis der Computer den S0-Zustand verlässt.

Standardmäßig sind vor dem ersten Aufruf der SetD3ColdSupport-Routine D3hot-zu-D3cold-Übergänge deaktiviert. Um diese Standardeinstellung so zu ändern, dass D3hot-zu-D3cold-Übergänge vor dem ersten SetD3ColdSupport-Aufruf aktiviert werden, kann das Treiberpaket für das Gerät die folgenden zwei Zeilen im Abschnitt DDInstall.HW der INF-Datei enthalten, in der der Treiber installiert wird:

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, aus denen das Gerät ein Aktivierungsereignis 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 energieärmsten Gerätestromzustand, von dem aus 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 Aktivierungsereignis von D3cold signalisieren kann, wenn sich der Computer in S0 befindet.

Die GetIdleWakeInfo-Routine stellt umfassendere Geräteaktivierungsinformationen bereit, als in der IRP_MN_QUERY_CAPABILITIES-Anforderung verfügbar sind. Diese Anforderung, die von allen Versionen von Windows unterstützt wird, 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 in der GetIdleWakeInfo-Routine verfügbar sind. Dieser Member gibt den Leistungszustand des niedrigsten Geräts an, von dem aus ein Gerät ein Warteereignis signalisieren kann. Die Informationen in diesem Member sind nur dann korrekt, wenn sich der Computer in dem Vom SystemWake-Element der -Struktur angegebenen Zustand mit niedriger Leistung befindet. Bei SystemWake = PowerSystemSleeping3 sind die Informationen in DeviceWake für S3 gültig, können häufig für S1 und S2 und 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 von SystemWake angegebenen Zustand gültig sind. Bei einigen Geräten variiert der niedrigste Dx-Zustand, aus dem ein Gerät ein Aktivierungsereignis signalisieren kann, je nachdem, ob sich der Computer im Betriebszustand S0 oder in einem Energiesparzustand (S1, S2, S3 oder S4) befindet. Bei anderen Geräten können die Busse, mit denen die Geräte verbunden sind, Aktivierungssignale verarbeiten, wenn sich der Computer in S0 befindet, die Geräte jedoch nicht. Nur die GetIdleWakeInfo-Routine kann die Geräteaktivierungsfunktionen dieser Geräte genau beschreiben.

Beispielsweise definiert die PCI Express Base 3.0-Spezifikation zwei separate Mechanismen zum Signalisieren von Aktivierungsereignissen. Ein Mechanismus wird verwendet, wenn die PCI Express-Verbindung (Bus) aktiviert ist, und der andere wird verwendet, wenn die Verbindung ausgeschaltet ist. Wenn der Link aktiviert ist, sendet das Gerät einen Stream mit PM_PME Transaction Layer Packets (TLPs), um zu signalisieren, dass das Gerät von einem Dx-Zustand mit geringem Stromverbrauch zu D0 wechseln soll. Wenn der Link deaktiviert ist, fordert das Gerät an, dass der Link aktiviert wird, damit das Gerät PM_PME TLPs senden kann. Um anzufordern, dass die Verknüpfung aktiviert wird, bestätigt das Gerät entweder sein WAKE#-Signal (für den häufigeren Geräteformfaktor) oder verwendet den "Beaconing"-Mechanismus (weniger häufig).

Die PCI Express-Spezifikation erfordert, dass alle Geräte, die die Fähigkeit zum Signalisieren von Energieverwaltungsereignissen (POWER Management Events, PMEs) von D3cold ankündigen, beide Geräteaktivierungsmechanismen implementieren, aber ein Treiberentwickler muss möglicherweise ein Gerät aktivieren, das diese Mechanismen nicht ordnungsgemäß implementiert.

Wenn das Gerät PM_PME TLPs ordnungsgemäß liefern kann, wenn der Link aktiviert ist, kann der Treiber dem Gerät die Eingabe von D3hot ermöglichen, wenn sich der Computer in S0 befindet. Wenn das Gerät sein WAKE#-Signal zum Aktivieren des Links richtig bestätigen und dann PM_PME TLPs verwenden kann, um den Übergang zu D0 zu initiieren, kann der Treiber das Gerät aktivieren, um in D3cold zu wechseln, wenn sich der Computer in S0 befindet.

Der Treiber sollte dem Gerät jedoch nicht die Eingabe von D3hot oder D3cold ermöglichen, wenn die Systemfirmware (DAS BIOS) nicht garantieren kann, dass die PCI Express-Mechanismen für die Geräteaktivierung ordnungsgemäß von der Hardwareplattform verarbeitet werden. Ein Treiber kann die GetIdleWakeInfo-Routine aufrufen, um zu ermitteln, ob die Firmware diese Mechanismen unterstützt. Wenn ein Treiber Kernel-Mode Driver Framework (KMDF) 1.11 oder höher verwendet, besteht eine praktische Alternative zum Aufrufen von GetIdleWakeInfo darin, die WdfDeviceAssignS0IdleSettings-Methode zuzulassen, damit das Gerät in den Dx-Zustand mit der niedrigsten Leistung im Leerlauf wechselt, aus dem das Gerät ein Aktivierungsereignis signalisieren kann.