POFXCALLBACKPROCESSORHALT-Rückruffunktion (pepfx.h)

Die ProzessorHalt-Routine bereitet den Prozessor darauf vor, angehalten zu werden.

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 Leerlaufstatus angeben, in den der Prozessor eingegeben wird. Der Parameter " Flags " wird auf null oder auf "Bitweise" von mindestens einem der folgenden Flag-Bits festgelegt.

Flagname Wert BESCHREIBUNG
PROCESSOR_HALT_CACHE_FLUSH_OVERRIDE 0x01 Die Rückrufroutine "Stopp" des PEP ist für die Löschung der Caches des Prozessors verantwortlich. Wenn dieses Flag nicht festgelegt ist, löscht ProcessorHalt die Caches beim Eintrag zum Leerlaufzustand des Prozessors, und ungültig werden die Caches beim Beenden dieses Zustands.
PROCESSOR_HALT_CACHE_COHERENT 0x02 Bereiten Sie den Prozessor darauf vor, einen Leerlaufstatus einzugeben, in dem die Caches des Prozessors zusammenhängend bleiben.
PROCESSOR_HALT_CONTEXT_RETAINED 0x04 Bereiten Sie den Prozessor darauf vor, einen Leerlaufstatus einzugeben, in dem der Threadkontext des Prozessors beibehalten wird.
PROCESSOR_HALT_RETURN_NOT_SAFE 0x08 Die Rückrufroutine des PEP ist garantiert nicht zurückzugeben. Legen Sie dieses Flag fest, wenn der Rückrufstopp den Prozessor zu einem kontextverlustden, power-gated-Zustand übergibt, der von Hardware nicht abgebrochen werden kann. Wenn dieses Flag festgelegt ist, behandelt das Betriebssystem eine Rückgabe aus dem Stopp-Rückruf als tödlichen 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 Rückrufroutine "Stopp " übergeben. Dieser Kontext ist undurchsichtig für das Windows Power Management Framework (PoFx).

[in] Halt

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

Rückgabewert

ProcessorHalt gibt STATUS_SUCCESS zurück, wenn der Prozessor erfolgreich bereit ist, angehalten zu werden. Mögliche Fehlerrückgabewerte umfassen den folgenden Statuscode.

Rückgabewert BESCHREIBUNG
STATUS_INVALID_PARAMETER
Der Parameter "Stopp " ist NULL; oder ein ungültiger Flagwert wurde in Flags angegeben; oder Flags enthält eine illegale Kombination von Flag-Bits. Weitere Informationen finden Sie in den Hinweisen.
STATUS_UNSUCCESSFUL
Die Rückrufroutine des PEP wurde 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 wird vom Plattformerweiterungs-Plug-In (PEP) aufgerufen. Das ProzessorHalt-Element der PEP_KERNEL_INFORMATION_STRUCT_V3 Struktur ist ein Zeiger auf eine ProzessorHalt-Routine .

Bevor der Prozessor beendet wird, ruft die PEP die Prozessorhalt-Routine auf, um PoFx eine Möglichkeit zu geben, den Hardwarekontext des Prozessors zu speichern. Falls erforderlich, speichert ProcessorHalt diesen Zustand intern in PoFx, sodass der Zustand später wiederhergestellt werden kann, wenn der Prozessor den Leerlaufzustand beendet. Nach dem Vorbereiten des Prozessors zum Eingeben des Leerlaufzustands ruft ProcessorHalt die Rückrufroutine "Stopp" auf, um den Prozessor zu beenden.

Im Rahmen der Behandlung einer PEP_NOTIFY_PPM_IDLE_EXECUTE Benachrichtigung muss der PEP den Verarbeiter in den Leerlaufzustand überstellen, dass die PEP ausgewählt hat. Im Folgenden finden Sie die beiden Möglichkeiten zum Eingeben des Leerlaufs des Prozessors:

  • Für einen Verarbeiter-Leerlaufzustand, in dem die Caches des Prozessors zusammenhängend bleiben, damit alle System- und Prozessorstatus beibehalten werden, kann die PEP den Leerlaufstatus direkt eingeben, ohne zuerst ProzessorHalt aufrufen zu müssen.
  • Bei einem Leerlaufzustand des Prozessors, in dem die Caches des Prozessors möglicherweise nicht zusammenhängend bleiben, oder einen Leerlaufzustand, in dem der Prozessorhardwarekontext nicht beibehalten wird, muss der PEP ProzessorHalt aufrufen, bevor er den Prozessor in den Leerlaufzustand übergibt.
Die folgenden Kombinationen von Flag-Bits sind illegal:
  • PROCESSOR_HALT_CONTEXT_RETAINED = 1 und PROCESSOR_HALT_RETURN_NOT_SAFE = 1

    Die Rückrufroutine "Stopp" 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 Cache-Flush-Override-Flag 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 Cache-Flush-Außerkraftsetzungs-Flag muss für jeden nicht-Cache-kohärenten Stopp festgelegt werden.

  • PROCESSOR_HALT_CONTEXT_RETAINED = 0 und PROCESSOR_HALT_CACHE_COHERENT = 1

    Alle Leerlaufzustände, die den Hardwarekontext des Prozessors verlieren (und daher das Multiprocessor-Parkprotokoll verwenden, um den Leerlaufstatus zu beenden und die Steuerung für das Betriebssystem zurückzugeben) sind keine Cache-kohärenten Zustände.

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

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

Anforderungen

   
Unterstützte Mindestversion (Client) Unterstützt ab Windows 10.
Zielplattform Windows
Kopfzeile pepfx.h (enthalten Pep_x.h)
IRQL <= HIGH_LEVEL

Weitere Informationen

PEP_KERNEL_INFORMATION_STRUCT_V3

PEP_NOTIFY_PPM_IDLE_EXECUTE