PCI-Energieverwaltung und Gerätetreiber
In diesem Artikel werden einige Verwirrungen erläutert, die anbieter erfahren haben, wie Hardware, die mit PCI Power Management (PCI-PM) kompatibel ist, mit Gerätetreibern im Betriebssystem interagiert und wie PCI-PM in ACPI integriert wird. Weitere Informationen finden Sie unter https://www.uefi.org/specifications.
Gerätetreiber und PCI-Energieverwaltung
In dieser Diskussion wird davon ausgegangen, dass Sie mit der Behandlung von Energieverwaltungsereignissen vertraut sind, wie im aktuellen Windows DDK beschrieben. Im Allgemeinen sind die Verantwortlichkeiten für Gerätetreiber wie folgt:
Busfahrer: Busfahrer sind für das Aufzählen, Konfigurieren und Steuern von Geräten verantwortlich. Für PCI-PM ist der PCI-Treiber für das Lesen der PCI-PM-Register verantwortlich, um die Funktionen der Hardware zu ermitteln. Wenn POWER IRPs den Energiestatus anfordern, schreibt der PCI-Treiber in das PCI-Energieverwaltungsregister, um die Hardware auf verschiedene Dx-Zustände festzulegen.
Wenn ein Gerät zum Aufwachen aktiviert ist, schreibt der PCI-Treiber in PCI-PM-Register, damit das Gerät PME auslösen kann (ACPI führt auch eine Aktion aus, siehe nächster Abschnitt). Wenn ACPI feststellt, dass der PCI-Bus das System aufwacht, überprüft der PCI-Treiber den PCI-Konfigurationsraum, der sucht, welches Gerät PME bestätigt, deaktiviert PME in diesem Gerät und benachrichtigt den Treiber für dieses Gerät.
Gerätetreiber: Der spezifische Treiber für das Gerät ist verantwortlich für das Speichern und Wiederherstellen des Gerätekontexts und das Anfordern von Energiestatusänderungen als Richtlinienbesitzer für das Gerät. Wenn der Gerätetreiber einen POWER IRP empfängt, der eine Änderung des Energiezustands eines niedrigeren Geräts anfordert, ist der Gerätetreiber dafür verantwortlich, alle proprietären Gerätekontexte zu speichern, die zum späteren Aktivieren des Geräts erforderlich sind. In einigen Fällen gibt es möglicherweise nichts zu speichern.
PCI-PM-Register sind streng die Domäne des PCI-Treibers– der Gerätetreiber des IHV muss nicht auf diese Register zugreifen. Dies würde dazu führen, dass das System nicht zuverlässig funktioniert. Die Verantwortung des Gerätetreibers besteht darin, nur proprietäre Aktionen auszuführen.
Integrieren von ACPI und PCI PM
Einige Geräte, insbesondere Motherboard-Videogeräte auf tragbaren Geräten, erfordern möglicherweise sowohl PCI Power Management als auch ACPI Source Language Assembler (ASL), um das Gerät vollständig zu verwalten. Die PCI Power Management-Register würden den internen Zustand eines Geräts steuern, z. B. interne Uhren und Energieebenen. ASL würde den externen Zustand steuern, z. B. externe Uhren und Energieebenen, oder bei Videocontrollern würde ASL die Video-Hintergrundbeleuchtung steuern. Beachten Sie, dass ASL und PCI-PM nur auf Hauptplatinengeräten kombiniert werden können.
Die OnNow-Architektur ist eine mehrschichtige Architektur, die die Integration des Gerätetreibers, PCI-Treibers und ACPI-Treibers (und ASL) natürlich verarbeitet. In den folgenden Szenarien wird die Reihenfolge gezeigt, in der Treiber aufgerufen werden, um diese Geräte zu verarbeiten.
Hinweis
Damit die oben genannten Szenarien wie beschrieben funktionieren, muss ein WDM-Treiber POWER IRPs ordnungsgemäß weiterleiten, wie in der aktuellen Version von Microsoft WDK beschrieben.
Szenario 1: Deaktivieren eines Geräts
Gerätetreiber: Speichert den proprietären Gerätezustand.
PCI-Treiber: Speichert Plug & Play Konfiguration, deaktiviert das Gerät (Interrupts und BARs) und platziert das Gerät mithilfe von PCI-PM-Registern in D3.
ACPI-Treiber: Führt ASL-Code (_PS3 und _OFF für Energieressourcen nicht mehr verwendet) aus, um den Zustand außerhalb des Chips zu steuern.
Szenario 2: PCI-Energieverwaltung und Gerätetreiber
ACPI-Treiber: Führt ASL-Code (_PS0 und _ON für alle erforderlichen OnNow-Energieressourcen) aus, um den Zustand außerhalb des Chips zu steuern.
PCI-Treiber: Fügt das Gerät mithilfe von PCI-PM-Registern in D0 ein und stellt Plug & Play Konfiguration wieder her (Interrupts und BARs– dies unterscheidet sich möglicherweise von dem, was das Gerät zuvor aktiviert hat).
Gerätetreiber: Stellt den proprietären Kontext auf dem Gerät wieder her.
Szenario 3: Aktivieren des Aufwachens
Gerätetreiber: Legt proprietäre Register im Chip fest, um das Wake-up zu ermöglichen. Bei mustergleicher Netzwerk-Wake-up würde dies beispielsweise der Fall sein, wenn die Muster in den Adapter programmiert werden.
PCI-Treiber: Legt die Aktivierungsbits in den PCI PM-Registern fest, damit das Gerät PME bestätigen kann.
ACPI-Treiber: Aktiviert die GPE im Chipsatz, der mit PME verknüpft ist (wie im _PRW-Objekt beschrieben, das unter dem Stamm-PCI-Bus aufgeführt ist).
Szenario 4: Aufwachen
ACPI-Treiber: Aktiviert und scannt die GPE-Statusbits auf Wake-Up-Ereignisse, deaktiviert GPEs für set GPE-Statusbits und führt alle _Lxx- oder _Exx Methoden aus, die mit set GPE-Bits verknüpft sind. Als Reaktion auf eine Wake-up-Benachrichtigung auf dem PCI-Bus schließt der ACPI-Treiber die WAIT_WAKE IRP des PCI-Treibers ab, um den PCI-Treiber darüber zu informieren, dass es das System aufwacht.
PCI-Treiber: Überprüft den Konfigurationsraum, der nach geräten mit einem festgelegten PME-Statusbit sucht. Für jedes Gerät deaktiviert es PME und schließt das WAIT_WAKE IRP für dieses Gerät ab, um den Treiber darüber zu informieren, dass er die Aktivierung bestätigt. Der PCI-Treiber stoppt die Überprüfung auf Wake-Geräte, wenn es einen vollständigen Durchlauf durch alle PCI-Geräte gemacht hat, die keine bestätigten PME gefunden haben, und wenn PME nicht mehr bestätigt wird.
Gerätetreiber: Fordert an, dass das Gerät in D0 gesetzt wird (siehe Szenario 2) und legt alle proprietären Register im Chip fest, die zum Behandeln des Wake-up-Ereignisses erforderlich sind.
Handlungsaufruf für PCI-Energieverwaltung und Gerätetreiber
Integrieren Sie ACPI- und PCI-PM-Funktionen wie in diesem Artikel beschrieben in Ihre Geräte.
Die PCI Power Management-Spezifikation ist auf der PCI-SIG-Website verfügbar.
ACPI-Spezifikation verfügbar unter https://www.uefi.org/specifications. Dieser Link verlässt die Microsoft.com Website.
Der ACPI Component Architecture (ACPICA)-Compiler finden Sie unter https://acpica.org/downloads/binary-tools.