Compartir a través de


Función de devolución de llamada POFXCALLBACKPROCESSORHALT (pepfx.h)

La rutina ProcessorHalt prepara el procesador que se va a detener.

Sintaxis

POFXCALLBACKPROCESSORHALT Pofxcallbackprocessorhalt;

NTSTATUS Pofxcallbackprocessorhalt(
  [in]                ULONG Flags,
  [in, out, optional] PVOID Context,
  [in]                PPROCESSOR_HALT_ROUTINE Halt
)
{...}

Parámetros

[in] Flags

Marcas que indican las propiedades del estado inactivo que el procesador escribirá. El parámetro Flags se establece en cero o en el or bit a bit de uno o varios de los siguientes bits de marca.

Nombre del marcador Valor Descripción
PROCESSOR_HALT_CACHE_FLUSH_OVERRIDE 0x01 La rutina de devolución de llamada Halt de PEP es responsable de vaciar las memorias caché del procesador. Si no se establece esta marca, ProcessorHalt vaciará las memorias caché en la entrada al estado de inactividad del procesador y invalidará las memorias caché al salir de este estado.
PROCESSOR_HALT_CACHE_COHERENT 0x02 Prepare el procesador para especificar un estado inactivo en el que las memorias caché del procesador seguirán siendo coherentes.
PROCESSOR_HALT_CONTEXT_RETAINED 0x04 Prepare el procesador para especificar un estado inactivo en el que se conservará el contexto del subproceso del procesador.
PROCESSOR_HALT_RETURN_NOT_SAFE 0x08 Se garantiza que la rutina de devolución de llamada Halt de PEP no vuelva. Establezca esta marca si la devolución de llamada Halt realiza la transición del procesador a un estado de pérdida de contexto y con capacidad de alimentación que el hardware no puede cancelar. Cuando se establece esta marca, el sistema operativo tratará una devolución de la devolución de llamada Halt como un error irrecuperable.
PROCESSOR_HALT_VIA_PSCI_CPU_SUSPEND 0x16

[in, out, optional] Context

Puntero a un contexto de detención de procesador definido por PEP. Este puntero se pasa como parámetro a la rutina de devolución de llamada Halt . Este contexto es opaco para el marco de administración de energía de Windows (PoFx).

[in] Halt

Puntero a una rutina de devolución de llamada Detención implementada por PEP. PoFx llama a esta rutina después de que se hayan completado los preparativos para detener el procesador. Durante esta devolución de llamada, se espera que el PEP realice la transición del procesador al estado detenido .

Valor devuelto

ProcessorHalt devuelve STATUS_SUCCESS si el procesador está preparado para detenerse correctamente. Los valores devueltos de error posibles incluyen el siguiente código de estado.

Valor devuelto Descripción
STATUS_INVALID_PARAMETER
El parámetro Halt es NULL; o se especificó un valor de marca no válido en Flags; o Flags contiene una combinación ilegal de bits de marca. Para obtener más información, vea la sección Comentarios.
STATUS_UNSUCCESSFUL
La rutina de devolución de llamada Halt de PEP se devolvió inesperadamente de un estado inactivo en el que no se conservaba el contexto de hardware del procesador.

Comentarios

El marco de administración de energía (PoFx) implementa esta rutina y la llama el complemento de extensión de plataforma (PEP). El miembro ProcessorHalt de la estructura PEP_KERNEL_INFORMATION_STRUCT_V3 es un puntero a una rutina ProcessorHalt .

Antes de detener el procesador, el PEP llama a la rutina ProcessorHalt para dar a PoFx una oportunidad para guardar el contexto de hardware del procesador. Si es necesario, ProcessorHalt guarda este estado internamente en PoFx para que el estado se pueda restaurar más adelante cuando el procesador salga del estado inactivo. Después de preparar el procesador para entrar en el estado inactivo, ProcessorHalt llama a la rutina de devolución de llamada Halt de PEP para detener el procesador.

Como parte del control del PEP de una notificación de PEP_NOTIFY_PPM_IDLE_EXECUTE , el PEP debe realizar la transición del procesador al estado inactivo que el PEP ha seleccionado. Estas son las dos maneras de especificar el estado de inactividad del procesador:

  • Para un estado de inactividad del procesador en el que las memorias caché del procesador permanecen coherentes para que se mantenga todo el estado del sistema y del procesador, el PEP puede entrar en el estado inactivo directamente sin llamar primero a ProcessorHalt.
  • Para un estado de inactividad del procesador en el que las memorias caché del procesador podrían no permanecer coherentes o un estado inactivo en el que no se conserva el contexto de hardware del procesador, el PEP debe llamar a ProcessorHalt antes de pasar el procesador al estado inactivo.
Las siguientes combinaciones de bits de marca son ilegales:
  • PROCESSOR_HALT_CONTEXT_RETAINED = 1 y PROCESSOR_HALT_RETURN_NOT_SAFE = 1

    La rutina de devolución de llamada Halt de PEP debe devolverse de cualquier estado en el que se conserve el contexto.

  • PROCESSOR_HALT_CACHE_FLUSH_OVERRIDE = 1 y PROCESSOR_HALT_CACHE_COHERENT = 1

    La marca cache-flush-override solo debe establecerse si escribe un estado inactivo que no es coherente con la memoria caché.

  • PROCESSOR_HALT_CACHE_FLUSH_OVERRIDE = 0 y PROCESSOR_HALT_CACHE_COHERENT = 0

    La marca cache-flush-override debe establecerse para cualquier detención coherente que no sea de caché.

  • PROCESSOR_HALT_CONTEXT_RETAINED = 0 y PROCESSOR_HALT_CACHE_COHERENT = 1

    Los estados inactivos que pierden el contexto de hardware del procesador (y, por lo tanto, usan el protocolo de estacionamiento de varios procesadores para salir del estado inactivo y el control de retorno al sistema operativo) no son estados coherentes con la memoria caché.

Si el parámetro Flags contiene una combinación no válida de bits de marca, ProcessorHalt produce un error y devuelve STATUS_INVALID_PARAMETER.

El PEP puede llamar a esta rutina en IRQL <= HIGH_LEVEL.

Requisitos

Requisito Value
Cliente mínimo compatible Se admite a partir de Windows 10.
Plataforma de destino Windows
Encabezado pepfx.h (include Pep_x.h)
IRQL <= HIGH_LEVEL

Consulte también

PEP_KERNEL_INFORMATION_STRUCT_V3

PEP_NOTIFY_PPM_IDLE_EXECUTE