Freigeben über


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 eingibt. Der parameter Flags wird auf null oder auf das bitweise ODER eines oder mehrerer der folgenden Flagbits festgelegt.

Flagname Wert Beschreibung
PROCESSOR_HALT_CACHE_FLUSH_OVERRIDE 0x01 Die PEP-Stopp Rückrufroutine ist für das Leeren der Caches des Prozessors verantwortlich. Wenn dieses Flag nicht festgelegt ist, löscht ProcessorHalt die Caches beim Eintrag im Leerlaufzustand des Prozessors und ungültige Caches beim Beenden aus diesem Zustand.
PROCESSOR_HALT_CACHE_COHERENT 0x02 Bereiten Sie den Prozessor auf einen Leerlaufzustand vor, in dem die Caches des Prozessors kohärent bleiben.
PROCESSOR_HALT_CONTEXT_RETAINED 0x04 Bereiten Sie den Prozessor auf einen Leerlaufzustand vor, in dem der Threadkontext des Prozessors erhalten bleibt.
PROCESSOR_HALT_RETURN_NOT_SAFE 0x08 Die PEP Stopp Rückrufroutine wird garantiert nicht zurückgegeben. Legen Sie dieses Kennzeichen fest, wenn der Anhalten Rückruf den Prozessor in einen Kontextverlustzustand übergibt, der von der Hardware nicht abgebrochen werden kann. Wenn dieses Kennzeichen festgelegt ist, behandelt das Betriebssystem eine Rückgabe vom Anhalten Rückruf als schwerwiegender Fehler.
PROCESSOR_HALT_VIA_PSCI_CPU_SUSPEND 0x16

[in, out, optional] Context

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

[in] Halt

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

Rückgabewert

ProcessorHalt gibt STATUS_SUCCESS zurück, wenn der Prozessor erfolgreich bereit ist, angehalten zu werden. Mögliche Fehlerrücklaufwerte sind der folgende Statuscode.

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

Bemerkungen

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

Vor dem Anhalten des Prozessors ruft der 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. Nach der Vorbereitung des Prozessors auf den Leerlaufzustand ruft ProcessorHalt die PEP-Anhalten Rückrufroutine auf, um den Prozessor anzuhalten.

Im Rahmen der PEP-Behandlung einer PEP_NOTIFY_PPM_IDLE_EXECUTE Benachrichtigung muss der PEP den Prozessor in den Leerlaufzustand überstellen, den der PEP ausgewählt hat. Im Folgenden sind die beiden Methoden zum Eingeben des Prozessor-Leerlaufzustands aufgeführt:

  • Für einen Leerlaufzustand des Prozessors, in dem die Caches des Prozessors kohärent bleiben, damit der gesamte System- und Prozessorzustand beibehalten wird, kann der PEP direkt in den Leerlaufzustand wechseln, ohne zuerst ProcessorHaltaufzurufen.
  • Für einen Leerlaufzustand des Prozessors, in dem die Caches des Prozessors möglicherweise nicht kohärent bleiben, oder ein Leerlaufzustand, in dem der Prozessorhardwarekontext nicht erhalten bleibt, muss der PEP ProcessorHalt aufrufen, bevor er den 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 PEP-Stopp Rückrufroutine muss von 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 festgelegt werden, wenn ein Leerlaufzustand eingegeben wird, der nicht zwischengespeichert wird.

  • PROCESSOR_HALT_CACHE_FLUSH_OVERRIDE = 0 und PROCESSOR_HALT_CACHE_COHERENT = 0

    Das Flag "Cache-Flush-Override" muss für einen nicht zwischengespeicherten kohärenten Halt 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 cacheeinheitlichen Zustände.

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

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

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Wird ab Windows 10 unterstützt.
Zielplattform- Fenster
Header- pep_x.h (einschließen Pep_x.h)
IRQL- <= HIGH_LEVEL

Siehe auch

PEP_KERNEL_INFORMATION_STRUCT_V3

PEP_NOTIFY_PPM_IDLE_EXECUTE