POFXCALLBACKPROCESSORHALT-Rückruffunktion (pep_x.h)

Die ProcessorHalt-Routine bereitet den Prozessor auf das Anhalten vor.

Syntax

POFXCALLBACKPROCESSORHALT Pofxcallbackprocessorhalt;

NTSTATUS Pofxcallbackprocessorhalt(
  [in]                ULONG Flags,
  [in, out, optional] PVOID Context,
  [in]                PPROCESSOR_HALT_ROUTINE Halt
)
{...}

Parameter

[in] Flags

Flags, die die Eigenschaften des Leerlaufzustands angeben, den der Prozessor eingeben wird. Der Flags-Parameter ist auf null oder auf das bitweise OR eines oder mehrerer der folgenden Flagbits festgelegt.

Flagname Wert BESCHREIBUNG
PROCESSOR_HALT_CACHE_FLUSH_OVERRIDE 0x01 Die Rückrufroutine "Anhalten " des PEP ist für das Leeren der Caches des Prozessors verantwortlich. Wenn dieses Flag nicht festgelegt ist, löscht ProcessorHalt die Caches beim Eintritt in den Prozessor-Leerlaufzustand und ungültig die Caches beim Beenden dieses Zustands.
PROCESSOR_HALT_CACHE_COHERENT 0x02 Bereiten Sie den Prozessor so vor, dass er in einen Leerlaufzustand wechselt, in dem die Caches des Prozessors kohärent bleiben.
PROCESSOR_HALT_CONTEXT_RETAINED 0x04 Bereiten Sie den Prozessor so vor, dass er in einen Leerlaufzustand wechselt, in dem der Threadkontext des Prozessors beibehalten wird.
PROCESSOR_HALT_RETURN_NOT_SAFE 0x08 Die Rückrufroutine "Anhalten " des PEP wird garantiert nicht zurückgegeben. Legen Sie dieses Flag fest, wenn der Rückruf anhalten den Prozessor in einen Kontextverlustzustand übergibt, der von der Hardware nicht abgebrochen werden kann. Wenn dieses Flag festgelegt ist, behandelt das Betriebssystem eine Rückgabe des Rückrufs Anhalten als schwerwiegenden Fehler.
PROCESSOR_HALT_VIA_PSCI_CPU_SUSPEND 0x16

[in, out, optional] Context

Ein Zeiger auf einen durch PEP definierten Prozessorstoppkontext. Dieser Zeiger wird als Parameter an die Rückrufroutine "Anhalten" übergeben. Dieser Kontext ist für das Windows Power Management Framework (PoFx) nicht transparent.

[in] Halt

Ein Zeiger auf eine von PEP implementierte Rückrufroutine zum Anhalten . PoFx ruft diese Routine auf, nachdem die Vorbereitungen zum Anhalten des Prozessors abgeschlossen wurden. Während dieses Rückrufs wird erwartet, dass pep den Prozessor in den angehaltenen Zustand übergibt.

Rückgabewert

ProcessorHalt gibt STATUS_SUCCESS zurück, wenn der Prozessor erfolgreich zum Anhalten vorbereitet ist. Mögliche Fehlerrückgabewerte sind der folgende status Code.

Rückgabewert BESCHREIBUNG
STATUS_INVALID_PARAMETER
Der Halt-Parameter ist NULL. oder ein ungültiger Flagwert wurde in Flags angegeben; oder Flags enthält eine unzulässige Kombination von Flagbits. Weitere Informationen finden Sie in den Hinweisen.
STATUS_UNSUCCESSFUL
Die Rückrufroutine "Anhalten " des PEP wurde unerwartet aus einem Leerlaufzustand zurückgegeben, in dem der Hardwarekontext des Prozessors nicht beibehalten wurde.

Hinweise

