Point d'entrée du pilote de périphérique ddselect
Objectif
Vérifie si un ou plusieurs événements se sont produits sur l'unité.
Syntaxe
Paramètres
| Article | Descriptif |
|---|---|
| Devno | Indique les numéros d'unité principaux et secondaires. |
| événements | Indique les événements à vérifier. |
| Reventp | Pointeur d'événements renvoyés. Ce paramètre, transmis par référence, est utilisé par la routine Ddselect pour indiquer les événements sélectionnés au moment de l'appel. L'emplacement des événements renvoyés par le paramètre Reventp est défini sur 0 avant d'entrer dans cette routine. |
| Chan | Indique le numéro de canal. |
Descriptif
Le point d'entrée Ddselect est appelé lorsque le sous-programme Sélectionner ou Sondage est utilisé ou lorsque le service de noyau Fp_select est appelé. Il détermine si un événement ou un événement spécifié s'est produit sur l'unité.
Seuls les pilotes de classe de caractères peuvent fournir la routine Ddselect . Il ne peut pas être fourni par des pilotes de périphérique de bloc même lorsqu'ils fournissent un accès en lecture / écriture brut.
Demandes de renseignements sur les événements
Le paramètre événements représente les événements possibles à vérifier en tant que indicateurs (bits). Il existe trois événements de base définis pour les sous-routines Sélectionner et Sondage , lorsqu'ils sont appliqués aux unités prenant en charge des opérations de sélection ou d'interrogation:
| Evénement | Descriptif |
|---|---|
| POLLIN | L'entrée est présente sur l'unité. |
| INTERROGATION | L'unité est capable de sortie. |
| POLLPRI | Une condition exceptionnelle s'est produite sur l'unité. |
Un quatrième indicateur d'événement est utilisé pour indiquer si la routine Ddselect doit enregistrer cette demande pour la notification ultérieure de l'événement à l'aide du service de noyau Selnotifier . Cet indicateur peut être défini dans le paramètre événements si le pilote de périphérique n'est pas requis pour fournir une notification asynchrone des événements demandés:
| Evénement | Descriptif |
|---|---|
| POLLSYNCHRONISÉ | Cette demande n'est qu'une demande synchrone. La routine n'a pas besoin d'appeler le service de noyau Selnotifier pour cette demande, même si les événements se produisent ultérieurement. |
Des indicateurs d'événement supplémentaires dans le paramètre événements sont laissés pour des événements spécifiques à l'unité dans l'appel de sous-routine Sondage .
Sélectionner le traitement
Si un ou plusieurs événements indiqués dans le paramètre événements sont vrais, la routine Ddselect doit l'indiquer en définissant les bits correspondants dans le paramètre Reventp . Notez que le paramètre des événements renvoyés par Reventp est transmis par référence.
Si aucun des événements demandés n'est vrai, la routine Ddselect définit le paramètre des événements renvoyés sur 0. Il est transmis par référence via le paramètre Reventp . Il vérifie également l'indicateur POLLSYNCHRONISÉ dans le paramètre événements . Si cette option est vraie, la routine Ddselect doit revenir, car la demande d'événement n'était qu'une demande synchrone.
Toutefois, si l'indicateur POLLSYNCHRONISÉ est faux, la routine Ddselect doit notifier le noyau lorsqu'un ou plusieurs des événements spécifiés se produisent ultérieurement. A cet effet, la routine doit définir des indicateurs internes distincts pour chaque événement demandé dans le paramètre événements .
Lorsque l'un de ces événements devient vrai, la routine du pilote de périphérique doit utiliser le service Selnotifier pour notifier le noyau. Les indicateurs internes correspondants doivent alors être réinitialisé pour éviter une nouvelle notification de l'événement.
Parfois, l'unité peut être dans un état dans lequel un événement ou des événements pris en charge ne peuvent jamais être satisfaits (par exemple, lorsqu'une ligne de communication n'est pas opérationnelle). Dans ce cas, la routine Ddselect doit simplement définir les indicateurs Reventp correspondants sur 1. Cela empêche le sous-programme Sélectionner ou Sondage d'attendre indéfiniment. Par conséquent, l'appelant ne sera pas en mesure, dans ce cas, de faire la distinction entre les événements satisfaits et ceux qui ne sont pas satisfaits. L'erreur sera détectée uniquement lorsqu'une demande ultérieure avec une option NRETARDÉE échoue.
Environnement d'exécution
La routine Ddselect est exécutée uniquement dans l'environnement de processus. Il doit fournir la sérialisation requise de ses structures de données en utilisant les services de noyau de verrouillage en conjonction avec un mot de verrouillage privé défini dans le pilote.
Valeurs renvoyées
La routine Ddselect doit retourner avec un code retour 0 si l'opération de sélection ou d'interrogation demandée est valide pour la ressource spécifiée. Les opérations demandées ne sont toutefois pas valides si l'une des valeurs suivantes est vraie:
- Le pilote de périphérique ne prend pas en charge un événement demandé.
- L'unité est dans un état dans lequel les opérations de sélection et de sélection ne sont pas acceptées.
Dans ces cas, la routine Ddselect doit retourner avec un code retour différent de zéro (généralement EINVAL) et sans définir les indicateurs Reventp appropriés sur 1. Cela permet à la sous-routine Sondage de revenir à l'appelant avec l'indicateur POLLERR défini dans le paramètre des événements renvoyés associé à cette ressource. La sous-routine Sélectionner indique à l'appelant que tous les événements demandés sont vrais pour cette ressource.
Le cas échéant, les valeurs de retour définies dans la norme POSIX 1003.1 pour la sous-routine select doivent être utilisées.