Compartilhar via


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
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 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.
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 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.

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

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

Consulte também

PEP_KERNEL_INFORMATION_STRUCT_V3

PEP_NOTIFY_PPM_IDLE_EXECUTE