Fonction de rappel POFXCALLBACKPROCESSORHALT (pepfx.h)

La routine ProcessorHalt prépare le processeur à arrêter.

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 inactif entré par le processeur. 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 vide les caches à l’entrée à l’état inactif du processeur et invalide les caches à la sortie de cet état.
PROCESSOR_HALT_CACHE_COHERENT 0x02 Préparez le processeur à entrer un état inactif dans lequel les caches du processeur resteront cohérents.
PROCESSOR_HALT_CONTEXT_RETAINED 0x04 Préparez le processeur à entrer 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 Halt fait passer le processeur à un état à perte de contexte et à 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 le point d’accès privilégié. Ce pointeur est passé en tant que paramètre à la routine de rappel Halt . Ce contexte est opaque dans l’infrastructure de gestion de l’alimentation Windows (PoFx).

[in] Halt

Pointeur vers une routine de rappel Halt implémentée par peps. PoFx appelle cette routine après la préparation de l’arrêt du processeur. Pendant ce rappel, le point de terminaison privilégié est censé passer du processeur à l’état arrêté .

Valeur de retour

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

Valeur de retour 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 Flags ; 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 d’arrêt du point de terminaison 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 point de terminaison privilégié 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 POINT de terminaison pour arrêter le processeur.

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

  • Pour un état d’inactivité du processeur dans lequel les caches du processeur restent cohérents afin que tous les états du système et du processeur soient conservés, le point de terminaison privilégié peut entrer l’état inactif directement sans appeler 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 point de terminaison privilégié doit appeler ProcessorHalt avant de passer du 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 retourner à partir 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 vous entrez un état inactif qui n’est pas cohérent dans le cache.

  • PROCESSOR_HALT_CACHE_FLUSH_OVERRIDE = 0 et PROCESSOR_HALT_CACHE_COHERENT = 0

    L’indicateur de remplacement de vidage du cache doit être défini pour toute interruption cohérente non mise en 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 inactif et retourner le contrôle au système d’exploitation) ne sont pas cohérents dans le cache.

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

Le point de terminaison privilégié peut appeler cette routine à IRQL <= HIGH_LEVEL.

Configuration requise

   
Client minimal pris en charge Prise 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