Freigeben über


POFXCALLBACKPROCESSORHALT-Rückruffunktion (pepfx.h)

Die ProcessorHalt-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 Leerlaufzustands angeben, den der Prozessor eingeben wird. Der Flags-Parameter ist auf 0 oder auf den bitweisen 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 die Caches werden beim Beenden dieses Zustands ungültig.
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 kontextverlustbehafteten Powergated-Zustand übergibt, der nicht von der Hardware 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) undurchsichtig.

[in] Halt

Ein Zeiger auf eine von PEP implementierte Stopp-Rückrufroutine. 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 überwechselt .

Rückgabewert

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

Rückgabewert BESCHREIBUNG
STATUS_INVALID_PARAMETER
Der Stopp-Parameter ist NULL. oder ein ungültiger Flagwert in Flags angegeben wurde. 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. Das ProcessorHalt-Element 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 beendet. Nach der Vorbereitung des Prozessors für den Eintritt in den Leerlaufzustand 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 überwechseln, den der PEP ausgewählt hat. Im Folgenden finden Sie zwei Möglichkeiten, in den Leerlaufzustand des Prozessors zu gelangen:

  • Für einen Prozessor-Leerlaufzustand, in dem die Caches des Prozessors kohärent bleiben, sodass der gesamte System- und Prozessorzustand beibehalten wird, kann der 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 der PEP ProcessorHalt aufrufen, bevor der Prozessor in den Leerlaufzustand überwechselt.
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 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 im Cache kohärent ist.

  • PROCESSOR_HALT_CACHE_FLUSH_OVERRIDE = 0 und PROCESSOR_HALT_CACHE_COHERENT = 0

    Das Cache-flush-override-Flag muss für jeden kohärenten Nicht-Cache-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.

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

Anforderungen

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

Weitere Informationen

PEP_KERNEL_INFORMATION_STRUCT_V3

PEP_NOTIFY_PPM_IDLE_EXECUTE