État de fonctionnement de l’appareil D0

Dans l’état d’alimentation de l’appareil D0, l’appareil est entièrement allumé et opérationnel. Dans cet état, un pilote de périphérique peut interagir avec l’appareil pour effectuer des opérations d’E/S, et l’appareil peut générer des interruptions. Si l’appareil a des registres matériels mappés à la mémoire ou à l’espace d’adressage d’E/S, le pilote peut accéder à ces registres.

À compter de Windows 8, un pilote de périphérique peut connecter une routine de service d’interruption de niveau passif (ISR) à l’interruption à partir d’un appareil. L’appareil peut générer des interruptions, qu’il se trouve dans D0 ou non. Lorsqu’il est dans un état Dx à faible consommation, l’appareil peut générer une interruption qui agit comme un déclencheur pour ramener l’appareil à D0. L’ISR est planifié pour s’exécuter à IRQL = PASSIVE_LEVEL une fois que l’appareil est entré dans D0. Dans les versions antérieures de Windows, y compris Windows 7, un appareil ne doit pas générer d’interruptions lorsqu’il se trouve dans un état d’alimentation autre que D0.

Une transition de D0 à un état Dx faible consommation peut se produire uniquement lorsque le pilote de périphérique, tout en agissant en tant que propriétaire de la stratégie d’alimentation pour l’appareil, lance la transition en appelant la routine PoRequestPowerIrp . Lorsque le gestionnaire d’alimentation répond à cet appel en envoyant un IRP (IRP_MN_SET_POWER), le pilote de périphérique, le pilote de bus et le microprogramme de la plateforme (via le pilote Windows ACPI, Acpi.sys) gèrent en coopération cette IRP pour modifier l’état d’alimentation de l’appareil.

Le matériel de l’appareil surveille généralement un ensemble d’événements internes qui peuvent générer des interruptions d’exécution ou des signaux de veille, selon la façon dont l’appareil est configuré. Le pilote implémente un chemin de code pour répondre aux interruptions et un autre pour répondre aux événements de veille. Le code du pilote peut être simplifié si le chemin du code d’interruption n’a pas besoin de traiter les événements d’éveil et si le chemin du code de veille n’a pas besoin de traiter les interruptions. En guise de bonne pratique, le pilote doit configurer l’appareil pour générer des interruptions uniquement lorsque l’appareil se trouve dans D0, et pour générer des signaux d’éveil uniquement lorsque l’appareil est dans un état Dx à faible consommation. En règle générale, le pilote configure l’appareil pour générer un signal de veille juste avant que l’appareil ne quitte D0, et configure l’appareil pour générer des interruptions juste après que l’appareil entre dans D0.

En règle générale, un appareil passe à l’état D0 lorsque son signal de réinitialisation matérielle est déclaré. En fait, les spécifications pour les bus tels que PCI et PCI Express nécessitent ce comportement.

Voici les caractéristiques de l’état D0 :

Consommation électrique
Niveau le plus élevé de consommation d’énergie continue pour l’appareil.

Contexte de l’appareil
Tous les contextes conservés.

Comportement du pilote de périphérique
Fonctionnement normal.

Heure de restauration
Non applicable.

Fonctionnalité de mise en éveil
Non applicable.