Service de noyau devswadd
Objectif
Ajoute une entrée d'unité à la table de commutation d'unité.
Syntaxe
Paramètres
| Article | Descriptif |
|---|---|
| Devno | Indique le Numéros d'unités principaux et mineurs à associer à l'entrée spécifiée dans la table des commutateurs d'unité. |
| Dswptr | Pointe vers la structure de commutateur d'unité à ajouter à la table de commutation d'unité. |
Descriptif
Le service de noyau Devswadd est généralement appelé par la routine Ddconfig d'un pilote de périphérique pour ajouter ou remplacer les points d'entrée du pilote de périphérique dans la table des commutateurs d'unité. La table de commutation d'unité est une table des structures de commutateur d'unité (Devsw) indexées par le numéro d'unité principal du pilote de périphérique. Cette table de structures est utilisée par les services d'interface de pilote de périphérique dans le noyau pour faciliter l'appel de routines de pilote de périphérique.
La partie principale du numéro d'unité du paramètre Devno est utilisée pour spécifier l'index dans la table de commutation d'unité où le service Devswadd doit placer l'entrée de commutateur d'unité indiquée. Avant que ce service copie la structure de commutation d'unité dans la table de commutation d'unité, il vérifie l'entrée existante pour déterminer si un périphérique ouvert l'utilise. Si une unité ouverte occupe actuellement l'entrée à remplacer, le service Devswadd n'effectue pas la mise à jour. Au lieu de cela, elle renvoie une valeur d'erreur EEXISTE . Si la mise à jour aboutit, elle renvoie une valeur de 0.
Les points d'entrée de la structure de commutateur d'unité qui ne sont pas pris en charge par le pilote de périphérique doivent être traités de deux manières. Si un appel à un point d'entrée non pris en charge doit entraîner la restitution d'un code d'erreur, le point d'entrée doit être défini sur la routine Nodev dans la structure. En conséquence, tout appel à ce point d'entrée appelle automatiquement la routine Nodev , qui renvoie un code d'erreur ENODEV . Le noyau fournit la routine Nodev .
Sinon, un appel à un point d'entrée non pris en charge doit être traité comme une fonction sans opération. Ensuite, le point d'entrée correspondant doit être défini sur la routine Nulldev . La routine Nulldev , qui est également fournie par le noyau, n'effectue aucune opération si elle est appelée et renvoie un code retour 0.
Sur les systèmes multiprocesseur, toutes les routines de pilote d'unité exécutées par défaut sur le premier processeur ont démarré lors du démarrage du système. Cela garantit la compatibilité avec les pilotes de périphérique en uniforme. Si le pilote de périphérique en cours d'ajout a été conçu pour être multiprocesseur, définissez l'indicateur DEV_MPSAFE dans led_optsDe la structure Devsw transmise au service de noyau Devswadd . Les routines de pilote de périphérique s'exécuteront ensuite sur n'importe quel processeur disponible.
Toutes les autres zones de la structure qui ne sont pas utilisées doivent être définies sur 0. Certaines zones de la structure sont destinées à l'utilisation du noyau ; le service Devswadd ne copie pas ces zones dans la table des commutateurs d'unité. Ces zones sont documentées dans le fichier /usr/include/device.h .
Environnement d'exécution
Le service de noyau Devswadd peut être appelé à partir de Environnement de processus uniquement.
Valeurs renvoyées
| Article | Descriptif |
|---|---|
| 0 % | Indique une opération réussie. |
| EEXISTE | Indique que l'entrée de commutateur d'unité spécifiée est en cours d'utilisation et ne peut pas être remplacée. |
| ENOMEM | Indique que l'entrée ne peut pas être réservée en raison d'une mémoire réelle insuffisante. |
| EINVAL | Indique que la partie principale du numéro d'unité du paramètre Devno dépasse le nombre maximal autorisé d'entrées de commutateur d'unité. |