Suspension sélective dans les pilotes USB (WDF)

Un pilote de fonction USB prend en charge la détection d'inactivité au moment de l'exécution en implémentant une suspension sélective USB. Voici du contenu pour les développeurs de pilotes sur la façon d’implémenter une suspension sélective dans les pilotes USB basés sur Windows® Driver Foundation (WDF).

À propos de la suspension sélective

La suspension sélective est la possibilité de mettre hors tension et de reprendre ultérieurement un périphérique USB inactif tandis que l’ordinateur auquel il est attaché reste dans l’état de travail (S0). Pour une opération économe en énergie, en particulier sur les PC mobiles, tous les périphériques USB et pilotes doivent prendre en charge la suspension sélective. La mise sous tension d’un appareil lorsqu’il est inactif, mais alors que le système reste dans l’état S0, présente les avantages significatifs suivants :

  • La suspension sélective conserve l'énergie.
  • La suspension sélective peut aider à réduire les facteurs environnementaux tels que la charge thermique et le bruit.

Si le matériel de votre appareil peut s'éteindre pendant qu’il est inactif, le pilote doit prendre en charge cette fonctionnalité. La prise en charge de la suspension sélective dans un pilote USB basé sur Windows® Driver Foundation (WDF) nécessite tout au plus quelques rappels supplémentaires au-delà de ceux requis pour la prise en charge de base du Plug-and-Play.

Chaque pilote de fonction pour un périphérique USB doit implémenter une gestion agressive de l’alimentation qui suspend un appareil inactif pendant l’exécution du système. Cette rubrique explique comment implémenter une suspension sélective dans un pilote WDF. Si vous n’êtes pas familiarisé avec WDF, consultez le Kit de pilotes Windows (WDK) et le développement de pilotes avec Windows Driver Foundation.

Les périphériques USB prennent en charge la détection d'inactivité en cours d'exécution grâce à la suspension sélective USB. La suspension sélective permet à un appareil inactif d’être placé dans un état suspendu sans affecter d’autres appareils connectés au même hub ou, dans le cas d’un appareil multifonction, sans affecter les autres fonctions de l’appareil. Lorsque tous les appareils ou fonctions ont été suspendus, l’ensemble du hub ou de l’appareil multifonction peut être mis hors tension.

Du point de vue matériel, la suspension sélective est un état physique sur un port USB. Lorsque toutes les fonctions attachées au port sont inactives, le port peut entrer en suspension sélective.

Pour respecter la spécification USB, tous les périphériques USB doivent prendre en charge la suspension sélective. Lorsque le bus USB est inactif, l’appareil doit être en mesure de se mettre hors tension. Les pilotes de hub USB fournis par Microsoft implémentent une suspension sélective au niveau du matériel.

Les pilotes de fonction USB doivent implémenter une suspension sélective pour leurs fonctions de périphérique individuelles via WDF, qui communique avec les pilotes de bus et gère les demandes de contrôle d’E/S de périphérique qui suspendent et reprendnt les fonctions de périphérique. WDF permet aux pilotes en mode noyau et en mode utilisateur de prendre en charge la suspension sélective.

Les détails du code de suspension sélectif USB d’un pilote de fonction varient selon que le pilote s’exécute en mode utilisateur ou en mode noyau. Tenez compte de ces instructions :

  • Utilisez l’infrastructure de pilote en mode utilisateur (UMDF) pour implémenter des pilotes USB dans la mesure du possible. Les pilotes en mode utilisateur sont moins susceptibles d’endommager les données système et sont plus simples à déboguer que les pilotes en mode noyau.
  • Utilisez l’infrastructure de pilote en mode noyau (KMDF) uniquement si le pilote diffuse des données via des points de terminaison isochrones ou nécessite d’autres fonctionnalités ou ressources disponibles uniquement en mode noyau.

Propriété de la stratégie d’alimentation, files d’attente d’E/S et suspension sélective

Le propriétaire de la stratégie d’alimentation (PPO) d’une pile d’appareils est le pilote qui détermine l’état d’alimentation dans lequel l’appareil doit se trouver à un moment donné. Un seul pilote dans chaque pile d'appareils peut être le PPO. Le pilote de fonction est généralement le PPO pour son appareil.

Si votre pilote USB prend en charge le suspend sélectif et est situé au-dessus de la PPO dans sa pile d'appareils, le pilote ne doit pas utiliser les files d'attente gérées par la gestion de l'alimentation. Cela est vrai pour les pilotes UMDF et KMDF. Si les demandes arrivent pour les files d’attente avec gestion de l’alimentation pendant que l’appareil est suspendu, la pile entière de l’appareil peut se bloquer.

La figure 1 montre le flux des demandes d’E/S vers un pilote USB via ses files d’attente d’E/S.

Organigramme des requêtes adressées à un pilote USB WDF.

Dans la figure, une demande arrive pour un pilote USB. L’infrastructure ajoute la requête à la file d’attente appropriée.

Si la file d’attente n’est pas gérée par la gestion de l’alimentation, le cadre transmet la requête au pilote en fonction du type de répartition que le pilote a configuré pour la file d’attente (séquentielle, parallèle ou manuelle). Le pilote gère ensuite la requête.

Si la file d'attente est gérée par l'alimentation et que l'appareil n'est pas suspendu, le framework présente la demande au pilote en fonction du type de dispatch configuré.

Toutefois, si l’appareil est suspendu, les actions du cadre dépendent de savoir si le pilote est le PPO de la pile de périphériques. Si le pilote est le PPO, le cadre communique avec les pilotes parents USB pour alimenter l’appareil. Une fois que l’appareil a repris, le cadre présente la demande au pilote logiciel.

Si le pilote n’est pas le PPO, le framework n’effectue aucune action supplémentaire, car seul le PPO peut relancer l’appareil. La demande reste dans la file d’attente. La pile d'attente de l'appareil se bloque si le PPO ne reçoit pas de demandes qui l'obligent à réactiver l'appareil.

Dans cette section

Sujet Descriptif
Suspension sélective dans les pilotes UMDF Cette rubrique décrit comment les pilotes de fonction UMDF prennent en charge la suspension sélective USB.
Suspension sélective dans les pilotes de fonctions USB KMDF Cette rubrique décrit comment les pilotes de fonction KMDF prennent en charge la suspension sélective USB.