Cette structure est obligatoire, mais généralement elle est créée par config à partir du fichier de configuration de noyau. Elle est requise pour chaque périphérique, c'est à dire que si vous avez un pilote de périphérique contrôlant deux "serial boards", vous aurez deux structures isa_device. Si vous construisez un périphérique comme un LKM, vous devrez créer votre propre structure isa_device afin de refléter votre configuration (lignes 85 - 131 de pcaudio_lkm.c). Il y a une équivalence directe entre le fichier de configuration et la structureisa_device. La définition de /usr/src/sys/i386/isa/isa_device.h est :
struct isa_device { int id_id; /* device id */ struct isa_driver *id_driver; int id_iobase; /* base i/o address */ u_short id_irq; /* interrupt request */ short id_drq; /* DMA request */ caddr_t id_maddr; /* physical i/o memory address on bus (if any)*/ int id_msize; /* size of i/o memory */ inthand2_t *id_intr; /* interrupt interface routine */ int id_unit; /* unit number */ int id_flags; /* flags */ int id_scsiid; /* scsi id if needed */ int id_alive; /* device is present */ #define RI_FAST 1 /* fast interrupt handler */ u_int id_ri_flags; /* flags forregister_intr()
*/ int id_reconfig; /* hot eject device support (such as PCMCIA) */ int id_enabled; /* is device enabled */ int id_conflicts; /* we're allowed to conflict with things */ struct isa_device *id_next; /* used in isa_devlist inuserconfig()
*/ };
Cette structure est définie dans /usr/src/sys/i386/isa/isa_device.h, est est requise pour chaque pilote de périphérique. La définition est :
struct isa_driver { int (*probe) __P((struct isa_device *idp)); /* test whether device is present */ int (*attach) __P((struct isa_device *idp)); /* setup driver for a device */ char *name; /* device name */ int sensitive_hw; /* true if other probes confuse us */ };
C'est la structure employée par le code sondage/attachement (probe/attach) pour détecter et initialiser votre périphérique. Le membre probe est un pointeur à votre fonction permettant de sonder les périphériques. Le membre attach est un pointeur vers votre fonction d'attache. Le membre name est un pointeur de caractère sur le nom de deux ou trois lettres de votre pilote. C'est le nom enregistré pendant le processus de sondage/attachement (et probablement aussi dans lsdev). Le membre sensitive_hw est un indicateur qui aide le code de sondage à déterminer l'ordre du sondage.
Un instantiation typique est:
struct isa_driver mcddriver = { mcd_probe, mcd_attach, "mcd" };
probe()
probe()
prend un pointeur sur une structure isa_device
comme argument et renvoie un int. La valeur de retour est ``zéro'' ou
``non-zéro '' quant à l'absence ou à la présence de votre
périphérique. Ce point d'entrée peut être
déclaré comme static parce qu'il est
accessible par l'intermédiaire du membre probe de la structre
isa_driver. Cette fonction est destinée à détecter la
présence de votre périphérique seulement et ne devrait faire aucune
configuration du périphérique elle-même.
attach()
attach()
prend également un pointeur sur une
structure isa_device comme argument et renvoie un int. La valeur de retour est
également ``zéro'' ou ``non-zéro'' indiquant si l'attache a
réussie. Cette fonction est destinée pour faire n'importe quelle
initialisation spéciale du périphérique aussi bien que pour
confirmer que le périphérique est utilisable. Il devrait aussi être
déclaré static parce qu'il est
accesible par le membre attach de la structure
isa_driver .
probe()
Décrit dans la section de périphérique ISA.
attach()
Décrit dans la section de périphérique ISA.
Structure struct pci_device
nom : Le nom abrégé du périphérique.
sonde: Contrôle si le pilote peut supporter un périphérique avec
ce type. L'étiquette peut être employée pour obtenir plus
d'information avec pci_read_conf()
. Voir ci-dessous. Elle
renvoie une chaîne de caractères avec le nom du périphérique,
ou un pointeur NULL si le pilote ne peut pas supporter ce périphérique.
attache: Assigne une structure de contrôle et la prépare. Cette fonction peut utiliser les fonctions de mapping PCI. Voir ci-dessous. (identification de configuration) ou type.
compte: Un pointeur sur un compteur d'unité. Il est employé par le configurateur de PCI pour assigner des numéros.
Structure struct scsi_adapter
Structure struct scsi_device
Structure struct scsi_ctlr_config
Structure struct scsi_device_config
Structure struct scsi_link
Structure struct slot_cont
Structure struct pccard_drv
Structure struct pccard_dev
Structure struct slot
<pccard/slot.h>
Ce document, ainsi que d'autres peut être téléchargé sur ftp.FreeBSD.org/pub/FreeBSD/doc/.
Pour toutes questions à propos de FreeBSD, lisez la documentation avant de contacter <questions@FreeBSD.org>.
Pour les questions sur cette documentation, contactez <doc@FreeBSD.org>.