Annulation de la notification d’inactivité de suspension sélective NDIS

Si la carte réseau devient inactive pendant une période d’inactivité, NDIS démarre l’opération de suspension sélective. Au cours de cette opération, la carte réseau est passée à un état de faible consommation. NDIS commence cette opération en émettant une notification d’inactivité au pilote miniport. Pour plus d’informations sur cette opération, consultez Gestion de la notification d’inactivité de suspension sélective NDIS.

NDIS appelle la fonction de gestionnaire MiniportIdleNotification pour informer le pilote que la carte réseau sous-jacente semble inactive. Une fois la notification d’inactivité émise, NDIS annule une notification inactive en attente si une ou plusieurs des conditions suivantes sont remplies :

NDIS annule la notification d’inactivité en appelant la fonction de gestionnaire MiniportCancelIdleNotification du pilote miniport sous-jacent. Lorsque cette fonction est appelée, le pilote miniport doit terminer la notification d’inactivité pour reprendre l’adaptateur à l’état pleine puissance. Pour obtenir des instructions sur ce processus, consultez Terminer la notification d’inactivité de suspension sélective NDIS.

Pour plus d’informations sur l’implémentation de la fonction de gestionnaire MiniportCancelIdleNotification, consultez Implémentation d’une fonction de gestionnaire MiniportCancelIdleNotification.

Annulation de la notification d’inactivité en raison d’une activité de pilote excessive

Les moniteurs NDIS envoient des requêtes et des requêtes OID qui sont émises à un pilote miniport dont la carte réseau a été suspendue et est dans un état de faible consommation. Dans ce cas, NDIS annule la notification d’inactivité en attente afin que la carte réseau puisse reprendre à l’état pleine alimentation.

NDIS et le pilote miniport effectuent les étapes suivantes lorsqu’une notification d’inactivité est annulée :

  1. NDIS appelle la fonction de gestionnaire MiniportCancelIdleNotification pour annuler une notification d’inactivité en attente. Lorsque cette fonction de gestionnaire est appelée, le pilote miniport doit annuler tous les paquets de demandes d’E/S (IRP) spécifiques au bus qu’il a émis précédemment pour la notification d’inactivité.

    Par exemple, lorsque MiniportCancelIdleNotification est appelé, le miniport d’une carte réseau USB effectue les étapes suivantes :

    1. Le pilote miniport annule la demande d’inactivité USB en attente (IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION) IRP. Le pilote miniport a précédemment émis cette IRP au pilote de bus USB sous-jacent lorsque NDIS a appelé la fonction MiniportIdleNotification du pilote. Le pilote miniport annule cette IRP en appelant IoCancelIrp.

    2. Lorsque le pilote de bus annule l’IRP de la demande d’inactivité USB, il appelle la routine d’achèvement du pilote miniport pour l’IRP. Cet appel avertit le pilote que l’IRP est terminé et que la carte réseau peut passer à un état plein régime. À partir du contexte de la routine d’achèvement, le pilote appelle NdisMIdleNotificationComplete pour informer NDIS que la carte réseau peut être passée à un état d’alimentation totale.

    Note En fonction des dépendances permettant d’annuler les requêtes inactives spécifiques au bus, le pilote miniport appelle NdisMIdleNotificationComplete de manière synchrone dans le contexte de l’appel à MiniportCancelIdleNotification ou de façon asynchrone après que MiniportCancelIdleNotification est retourné.

    Pour plus d’informations sur l’implémentation d’une routine d’achèvement IRP de requête inactive USB, consultez Implémentation d’une routine d’achèvement IRP de requête inactive USB.

  2. Une fois que le pilote miniport annule les irps spécifiques au bus pour la notification d’inactivité, il appelle NdisMIdleNotificationComplete. Cet appel informe NDIS que la notification d’inactivité a été effectuée. NDIS termine ensuite l’opération de suspension sélective en faisant passer la carte réseau à un état de pleine alimentation.

    Lorsque NdisMIdleNotificationComplete est appelé, NDIS effectue les étapes suivantes :

    1. Les problèmes NDIS IRP_MN_SET_POWER au pilote de bus sous-jacent. Cette IRP demande au pilote de bus de définir l’état d’alimentation de la carte réseau sur PowerDeviceD0.

    2. NDIS émet une demande de jeu d’OID de OID_PNP_SET_POWER au pilote miniport. Dans cette demande OID, NDIS spécifie que la carte réseau passe maintenant à un état pleine puissance de NdisDeviceStateD0.

      Lorsqu’il gère cette demande de jeu d’OID, le pilote prépare l’adaptateur pour un fonctionnement à pleine puissance. Cela inclut la restauration des moteurs de réception et d’envoi à l’état dans lequel ils se trouvaient avant la transition vers l’état de faible puissance. Le pilote termine ensuite la requête OID avec NDIS_STATUS_SUCCESS.

L’illustration suivante montre les étapes impliquées lorsque NDIS annule une notification d’inactivité qui a été émise à un pilote miniport pour une carte réseau USB.

Diagramme montrant le processus de reprise des notifications inactives pour une carte réseau USB.

Annulation de la notification d’inactivité en raison d’événements de mise en éveil

Avant la transition de la carte réseau vers un état de faible alimentation, NDIS émet une demande de jeu d’OID de OID_PM_PARAMETERS à la carte réseau. Cette demande OID spécifie les types d’événements de mise en éveil que l’adaptateur peut signaler pour qu’il reprenne l’état de pleine puissance. Pour la suspension sélective NDIS, l’adaptateur est configuré pour signaler l’un des événements de mise en éveil suivants :

NDIS et le pilote miniport suivent ces étapes lorsque NDIS annule une notification inactive en raison d’un signal de mise en éveil généré par la carte réseau :

  1. Le pilote de bus termine la IRP_MN_WAIT_WAKE qui a été émise par NDIS avant la transition de l’adaptateur vers un état de faible consommation. En effectuant l’IRP, le pilote de bus avertit NDIS que la carte réseau a généré un signal de mise en éveil.

  2. NDIS appelle la fonction de gestionnaire MiniportCancelIdleNotification pour démarrer l’opération d’annulation de la notification inactive. Les étapes impliquées dans cette opération sont les mêmes que celles décrites dans Annulation de la notification d’inactivité en raison d’une activité de pilote excessive.

Par exemple, la figure suivante montre les étapes impliquées lorsque NDIS annule une notification inactive en raison d’un événement de mise en éveil signalé par une carte réseau USB.

Diagramme montrant le processus de mise en éveil des notifications inactives NDIS pour une carte réseau USB.