Un appareil entre dans un état Low-Power
Un appareil quitte son état de fonctionnement (D0) et entre dans un état de faible consommation si l’un des éléments suivants se produit :
L’appareil est inactif (c’est-à-dire, n’est pas accessible) et est capable d’entrer dans un état d’inactivité à faible consommation d’énergie pendant que le système reste dans son état de fonctionnement (S0).
L’état d’alimentation du système est passé de son état de fonctionnement (S0) à un état de faible puissance. (Les pilotes peuvent appeler WdfDeviceGetSystemPowerAction pour déterminer la raison pour laquelle l’état d’alimentation d’un système change.)
Pour chaque pilote de fonction et de filtre qui prend en charge l’appareil, l’infrastructure effectue les opérations suivantes, dans l’ordre, un pilote à la fois, en commençant par le pilote le plus élevé dans la pile de pilotes :
Si le pilote utilise des E/S autogérées, l’infrastructure appelle la fonction de rappel EvtDeviceSelfManagedIoSuspend du pilote.
Le framework arrête toutes les files d’attente d’E/S gérées par l’alimentation du pilote et appelle leurs fonctions de rappel EvtIoStop (si elles existent).
Si le pilote est le propriétaire de la stratégie d’alimentation de l’appareil, l’infrastructure appelle sa fonction de rappel EvtDeviceArmWakeFromS0, EvtDeviceArmWakeFromSx ou EvtDeviceArmWakeFromSxWithReason .
Si le matériel et le pilote prennent en charge DMA, l’infrastructure appelle les fonctions de rappel EvtDmaEnablerSelfManagedIoStop, EvtDmaEnablerFlush et EvtDmaEnablerDisable (le cas échéant) pour chaque canal DMA créé.
L’infrastructure appelle la fonction de rappel EvtDeviceD0ExitPreInterruptsDisabled du pilote (si elle existe), puis appelle la fonction de rappel EvtInterruptDisable du pilote (si elle existe) pour chaque interruption, afin que le pilote puisse désactiver les interruptions d’appareil.
L’infrastructure appelle la fonction de rappel EvtDeviceD0Exit du pilote (si elle existe).
Le pilote de bus est le pilote de la pile appelée en dernier. Lorsque l’infrastructure appelle la fonction de rappel EvtDeviceD0Exit du pilote de bus, la fonction de rappel définit l’état d’alimentation de l’appareil (un appareil enfant du bus) à un état d’alimentation faible. L’infrastructure spécifie l’état de faible consommation D3, sauf si le propriétaire de la stratégie d’alimentation a spécifié un autre état de faible consommation.
Notes
La méthode utilisée par le pilote de bus pour définir l’état d’alimentation du périphérique enfant est spécifique au bus. Par exemple, la spécification de gestion de l’alimentation du bus PCI définit un registre de contrôle/état de gestion de l’alimentation 16 bits (PMCSR). Les deux bits les plus bas (« PowerState ») déterminent l’état d’alimentation actuel de l’appareil et sont utilisés pour définir l’appareil dans un nouvel état d’alimentation. Lorsque le pci.sys
PDO reçoit IRP_MN_SET_POWER/D3, il lit le PMCSR, modifie les bits PowerState sur 11b (niveau d’alimentation D3) et écrit le PMCSR.