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