Diese Routine wird vom Power Management Framework (PoFx) implementiert und vom Plattformerweiterungs-Plug-In (PEP) aufgerufen. Der ProcessorHalt-Member der PEP_KERNEL_INFORMATION_STRUCT_V3-Struktur ist ein Zeiger auf eine ProcessorHalt-Routine .

Vor dem Anhalten des Prozessors ruft pep die ProcessorHalt-Routine auf, um PoFx die Möglichkeit zu geben, den Hardwarekontext des Prozessors zu speichern. Bei Bedarf speichert ProcessorHalt diesen Zustand intern in PoFx, sodass der Zustand später wiederhergestellt werden kann, wenn der Prozessor den Leerlaufzustand verlässt. Nachdem der Prozessor für den Wechsel in den Leerlaufzustand vorbereitet wurde, ruft ProcessorHalt die Rückrufroutine "Anhalten " des PEP auf, um den Prozessor anzuhalten.

Im Rahmen der Behandlung einer PEP_NOTIFY_PPM_IDLE_EXECUTE-Benachrichtigung durch pep muss der Pep den Prozessor in den Leerlaufzustand übergehen, den der PEP ausgewählt hat. Im Folgenden finden Sie zwei Möglichkeiten zum Eingeben des Prozessor-Leerlaufzustands:

  • Für einen Prozessor-Leerlaufzustand, in dem die Caches des Prozessors kohärent bleiben, sodass der gesamte System- und Prozessorzustand beibehalten wird, kann pep direkt in den Leerlaufzustand wechseln, ohne zuerst ProcessorHalt aufzurufen.
  • Für einen Prozessor-Leerlaufzustand, in dem die Caches des Prozessors möglicherweise nicht kohärent bleiben, oder für einen Leerlaufzustand, in dem der Prozessorhardwarekontext nicht beibehalten wird, muss pep ProcessorHalt aufrufen, bevor der Prozessor in den Leerlaufzustand übergibt.
Die folgenden Kombinationen von Flagbits sind unzulässig:
  • PROCESSOR_HALT_CONTEXT_RETAINED = 1 und PROCESSOR_HALT_RETURN_NOT_SAFE = 1

    Die Rückrufroutine "Anhalten " des PEP muss aus jedem Zustand zurückgegeben werden, in dem der Kontext beibehalten wird.

  • PROCESSOR_HALT_CACHE_FLUSH_OVERRIDE = 1 und PROCESSOR_HALT_CACHE_COHERENT = 1

    Das Flag cache-flush-override sollte nur dann festgelegt werden, wenn ein Leerlaufzustand eintritt, der nicht im Cache kohärent ist.

  • PROCESSOR_HALT_CACHE_FLUSH_OVERRIDE = 0 und PROCESSOR_HALT_CACHE_COHERENT = 0

    Das Cacheleerer-Außerkraftsetzungsflag muss für jeden nicht im Cache zusammenhängenden Stopp festgelegt werden.

  • PROCESSOR_HALT_CONTEXT_RETAINED = 0 und PROCESSOR_HALT_CACHE_COHERENT = 1

    Alle Leerlaufzustände, die den Prozessorhardwarekontext verlieren (und daher das Multiprozessor-Parkprotokoll verwenden, um den Leerlaufzustand zu beenden und die Steuerung an das Betriebssystem zurückzugeben) sind keine cachekohärenten Zustände.

Wenn der Flags-Parameter eine unzulässige Kombination von Flagbits enthält, schlägt ProcessorHalt fehl und gibt STATUS_INVALID_PARAMETER zurück.

Der PEP kann diese Routine unter IRQL <= HIGH_LEVEL aufrufen.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Unterstützt ab Windows 10.
Zielplattform Windows
Kopfzeile pep_x.h (Pep_x.h einschließen)
IRQL <= HIGH_LEVEL

Weitere Informationen

PEP_KERNEL_INFORMATION_STRUCT_V3

PEP_NOTIFY_PPM_IDLE_EXECUTE