Condividi tramite


Funzione di callback POFXCALLBACKPROCESSORHALT (pep_x.h)

La routine ProcessorHalt prepara il processore da arrestare.

Sintassi

POFXCALLBACKPROCESSORHALT Pofxcallbackprocessorhalt;

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

Parametri

[in] Flags

Flag che indicano le proprietà dello stato di inattività immesso dal processore. Il parametro Flags è impostato su zero o sull'OR bit per bit di uno o più dei bit di flag seguenti.

Nome contrassegno Valore Descrizione
PROCESSOR_HALT_CACHE_FLUSH_OVERRIDE 0x01 La routine di callback Stop di PEP è responsabile dello scaricamento delle cache del processore. Se questo flag non è impostato, ProcessorHalt scarica le cache all'ingresso nello stato di inattività del processore e invalida le cache all'uscita da questo stato.
PROCESSOR_HALT_CACHE_COHERENT 0x02 Preparare il processore per immettere uno stato di inattività in cui le cache del processore rimarranno coerenti.
PROCESSOR_HALT_CONTEXT_RETAINED 0x04 Preparare il processore per immettere uno stato di inattività in cui verrà mantenuto il contesto del thread del processore.
PROCESSOR_HALT_RETURN_NOT_SAFE 0x08 La routine di callback Stop del PEP non viene restituita. Impostare questo flag se il callback Interrompi esegue la transizione del processore a uno stato di perdita del contesto e di controllo dell'alimentazione che non può essere annullato dall'hardware. Quando questo flag è impostato, il sistema operativo considererà un ritorno dal callback Di interruzione come errore irreversibile.
PROCESSOR_HALT_VIA_PSCI_CPU_SUSPEND 0x16

[in, out, optional] Context

Puntatore a un contesto di interruzione del processore definito da PEP. Questo puntatore viene passato come parametro alla routine di callback Halt . Questo contesto è opaco al framework di risparmio energia di Windows (PoFx).

[in] Halt

Puntatore a una routine di callback Stop implementata da PEP. PoFx chiama questa routine dopo il completamento delle operazioni di preparazione per interrompere il processore. Durante questo callback, si prevede che il PEP passi il processore allo stato arrestato .

Valore restituito

ProcessorHalt restituisce STATUS_SUCCESS se il processore è pronto per essere arrestato correttamente. I valori restituiti di errore possibili includono il codice di stato seguente.

Valore restituito Descrizione
STATUS_INVALID_PARAMETER
Il parametro Halt è NULL; o un valore di flag non valido è stato specificato in Flags; o Flag contiene una combinazione non valida di bit di flag. Per altre informazioni, vedere la sezione Osservazioni.
STATUS_UNSUCCESSFUL
La routine di callback Stop di PEP ha restituito in modo imprevisto da uno stato di inattività in cui il contesto hardware del processore non è stato mantenuto.

Commenti

Questa routine viene implementata dal framework di risparmio energia (PoFx) e viene chiamata dal plug-in di estensione della piattaforma (PEP). Il membro ProcessorHalt della struttura PEP_KERNEL_INFORMATION_STRUCT_V3 è un puntatore a una routine ProcessorHalt .

Prima di interrompere il processore, il PEP chiama la routine ProcessorHalt per offrire a PoFx l'opportunità di salvare il contesto hardware del processore. Se necessario, ProcessorHalt salva questo stato internamente in PoFx in modo che lo stato possa essere ripristinato in un secondo momento quando il processore esce dallo stato di inattività. Dopo aver preparato il processore per entrare nello stato di inattività, ProcessorHalt chiama la routine di callback Stop del PEP per arrestare il processore.

Nell'ambito della gestione del PEP di una notifica di PEP_NOTIFY_PPM_IDLE_EXECUTE , il PEP deve trasferire il processore allo stato di inattività selezionato dal PEP. Di seguito sono riportati i due modi per entrare nello stato di inattività del processore:

  • Per uno stato di inattività del processore in cui le cache del processore rimangono coerenti in modo che venga mantenuto tutto lo stato del sistema e del processore, il PEP può entrare direttamente nello stato di inattività senza prima chiamare ProcessorHalt.
  • Per uno stato di inattività del processore in cui le cache del processore potrebbero non rimanere coerenti o uno stato di inattività in cui il contesto hardware del processore non viene mantenuto, il PEP deve chiamare ProcessorHalt prima di passare il processore allo stato di inattività.
Le seguenti combinazioni di bit di flag sono illegali:
  • PROCESSOR_HALT_CONTEXT_RETAINED = 1 e PROCESSOR_HALT_RETURN_NOT_SAFE = 1

    La routine di callback Stop di PEP deve restituire da qualsiasi stato in cui viene mantenuto il contesto.

  • PROCESSOR_HALT_CACHE_FLUSH_OVERRIDE = 1 e PROCESSOR_HALT_CACHE_COHERENT = 1

    Il flag cache-flush-override deve essere impostato solo se si immette uno stato di inattività che non è coerente nella cache.

  • PROCESSOR_HALT_CACHE_FLUSH_OVERRIDE = 0 e PROCESSOR_HALT_CACHE_COHERENT = 0

    Il flag cache-flush-override deve essere impostato per qualsiasi interruzione coerente della cache.

  • PROCESSOR_HALT_CONTEXT_RETAINED = 0 e PROCESSOR_HALT_CACHE_COHERENT = 1

    Gli stati di inattività che perdono il contesto hardware del processore (e quindi usano il protocollo di parcheggio multiprocessore per uscire dallo stato di inattività e restituire il controllo al sistema operativo) non sono stati coerenti con la cache.

Se il parametro Flags contiene una combinazione non valida di bit di flag, ProcessorHalt ha esito negativo e restituisce STATUS_INVALID_PARAMETER.

Il PEP può chiamare questa routine in IRQL <= HIGH_LEVEL.

Requisiti

Requisito Valore
Client minimo supportato Supportato a partire da Windows 10.
Piattaforma di destinazione Windows
Intestazione pep_x.h (includere Pep_x.h)
IRQL <= HIGH_LEVEL

Vedi anche

PEP_KERNEL_INFORMATION_STRUCT_V3

PEP_NOTIFY_PPM_IDLE_EXECUTE