Freigeben über


ACX-Energieverwaltung

In diesem Thema wird die AcX-Energieverwaltung erläutert. Informationen zur ACX-Geräteenumerierung, zum Starten und Herunterfahren sowie zum Geräteausgleich finden Sie unter ACX-Geräteenumerierung. Eine allgemeine Übersicht über ACX finden Sie in der Übersicht über ACX-Audioklassenerweiterungen.

ACX nutzt das WDF KMDF PnP-Leistungsverhalten. Weitere Informationen zu KMDF-Energieverwaltungssequenzen finden Sie unter PnP- und Power Management-Rückrufsequenzen.

Es wird empfohlen, dass ACX-Treiber WDF Power Management vollständig implementieren, z. B. durch Implementieren der WDF_PNPPOWER_EVENT_CALLBACKS-Struktur. Weitere Informationen finden Sie unter Unterstützen von PnP und Power Management in Ihrem Treiber.

Unerwartetes Entfernen des ACX-Geräts

Das WDF-Framework kann evtDeviceSurpriseRemoval jederzeit aufrufen, d. h., dieser Rückruf wird nicht mit der Power Down-Sequenz serialisiert. Der WDF-Treiber sollte keine Maßnahmen ergreifen, wenn dieser Rückruf erfolgt, außer zu beachten, dass das Gerät unerwartet entfernt wurde.

Die Power-Down-Rückrufsequenz für überraschendes Entfernen ist identisch mit dem Power-Down-Dx- und Remove-Fall. WDF ruft nicht die folgenden Rückrufe auf dem Pfad für überraschendes Entfernen auf:

Weitere Informationen finden Sie unter PnP- und Power Management-Rückrufsequenzen und "Power-Managed" E/A-Warteschlangen verwenden.

Einschaltung und Start des ACX-Schaltkreises

Ein "dynamisches" AcxCircuit kann jederzeit hinzugefügt werden. Der Treiber erstellt ein neues untergeordnetes PDO-Gerät und ordnet das neue AcxCircuit zu, wenn er den WDF PrepareHardware-Rückruf für dieses PDO-Gerät bearbeitet. Die Lebensdauer eines "dynamischen" Schaltkreises ist nicht an die Lebensdauer des FDO gebunden.

Ein „statischer“ AcxCircuit kann nur hinzugefügt werden, wenn der Treiber den WDF PrepareHardware-Rückruf für sein FDO-Gerät ausführt. Die Lebensdauer eines statischen Schaltkreises ist an die Lebensdauer des FDO gebunden.

Ein ACX-Treiber kann während des Einschaltvorgangs auch AcxFactoryCircuit-Objekte (Schaltkreisanbieter) mithilfe der AcxFactoryCircuitCreate-Funktion erstellen. Ein AcxFactoryCircuit -Objekt verwendet dynamische Schaltkreiserstellung zum Hinzufügen von ACXCIRCUITS, wenn von ACX angefordert. Dieses Feature ist sehr nützlich beim Erstellen komplexer Endpunkte, d. h. eines Audioendpunkts, der aus zwei oder mehr ACXCIRCUITs besteht.

Der ACX-Schaltkreis definiert die folgenden Rückrufe, die während der AcxCircuit/Audio-Endpunktinitialisierung aufgerufen werden:

  • EvtAcxCircuitPrepareHardware: ACX ruft diesen Rückruf direkt nach der Bereitstellung des WDF-Hardwarerückrufs durch WDF auf. Es bietet dem Treiber die Möglichkeit, alle für den Schaltkreis spezifischen "Vorbereitungshardware" durchzuführen. Dieser Aufruf wird von ACX serialisiert. Das Gerät befindet sich nicht in D0, wenn dieser Aufruf aufgerufen wird.

  • EvtAcxCircuitPowerUp: ACX ruft diesen Callback direkt nach der Rückkehr aus Dx auf. Dieser Aufruf wird von ACX serialisiert. Das Gerät befindet sich in D0.

Für komplexe Endpunkte kann AcxCircuits optional für diese Rückrufe registrieren:

  • EvtAcxCircuitCompositeCircuitInitialize, zum ersten Mal aufgerufen, wenn ACX erkennt, dass dieses ACXCIRCUIT sichtbar ist, d. h., in dem Moment, in dem das zugeordnete Gerät in den Leistungszustand D0 wechselt und diesen Schaltkreis für Entitäten außerhalb seines eigenen Stapels sichtbar macht. Die Audioschnittstellen des Schaltkreises befinden sich weiterhin im OFF-Zustand.

  • EvtAcxCircuitCompositeInitialize, wird jedes Mal aufgerufen, wenn ACX die Initialisierung eines zusammengesetzten Endpunkts abschließt. Nach diesem Rückruf aktiviert ACX die Audioschnittstellen dieses Schaltkreises.

  • EvtAcxCircuitCompositeDeinitialize, wird jedes Mal aufgerufen, wenn ACX einen zusammengesetzten Endpunkt abbaut. Treiber erhalten diesen Rückruf möglicherweise nicht, wenn ihr eigener Stapel unerwartet entfernt wurde oder wenn sie E/A nicht verarbeiten können.

