Partager via


Interruption sélective dans les pilotes USB (WDF)

Un pilote de fonction USB prend en charge la détection d’inactivité du runtime en implémentant la suspension sélective USB. Voici le contenu destiné aux développeurs de pilotes sur la façon d’implémenter la 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 alors que l’ordinateur auquel il est attaché reste à l’état de fonctionnement (S0). Pour un fonctionnement économe en énergie, en particulier sur les PC mobiles, tous les périphériques et pilotes USB doivent prendre en charge la suspension sélective. La mise sous tension d’un appareil lorsqu’il est inactif, mais que le système reste à l’état S0, présente les avantages significatifs suivants :

  • La suspension sélective permet d’économiser de 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 au maximum quelques rappels supplémentaires au-delà de ceux requis pour la prise en charge Plug-and-Play de base.

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

Les périphériques USB prennent en charge la détection d’inactivité au runtime via la suspension sélective USB. La suspension sélective permet de placer un appareil inactif dans un état suspendu sans affecter d’autres appareils connectés au même hub ou, dans le cas d’un appareil multifonctionnel, 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 être conformes à 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 mettre hors tension. Les pilotes de hub USB fournis par Microsoft implémentent une interruption sélective au niveau du matériel.

Les pilotes de fonction USB doivent implémenter la suspension sélective pour leurs fonctions d’appareil individuelles via WDF, qui communique avec les pilotes de bus et gère les demandes de contrôle d’E/S d’appareil qui interrompent et reprennent les fonctions d’appareil. 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élective USB d’un pilote de fonction varient selon que le pilote s’exécute en mode utilisateur ou en mode noyau. Tenez compte des recommandations suivantes :

  • Utilisez l’infrastructure de pilotes en mode utilisateur (UMDF) pour implémenter des pilotes USB chaque fois que 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 pilotes en mode noyau (KMDF) uniquement si le pilote diffuse des données via des points de terminaison isochronaux 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 de son appareil.

Si votre pilote USB prend en charge la suspension sélective et est en couche au-dessus du PPO dans sa pile de périphériques, le pilote ne doit pas utiliser de files d’attente gérées par l’alimentation. Cela est vrai pour les pilotes UMDF et KMDF. Si des demandes arrivent pour des files d’attente gérées par l’alimentation pendant que l’appareil est suspendu, l’ensemble de la pile d’appareils peut se bloquer.

La figure 1 montre le flux de 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 demande à la file d’attente appropriée.

Si la file d’attente n’est pas gérée par l’alimentation, l’infrastructure présente la demande au pilote en fonction du type de répartition que le pilote a configuré pour la file d’attente (séquentiel, parallèle ou manuel). Le pilote gère ensuite la demande.

Si la file d’attente est gérée sous tension et que l’appareil n’est pas suspendu, l’infrastructure présente la demande au pilote en fonction du type de répartition configuré.

Toutefois, si l’appareil est suspendu, les actions de l’infrastructure dépendent si le pilote est le PPO de la pile d’appareils. Si le pilote est le PPO, l’infrastructure communique avec les pilotes parent USB pour mettre le périphérique sous tension. Une fois que l’appareil a repris, l’infrastructure présente la demande au pilote.

Si le pilote n’est pas le PPO, l’infrastructure n’effectue aucune autre action, car seul le PPO peut reprendre l’appareil. La demande reste dans la file d’attente. La pile d’appareils se bloque si le PPO ne reçoit aucune demande qui l’oblige à reprendre l’appareil.

Contenu de cette section

Rubrique Description
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 fonction KMDF USB Cette rubrique décrit comment les pilotes de fonction KMDF prennent en charge la suspension sélective USB.