Fonction de rappel POFXCALLBACKPROCESSORHALT (pepfx.h)

La routine ProcessorHalt prépare l’arrêt du processeur.

Syntaxe

POFXCALLBACKPROCESSORHALT Pofxcallbackprocessorhalt;

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

Paramètres

[in] Flags

Indicateurs qui indiquent les propriétés de l’état d’inactivité que le processeur entrera. Le paramètre Flags est défini sur zéro ou sur le bit-OR d’un ou plusieurs des bits d’indicateur suivants.

Nom de l’indicateur Valeur Description
PROCESSOR_HALT_CACHE_FLUSH_OVERRIDE 0x01 La routine de rappel Halt du PEP est chargée de vider les caches du processeur. Si cet indicateur n’est pas défini, ProcessorHalt videra les caches à l’entrée à l’état d’inactivité du processeur et invalidera les caches à la sortie de cet état.
PROCESSOR_HALT_CACHE_COHERENT 0x02 Préparez le processeur à entrer dans un état inactif dans lequel les caches du processeur resteront cohérents.
PROCESSOR_HALT_CONTEXT_RETAINED 0x04 Préparez le processeur à entrer dans un état inactif dans lequel le contexte de thread du processeur sera conservé.
PROCESSOR_HALT_RETURN_NOT_SAFE 0x08 La routine de rappel Halt du PEP est garantie de ne pas retourner. Définissez cet indicateur si le rappel d’arrêt fait passer le processeur à un état de perte de contexte et de contrôle d’alimentation qui ne peut pas être annulé par le matériel. Lorsque cet indicateur est défini, le système d’exploitation traite un retour du rappel Halt comme une erreur irrécupérable.
PROCESSOR_HALT_VIA_PSCI_CPU_SUSPEND 0x16

[in, out, optional] Context

Pointeur vers un contexte d’arrêt du processeur défini par PEP. Ce pointeur est passé en tant que paramètre à la routine de rappel Halt . Ce contexte est opaque pour l’infrastructure de gestion de l’alimentation Windows (PoFx).

[in] Halt

Pointeur vers une routine de rappel Halt implémentée par PEP. PoFx appelle cette routine une fois les préparatifs d’arrêt du processeur terminés. Pendant ce rappel, le PEP est censé faire passer le processeur à l’état arrêté .

Valeur retournée

ProcessorHalt retourne STATUS_SUCCESS si le processeur est correctement préparé pour être arrêté. Les valeurs de retour d’erreur possibles incluent le code status suivant.

Valeur retournée Description
STATUS_INVALID_PARAMETER
Le paramètre Halt a la valeur NULL ; ou une valeur d’indicateur non valide a été spécifiée dans Indicateurs ; ou Indicateurs contient une combinaison illégale de bits d’indicateur. Pour plus d'informations, consultez la section Notes.
STATUS_UNSUCCESSFUL
La routine de rappel Halt du PEP est retournée de manière inattendue à partir d’un état inactif dans lequel le contexte matériel du processeur n’a pas été conservé.

Remarques

Cette routine est implémentée par l’infrastructure de gestion de l’alimentation (PoFx) et est appelée par le plug-in d’extension de plateforme (PEP). Le membre ProcessorHalt de la structure PEP_KERNEL_INFORMATION_STRUCT_V3 est un pointeur vers une routine ProcessorHalt .

Avant d’arrêter le processeur, le PEP appelle la routine ProcessorHalt pour permettre à PoFx d’enregistrer le contexte matériel du processeur. Si nécessaire, ProcessorHalt enregistre cet état en interne dans PoFx afin que l’état puisse être restauré ultérieurement lorsque le processeur quitte l’état inactif. Après avoir préparé le processeur à entrer dans l’état inactif, ProcessorHalt appelle la routine de rappel Halt du PEP pour arrêter le processeur.

Dans le cadre de la gestion par le PEP d’une notification de PEP_NOTIFY_PPM_IDLE_EXECUTE , le PEP doit faire passer le sous-traitant à l’état inactif sélectionné par le PEP. Voici les deux façons d’entrer l’état d’inactivité du processeur :

  • Pour un état d’inactivité du processeur dans lequel les caches du processeur restent cohérents afin que tout l’état du système et du processeur soit conservé, le PEP peut entrer directement dans l’état inactif sans appeler d’abord ProcessorHalt.
  • Pour un état d’inactivité du processeur dans lequel les caches du processeur peuvent ne pas rester cohérents ou un état inactif dans lequel le contexte matériel du processeur n’est pas conservé, le PEP doit appeler ProcessorHalt avant de faire passer le processeur à l’état inactif.
Les combinaisons suivantes de bits d’indicateur sont illégales :
  • PROCESSOR_HALT_CONTEXT_RETAINED = 1 et PROCESSOR_HALT_RETURN_NOT_SAFE = 1

    La routine de rappel Halt du PEP doit revenir de n’importe quel état dans lequel le contexte est conservé.

  • PROCESSOR_HALT_CACHE_FLUSH_OVERRIDE = 1 et PROCESSOR_HALT_CACHE_COHERENT = 1

    L’indicateur cache-flush-override doit être défini uniquement si l’état inactif n’est pas cohérent dans le cache.

  • PROCESSOR_HALT_CACHE_FLUSH_OVERRIDE = 0 et PROCESSOR_HALT_CACHE_COHERENT = 0

    L’indicateur cache-vidage-remplacement doit être défini pour tout arrêt cohérent non du cache.

  • PROCESSOR_HALT_CONTEXT_RETAINED = 0 et PROCESSOR_HALT_CACHE_COHERENT = 1

    Les états inactifs qui perdent le contexte matériel du processeur (et qui utilisent donc le protocole de stationnement multiprocesseur pour quitter l’état d’inactivité et retourner le contrôle au système d’exploitation) ne sont pas des états cohérents du cache.

Si le paramètre Flags contient une combinaison non conforme de bits d’indicateur, ProcessorHalt échoue et retourne STATUS_INVALID_PARAMETER.

Le PEP peut appeler cette routine à l’adresse IRQL <= HIGH_LEVEL.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Pris en charge à partir de Windows 10.
Plateforme cible Windows
En-tête pepfx.h (include Pep_x.h)
IRQL <= HIGH_LEVEL

Voir aussi

PEP_KERNEL_INFORMATION_STRUCT_V3

PEP_NOTIFY_PPM_IDLE_EXECUTE