Função de retorno de chamada POFXCALLBACKPROCESSORHALT (pep_x.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
STATUS_INVALID_PARAMETER
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.
STATUS_UNSUCCESSFUL
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.
As seguintes combinações de bits de sinalizador são ilegais:
  • 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.

Se o parâmetro Flags contiver uma combinação ilegal de bits de sinalizador, ProcessorHalt falhará e retornará STATUS_INVALID_PARAMETER.

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 pep_x.h (inclua Pep_x.h)
IRQL <= HIGH_LEVEL

Confira também

PEP_KERNEL_INFORMATION_STRUCT_V3

PEP_NOTIFY_PPM_IDLE_EXECUTE