Função de retorno de chamada POFXCALLBACKPROCESSORHALT (pepfx.h)
A rotina ProcessorHalt prepara o processador para 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 que o processador inserirá. O parâmetro Flags é definido como zero ou como OR bit a bit 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 Halt 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 ao sair desse estado. |
PROCESSOR_HALT_CACHE_COHERENT | 0x02 | Prepare o processador para entrar em um estado ocioso no qual os caches do processador permanecerão coerentes. |
PROCESSOR_HALT_CONTEXT_RETAINED | 0x04 | Prepare o processador para entrar em 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 tem a garantia de não retornar. Defina esse sinalizador se o retorno de chamada Halt fizer a transição do processador para um estado de perda de contexto e de energia que não pode ser cancelado pelo hardware. Quando esse sinalizador for definido, o sistema operacional tratará um retorno do retorno de chamada halt 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 de retorno de chamada Halt . Esse contexto é opaco para a PoFx ( estrutura de gerenciamento de energia ) do Windows.
[in] Halt
Um ponteiro para uma rotina de retorno de chamada halt implementada por PEP. A 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 interrompido .
Retornar valor
ProcessorHalt retornará STATUS_SUCCESS se o processador estiver preparado para ser interrompido com êxito. Os possíveis valores retornados por erro incluem o código de status a seguir.
Valor retornado | 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 Halt do PEP retornou inesperadamente de um estado ocioso no qual o contexto de hardware do processador não foi preservado. |
Comentários
Essa rotina é implementada pela PoFx (estrutura de gerenciamento de energia) e é chamada pelo PEP (plug-in de extensão de plataforma). O membro ProcessorHalt da estrutura PEP_KERNEL_INFORMATION_STRUCT_V3 é um ponteiro para uma rotina ProcessorHalt .
Antes de interromper o processador, o PEP chama a rotina ProcessorHalt para dar à PoFx a oportunidade de salvar o contexto de hardware do processador. Se necessário, ProcessorHalt salva esse estado internamente em 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 Halt do PEP para interromper o processador.
Como parte da manipulação 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 que o PEP selecionou. Veja a seguir as duas maneiras de entrar no 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 primeiro chamar 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 Halt do PEP deve retornar de qualquer estado em que o contexto seja retido.
-
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 com o 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 em cache.
O PEP pode chamar essa rotina em IRQL <= HIGH_LEVEL.
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Com suporte a partir do Windows 10. |
Plataforma de Destino | Windows |
Cabeçalho | pepfx.h (inclua Pep_x.h) |
IRQL | <= HIGH_LEVEL |