Falls vorhanden, werden Streaminstanzen in ihren Vor-Leistungs-Down-Zuständen wiederhergestellt.

Stromabschaltung und Entfernung des ACX-Schaltkreises

Ein dynamischer AcxCircuit kann jederzeit entfernt werden, indem das dem Schaltkreis zugeordnete Geräteobjekt ungültig gemacht und entfernt wird. Der zugeordnete Schaltkreis kann vom entfernten Gerät entfernt/getrennt werden, wenn der Treiber die WDF PrepareHardware/ReleaseHardware-Rückrufe für dieses PDO-Gerät verarbeitet. Wie bereits erwähnt, ist die Lebensdauer eines "dynamischen" Schaltkreises nicht an die Lebensdauer des FDO gebunden.

Ein "static" AcxCircuit kann nur entfernt werden, wenn der Treiber die WDF PrepareHardware/ReleaseHardware-Rückrufe für sein FDO-Gerät verarbeitet. Die Lebensdauer eines statischen Schaltkreises ist an die Lebensdauer des FDO gebunden.

Der Treiber kann ein AcxFactoryCircuit (Schaltkreisanbieter) in den WDF-PrepareHardware/ReleaseHardware-Rückrufen entfernen. Das Entfernen eines AcxFactoryCircuits bewirkt das Entfernen aller zugehörigen "dynamischen" AcxCircuits. AcxCircuit(s) kann auch entfernt werden, wenn der ACX-Manager eine Schaltkreisfertigung anweist, einen bestimmten Schaltkreis zu entfernen, oder wenn der ACX-Manager seine AcxFactoryCircuit-Handles schließt - in diesem Szenario schließt ACX alle Schaltkreise, die diesem Handle zugeordnet sind.

Die ACX_CIRCUIT_PNPPOWER_CALLBACKS Struktur beschreibt die folgenden Rückrufe, die von einem ACX-Treiber verwendet werden können.

  • EvtAcxCircuitPowerDown: ACX ruft diesen Rückruf direkt vor dem Wechsel in Sx/Dx/Stop/Removal/SurpriseRemoval auf und wenn der Treiber den Schaltkreis entfernt. Dieser Aufruf wird von ACX serialisiert. Das Gerät befindet sich im Zustand D0, beachten Sie jedoch, dass das Gerät jederzeit unerwartet entfernt werden könnte (was bedeutet, dass die zugeordnete Hardware nicht mehr vorhanden ist).

  • EvtAcxCircuitReleaseHardware: ACX ruft diesen Rückruf direkt vor dem WDF-Release-Hardwarerückruf auf. Es gibt dem Fahrer die Möglichkeit, Aufräumarbeiten durchzuführen, während der Schaltkreis noch aktiv ist. Dieser Aufruf wird von ACX serialisiert. Das Gerät befindet sich nicht in D0, wenn dieser Aufruf aufgerufen wird.

  • EvtWdfObjectContextCleanup: WDF ruft diesen Rückruf auf, wenn das WDF/ACX-Objekt gelöscht wird. Dieser Aufruf ist synchron mit dem Löschen des WDF-Objektaufrufs. Das Gerät befindet sich möglicherweise nicht in D0, wenn dieser Aufruf aufgerufen wird. Der Rückruf wird auf passiver Ebene ausgeführt.

  • EvtWdfObjectContextDestroy: WDF ruft diesen Callback auf, nachdem der letzte Verweis auf dieses Objekt entfernt wurde. Dieser Aufruf ist asynchron mit dem Löschen des WDF-Objektaufrufs. Das Gerät befindet sich möglicherweise nicht in D0, wenn dieser Aufruf aufgerufen wird. Dieser Rückruf wird erst aufgerufen, nachdem der letzte Verweis auf das Objekt entfernt wurde. Der Rückruf wird auf <= DPC-Ebene ausgeführt. Die genaue IRQL hängt von der IRQL des Threads ab, der die letzte Referenz veröffentlicht.

Verwaltung des Leerlaufmodus von ACX-Geräten

