Pilote de périphérique machine
Le pilote de périphérique machine fournit une interface au matériel spécifique à la plateforme pour les sous-systèmes de configuration et de fiabilité, de disponibilité et de maintenance (RAS) du système. Le pilote de périphérique machine prend en charge ces fichiers spéciaux pour accéder à ce matériel à partir du mode utilisateur: /dev/nvram et /dev/bus0 ... /dev/busN où N est le numéro de bus. Le Fichier spécial /dev/nvram permet d'accéder à la mémoire vive (RAM) spéciale pour le stockage ou l'extraction des informations d'erreur et des informations d'amorçage du système. Les fichiers spéciaux /dev/busN permettent d'accéder aux bus d'E-S à des fins de configuration et de diagnostic du système. La présence et l'utilisation de ce pilote de périphérique et de ses fichiers spéciaux associés sont spécifiques à la plateforme et ne doivent pas être utilisées par des applications générales.
Un programme doit disposer des droits appropriés pour ouvrir les fichiers spéciaux /dev/nvram ou /dev/busN. Il doit également disposer des droits appropriés pour ouvrir les fichiers spéciaux du bus CHRP (Common Hardware Reference Platform) /dev/pciNou /dev/isaN.
Initialisation et résiliation du pilote
Il n'existe pas d'exigences spéciales d'initialisation et de résiliation pour le pilote de périphérique machine. Ce pilote est lié statiquement au noyau du système d'exploitation et est initialisé lors de l'initialisation du noyau. Ce pilote de périphérique ne prend pas en charge l'arrêt et ne peut pas être déchargé.
Prise en charge des fichiers spéciaux /dev/nvram
Sous-routines ouvertes et proches
Le pilote de périphérique de la machine prend en charge le fichier spécial /dev/nvram en tant que fichier spécial de caractères multiplexés. Ce fichier spécial et le support de NVRAM sont fournis exclusivement sur cette plateforme matérielle pour prendre en charge la configuration système et les sous-systèmes RAS. Ces sous-systèmes ouvrent le fichier spécial /dev/nvram/n avec un nom de canal, n, spécifiant la zone de données à accéder. Une exception est le fichier /dev/nvram sans canal spécifié, qui permet d'accéder aux fonctions de contrôle NVRAM générales et à l'affichage des voyants sur le panneau avant.
Un nom de canal spécial Base peut être utilisé pour lire les informations de personnalisation de base stockées dans le cadre de l'enregistrement d'amorçage. Cette information a été initialement copiée sur le disque par la commande Base de savebase et n'est copiée que par le pilote lors de l'amorçage. Les informations de personnalisation Base ne peuvent être lues qu'une seule fois. Lorsque le fichier /dev/nvram/base est fermé pour la première fois, la mémoire tampon contenant les informations de personnalisation de base est libérée. L'ouverture suivante renvoie un code d'erreur ENOYER .
Sous-routines de lecture et d'écriture
La sous-routine écrire n'est pas prise en charge et renvoie un code d'erreur ENODEV . La sous-routine Lire est prise en charge après une ouverture du canal Base uniquement. La sous-routine Lire transfère des données à partir de la zone de données associée au canal spécifié. Le transfert commence au décalage (dans la zone de données du canal) spécifié par leoffsetQui est associée au pointeur de fichier utilisé dans l'appel de sous-routine.
Sur une sous-routine Lire , si la fin de la zone de données est atteinte avant que le nombre de transferts ne soit atteint, le nombre d'octets lus avant la fin de la zone de données est renvoyé. Si la sous-routine Lire commence à la fin de la zone de données, zéro octet est lu. Si la sous-routine Lire démarre après la fin de la zone de données, un code d'erreur ENXIO est renvoyé par le pilote.
Le sous-programme Lseek peut être utilisé pour modifier le décalage de la zone de données de départ à utiliser lors d'un appel Lire ultérieur.
Opérations d'amorçage
Les opérations ioctl suivantes peuvent être exécutées sur le pilote de périphérique de la machine après une ouverture réussie du fichier spécial /dev/nvram/:
| Opération | Descriptif |
|---|---|
| INFOS | Renvoie les informations de pilote de périphérique machine dans la structure Devinfo de l'appelant (pointé par le paramètre Arg ). Cette structure est définie dans le fichier /usr/include/sys/devinfo.h . Le type d'unité de ce pilote de périphérique est DD_PSEU. |
| CLÉ MIOGETKEY | Retourne le statut du serrure. Le paramètre Arg doit pointer vers une structure Mach_dd_io . :NONE.md_dataDoit pointer vers un entier ; cette zone contient le statut du verrou sur retour. Remarque: Toutes les plateformes ne possèdent pas de verrou physique que le logiciel peut lire. Pour ces plateformes, le statut est établi lors de l'amorçage.
|
| MIOGÉSES | Renvoie le statut de l'alimentation. Le paramètre Arg doit pointer vers une structure Mach_dd_io . :NONE.md_dataDoit pointer vers un entier ; cette zone contient le statut de l'alimentation en retour. Remarque: Toutes les plateformes ne fournissent pas le statut d'alimentation.
|
| MIOIPLCB | Retourne le contenu du bloc de contrôle de démarrage. Le paramètre Arg est défini pour pointer vers une structure Mach_dd_io , qui décrit la zone de données où le bloc de contrôle d'amorçage doit être placé. Le format de ce bloc de contrôle est spécifié dans le fichier /usr/include/sys/iplcb.h et la structure mach_dd_io est définie dans le fichier /usr/include/sys/mdio.h . Cette opération Ioctl utilise les zones suivantes de la structure Mach_dd_io :
Les régions Remarque: de ce bloc de contrôle dépendent de la plateforme.
|
| MIONVGET | Lait les données d'une adresse NVRAM et renvoie des données dans la mémoire tampon fournie par l'appelant. Cette opération est utile pour lire la zone ROS de NVRAM. Une structure qui définit cette zone se trouve dans le fichier /usr/include/sys/mdio.h . L'utilisation de cette opération ioctl n'est pas prise en charge par les systèmes conformes à la plate-forme de référence PowerPC ou à la plate-forme de référence matérielle commune et, dans AIX 4.2.1 et les versions ultérieures, l'opération échoue avec un code d'erreur EINVAL. |
| MIONVLED | Ecrit la valeur trouvée dans le paramètre Arg sur l'écran du voyant du panneau avant du système. Dans ce panneau, trois chiffres sont disponibles et la valeur du paramètre Arg peut être comprise entre 0 et hex FFF. Une explication des codes de voyant est disponible dans le fichier /usr/include/sys/mdio.h . Remarque: Toutes les plateformes n'ont pas de voyant.
|
| MIONVPUT | Ecrit les données dans une adresse NVRAM à partir de la mémoire tampon fournie par l'appelant. Cette opération est utilisée uniquement pour mettre à jour la zone ROS de NVRAM et uniquement par les commandes système. L'utilisation de cette opération dans d'autres zones de NVRAM peut entraîner des résultats imprévisibles. Si l'adresse NVRAM fournie est dans la zone des ROS, un nouveau code de redondance cyclique (CRC) pour la zone des ROS est généré. L'utilisation de cette opération ioctl n'est pas prise en charge sur les systèmes compatibles avec PowerPC Reference Platform ou Common Hardware Reference Platform et entraîne l'échec de l'opération avec un code d'erreur EINVAL . |
Opérations ioctl pour les systèmes
Les quatre opérations ioctl suivantes ne peuvent être utilisées qu'avec l'architecture basée sur le processeur POWER. S'ils sont utilisés avec d'autres systèmes, ou si une adresse de décalage, une taille ou un numéro d'emplacement non valide sont fournis, ces opérations renvoient un code d'erreur EINVAL .
Ces opérations Ioctl peuvent être appelées à partir de l'espace utilisateur ou de l'espace du noyau (à l'aide du service de noyau Fp_ioctl ), mais elles ne sont disponibles que dans l'environnement de processus.
L'argument Ioctl doit être un pointeur vers une structure Mach_dd_io .
Le verrou est obtenu pour sérialiser l'accès au registre de configuration des emplacements de bus.
MIOVPDGET
Cette opération Ioctl permet d'accéder en lecture à l'espace adresse VPD/ROM.
Les membres de structure suivants doivent être fournis:
| Membre de structure | Descriptif |
|---|---|
| Ulong md_addr | Indique le décalage dans la fonction ou l'espace adresse VPD pour commencer la lecture. |
| Ulong md_size | Indique le nombre d'octets à transférer. |
| char md_data | Spécifie un pointeur vers la mémoire tampon utilisateur pour les données. |
| int md_sla | Indique un numéro d'emplacement (sélection de configuration d'emplacement de bus). |
| int md_incr | Requiert un accès en octets (OCTET MV_OCTET). |
La lecture commence à l'adresse de base 0xFFA00000. Le décalage est ajouté à l'adresse de base pour obtenir l'adresse de départ de la lecture.
La structure Info de l'emplacement de bus sélectionné est utilisée pour obtenir la valeur d'incrément de mot. Cette valeur effectue un traitement correct lorsqu'il lit les données.
MIOCFGGET
Cette opération Ioctl permet d'accéder en lecture aux registres de configuration de l'architecture.
Les membres de structure suivants doivent être fournis:
| Membre de structure | Descriptif |
|---|---|
| Ulong md_addr | Indique le décalage dans l'espace adresse du registre de configuration. |
| Ulong md_size | Indique une valeur de 1. |
| char md_data | Spécifie un pointeur vers la mémoire tampon utilisateur pour les données. |
| int md_sla | Indique un numéro d'emplacement (sélection de configuration d'emplacement de bus). |
| int md_incr | Requiert un accès en octets ou en mots (OCTET MV_OCTET, MV_ABRÉGÉou MV_WORD). |
L'adresse de base 0xFF200000 est ajoutée au décalage pour obtenir l'adresse de la lecture.
MIOCFGPUT
Cette opération Ioctl permet d'accéder en écriture aux registres de configuration de l'architecture.
Les membres de structure suivants doivent être fournis:
| Membre de structure | Descriptif |
|---|---|
| Ulong md_addr | Indique le décalage dans l'espace adresse du registre de configuration. |
| Ulong md_size | Indique une valeur de 1. |
| char md_data | Spécifie un pointeur vers la mémoire tampon utilisateur des données à écrire. |
| int md_sla | Indique un numéro d'emplacement (sélection de configuration d'emplacement de bus). |
| int md_incr | Requiert un accès en octets ou en mots (OCTET MV_OCTET, MV_ABRÉGÉou MV_WORD). |
L'adresse de base 0xFF200000 est ajoutée au décalage pour obtenir l'adresse de la lecture.
MIORESET
Cette opération Ioctl permet d'accéder au registre de réinitialisation de l'emplacement de bus structuré.
Les membres de structure suivants doivent être fournis:
| Membre de structure | Descriptif |
|---|---|
| Ulong md_addr | Indique le temps de mise en attente de réinitialisation (en nanosecondes). |
| Ulong md_size | Non utilisé. |
| char md_data | Non utilisé. |
| int md_sla | Indique un numéro d'emplacement (sélection de configuration d'emplacement de bus). |
| int md_incr | Non utilisé. |
Le bit de registre de réinitialisation de l'emplacement de bus correspondant à l'emplacement de bus indiqué est défini sur 0. Une fois le délai spécifié, le bit est renvoyé à 1 et le contrôle revient au programme appelant.
Si une heure de mise en attente de réinitialisation de 0 est passée, l'emplacement de bus reste réinitialisé à la reprise du processus appelant.
Opérations ioctl pour la spécification PowerPC® Reference Platform et la plateforme Common Hardware Reference Platform
Les quatre opérations ioctl suivantes ne peuvent être utilisées qu'avec PowerPC Reference Platform et Common Hardware Reference Platform.
MIOGEARD
Scans pour le nom de variable dans la zone d'environnement global et, s'il est trouvé, la chaîne terminée par la valeur null est renvoyée à l'appelant. Une variable globale est de la forme "variablename=". La chaîne renvoyée est du format "variablename=string". Si la variable globale fournie est "* =", toutes les chaînes de variables de la zone d'environnement global sont renvoyées.
Les membres de structure suivants doivent être fournis:
| Membre de structure | Descriptif |
|---|---|
| Ulong md_addr | Pointeur vers une chaîne de variable globale qui a la valeur null s'est terminée avec un signe égal comme dernier caractère non nul. |
| Ulong md_size | Nombre d'octets dans la mémoire tampon de données. |
| int md_incr | Non utilisé. |
| char md_data | Pointeur vers la mémoire tampon de données. |
| int md_sla | Non utilisé. |
| Ulong md_length | Il s'agit d'un pointeur vers la longueur des chaînes de variables globales renvoyées, y compris les terminateurs nulles simd_lengthEst différent de zéro. |
MIOGEAUPD
La variable globale spécifiée est ajoutée à la zone d'environnement global si elle n'existe pas. Si la variable spécifiée existe dans la zone d'environnement global, le nouveau contenu remplace l'ancien après avoir ajusté les deltas de taille. De plus, toute information qui est déplacée vers une adresse inférieure a la zone d'origine à zéro. S'il n'y a pas de chaîne qui suit le nom de la variable et le signe égal, la variable spécifiée est supprimée. Si la variable à supprimer est introuvable, un retour réussi se produit. Les nouvelles informations sont écrites dans NVRAM. De plus, l'en-tête de l'opération NVRAM est mis à jour pour inclure l'heure de mise à jour de la zone d'environnement global et la valeur CRC est recalculelle.
Les membres de structure suivants doivent être fournis:
| Membre de structure | Descriptif |
|---|---|
| Ulong md_addr | Pointeur vers une chaîne de variable globale qui a la valeur null terminée. |
| Ulong md_size | Non utilisé. |
| int md_incr | Non utilisé. |
| char md_data | Non utilisé. |
| int md_sla | Non utilisé. |
| Ulong md_length | Il s'agit d'un pointeur vers la quantité d'espace qui est laissée dans la zone d'environnement global après la mise à jour. Il est calculé en fonction de la taille de la zone moins la longueur de toutes les chaînes de variables globales moins la valeur de seuil. |
MIOGEST
Le seuil spécifié est défini de sorte que toutes les mises à jour effectuées ne dépassent pas la taille de la zone d'environnement global moins le seuil. A la place de la structure Mdio , une valeur entière est utilisée pour spécifier le seuil. Le seuil ne persiste pas dans les IPL.
MIOGEARDA
Les attributs de la zone d'environnement globale sont renvoyés à la zone de données spécifiée par l'appelant. La structure gea_attrib est ajoutée à mdio.h. Il contient les informations suivantes:
| Membre de structure | Descriptif |
|---|---|
| (longueur) gea_length | Nombre d'octets dans la zone d'environnement global de NVRAM. |
| (longueur) gea_used | Nombre d'octets utilisés dans la zone d'environnement global. |
| (longueur) gea_thresh | Valeur de seuil de la zone d'environnement global. |
| Ulong md_addr | Non utilisé. |
| Ulong md_size | Taille de la mémoire tampon de données. Il doit être supérieur ou égal à la taille de (Gea_attrib). |
| int md_incr | Non utilisé. |
| char md_data | Adresse de la mémoire tampon pour copier la structure Gea_attrib . |
| int md_sla | Non utilisé. |
| Ulong md_length | Non utilisé. |
MIONVPARTLEN
La longueur de la partition CHRP NVRAM est renvoyée à la zone de données spécifiée par l'appelant. Les membres de structure suivants doivent être fournis:
| Membre de structure | Descriptif |
|---|---|
| Ulong md_addr | Indique la signature de la partition. |
| Ulong *md_length | Spécifie un pointeur vers le nom de la partition. |
| int md_incr | Non utilisé. |
| Ulong md_size | Indique la zone de données pour la longueur de partition renvoyée. |
| char *md_data | Non utilisé. |
| int md_sla | Non utilisé. |
MIONVPARTRD
MIONVPARTRD exécute des actions de lecture sur les partitions CHRP NVRAM . Les membres de structure suivants doivent être fournis:
| Membre de structure | Descriptif |
|---|---|
| Ulong md_addr | Indique la signature de la partition. |
| Ulong *md_length | Spécifie un pointeur vers le nom de la partition. |
| int md_incr | Indique le décalage de début dans la partition. |
| Ulong md_size | Indique le nombre d'octets à lire. |
| char *md_data | Spécifie un pointeur vers la mémoire tampon de l'utilisateur où les données doivent être copiées. |
| int md_sla | Non utilisé. |
MIONVPARTUPD
MIONVPARTUPD exécute des actions d'écriture sur les partitions CHRP NVRAM . Les membres de structure suivants doivent être fournis:
| Membre de structure | Descriptif |
|---|---|
| Ulong md_addr | Indique la signature de la partition. |
| Ulong *md_length | Spécifie un pointeur vers le nom de la partition. |
| int md_incr | Indique le décalage de début dans la partition. |
| Ulong md_size | Indique le nombre d'octets à lire. |
| char *md_data | Spécifie un pointeur vers la mémoire tampon utilisateur pour les données à écrire. |
| int md_sla | Non utilisé. |
Codes d'erreur
Les conditions d'erreur suivantes peuvent être renvoyées lorsque vous accédez au pilote de périphérique de la machine avec le fichier spécial /dev/nvram/n :
| Condition d'erreur | Descriptif |
|---|---|
| EACCES | Une écriture a été demandée dans un fichier ouvert pour l'accès en lecture seule. |
| ENOENT | Une tentative d'ouverture de /dev/nvram/base a été effectuée après la première fermeture. |
| EDÉFAUT | Une mémoire tampon spécifiée par l'appelant n'est pas valide sur un appel de sous-routine Lire, écrireou Ioctl . |
| EINVAL | Une opération Ioctl non valide a été émise. |
| ENXIO | Une tentative de lecture a été effectuée au-delà de la fin de la zone de données spécifiée par le canal. |
| ENODEV | Une tentative d'écriture a été effectuée. |
| ENOMEM | Une demande a été effectuée avec une mémoire tampon fournie par l'utilisateur qui est trop petite pour les données demandées ou une mémoire insuffisante peut être allouée pour répondre à la demande. |
Prise en charge des fichiers spéciaux de bus
Tous les modèles ont au moins un bus. Pour les systèmes non-CHRP, les noms sont au format /dev/busN. Les systèmes CHRP se présentent sous la forme /dev/pciN et /dev/isaN.
Sous-routines ouvertes et proches
Le pilote de périphérique machine prend en charge les fichiers spéciaux du bus en tant que fichiers spéciaux de type caractère. Ces fichiers spéciaux, ainsi que la prise en charge de l'accès aux bus d'E-S et aux contrôleurs, sont fournis sur cette plateforme matérielle pour prendre en charge la configuration système et les sous-systèmes de diagnostic, exclusivement. Le sous-système de configuration accède aux bus d'E-S et aux contrôleurs via le pilote de périphérique de la machine pour déterminer la configuration d'entrée-sortie du système. Ce pilote peut également être utilisé pour configurer les contrôleurs d'E-S et les unités en fonction des besoins d'une opération système appropriée. Si les tests de diagnostic du système ne peuvent pas accéder à une unité via les fonctions de diagnostic fournies par le pilote de périphérique propre de l'unité, ils peuvent utiliser le pilote de périphérique de la machine pour tenter d'isoler davantage l'incident.
Sous-routines de lecture et d'écriture
Les sous-programmes Lire et écrire ne sont pas pris en charge par le pilote de périphérique machine via les fichiers spéciaux du bus et, s'ils sont appelés, renvoient un code retour ENOYER dans la variable globale Errno .
Opérations d'amorçage
Les opérations de bus Ioctl permettent les transferts de données entre le contrôleur d'E-S du système ou le bus d'E-S du système et une zone de données fournie par l'appelant. Etant donné que ces opérations Ioctl utilisent la structure Mach_dd_io , le paramètre Arg de la sous-routine Ioctl doit pointer vers une telle structure. L'adresse de bus, le pointeur vers la mémoire tampon de l'appelant et le nombre et la longueur du transfert sont tous spécifiés dans la structure Mach_dd_io . La structure mach_dd_io est définie dans le fichier /usr/include/sys/mdio.h et fournit les informations suivantes:
- :NONE.md_addrContient un contrôleur d'E-S ou une adresse de bus d'E-S.
- :NONE.md_dataLa zone pointe vers une mémoire tampon au moins la taille de la valeur dans lemd_size:NONE.
- :NONE.md_sizeContient le nombre d'éléments à transférer.
- :NONE.md_incrSpécifie la longueur de l'élément transféré. Il doit être défini sur OCTET MV_OCTET, MV_ABRÉGÉou MV_WORD.
Les commandes suivantes peuvent être émises vers le pilote de périphérique machine après une ouverture réussie du fichier spécial du bus:
| Commande | Descriptif |
|---|---|
| INFOS | Renvoie les informations de pilote de périphérique machine dans la structure Devinfo de l'appelant, comme indiqué par le paramètre Arg . Cette structure est définie dans le fichier /usr/include/sys/devinfo.h . Le type d'unité de ce pilote de périphérique est DD_PSEU. |
| MIOBUSGET | Lit les données de l'espace d'E-S du bus et le renvoie dans une mémoire tampon fournie par l'appelant. |
| MIOBUSPUT | Ecrit les données fournies dans la mémoire tampon de l'appelant dans l'espace d'E-S du bus. |
| MIOMEMGET | Lit les données de l'espace mémoire du bus et le renvoie à la mémoire tampon fournie par l'appelant. |
| MIOMEMPUT | Ecrit les données fournies dans la mémoire tampon fournie par l'appelant dans l'espace mémoire du bus. |
| MIOPCFGET | Lit les données de l'espace de configuration des bus PCI et les renvoie dans une mémoire tampon fournie par l'appelant. La zone de structure Mach_dd_io Md_sla doit contenir le numéro d'unité et le numéro de fonction de l'unité à laquelle vous souhaitez accéder. |
| MIOPCFPUT | Ecrit les données fournies dans la mémoire tampon de l'appelant dans l'espace de configuration du bus PCI. La zone de structure Mach_dd_io Md_sla doit contenir le numéro d'unité et le numéro de fonction de l'unité à laquelle vous souhaitez accéder. |
Codes d'erreur
| Article | Descriptif |
|---|---|
| EDÉFAUT | Une mémoire tampon spécifiée par l'appelant n'est pas valide dans un appel Ioctl . |
| EIO | Une erreur d'E-S irrémédiable s'est produite sur le transfert de données demandé. |
| ENOMEM | Aucune mémoire ne peut être allouée par le pilote de périphérique machine à utiliser dans le transfert de données. |
Fichiers
| Article | Descriptif |
|---|---|
| /dev/pci N | Permet d'accéder au bus d'E-S (CHRP et le système d'exploitation AIX ). |
| /dev/isa N | Permet d'accéder au bus d'E-S (CHRP et le système d'exploitation AIX ). |
| /dev/nvram | Permet d'accéder à la mémoire RAM non volatile spécifique à la plateforme. |
| /dev/nvram/base | Permet à l'accès en lecture à la base de personnaliser les informations stockées dans le cadre de l'enregistrement d'amorçage. |