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 |
---|---|
|
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. |
|
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.
-
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.
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 |