4. Bus Supportés

4.1. ISA -- Architecture Standard d'Industrie (Industry Standard Architecture

4.1.1. Structures de données

4.1.1.1. Structure struct isa_device

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 for register_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 in userconfig() */
};

4.1.1.2. Structure struct isa_driver

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" };

4.1.2. Points d'entrée

4.1.2.1. 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.

4.1.2.2. 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 .

4.2. EISA -- Architecture Étendue de Standard industriel (Extended Industry Standard Architecture)

4.2.2. Points d'entrée

4.2.2.1. probe()

Décrit dans la section de périphérique ISA.

4.2.2.2. attach()

Décrit dans la section de périphérique ISA.

4.3. PCI -- Bus d'interconnexion Périphérique (Peripheral Computer Interconnect)

4.3.1. Structures de données

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.

4.4. SCSI -- Small Computer Systems Interface

4.5. PCCARD (PCMCIA)

4.5.3. Fichiers d'en-tête

<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>.