Função de retorno de chamada POFXCALLBACKPROCESSORHALT (pepfx.h)
A rotina ProcessorHalt prepara o processador a ser interrompido.
Sintaxe
POFXCALLBACKPROCESSORHALT Pofxcallbackprocessorhalt;
NTSTATUS Pofxcallbackprocessorhalt(
[in] ULONG Flags,
[in, out, optional] PVOID Context,
[in] PPROCESSOR_HALT_ROUTINE Halt
)
{...}
Parâmetros
[in] Flags
Sinalizadores que indicam as propriedades do estado ocioso em que o processador entrará. O parâmetro Flags é definido como zero ou bit a bit OR de um ou mais dos bits de sinalizador a seguir.
Nome do sinalizador | Valor | Descrição |
---|---|---|
PROCESSOR_HALT_CACHE_FLUSH_OVERRIDE | 0x01 | A rotina de retorno de chamada Parar do PEP é responsável por liberar os caches do processador. Se esse sinalizador não estiver definido, ProcessorHalt liberará os caches na entrada para o estado ocioso do processador e invalidará os caches na saída desse estado. |
PROCESSOR_HALT_CACHE_COHERENT | 0x02 | Prepare o processador para inserir um estado ocioso no qual os caches do processador permanecerão coerentes. |
PROCESSOR_HALT_CONTEXT_RETAINED | 0x04 | Prepare o processador para inserir um estado ocioso no qual o contexto de thread do processador será preservado. |
PROCESSOR_HALT_RETURN_NOT_SAFE | 0x08 | A rotina de retorno de chamada Halt do PEP é garantida para não retornar. Defina esse sinalizador se o Parar o retorno de chamada fará a transição do processador para um estado de perda de contexto, que não pode ser cancelado pelo hardware. Quando esse sinalizador for definido, o sistema operacional tratará um retorno do Parar retorno de chamada como um erro fatal. |
PROCESSOR_HALT_VIA_PSCI_CPU_SUSPEND | 0x16 |
[in, out, optional] Context
Um ponteiro para um contexto de parada de processador definido por PEP. Esse ponteiro é passado como um parâmetro para a rotina Parar retorno de chamada. Esse contexto é opaco para a estrutura de gerenciamento de energia do Windows (PoFx).
[in] Halt
Um ponteiro para uma rotina de retorno de chamada Halt implementada por PEP. O PoFx chama essa rotina depois que os preparativos para interromper o processador foram concluídos. Durante esse retorno de chamada, espera-se que o PEP faça a transição do processador para o estado de interrompido.
Valor de retorno
ProcessorHalt retornará STATUS_SUCCESS se o processador estiver preparado para ser interrompido com êxito. Os valores de retorno de erro possíveis incluem o código de status a seguir.
Valor de retorno | Descrição |
---|---|
|
O parâmetro Halt é NULL; ou um valor de sinalizador inválido foi especificado em Flags; ou Flags contém uma combinação ilegal de bits de sinalizador. Para obter mais informações, consulte Comentários. |
|
A rotina de retorno de chamada Parar do PEP retornada inesperadamente de um estado ocioso no qual o contexto de hardware do processador não foi preservado. |
Observações
Essa rotina é implementada pela PoFx (estrutura de gerenciamento de energia) e é chamada pelo PEP (plug-in de extensão de plataforma). O ProcessorHalt membro da estrutura PEP_KERNEL_INFORMATION_STRUCT_V3 é um ponteiro para uma rotina de ProcessorHalt.
Antes de interromper o processador, o PEP chama a rotina ProcessorHalt para dar à PoFx uma oportunidade de salvar o contexto de hardware do processador. Se necessário, ProcessorHalt salvar esse estado internamente no PoFx para que o estado possa ser restaurado posteriormente quando o processador sair do estado ocioso. Depois de preparar o processador para entrar no estado ocioso, ProcessorHalt chama a rotina de retorno de chamada Parar pep para interromper o processador.
Como parte do tratamento do PEP de uma notificação de PEP_NOTIFY_PPM_IDLE_EXECUTE, o PEP deve fazer a transição do processador para o estado ocioso selecionado pelo PEP. Veja a seguir as duas maneiras de inserir o estado ocioso do processador:
- Para um estado ocioso do processador no qual os caches do processador permanecem coerentes para que todo o estado do sistema e do processador seja mantido, o PEP pode entrar no estado ocioso diretamente sem chamar primeiro ProcessorHalt.
- Para um estado ocioso do processador no qual os caches do processador podem não permanecer coerentes ou um estado ocioso no qual o contexto de hardware do processador não é preservado, o PEP deve chamar ProcessorHalt antes de fazer a transição do processador para o estado ocioso.
-
PROCESSOR_HALT_CONTEXT_RETAINED = 1 e PROCESSOR_HALT_RETURN_NOT_SAFE = 1
A rotina de retorno de chamada do Halt do PEP deve retornar de qualquer estado no qual o contexto seja mantido.
-
PROCESSOR_HALT_CACHE_FLUSH_OVERRIDE = 1 e PROCESSOR_HALT_CACHE_COHERENT = 1
O sinalizador de substituição de liberação de cache deve ser definido somente se estiver inserindo um estado ocioso que não seja coerente em cache.
-
PROCESSOR_HALT_CACHE_FLUSH_OVERRIDE = 0 e PROCESSOR_HALT_CACHE_COHERENT = 0
O sinalizador de substituição de liberação de cache deve ser definido para qualquer parada coerente que não seja de cache.
-
PROCESSOR_HALT_CONTEXT_RETAINED = 0 e PROCESSOR_HALT_CACHE_COHERENT = 1
Todos os estados ociosos que perdem o contexto de hardware do processador (e, portanto, usam o protocolo de estacionamento multiprocessador para sair do estado ocioso e retornar o controle para o sistema operacional) não são estados coerentes com cache.
O PEP pode chamar essa rotina no IRQL <= HIGH_LEVEL.
Requisitos
Requisito | Valor |
---|---|
de cliente com suporte mínimo | Com suporte a partir do Windows 10. |
da Plataforma de Destino | Windows |
cabeçalho | pepfx.h (inclua Pep_x.h) |
IRQL | <= HIGH_LEVEL |