gestion de l’alimentation Component-Level

À compter de Windows 8, l’infrastructure de gestion de l’alimentation (PoFx) permet à un pilote de gérer les états d’alimentation des composants individuels d’un appareil. La gestion de l’alimentation au niveau des composants existe côte à côte avec la gestion de l’alimentation au niveau de l’appareil. Pour une présentation, consultez Vue d’ensemble de l’infrastructure de gestion de l’alimentation.

Cette page décrit l’API PoFx pour Component-Level gestion de l’alimentation.

Pour inscrire un appareil à gérer par PoFx, le pilote appelle la routine PoFxRegisterDevice . Le pilote transmet à cette routine une structure PO_FX_DEVICE qui, entre autres données, contient un tableau de structures PO_FX_COMPONENT . Chaque élément de ce tableau décrit les états d’alimentation Fx d’un composant dans l’appareil et les attributs de chaque état Fx. (Au minimum, un composant qui ne prend pas en charge la gestion de l’alimentation au niveau du composant implémente uniquement l’état F0.) Les attributs d’un état d’alimentation Fx particulier dans un composant particulier sont décrits par une structure PO_FX_COMPONENT_IDLE_STATE , qui contient les valeurs suivantes :

  • Latence de transition, qui est le temps nécessaire pour effectuer une transition de cet état Fx vers l’état F0 (entièrement activé).
  • L’exigence de résidence, qui est le temps qu’un composant doit passer dans cet état Fx pour effectuer une transition vers l’état qui en vaut la peine.
  • Puissance nominale, qui est la puissance consommée par le composant dans cet état Fx.

PoFx utilise ces informations (en plus d’autres entrées et dépendances à l’échelle du système) pour prendre des décisions intelligentes sur l’état d’alimentation Fx dans lequel un composant doit se trouver à un moment donné. PoFx doit équilibrer deux objectifs concurrents. Tout d’abord, un composant inactif doit être configuré pour consommer le moins d’énergie possible. Deuxièmement, un composant doit être prêt à passer d’un état Fx de faible consommation à F0 suffisamment rapidement pour conserver l’apparence d’un appareil toujours allumé et toujours connecté.

La gestion de l’alimentation au niveau des composants peut être effectuée uniquement lorsqu’un appareil est dans l’état d’alimentation D0 (entièrement activé). Lorsqu’un appareil est dans l’état d’alimentation D1 (presque allumé), D2 (presque éteint) ou D3, l’appareil est inaccessible. Lorsque l’appareil est à l’état D0, seuls les composants que le pilote utilise activement doivent rester à l’état F0. Les composants inactifs peuvent potentiellement basculer vers des états Fx de faible consommation d’énergie pour réduire la consommation d’énergie.

Lorsqu’un appareil est à l’état d’alimentation D0, le pilote suit un protocole simple pour activer la gestion de l’alimentation au niveau des composants. Lorsque le pilote doit accéder à un composant, il appelle la routine PoFxActivateComponent pour demander l’accès au composant. Si le composant se trouve dans un état Fx de faible puissance lorsque cet appel se produit, PoFx initie une transition vers l’état F0 et avertit le pilote lorsque cette transition est terminée. Le pilote peut ensuite accéder au composant. Lorsque le pilote n’a plus besoin d’accéder au composant, il appelle la routine PoFxIdleComponent pour avertir PoFx. En réponse à cet appel, PoFx peut potentiellement basculer le composant vers un état Fx de faible puissance.

Un composant accessible est dans l’état actif. Un composant inaccessible se trouve dans un état d’inactivité. Pour suivre l’accessibilité des composants d’un appareil, PoFx gère un nombre de références d’activation sur chaque composant. Un appel PoFxActivateComponent incrémente le nombre sur le composant spécifié d’un, et un appel PoFxIdleComponent décrémente le nombre d’un.

Si un appel PoFxActivateComponent incrémente le nombre de zéro à un, PoFx initie une transition de la condition inactive à la condition active et avertit le pilote lorsque cette transition est terminée. Si un PoFxActivateComponent se produit lorsque le composant est déjà dans l’état actif, le composant reste dans la condition active et le pilote ne reçoit aucune notification.

Si un appel PoFxIdleComponent décrémente le nombre de 1 à zéro, PoFx initie une transition de la condition active à la condition inactive et avertit le pilote lorsque cette transition est terminée. Si un appel PoFxIdleComponent décrémente le nombre, mais que le nombre reste différent de zéro, le composant reste dans la condition active et le pilote ne reçoit aucune notification.

Le nombre de références d’activation gère de manière pratique les situations dans lesquelles deux ou plusieurs chemins de code dans le même pilote peuvent avoir besoin d’accéder simultanément au même composant dans un appareil. En conservant ce nombre, PoFx permet aux différentes parties du pilote de maintenir indépendamment l’accès au composant sans nécessiter que le pilote gère de manière centralisée l’accès au composant.

La condition active/inactive d’un composant est le seul moyen fiable pour un pilote de déterminer si un composant est accessible. Un composant qui est dans l’état d’alimentation F0 mais qui est dans l’état d’inactivité peut être sur le point de passer à un état Fx de faible puissance.

Un composant qui est dans la condition active est toujours à l’état F0. Le composant ne peut pas quitter F0 tant qu’il n’entre pas dans la condition d’inactivité. Un composant qui se trouve dans un état d’inactivité peut être en F0 ou dans un état Fx de faible puissance. Si un composant se trouve dans un état Fx de faible puissance lorsqu’un appel PoFxActivateComponent initie une transition de la condition inactive à la condition active, PoFx doit d’abord basculer le composant vers F0 avant que le composant puisse entrer dans la condition active.

Informations de référence sur la gestion de l’alimentation des appareils