ACX nutzt die WDF-Leerlaufverwaltungsinfrastruktur. ACX-Treiber verwenden die folgenden WDF-DDIs, um die Leerlaufverwaltung zu aktivieren:

  • WdfDeviceAssignS0IdleSettings: Dieser Aufruf gibt den Typ des Leerlauftimeouts und der Leerlaufverwaltung an. Der ACX-Treiber hat die Freiheit, die passende Einstellung für sein Gerät zu wählen.

  • WdfDeviceStopIdle: Dieser Aufruf verhindert, dass sich das Gerät im Leerlauf befindet. Beachten Sie, dass sein Anruf Sx-Anforderungen nicht blockiert. Das heißt, das Gerät wechselt in Dx unabhängig von der Anzahl der aktiven Leistungsreferenzen, wenn das System in einen niedrigeren Leistungszustand wechselt.

  • WdfDeviceResumeIdle: Mit diesem Aufruf kann das Gerät das Leerlauftimeout neu starten.

In einem Szenario mit mehreren Stacks/Schaltkreisen können verschiedene Stacks unterschiedliche Leerlauftimeouts aufweisen. Dies liegt an den unterschiedlichen Energieeinstellungen/Anforderungen jedes Stapels, sodass unterschiedliche Leerlauftimeouts geeignet sind. Allgemeine Informationen zum Mehrfach-Stack finden Sie unter ACX multi stack cross driver communications.

ACX-Treiber und energieverwaltete Warteschlangen

WDF unterstützt energieverwaltete E/A-Warteschlangen. Diese Art von Warteschlange ist vollständig in die WDF-Energieverwaltung integriert. WDF ruft die Callback-Funktionen der Warteschlange in verschiedenen Schritten der WDF-Sequenz zum Hoch- und Herunterfahren der Stromversorgung auf. Weitere Informationen finden Sie unter Verwendung von Power-Managed E/A-Warteschlangen.

ACX-Treiber können diese Art von Warteschlange nur verwenden, wenn der Treiber nicht die Single-/Multi-Komponenten mit der Multi-State-(Fx)-Funktion nutzt.

ACX-Treiber und D3Hot /D3Cold (D3)-Zustände

Audiotreiber wissen, wann sie basierend auf den in der ACX_DX_EXIT_LATENCY-Enumeration verfügbaren Informationen in den Zustand D3Hot oder D3Cold wechseln.

typedef enum _ACX_DX_EXIT_LATENCY { 
  AcxDxExitLatencyInstant     = 0,
  AcxDxExitLatencyFast,
  AcxDxExitLatencyResponsive
} ACX_DX_EXIT_LATENCY;

AcxDxExitLatencyFast entspricht D3Hot (DSP on) und AcxDxExitLatencyResponsive entspricht D3Cold (DSP off).

Audiotreiber können den ACX_DX_EXIT_LATENCY-Wert abrufen, indem die AcxDeviceGetCurrentDxExitLatency-Funktion aufgerufen wird.

WDF kennt die D3Cold-Funktionen des Treibers über das ExcludeD3Cold-Feld des WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS. Der Treiber übergibt diese Struktur als Eingabe an WdfDeviceAssignS0IdleSettings.

WDF-Treiber können die WdfDeviceAssignS0IdleSettings mehrmals aufrufen, um D3Cold abhängig von der Systemumgebung, d.h. als Reaktion auf ACX, zu aktivieren oder zu deaktivieren. Weitere Informationen finden Sie unter der Struktur WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS.

Power Management Framework (PoFx) und vom Treiber verwalteter Leerlauftimeout

Component-Level Energiemanagement

Beachten Sie, dass WDF die Fx-Zustände von Geräten/Komponenten nicht direkt unterstützt. Um diese Zustände zu verwenden, muss der Treiber ein vom Treiber verwaltetes Leerlauftimeout verwenden. Weitere Informationen zur Verwendung von Fx-Gerätekomponentenzuständen und Leerlauftimeouts, die vom Treiber verwaltet werden, finden Sie in den folgenden Themen.

Leistungsmanagement-Framework (PoFx)

Windows bietet ein Laufzeit-Power Management Framework (PoFx), das Unterstützung für die Energieverwaltung auf Komponentenebene hinzufügt. Eine Komponente oder Unterkomponente ist eine funktionale Hardwareeinheit in einem Gerät, die unabhängig von den anderen Komponenten desselben Geräts eingeschaltet oder in einen Energiesparzustand gewechselt werden kann. Weitere Informationen finden Sie unter Übersicht über das Power Management Framework.

Siehe auch

ACX-Geräteaufzählung

ACX-Referenzdokumentation

Übersicht über ACX-Audioklassenerweiterungen

Verwenden von Power-Managed E/A-Warteschlangen.

PnP- und Power Management-Rückrufsequenzen