Funzione di callback POFXCALLBACKPROCESSORHALT (pepfx.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 inattiva immesso dal processore. Il parametro Flags è impostato su zero o sul bit-OR di uno o più bit di flag seguenti.
Nome flag | 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 sullo stato di inattività del processore e invaliderà le cache in uscita da questo stato. |
PROCESSOR_HALT_CACHE_COHERENT | 0x02 | Preparare il processore per immettere uno stato inattiva in cui le cache del processore rimarranno coerenti. |
PROCESSOR_HALT_CONTEXT_RETAINED | 0x04 | Preparare il processore per immettere uno stato inattiva in cui verrà mantenuto il contesto del thread del processore. |
PROCESSOR_HALT_RETURN_NOT_SAFE | 0x08 | La routine di callback stop di PEP è garantita per non restituire. Impostare questo flag se il callback Arresta esegue la transizione del processore a uno stato di perdita del contesto, che non può essere annullato dall'hardware. Quando questo flag è impostato, il sistema operativo considera un ritorno dal callback Arresta come errore irreversibile. |
PROCESSOR_HALT_VIA_PSCI_CPU_SUSPEND | 0x16 |
[in, out, optional] Context
Puntatore a un contesto di arresto del processore definito da PEP. Questo puntatore viene passato come parametro alla routine Arresta callback. Questo contesto è opaco al framework di gestione energia di Windows (PoFx).
[in] Halt
Puntatore a una routine di callback interrotta implementata da PEP. PoFx chiama questa routine dopo la preparazione per arrestare il processore. Durante questo callback, il PEP dovrebbe passare il processore allo stato arrestato .
Valore restituito
ProcessorHalt restituisce STATUS_SUCCESS se il processore è riuscito a essere arrestato. I valori restituiti degli errori possibili includono il codice di stato seguente.
Valore restituito | Descrizione |
---|---|
|
Il parametro Halt è NULL; o un valore di flag non valido è stato specificato in Flags; o Flag contiene una combinazione illegale di bit di flag. Per altre informazioni, vedere la sezione Osservazioni. |
|
La routine di callback stop di PEP ha restituito in modo imprevisto da uno stato inattivo 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 dell'estensione della piattaforma (PEP). Il membro ProcessorHalt della struttura PEP_KERNEL_INFORMATION_STRUCT_V3 è un puntatore a una routine ProcessorHalt .
Prima di arrestare il processore, il PEP chiama la routine ProcessorHalt per offrire a PoFx un'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 seguito quando il processore termina lo stato inattiva. Dopo aver preparato il processore per immettere lo stato inattivo, ProcessorHalt chiama la routine di callback Stop del PEP per arrestare il processore.
Nell'ambito della gestione di una notifica di PEP_NOTIFY_PPM_IDLE_EXECUTE , il PEP deve passare il processore allo stato inattiva selezionato dal PEP. Di seguito sono riportati i due modi per immettere lo 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ò immettere direttamente lo 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 inattivo in cui il contesto hardware del processore non viene mantenuto, il PEP deve chiamare ProcessorHalt prima di passare al processore allo stato inattivo.
-
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 inattiva 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 arresto coerente della cache.
-
PROCESSOR_HALT_CONTEXT_RETAINED = 0 e PROCESSOR_HALT_CACHE_COHERENT = 1
Tutti gli stati inattive che perdono il contesto hardware del processore (e quindi usano il protocollo di parcheggio multiprocessore per uscire dallo stato inattiva e restituire il controllo al sistema operativo) non sono stati coerenti con la cache.
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 | pepfx.h (includere Pep_x.h) |
IRQL | <= HIGH_LEVEL |