
                       Le HOWTO _Plug-and-Play_ pour Linux

David S.Lawyer dave@lafn.org

   v0.08, 28 Novembre 1999
     _________________________________________________________________

   _Aide  l'utilisation et  la comprhension des priphriques
   Plug-and-Play. Comment rendre votre systme Linux apte  grer le
   Plug-and-Play._
     _________________________________________________________________

   Adaptation franaise : Albert-Paul Bouillot apb@club-internet.fr

   _Dfinition : Plug-and-Play_ (Installez-et-Utilisez),_PnP_. C'est du
   jargon. C'est un matriel ou un logiciel, qui, aprs avoir t
   install ("plugged in"), peut tre utilis immdiatement ("played
   with"), par opposition au matriel ou au logiciel qui ncessite d'tre
   configur.

1. Introduction

1.1 Copyright, Marques dposes, Limitation de garantie & Crdits

  Copyright

   Copyright (c) 1998, 1999 de David S. Lawyer.

   Vous pouvez librement copier ou distribuer (vendre ou donner) ce
   document, dans n'importe quel format. Pour les corrections et les
   modifications mineures, prenez contact avec le gestionnaire. Vous
   pouvez en raliser des travaux drivs et les distribuer  condition
   de :

    1. Envoyer le travail driv (dans le format le plus appropri, par
       exemple sgml) au LDP (Projet de Documentation Linux) ou quivalent
       pour en assurer la diffusion sur Internet. Si ce n'est pas le LDP,
       indiquez-lui l'endroit o il est disponible. Sauf pour les
       traductions, envoyez une copie de ce travail  la dernire url
       indique du gestionnaire ;
    2. tablir une licence dans l'esprit de celle-ci ou utiliser la
       licence GPL. Inclure une notice de copyright et au moins un
       pointeur sur la licence retenue ;
    3. Reconnatre les mrites des auteurs et contributeurs importants.

   Si vous envisagez de faire un travail, autre qu'une traduction, 
   partir de ce document, discutez de votre projet avec le gestionnaire
   actuel.

  Marques dposes

   Si certains mots sont des marques dposes, le contexte doit en mettre
   l'appartenance en vidence. Par exemple "MS Windows" (ou simplement
   "Windows") implique que "Windows" appartient  Microsoft.

  Limitation de garantie

   Une grande partie des informations contenues dans cet HOWTO ont t
   obtenues d'Internet, de livres qui peuvent tre errons ou obsoltes
   etc. Bien que je n'aie pas essay de vous induire en erreur sciemment,
   il peut y avoir un certain nombre d'inexactitudes dans ce document.
   Ayez l'obligeance de me le faire savoir. Dans la mesure o cette
   documentation est gratuite, il est bien vident que ni moi, ni les
   auteurs prcdents (ni le traducteur ;-) ) ne pourront tre tenus pour
   lgalement responsables des erreurs ventuelles.

1.2 Pour le futur : Vous pouvez contribuer

   Merci de me faire part de toutes erreurs dans les faits, les opinions,
   la logique, l'orthographe et la grammaire, la clart, les liens etc.
   que vous pourrez rencontrer. Mais d'abord, vrifiez que le document ne
   soit pas trop ancien et que vous possdez la dernire version. Merci
   de m'envoyer toutes les infos que vous pensez devoir concerner ce
   document.

   Je n'ai pas tudi en dtail ni les outils "isapnptools" ni les
   correctifs du noyau de David Howells (mais j'envisage de le faire). De
   mme, je ne comprends pas totalement comment le BIOS configure le PnP
   (cela dpend de la version du BIOS) ni comment Windows9x met  jour
   l'ESCD. Donc, cet HOWTO est encore incomplet et peut se rvler
   inexact (faites-moi savoir o sont les erreurs). Dans cet HOWTO j'ai
   parfois utilis;nbsp;?? pour indiquer que je ne connais pas vraiment
   la rponse.

1.3 Nouvelles versions de cet HOWTO

   Les nouvelles versions du Plug-and-Play-HOWTO devraient tre
   disponibles  peu prs tous les mois pour consultation et/ou
   tl-chargement sur les sites miroirs du LDP. Pour obtenir une liste
   de ces sites, consultez : http://metalab.unc.edu/LDP/mirrors.html.
   Diffrents formats sont disponibles. Si vous voulez rapidement
   vrifier la date de la dernire version, regardez  :
   http://metalab.unc.edu/LDP/HOWTO/Plug-and-Play-HOWTO.html.

2. Que devrait faire le PnP : Allouer les "Ressources du bus"

2.1 En quoi consiste le _Plug-and-Play_ (PnP) ?

   En simplifiant beaucoup, le _Plug-and-Play_ est une mthode pour
   indiquer automatiquement au logiciel (pilotes de priphriques) o
   trouver diffrents lments matriels (priphriques) tels que modems,
   cartes rseau, cartes son etc. La tche du _Plug-and-Play_ consiste 
   mettre en correspondance les priphriques physiques et les logiciels
   (pilotes de priphriques) qui les font fonctionner et  tablir un
   canal de communication entre chaque priphrique et son pilote. Pour
   ce faire, le PnP alloue les "ressources bus" suivantes  la fois aux
   pilotes et au matriel : adresses d'E/S, IRQ, canaux DMA (uniquement
   pour le bus ISA), rgions mmoire. Si vous ne comprenez pas ce que
   signifient ces quatre notions, lisez les paragraphes suivants. Aprs
   que ces ressources du bus ont t assignes (et si les pilotes
   adquats sont installs), les noms des units priphriques dans le
   rpertoire /dev sont prts  tre utiliss.

   Cette mthode d'affectation de certaines ressources du bus est
   quelquefois dsigne par le terme "configuration", mais c'est
   uniquement d'une configuration de bas niveau qu'il s'agit. Mme
   lorsque le _PnP_ est utilis au maximum, une bonne partie de la
   configuration des priphriques est ralise par autre chose que le
   _PnP_. Par exemple, pour la configuration du modem, une "chane de
   caractres d'initialisation" est envoye au modem  travers le "canal"
   adresse d'E/S. Cette "chane de caractres d'initialisation" n'a rien
    voir avec le PnP bien que le "canal" utilis pour l'envoyer ait t
   allou par le PnP. Le rglage de la vitesse (et de beaucoup d'autres
   paramtres) d'un port srie est ralis en envoyant, de programmes
   excuts par l'utilisateur (souvent automatiquement, au dmarrage),
   des messages au pilote de priphrique. Et cette configuration n'a
   rien  voir avec le _PnP_. Donc, quand on parle de la configuration
   effectue par le_PnP_, cela ne concerne qu'un certain type de
   configuration. Alors que d'autres documentations (telle celle de MS
   Windows) parlent simplement de "ressources" quand il s'agit des
   ressources du bus, j'ai volontairement utilis le terme "ressources du
   bus" pour les distinguer de la multitude d'autres ressources
   disponibles.

2.2 Comment un ordinateur trouve-t-il les priphriques (et inversement)

   Un ordinateur est constitu d'un CPU/processeur qui effectue les
   traitements, et de mmoire pour stocker les programmes et les donnes.
   De plus, il y a un certain nombre de priphriques tels que diffrents
   types d'unit de disques, une carte vido, un clavier, des cartes
   rseau, des cartes modem, des cartes son, des ports srie et parallle
   etc. Il y a galement une alimentation pour fournir l'nergie
   ncessaire, diffrents bus sur une carte mre pour connecter les
   priphriques au CPU, ainsi qu'un botier pour contenir le tout.

   Dans les temps anciens, la plupart des priphriques avaient leur
   propre carte d'interface (circuits imprims). Aujourd'hui, en plus des
   cartes d'interface, beaucoup de "priphriques" sont de petits
   circuits monts de faon permanente sur une carte unique appele
   "carte mre". Les cartes qui se connectent sur la carte mre peuvent
   contenir plus d'un priphrique. Les circuits mmoire sont quelquefois
   galement considrs comme des priphriques mais ne sont pas
   _plug-and-play_ au sens de cet HOWTO.

   Pour qu'un systme informatique fonctionne correctement, chaque unit
   priphrique doit tre sous le contrle de son "pilote de
   priphrique" Ce logiciel fait partie du systme d'exploitation (ou
   d'un module) et tourne sur le CPU. Les pilotes de priphriques sont
   associs  des "fichiers spciaux" dans le rpertoire /dev, bien que
   ce ne soient pas vraiment des fichiers. Ils ont des noms tels que hda1
   (premire partition sur le disque dur a), ttyS0 (premier port srie),
   eth1 (deuxime carte Ethernet) etc. Pour rendre les choses plus
   compliques, le pilote de priphrique slectionn, disons pour eth1,
   dpendra du type de carte Ethernet que vous aurez. Donc, eth1 ne peut
   pas tre affect  n'importe quel pilote Ethernet, mais  un certain
   pilote qui fonctionnera avec le type de carte que vous avez install.
   Pour grer un priphrique, le CPU (sous le contrle du pilote de
   priphrique), envoie des commandes (et des donnes) vers les
   diffrents priphriques et en lit les infos. Pour cela, chaque pilote
   de priphrique doit connatre l'adresse utilise pour le priphrique
   qu'il gre. Connatre une telle adresse correspond  mettre en oeuvre
   un canal de communication, mme si le "canal" physique est en ralit
   un bus de donnes dans le PC qui est partag avec pratiquement tout le
   reste.

   Le canal de communication est en ralit un peu plus compliqu que la
   description qui en est faite ci-dessus. Une "adresse" est en ralit
   un ensemble d'adresses et il y a un canal inverse (les interruptions)
   qui permet aux priphriques d'envoyer, en urgence, une requte de
   "demande d'aide" au pilote de priphrique.

2.3 Adresses d'E/S etc.

   Les PC utilisent trois espaces d'adresses : mmoire principale, E/S,
   et configuration (uniquement dans le cas du bus PCI). Les trois types
   d'adresses partagent le mme bus  l'intrieur du PC. Mais la tension
   sur certains fils spcialiss indique  tous les priphriques  quel
   "espace" une adresse appartient : E/S, mmoire centrale, ou
   configuration. Consultez Adresses pour plus de dtails. Les
   priphriques sont normalement situs dans l'espace d'adressage E/S
   bien que, maintenant ils utilisent l'espace d'adressage mmoire
   centrale. Une adresse E/S (Entre/Sortie) (ou I/0, pour Input/Output)
   est quelquefois appele simplement "I/O", "IO", "i/o" ou "io". Le
   terme "port d'E/S" (ou "I/O port") est galement utilis. Il y a deux
   tapes principales pour allouer les adresses d'E/S (ou d'autres
   ressources telles que les interruptions) :

    1. Affecter l'adresse d'E/S etc. sur la carte (dans l'un de ses
       registres)
    2. Communiquer cette adresse d'E/S etc. au pilote.

   Le processus en deux tapes ci-dessus ressemble un peu au problme de
   la recherche du numro de la maison de quelqu'un dans une rue. Vous
   devez obtenir (et noter) le numro de la maison et quelqu'un doit
   avoir appos le numro sur la maison afin qu'on puisse le trouver.
   Dans les ordinateurs, le pilote de priphrique doit obtenir
   l'adresse, et le matriel du priphrique doit installer la mme
   adresse dans l'un de ses registres. Ces deux oprations doivent tre
   ralises, mais certains font l'erreur de ne raliser que l'une de ces
   deux tapes et se demandent ensuite pourquoi l'ordinateur ne peut pas
   trouver le priphrique. Par exemple, ils utiliseront "setserial" pour
   attribuer une adresse  un port srie, sans penser que cela indique
   seulement au pilote quelle est cette adresse. Cela ne slectionne pas
   l'adresse physique du port srie lui-mme. Si le port srie a, en
   ralit, une adresse diffrente (ou pas d'adresse du tout)et que vous
   indiquiez une adresse errone a setserial, vous avez des problmes.

   Une autre obligation, vidente, consiste a avoir paramtr l'adresse
   d'E/S sur la carte avant que le pilote de priphrique n'essaie
   d'utiliser cette adresse. Comme les pilotes de priphriques dmarrent
   souvent ds la mise en route de l'ordinateur, ils essaient quelquefois
   d'accder  une carte (pour tester sa prsence etc. ) avant que
   l'adresse ait t paramtre dans la carte par le programme de
   configuration _PnP_. Ainsi, vous voyez des messages d'erreur indiquant
   qu'une carte est introuvable bien qu'elle soit prsente (mais son
   adresse n'a pas encore t attribue).

   Ce qui vient d'tre dit dans les deux derniers paragraphes concernant
   les adresses d'E/S s'applique avec la mme force aux autres
   ressources : Les IRQ --Vue d'ensemble, Canaux DMA,et Espace mmoire.
   C'est ce que nous allons expliquer dans les trois paragraphes
   suivants.

2.4 Les IRQ, vue d'ensemble

   Aprs avoir lu ce paragraphe, il faut lire Interruptions --Dtails
   pour avoir quelques dtails complmentaires. Ce qui suit est
   volontairement trs simplifi : en plus de l'adresse, il faut
   galement prendre en compte un numro d'interruption (tel que IRQ5),
   que l'on appelle galement numro d'IRQ (IRQ = Interrupt ReQuest,
   demande d'interruption). Nous avons dj mentionn plus haut que le
   pilote de priphrique doit connatre l'adresse de la carte de faon 
   pouvoir communiquer avec elle. Mais comment se fait la communication
   dans l'autre sens ? Supposons que le priphrique ait besoin de dire
   quelque chose  son pilote immdiatement. Par exemple, le priphrique
   peut venir de recevoir une rafale d'octets destins  aller en mmoire
   centrale et que le priphrique ait besoin de demander  son pilote de
   venir les rcuprer immdiatement de sa mmoire tampon pratiquement
   pleine pour les transfrer en mmoire centrale.

   Comment le priphrique peut-il appeler son pilote  l'aide ? Il ne
   peut pas utiliser le bus de donnes principal puisque celui-ci est
   dj en cours d'utilisation. Au lieu de cela, il lance un appel en
   mettant une certaine tension sur une ligne d'interruption (qui fait
   partie du bus). Il y a l'quivalent de 16 lignes, et chacune d'elle
   correspond (indirectement)  un certain pilote de priphrique. Chaque
   ligne possde un numro d'interruption (IRQ) unique (IRQ = Interrupt
   ReQuest). Le priphrique doit envoyer son interruption sur la bonne
   ligne et le pilote de priphrique doit attendre l'interruption sur
   cette ligne. Le numro d'IRQ stock dans le priphrique dtermine
   quelle est la ligne concerne. Ce mme numro d'IRQ doit tre connu du
   pilote de priphrique de manire que celui-ci sache quelle ligne
   d'IRQ le concerne.

   Lorsqu'un pilote de priphrique reoit une interruption (un appel 
   l'aide) il doit se renseigner sur la cause de l'mission de cette
   interruption et effectuer les actions appropries pour y rpondre. Sur
   un bus ISA chaque priphrique a besoin d'un numro d'interruption
   unique (sauf que deux ports srie ou plus peuvent partager la mme
   interruption depuis le noyau 2.2). Sur un bus PCI, le partage des
   interruptions est permis.

2.5 Les canaux DMA

   Les canaux DMA ne concernent que le bus ISA. DMA signifie "Accs
   Direct Mmoire" (Direct Memory Access). Dans ce cas, le priphrique
   est autoris  prendre le pas sur le CPU pour le contrle du bus et 
   transfrer les octets directement en mmoire centrale. Normalement le
   CPU effectuerait un tel transfert en deux tapes :
    1. Lecture de l'espace mmoire E/S du priphrique et stockage de ces
       octets dans le CPU lui-mme
    2. criture de ces octets du CPU dans la mmoire centrale.

   Avec le DMA le processus de transfert des octets du priphrique vers
   la mmoire centrale se droule normalement en une seule tape. Les
   priphriques doivent avoir cette capacit intgre dans le matriel,
   et donc tous les priphriques ne fonctionnent pas en DMA. Pendant que
   le transfert DMA est en cours d'excution, le CPU ne peut pas faire
   grand-chose puisque le bus principal est utilis par ce transfert DMA.

   Le bus PCI n'a pas vraiment de DMA, mais plutt quelque chose de
   mieux : le "contrle du bus" (bus mastering). Cela fonctionne un peu
   comme le DMA et on l'appelle quelquefois DMA (par exemple, les units
   de disques durs se nomment "UltraDMA"). Cette technique permet aux
   priphriques de prendre temporairement le contrle du bus et de
   transfrer des octets exactement comme le fait le CPU lorsqu'il a le
   contrle du bus. On n'utilise pas de numros de canaux car le bus PCI
   est constitu de telle manire que le matriel sait quel est le
   contrleur du bus actuel et quel est le priphrique qui demande  le
   devenir. Il n'y a donc pas d'allocation de canaux DMA dans le cas d'un
   bus PCI.

   Quand un priphrique, sur un bus ISA, dsire effectuer un transfert
   DMA, il gnre une requte de DMA en utilisant une ligne spcialise
   comme pour une demande d'interruption. Le DMA aurait pu tre ralis
   en utilisant les interruptions mais cela aurait introduit des retards,
   donc il est plus rapide d'utiliser un type d'interruption spcial
   connu sous le nom de requte DMA. Comme les interruptions, les
   requtes DMA sont numrotes de faon  identifier le priphrique qui
   a envoy cette requte. Ce numro est appel canal DMA. Puisque tous
   les transferts DMA utilisent le bus principal (et qu'un seul
   utilisateur ne peut utiliser ce bus  un instant donn) ils utilisent
   tous le mme canal, mais le numro de "canal DMA" sert  identifier
   qui est en train d'utiliser le "canal". Des registres existent sur la
   carte mre pour stocker l'tat courant de chaque "canal". Donc, pour
   mettre une requte DMA, le priphrique doit connatre son numro de
   canal DMA qui doit tre stock dans un registre sur le priphrique
   physique.

2.6 Espace mmoire

   Certains priphriques se voient assigner des adresses dans l'espace
   de la mmoire principale. On parle souvent de "mmoire partage" ou
   "d'E/S en zone mmoire". Quelquefois, il s'agit de mmoire morte (ROM)
   sur le priphrique. A propos de ressources _PnP_, on parle simplement
   de "mmoire". Un tel priphrique peut galement utiliser l'espace
   d'adressage E/S.

   Lorsque vous branchez une telle carte, en ralit vous connectez un
   module mmoire pour la mmoire principale. Cette mmoire peut tre
   soit de la mmoire morte (ROM = Read Only Memory) soit de la mmoire
   partage. La mmoire partage est partage entre le priphrique et
   l'Unit Centrale (CPU qui excute le pilote de priphrique). Cette
   mmoire peut servir de moyen de "transfert" direct des donnes entre
   le priphrique et la mmoire principale. En ralit, ce n'est pas un
   transfert  proprement parler puisque le priphrique met ses donnes
   dans sa propre mmoire qui se trouve tre galement la mmoire
   centrale.  la fois la carte et le pilote de priphrique doivent
   savoir o cela se passe. Il faut utiliser des adresses mmoires hautes
   de faon  viter tout conflit avec les circuits mmoires des adresses
   basses (de la mmoire centrale) de votre ordinateur.

   Pour la ROM, c'est diffrent. C'est comme un programme (peut-tre le
   pilote de priphrique) qui serait utilis avec le priphrique.
   Heureusement, il peut tourner avec Linux et pas seulement avec Windows
   ?? Il peut tre ncessaire de le dupliquer en mmoire centrale pour le
   faire tourner plus vite. Une fois dupliqu, il n'est plus "en lecture
   seule".

2.7 Les "ressources" pour le priphrique et son pilote

   Donc, les pilotes de priphriques doivent tre "attachs" d'une faon
   quelconque au matriel qu'ils contrlent. Cela est ralis en
   fournissant des "ressources" (E/S, Mmoire, IRQ, DMA)  la fois au
   priphrique physique et au logiciel de pilotage. Par exemple, un port
   srie n'utilise seulement que 2 ressources (parmi les 4 possibles) :
   une IRQ et une adresse d'E/S. Ces deux valeurs doivent tre fournies
   au pilote de priphrique et au priphrique physique. On donne alors
   un nom (tel que ttyS1) au pilote (et  l'unit priphrique
   correspondante) dans le rpertoire /dev. L'adresse et le numro d'IRQ
   sont stocks dans un registre sur la carte du priphrique physique
   (ou dans un circuit sur la carte mre). Si l'on utilise de cavaliers,
   cette information est toujours stocke dans la partie "matriel" du
   priphrique (sur la carte etc.). Mais dans le cas du _PnP_, la donne
   enregistre est gnralement perdue lors de l'arrt du PC (mise hors
   tension) de sorte que cette donne doit tre fournie  chaque fois que
   le PC est remis en fonction.

2.8 Le problme

   L'architecture du PC fournit seulement un nombre limit d'IRQ, de
   canaux DMA, d'adresses d'E/S et de rgions mmoire. S'il n'y avait que
   quelques priphriques et qu'ils aient des ressources standardises
   (comme des adresses d'E/S et des numros d'IRQ uniques) il n'y aurait
   aucun problme pour attacher des pilotes de priphriques aux units
   priphriques. Chaque unit aurait des ressources fixes qui
   n'entreraient en conflit avec aucune autre unit priphrique de
   l'ordinateur. Deux priphriques n'auraient pas la mme adresse d'E/S,
   la mme IRQ etc. Chaque pilote pourrait tre programm avec l'adresse
   d'E/S, l'IRQ etc. codes en dur dans le programme. La vie serait
   simple.

   Mais ce n'est pas le cas. Non seulement il existe tellement de
   priphriques diffrents aujourd'hui que les conflits sont frquents,
   mais, de plus, on a souvent besoin d'avoir plus d'un priphrique d'un
   type donn. Par exemple, on peut vouloir disposer de plusieurs units
   de disques diffrentes, de plusieurs ports srie etc. Pour ces
   raisons, les priphriques doivent tre paramtrables afin que l'on
   puisse leur attribuer les adresses, IRQ etc. que l'on dsire pour
   viter les conflits. Mais quelques IRQ et adresses sont tout  fait
   standard comme celles de l'horloge et du clavier. Elles ne ncessitent
   pas une telle adaptabilit.

   En dehors du problme de conflit d'allocation des ressources, il y a
   le problme de l'erreur en communiquant la nature des ressources au
   pilote de priphrique. Par exemple, supposons que vous ayez entr IRQ
   4 dans un fichier de configuration alors que le priphrique utilise,
   en ralit, l'IRQ 5. C'est un autre type d'erreur dans l'allocation
   des ressources du bus.

   L'allocation des ressources du bus, si elle est correctement ralise,
   tablit des canaux de communication entre les priphriques physiques
   et leurs pilotes. Par exemple, si une certaine gamme d'adresses d'E/S
   (ressource) est alloue  la fois  un pilote de priphrique et  un
   matriel, alors on a tabli un canal de communication  sens unique
   entre eux. Le pilote peut envoyer des commandes et des informations au
   priphrique. C'est, en ralit, un peu plus qu'un canal  sens unique
   puisque le pilote peut obtenir des informations du priphrique en
   consultant ses registres. Mais le priphrique ne peut pas prendre
   l'initiative d'une communication de cette faon. L'allocation d'une
   IRQ est ncessaire pour crer un canal de communication
   bi-directionnel, o  la fois le pilote et le priphrique peuvent
   prendre l'initiative d'une communication.

2.9 Le _PnP_ dtecte les priphriques connects aux ports srie

   Les priphriques externes qui se connectent au port srie par un
   cble (comme les modems externes) peuvent galement tre appels
   _Plug-and-Play_ Puisque seul le port srie lui-mme ncessite des
   ressources (une IRQ et une adresse d'E/S), il n'y a pas de ressources
    allouer  un priphrique qui se connecte  un tel port. Donc, le
   _PnP_ n'a pas vraiment de raison d'tre pour ces priphriques. Cela,
   mme s'il y a des spcifications _PnP_ pour de tels priphriques
   srie.

   Un systme d'exploitation _PnP_ les dtectera et saura lire leur
   numro de modle etc. Il sera donc alors capable de trouver un pilote
   de priphrique adapt et vous n'aurez pas  dire  un programme
   d'application que vous utilisez disons, /dev/ttyS1. Mais puisque vous
   devriez tre capable d'indiquer manuellement  votre ordinateur (par
   l'intermdiaire d'un fichier de configuration etc.) sur quel port
   srie votre priphrique est connect (et ventuellement le modle
   dont il s'agit) vous n'avez pas rellement besoin de cette
   fonctionnalit "port srie" du _PnP_.

3. La solution _Plug-and-Play_ (PnP)

3.1 Introduction au _PnP_

   Le terme _Plug-and-Play_ (PnP) (Installez et Utilisez) a plusieurs
   sens. Au sens large c'est uniquement une auto-configuration o l'on
   installe simplement un priphrique et que celui-ci se configure par
   lui-mme. Au sens o je l'entends dans cet HOWTO, la configuration ne
   concerne que la configuration de la ressource PnP et la communication
   de l'information au pilote de priphrique. Dans un sens plus troit
   c'est simplement le paramtrage des ressources des priphriques. Cela
   peut aussi concerner les spcifications qui, (entre autres choses)
   indiquent comment les donnes PnP de la ressource doivent tre lues ou
   crites dans les priphriques (souvent des cartes) sur le bus ISA.
   Les spcifications du standard PCI (et non PnP) sont de mme nature
   pour le bus PCI.

   Le _Plug-and_Play (PnP)_ met en relation les priphriques et leurs
   pilotes et spcifie leurs "canaux" de communication. Sur le bus ISA,
   avant le _Plug-and-Play_, les ressources taient configures sur le
   matriel par des cavaliers et les pilotes de priphriques taient
   assigns aux ressources par des fichiers de configuration (ou quelque
   chose du mme style) ou par des tests des priphriques  des adresses
   o ils taient supposs se trouver. Le bus PCI a t compatible PnP
   ds le dbut et il a t trivial d'implmenter le PnP pour ce bus.
   Mais comme les spcifications du bus PCI n'utilisent pas le terme PnP
   on ne sait pas si l'on doit dire que le bus PCI est PnP (mais il
   supporte le matriel que l'on appelle aujourd'hui PnP).

3.2 Comment cela fonctionne-t-il ? (explication simplifie)

   Voici une explication trs simple de la faon dont fonctionne le
   _PnP_. Le programme de configuration _PnP_ (ventuellement un programme
   du BIOS) recherche tous les priphriques _PnP_ et demande  chacun
   les ressources du bus dont il a besoin. Ensuite, il regarde les
   ressources du bus (IRQs, etc.) qu'il doit attribuer. Bien sr, s'il y
   a des ressources du bus rserves par des priphriques (anciens) non
   _PnP_ (dont il a connaissance), il ne les attribue pas. Puis il utilise
   un certain critre (non prcis dans les spcifications _PnP_) pour
   attribuer les ressources de faon  ce qu'elles n'entrent pas en
   conflit et que tous les priphriques obtiennent ce dont ils ont
   besoin. Il indique alors  chaque priphrique physique quelles
   ressources du bus lui ont t affectes et chacun se configure alors
   pour n'utiliser que les seules ressources du bus qui lui ont t
   affectes.

   Par exemple, supposons qu'une carte carte ait besoin d'une
   interruption (d'un numro d'interruption) et de 1 MB de mmoire
   partage. Le programme _PnP_ lit cette requte dans la carte. Il
   attribue alors le numro d'interruption 5 (IRQ 5) et un mga-octet
   d'espace mmoire  partir de l'adresse 0xe9000000. Ce n'est pas
   toujours aussi simple car la carte peut utiliser uniquement certains
   numros d'interruption (seulement pour ISA) ou n'accepter qu'un
   certain domaine d'adressage. Les dtails sont diffrents pour les bus
   ISA et PCI, les choses tant plus complexes pour le bus ISA

   Le logiciels _PnP_ peut utiliser quelques raccourcis. L'un d'entre eux
   consiste  garder une trace de la manire dont il a assign les
   ressources du bus lors de la dernire configuration (lors de la
   dernire utilisation de l'ordinateur) et la rutiliser. Windows9x et
   les BIOS PNP le font mais ce n'est pas le cas du Linux standard.
   Windows9x enregistre ces informations dans ses "Registres" sur le
   disque dur et un BIOS PnP le fait dans la mmoire non volatile de
   votre PC (connu sou le nom d' ESCD; voir La Base de donnes ESCD du
   BIOS).

   Sous Linux, c'est le rgne du "chaque priphrique pour lui-mme" et
   il n'existe aucun registre centralis des affectations de ressources.
   Certains pilotes de priphriques enregistrent la dernire
   configuration qu'ils ont utilis et la rutilisent  la prochaine
   remise en route de l'ordinateur. Implicitement, ils considrent que le
   reste du matriel n'aura pas besoin d'utiliser ses ressources du bus.

   Si les priphriques se souvenaient de leur configuration prcdente,
   il n'y aurait aucun matriel pour les reconfigurer au prochain
   dmarrage, mais ils semblent oublier leur configuration lorsque l'on
   stoppe l'alimentation. Certains priphriques ont une configuration
   par dfaut (mais pas ncessairement la dernire utilise). Le
   programme de configuration _PnP_ doit tre excut  chaque mise sous
   tension du PC. De mme, si l'on ajoute un nouveau priphrique,
   celui-ci a besoin d'tre configur. L'allocation de ressources du bus
    ce nouveau priphrique peut ncessiter d'en enlever  un
   priphrique existant et de donner  celui-ci des ressources du bus
   diffrentes qu'il pourra utiliser  la place.

3.3 Dmarrage du PC

   Lors de la mise sous tension initiale du PC le circuit BIOS excute
   son programme pour dmarrer l'ordinateur (la premire tape consistant
    tester le matriel). Si le systme d'exploitation est stock sur le
   disque dur (ce qui constitue le cas normal), le BIOS doit trouver le
   disque dur. Si le disque dur est _PnP_, alors le BIOS doit utiliser
   une mthode PnP pour le trouver. Donc, pour permettre  l'utilisateur
   de configurer manuellement la mmoire CMOS du BIOS et de ragir aux
   messages d'erreur apparaissant au dmarrage de l'ordinateur, un cran
   (une carte vido) et un clavier sont galement ncessaires. Donc, le
   BIOS doit configurer, selon la procdure PnP, ces priphriques
   lui-mme.

   Une fois que le BIOS a identifi le disque dur, la carte vido et le
   clavier il est prt  entamer le processus de dmarrage (chargement du
   systme d'exploitation du disque dur vers la mmoire centrale). Si
   vous avez indiqu  votre BIOS que vous aviez un systme
   d'exploitation _PnP_ (SE PnP ou PnP OS), il devrait commencer 
   dmarrer le PC de la manire indique ci-dessus et laisser le soin de
   terminer la configuration _PnP_ au systme d'exploitation. Autrement,
   un BIOS-PnP essaiera de raliser le reste de la configuration _PnP_
   des priphriques avant le chargement du systme d'exploitation (mais
   ne chargera pas leurs pilotes).

3.4 Les bus

   Le bus ISA est le vieux bus du vieil IBM PC alors que le bus PCI est
   un bus plus rcent et plus rapide de Intel. Le bus PCI a t conu
   pour ce que l'on appelle aujourd'hui le _PnP_. Il est facile (si l'on
   compare au bus ISA) de voir comment les ressources du bus ont t
   assignes aux priphriques. Pour voir comment cela s'est pass
   consulter le "fichier" /proc/pci (/proc/bus/pnp/devices pour les
   noyaux 2.2+), les messages de dmarrage sur votre cran (utilisez
   shift-PageUp pour revenir en arrire), ou utilisez les utilitaires PCI
   (pour les noyaux 2.2+).

   Pour ce qui concerne le bus ISA, il y a un vrai problme pour
   implmenter le _PnP_ car personne n'y pensait lors de la conception de
   ce bus et il n'y a pratiquement pas d'adresse d'E/S disponible pour
   communiquer les informations de configuration aux priphriques
   physiques. Il en rsulte que la manire dont le _PnP_ a t implant
   sur le bus ISA est trs complique. Un livre entier a t rdig  ce
   sujet. Voir Le livre du PnP. Entre autres choses, le programme _PnP_
   doit attribuer  chaque priphrique _PnP_ un "identificateur"
   provisoire de faon  pouvoir l'adresser pour la configuration _PnP_.
   L'assignation de ces "identificateurs" provisoires est appele
   "isolation". Voir Isolation pour de plus amples dtails.

   Finalement, le bus ISA finira par disparatre. Ce jour l, le _PnP_
   deviendra plus simple puisqu'il sera facile de voir comment le BIOS a
   configur le matriel. Il restera cependant ncessaire de mettre en
   correspondance les priphriques et leurs pilotes ainsi que de
   configurer les priphriques ajouts alors que le PC est en
   fonctionnement. Ces besoins seraient satisfaits si Linux tait un
   systme d'exploitation _PnP_.

3.5 Linux doit mieux prendre en compte le _PnP_

   Le _PnP_ (pour le bus ISA) a t invent par Compaq, Intel et Phoenix.
   Microsoft a t un des leaders de sa promotion. Linux aurait t
   meilleur si le _PnP_ n'avait jamais t "invent". Finalement, le bus
   ISA aura disparu et le bus PCI  la mode _PnP_ prvaudra de sorte que
   nous aurons alors un _PnP_ facile  implanter. Mais, que l'on veuille
   ou pas, la plupart des nouveaux matriels ISA aujourd'hui sont _PnP_
   et Linux ne peut pas faire autrement que de grer efficacement le
   _PnP_. Cependant le Linux standard (celui du dbut 1999) rend la gestion
   du _PnP_ complique (spcialement pour le bus ISA) alors que le but du
   _PnP_ tait de rendre les choses faciles.

   D'une certaine faon, Linux est un peu _PnP_ pour le bus PCI. Quand le
   PC dmarre vous pouvez noter, en lisant les messages sur la console,
   que certains pilotes de priphriques Linux trouvent leurs
   priphriques (et les ressources du bus que le BIOS leur a attribu).
   Mais il y a des situations o un systme d'exploitation _PnP_ pourrait
   prendre les choses en compte de manire plus satisfaisante :
    1. En cas de pnurie de ressources du bus;
    2. S'il y a plus d'un pilote pour un priphrique physique;
    3. Si un pilote de priphrique activ ne peut pas trouver le
       priphrique physique;
    4. Installation  chaud d'un priphrique.

   Les utilisateurs de Linux ne devraient pas avoir  plonger dans les
   dtails du _PnP_ pour configurer leurs priphriques _PnP_ ISA comme
   ils doivent le faire. Une solution pourrait consister  avoir une
   version standardise du noyau qui supporterait le _Plug-and-Play_ sur
   les bus ISA, PCI et autres. Un correctif pour le noyau a t crit,
   bien que la plupart des pilotes ne le grent pas. Il ne fait pas
   partie du Linux standard. Voir Correctif noyau.

4. Configuration d'un BIOS PnP

    la mise sous tension de l'ordinateur, le BIOS s'excute avant que le
   systme d'exploitation ne soit charg. Les nouveaux BIOS sont PnP et
   configurent quelques-uns ou la totalit des priphriques PnP. Il
   n'est pas possible de dsactiver la plupart des BIOS PnP, donc il faut
   faire avec. Voici quelques-uns des choix possibles dans le menu BIOS
   (quelquefois appel CMOS) :
     * Avez-vous un systme d'exploitation PnP ?
     * Comment doivent tre contrles les ressources du bus ?
     * Rinitialiser la configuration ?

4.1 Avez-vous un systme d'exploitation PnP ?

   Si vous rpondez oui, alors le BIOS PnP commencera  configurer le
   disque dur, la carte vido et le clavier pour permettre le dmarrage
   du systme. Mais il laissera le soin de terminer la configuration au
   systme d'exploitation. Il peut faire une isolation sur le bus ISA en
   laissant les priphriques dsactivs, mais prts  tre configurs
   par le systme d'exploitation. Pour Linux, vous devrez probablement
   indiquer que votre systme d'exploitation n'est pas _PnP_. Si vous ne
   le faites pas, le BIOS risque de laisser vos priphriques ISA, qu'il
   n'a pas configurs,en tat dsactiv ?? Et les priphriques PCI
   peuvent galement ne pas tre configurs ?

   Si vous rpondez non, alors le BIOS fera la configuration lui-mme. Il
   utilisera la configuration prcdente, sauvegarde dans la mmoire non
   volatile (ESCD),  moins que vous n'ayez ajout de nouveaux
   priphriques PnP. Voir La base de donnes ESCD du BIOS Si votre
   dernire session d'utilisation de l'ordinateur a t faite sous Linux,
   il n'y aura pas de modification de configuration. Voir Le BIOS
   configure le PnP. Mais si cette dernire session a t faite sous
   Windows 9x (qui est PnP), alors Windows peut avoir modifi l'ESCD.
   Normalement, il ne le fera que si vous "forcez" une configuration ou
   si vous installez un priphrique ancien. Voir Utilisation de Windows
   pour paramtrer l'ESCD. Si vous utilisez le(s) programme(s)
   utilitaire(s) isapnp ou PCI pour raliser la configuration, ils
   s'excuteront aprs le BIOS et modifieront les choses de la faon que
   vous leur aurez indiqu.

  Cohabitation avec Windows9x

   Si vous faites tourner Windows sur le mme PC, comment rpondre  la
   question du BIOS : Avez-vous un Systme d'Exploitation (SE) _PnP_ ?
   Normalement (et avec confiance) vous devriez dire non pour Linux
   standard et oui pour Windows9x. Mais il est particulirement pnible
   d'avoir  paramtrer le menu CMOS manuellement  chaque fois que vous
   changez de SE. Une solution consiste  paramtrer la CMOS pour un SE
   non _PnP_, mme si vous dmarrez sous Windows. On peut esprer que
   Windows sera capable de prendre en compte cette situation o tout le
   matriel a t entirement configur par le BIOS. De plus, on peut
   penser que mme si Windows ne s'aperoit pas que le matriel a dj
   t configur, il fera la configuration lui-mme et que tout ira bien.
   Mais il semble que cela ne se passe pas ainsi. Windows ne semble
   seulement capable d'indiquer aux pilotes de priphriques que ce qui
   est enregistr dans les registres Windows. Mais, la configuration
   matrielle relle (effectue par le BIOS) est celle qui est
   enregistre dans l'ESCD et elle peut tre diffrente de celle des
   registres => donc ennuis.

   Une solution pour essayer d'avoir les mmes infos dans les registres
   et dans l'ESCD consiste  installer (ou rinstaller) Windows aprs que
   le BIOS ait t configur pour un "SE non _PnP_". Cela devrait
   permettre de prsenter  Windows un systme configur par le BIOS. Si
   cette configuration se fait sans conflits, avec un peu de chance,
   Windows s'en contentera et la sauvegardera dans ses registres. Si cela
   fonctionne pour vous (et c'est la dernire version de cet HOWTO),
   faites-le moi savoir car je n'ai eu qu'une seule indication me disant
   que cela marchait.

   Une autre mthode consiste  "enlever" les priphriques qui causent
   des problmes  Windows en cliquant sur "enlever" dans le gestionnaire
   de priphriques. Ensuite, redmarrez le PC avec "SE non _PnP_"
   (paramtr dans la CMOS au moment du redmarrage. Windows
   rinstallera alors les priphriques, en utilisant, on l'espre, le
   paramtrage des ressources du bus tel que configur par le BIOS.
   Pensez que Windows peut vous demander d'insrer le CD d'installation
   de Windows dans le lecteur car, quelquefois, il ne trouve pas les
   fichiers de pilotes (et autres) mme s'ils sont dj prsents. Pour le
   vrifier, j'ai "enlev" la carte NIC (carte interface rseau) qui
   avait un pilote compatible Novell. Au redmarrage, Windows l'a
   rinstalle pour un rseau Microsoft au lieu de Novell. Ce qui
   signifie que le client Novell a d tre rinstall. Indiquez moi vos
   problmes lors de l'utilisation de cette mthode (uniquement pour la
   dernire version de cet HOWTO).

4.2 Comment doivent tre contrles les ressources du bus ?

   cela peut simplement signifier de dcider comment allouer les
   ressources du bus pour les IRQ et le DMA. Sur "auto", le bios se
   chargera de l'allocation. Sur manuel, vous rserverez manuellement
   certaines IRQ  utiliser pour des cartes anciennes (cartes non-pnp).
   Maintenant le BIOS peut, ou non, reconnatre vos vieilles cartes. Le
   BIOS ne reconnatra vos cartes anciennes que si vous faites tourner
   ICU (ou quelque chose comme cela) sous Windows pour les faire
   reconnatre par le BIOS. S'il les reconnat, alors essayez l'option
   "auto". S'il ne les reconnat pas, alors rservez manuellement les IRQ
   ncessaires pour les cartes ISA anciennes et laissez BIOS PnP allouer
   le reste.

4.3 Rinitialiser la configuration ?

   Cette opration effacera de la base de donnes ESCD du BIOS la manire
   dont les priphriques PnP doivent tre configurs ainsi que la liste
   de configuration des priphriques anciens (non-PnP). Ne jamais faire
   cela  moins d'tre convaincu que cette base de donnes est errone et
   doit tre refaite. Il a t dit quelque part que vous ne devriez faire
   cela que dans le cas o votre ordinateur refuserait de dmarrer. Si le
   BIOS perd les donnes sur les priphriques anciens, alors vous devrez
   faire tourner  nouveau ICA sous Windows pour retrouver ces donnes.

5. Comment agir avec les cartes PnP

5.1 Introduction

   Aujourd'hui, la plupart des nouvelles cartes internes sont
   _Plug-and-Play (PnP)_. Bien qu'il existe quelques logiciels sous Linux
   pour grer le _PnP_ ils ne sont pas toujours d'utilisation facile. Il
   y a 6 mthodes diffrentes, dont la liste suit, pour s'occuper du _PnP_
   (mais certaines peuvent ne pas tre utilisables dans notre situation).
   Celle(s)  utiliser dpend(ent) de nos objectifs. Ce qui semble tre
   le plus efficace dans l'immdiat peut se rvler ne pas tre le plus
   facile et le meilleur dans le long terme. Une mthode qui parat
   simple consiste  ne rien faire et  laisser le BIOS-PnP effectuer la
   configuration, mais vous devrez faire quelques investigations pour
   dcouvrir ce qu'a fait le BIOS. Il faudrait que quelqu'un qui a tester
   toutes les mthodes en fasse une comparaison et l'crive. Vous pouvez
   avoir  utiliser plus d'une mthode pour arriver  vos fins.

     * Dsactiver le PnP par cavaliers (mais ce n'est pas possible pour
       de nombreuses cartes) ou par un logiciel spcial
     * Le BIOS configure le PnP (Pour le bus PCI, vous avez seulement
       besoin d'un BIOS PCI, autrement, il vous faut BIOS PnP)
     * Isapnp c'est un programme que vous pouvez toujours utiliser pour
       configurer les priphriques PnP sur le bus ISA uniquement
     * Utilitaires PCI pour effectuer la configuration du bus PCI
     * Configuration par Windows puis vous lancez Linux  partir de
       Windows/DOS.  utiliser en dernier recours
     * Patch Kernel pour transformer Linux en un systme d'exploitation
       PnP.
     * Configuration par le pilote de priphrique, mais peu le font.

   Chacune des solutions ci-dessus configurera les ressources du bus dans
   le matriel. Seule les deux dernires solutions devraient informer le
   pilote du priphrique de ce qui a t fait. Mais seule la dernire le
   fait srement (puisque c'est le pilote lui-mme qui le fait). La faon
   dont le pilote se trouve inform dpend de lui et vous pouvez avoir 
   faire quelque chose pour le renseigner. Voir Indiquer la configuration
   au pilote

5.2 Dsactiver le _PnP_ ?

   De nombreux priphriques sont uniquement PnP, sans option pour le
   dsactiver. Mais, pour certains, vous pouvez dsactiver le _PnP_ avec
   des cavaliers ou en utilisant un programme sous Windows qui est fourni
   avec le priphrique (configuration sans cavaliers). Cela vite la
   tche souvent complique de configuration _PnP_. N'oubliez d'indiquer
   au BIOS que ces ressources du bus sont rserves. Il y a aussi
   plusieurs raisons pour lesquelles vous pouvez ne pas vouloir
   dsactiver le _PnP_ :

    1. Si vous avez MS Windows sur la mme machine, vous voulez permettre
       au PnP sous MS Windows de configurer les priphriques de faon
       diffrente que sous Linux.
    2. Le champ des possibilits de choix des numros d'IRQ (ou des
       adresses de ports) etc. peut tre particulirement restreint si
       l'on n'utilise pas le PnP.
    3. Vous avez un pilote de priphrique sous Linux qui utilise les
       mthodes _PnP_ pour chercher le priphrique qu'il contrle.
    4. Si vous avez  changer la configuration dans le futur, cela peut
       tre plus facile en utilisant le _PnP_ (pas de cavaliers 
       dplacer ou de programme Dos/Windows  faire tourner).
    5. Vous pouvez avoir (ou aurez) d'autres priphriques _PnP_ qui
       auront besoin d'tre configurs et vous voulez donc le prvoir (ou
       l'tudier) de toute faon.

   Une fois qu'ils sont configurs comme des priphriques non-PnP, ils
   ne peuvent plus tre configurs par un logiciel PnP ou par le BIOS (
   moins que vous ne dplaciez les cavaliers et/ou n'utilisiez  nouveau
   le logiciel de configuration Dos/Windows).

5.3 Le BIOS configure le PnP

  Introduction  l'utilisation du BIOS pour configurer le _PnP_

   Si vous avez un BIOS PnP, il peut configurer le matriel. Cela
   signifie que votre BIOS lit les besoins en ressources de tous les
   priphriques et les configure (leur alloue les ressources du bus).
   C'est un substitut de SE _PnP_  l'exception prs que le BIOS ne fait
   pas le lien entre les priphriques et leurs pilotes et qu'il
   n'indique pas aux pilotes comment il a fait la configuration. Il
   devrait normalement utiliser la configuration qu'il a stock en
   mmoire non volatile (ESCD). S'il trouve un nouveau priphrique ou en
   prsence d'un conflit, le BIOS devrait effectuer les modifications
   ncessaires dans la configuration et ne pas utiliser exactement ce
   qu'il y avait dans l'ESCD.

   Votre BIOS doit supporter une telle configuration mais il y a eu des
   cas o il ne l'a pas fait correctement ou l'a fait de manire
   incomplte. Un avantage de l'utilisation du BIOS rside dans sa
   simplicit puisque, dans la plupart des cas, il n'y a rien 
   paramtrer (sauf  indiquer dans le menu CMOS du BIOS que le SE n'est
   pas PnP). Alors que quelques pilotes de priphriques peuvent tre
   capables de dtecter automatiquement ce que le BIOS a fait, dans
   certains cas, vous devrez le faire (ce qui n'est pas toujours facile).
   Voir Quelle est ma configuration actuelle ? Un autre avantage possible
   vient de ce que le BIOS fait son boulot avant que Linux ne dmarre et
   donc que toutes les ressources du bus sont prtes  tre utilises (et
   trouves) par les pilotes de priphriques qui dmarrent plus tard.

   Selon MS le fait qu'un BIOS PNP soit capable de configurer au sens PnP
   les priphriques (sans l'aide de MS Windows) est optionnel (pas
   obligatoire). Mais il semble que la plupart de ceux crs aprs 1996
   ?? ou aux environs en sont capables. Nous devrions leur envoyer des
   lettres de remerciements s'ils le font correctement. Ils configurent 
   la fois les bus ISA et PCI, mais on a dit que quelques vieux BIOS ne
   le faisaient que pour le PCI. Pour essayer d'avoir plus d'informations
   concernant votre BIOS, regardez sur le Web. Merci de ne pas me poser
   de questions sur ce sujet car je n'ai aucunes donnes. Les dtails que
   vous aimeriez connatre concernant votre BIOS peuvent tre difficiles
    trouver (ou pas disponibles). Quelques BIOS ont des fonctionnalits
   _PnP_ minimales et essaient de se dcharger de la partie difficile de
   la tche de configuration sur des utilitaires Windows. Si cela arrive,
   soit vous devrez trouver une autre mthode (comme les outils isapnp)
   soit vous devrez essayer de paramtrer la base de donnes ESCD si le
   BIOS en possde une. Consulter le paragraphe suivant.

  La base de donnes ESCD du BIOS

   Le BIOS entretient une base de donnes non volatile contenant la
   configuration _PnP_ qu'il essaiera d'utiliser. On l'appelle ESCD
   (Extended System Configuration Data). Encore une fois, l'existence de
   l'ESCD est optionnelle mais la plupart des BIOS-PnP la possde. L'ESCD
   non seulement stocke la configuration des ressources des priphriques
   _PnP_ mais aussi stocke les informations de configuration des
   priphriques non-PnP (et les repre comme tant non-PnP) pour viter
   les conflits. Les donnes ESCD sont habituellement sauvegardes dans
   un circuit qui conserve ces donnes quand on arrte l'alimentation,
   mais quelquefois elles sont stockes sur un disque dur ??

   L'objectif de l'ESCD est de garder la dernire configuration utilise,
   mais si vous utilisez un programme tel que isapnp sous Linux ou des
   utilitaires PCI (qui ne mettent pas  jour l'ESCD) alors, l'ESCD n'en
   n'aura aucune connaissance et ne sauvegardera pas cette configuration
   dans l'ESCD. Un bon SE _PnP_ doit mettre  jour l'ESCD de faon  ce
   que vous puissiez l'utiliser plus tard avec un SE non-PnP (comme Linux
   standard). Windows peut le faire dans certaines circonstances. Voir
   Utilisation des Windows pour paramtrer l'ESCD.

   Pour utiliser ce qui a t paramtr dans l'ESCD assurez-vous de
   choisir "SE non-PnP" quivalent dans la CMOS du BIOS. Ensuite, chaque
   fois que le BIOS dmarre (avant le chargement du SE Linux) il doit
   configurer les choses de cette faon. Si le BIOS dtecte une nouvelle
   carte _PnP_ qui n'est pas dans l'ESCD, il doit alors allouer des
   ressources du bus  cette carte et mettre l'ESCD  jour. Il peut mme
   avoir  modifier les ressources du bus dj assignes  des cartes
   _PnP_ existantes et modifier l'ESCD en consquence.

   Si chaque priphrique a enregistr sa dernire configuration, il ne
   devrait pas tre ncessaire de les reconfigurer  chaque redmarrage
   de votre PC. Mais cela ne fonctionne pas comme cela. Donc toutes les
   donnes ESCD doivent tre correctes si vous utilisez le BIOS pour le
   _PnP_. Il y a quelques BIOS qui n'ont pas d'ESCD mais possdent une
   sorte de mmoire non volatile pour stocker les informations concernant
   les ressources du bus qui ont t rserves par les cartes non-PnP. De
   nombreux BIOS possdent les deux.

  Utilisation de Windows pour paramtrer l'ESCD

   Si le BIOS ne paramtre pas l'ESCD de la faon que vous le voulez (ou
   de la faon dont il faudrait), il serait intressant d'avoir un
   utilitaire Linux qui le fasse. Au dbut 1999, il n'y en avait pas. Il
   faut donc essayer d'utiliser Windows pour le faire (si vous l'avez sur
   le mme PC).

   Il y a trois manires d'utiliser Windows pour essayer de
   paramtrer/modifier l'ESCD. L'une consiste  utiliser l'utilitaire ICU
   conu pour DOS ou Windows 3.x. Cela devrait aussi fonctionner
   correctement pour Windows 9x/2k ?? Une autre mthode consiste 
   initialiser les priphriques manuellement ("force") sous Windows
   9x/2k de sorte que Windows mette cette information dans l'ESCD
   lorsqu'on stoppe Windows normalement. La troisime mthode est
   destine aux priphriques anciens qui ne sont pas _plug-and-play_. Si
   Windows les reconnat et sait quelles ressources du bus ils utilisent,
   alors Windows devrait mettre cette info dans l'ESCD.

   Si les priphriques _PnP_ sont configurs automatiquement par Windows
   sans que l'utilisateur ne le "force"  changer les paramtres, alors
   ceux-ci ne seront probablement inscrit dans l'ESCD. Naturellement
   Windows peut dcider de lui-mme de les configurer en utilisant des
   paramtres identiques  ceux qui sont dans l'ESCD mais ce n'est qu'une
   concidence.

   Les systmes d'exploitation Windows 9x sont _PnP_ et configurent, au
   sens _PnP_ les priphriques. Ils entretiennent leur propre base de
   donnes _PnP_ au plus profond des Registres (stocks dans des fichiers
   binaires Windows). Il y a galement tout un tas de renseignements
   concernant la configuration dans les registres, en plus des ressources
   du bus pour le _PnP_. Il y a  la fois la configuration courante des
   ressources _PnP_ en mmoire et une autre (peut-tre  peu prs la
   mme) stocke sur le disque dur. Pour la consulter (celle qui est en
   mmoire  ?)indirectement dans Windows98 ou pour y forcer des
   modifications vous utilisez le gestionnaire de priphriques.

   Dans Windows98, il y a 2 manires d'invoquer le gestionnaire de
   priphriques :
    1. Poste de travail --> Panneau de configuration --> Systme -->
       Gestionnaire de priphriques.
    2. (cliquer sur le bouton droit de la souris) Poste de travail -->
       Proprits --> Gestionnaire de priphriques.

   Puis dans le gestionnaire de priphriques vous slectionnez un
   priphrique (quelquefois en plusieurs tapes s'il y plusieurs
   priphriques de la mme classe). Puis cliquez sur Proprits puis sur
   Ressources. Pour essayer de modifier la configuration de la ressource
   manuellement, dslectionnez "utiliser les paramtres automatiques"
   puis cliquez sur "Modification des paramtres". Maintenant essayer de
   modifier les paramtres, mais il se peut que cela ne soit pas
   possible. Si vous le pouvez, vous avez "forc" une modification. Un
   message doit vous informer de ce qui a t forc. Si vous voulez
   conserver le paramtrage existant de Windows mais que vous vouliez le
   "forcer", alors, vous devrez forcer une modification quelconque puis
   forcer  nouveau les paramtres originaux.

   Pour voir ce qui a t "forc" sous Windows98 regardez dans la liste
   du "matriel forc" : Dmarrer --> Programmes --> Accessoires -->
   Outils systme -- Information systme --> Ressources matrielles -->
   Matriel forc. Quand vous "forcez une modification des ressources du
   bus sous Windows, il doit mettre votre modification dans l'ESCD (
   condition que vous quittiez Windows normalement).

   > De la fentre "Information systme" vous pouvez galement contrler
   comment les IRQ et les ports d'E/S ont t allous sous Windows.

   Mme si Windows ne signale pas de conflit de ressources du bus, il
   peut en exister sous Linux. Cela vient du fait que Windows peut
   assigner les ressources du bus de manire diffrente de l'ESCD. Dans
   les rares cas o tous les priphriques sous Windows sont soit des
   priphriques anciens soit des priphriques "forcs", il faut que les
   configurations Windows et ESCD soient identiques.

  Ajout d'un nouveau priphrique (sous Linux ou sous Windows)

   Si vous ajoutez un nouveau priphrique _PnP_ et que vous ayez
   paramtr votre BIOS pour un "SE non PnP", alors le BIOS devrait le
   configurer automatiquement et en enregistrer la configuration dans
   l'ESCD. S'il s'agit d'un priphrique _non PnP_ ancien (ou d'un
   priphrique configurable par cavaliers, etc...), vous n'avez alors
   que peu d'options pour le prendre en compte.

   Vous devez tre capable d'indiquer directement au BIOS (par
   l'intermdiaire des menus de configuration de la CMOS) que certaines
   ressources du bus qu'il utilise sont rserves et ne doivent pas tre
   alloues par le _PnP_. Cette information n'est pas sauvegarde dans
   l'ESCD. Mais, en cas de conflit, il peut y avoir une option du menu
   BIOS permettant de rendre prpondrant ou non, sur le contenu de
   l'ESCD, les choix faits au niveau de la CMOS. Une autre mthode
   consiste  faire tourner ICU sous DOS/Windows. Encore une autre
   consiste  installer manuellement le priphrique sous Windows 9x/2k
   et de s'assurer que cette configuration a t "force" (voir le
   paragraphe prcdent). Si elle a t "force" Windows devrait avoir
   mis  jour l'ESCD lors de l'arrt du PC.

5.4 Isapnp

   Une bonne partie de la documentation concernant isapnp est difficile 
   comprendre si l'on ne connat pas les bases du _PnP_. Cet HOWTO
   devrait aider  la comprendre ainsi que les FAQ (Questions frquemment
   poses) qui l'accompagne. isapnp ne concerne que les priphriques PnP
   sur le bus ISA (non PCI). En lanant le programme Linux "isapnp" au
   dmarrage, on configure ces priphriques avec les valeurs indiques
   dans /etc/isapnp.conf. Il est possible de crer ce fichier de
   configuration automatiquement mais vous devrez l'diter manuellement
   pour faire des choix entre diffrentes options. Avec isapnp, un pilote
   de priphrique, faisant partie du noyau, peut tre lanc
   prmaturment, avant que isapnp ait paramtr l'adresse, etc. dans le
   matriel. Ce qui entrane que le pilote de priphrique ne sera pas
   capable de trouver le priphrique correspondant. Le pilote utilise la
   bonne adresse alors que celle-ci n'a pas encore t paramtre dans le
   matriel.

   Si votre distribution Linux installe automatiquement isapnptools,
   isapnp peut dj tre lanc au dmarrage. Dans ce cas, tout ce que
   vous avez besoin de faire est d'diter /etc/isapnp.conf selon "man
   isapnp.conf". Notez que cela revient  configurer manuellement PnP
   puisque vous avez  prendre les dcisions sur la manire de configurer
    mesure que vous ditez le fichier de configuration. Vous pouvez
   utiliser le programme "pnpdump" pour vous aider  crer le fichier de
   configuration. Si vous utilisez "isapnp" tel quel et que vous ayez un
   BIOS _PnP_, vous devrez probablement indiquer au BIOS (quand vous le
   paramtrerez) que vous n'avez pas de SE _PnP_ puisque vous voudrez
   toujours que que le BIOS configure les priphriques PCI. Alors que le
   BIOS peut galement configurer les priphriques ISA, isapnp le
   refera.

5.5 Utilitaires PCI

   Le nouveau paquetage Utilitaires PCI (= pciutils, improprement appel
   "pcitools"), devrait vous permettre de configurer manuellement, _ la
   PnP_, le bus PCI. "lspci" donne la liste des ressources bus, alors que
   "setpci" paramtre les allocations de ressources dans le matriel.

5.6 Corriger le noyau pour rendre Linux compatible PnP

   David Howells a cr une telle mise  jour pour le faire. C'est le
   "Gestionnaire de configuration/ressource du noyau Linux" ("Linux
   Kernel Configuration/Resource Manager") quelquefois appel
   "Gestionnaire de configuration matrielle". Cette adaptation peut ne
   pas correspondre au noyau le plus rcent. Le noyau rsultant est
   rput stable mais cependant des bogues ont t signals. Une
   documentation est incluse comme serial.txt, pour montrer comment faire
   pour un port srie. Elle fournit des "fichiers" dans l'arborescence
   /proc pour que vous puissiez voir ce qui se passe et peut enregistrer
   des commandes dans l'un de ces fichiers pour une configuration
   personnalise. Un problme vient de ce que de nombreux pilotes de
   priphriques ne le prennent pas en compte et qu'il vous faut encore
   utiliser les fichiers de configuration traditionnels etc. pour
   effectuer la configuration. Consultez
   http://www.astarte.free-online.co.uk

5.7 Configuration par Windows

   Si vous avez Windows9x (ou 2k) sur le mme PC, dmarrer alors
   simplement Windows et laissez-le configurer le _PnP_. Puis lancez
   alors Linux  partir de Windows (ou du DOS). On a signal que Windows
   effaait les IRQ des registres des priphriques PCI. Dans ce cas,
   Linux signale qu'il a trouv une IRQ  zro. Dans ce cas, vous ne
   pouvez pas utiliser cette mthode.

5.8 Configuration par les pilotes de priphriques

   Quelques pilotes de priphriques utilisent les mthodes _PnP_ pour
   paramtrer les ressources du bus au point de vue matriel et seulement
   pour les priphriques qu'ils contrlent. Dans ce cas, puisque le
   pilote a effectu la configuration, il connat videmment la
   configuration et il n'y a aucun besoin de lui fournir ces
   informations.

   Le problme ici porte sur deux points. Il est difficile de mettre dans
   le pilote tout ce qui est ncessaire et le pilote peut accaparer des
   ressources du bus qui seraient ncessaires pour d'autres
   priphriques. Cela serait plus facile pour l'utilisateur, mais un
   noyau Linux _PnP_ serait une meilleure solution. Voir Linux doit mieux
   prendre en compte le <em>PnP</em>

5.9 Logiciels et documents _PnP_

     * Page d'acceuil Isapnptools
     * Mise  jour pour rendre le noyau Linux <em>PnP</em>
     * Projet de pilote <em>PnP</em>
     * Spcifications <em>PnP</em> de Microsoft
     * Le livre : PCI System Architecture, 3rd ed. by Tom Shanley +,
       MindShare 1995. Traite des fonctionnalits style PnP pour le bus
       PCI bus.
     * Le livre : Architecture systme _Plug and Play_, de Tom Shanley,
       Mind Share 1995. Dtaille le _PnP_ sur le bus ISA. Uniquement un
       survol concis du _PnP_ sur le bus PCI.

6. Communication de la configuration au pilote

6.1 Introduction

   La manire exacte dont cela s'effectue dpend du pilote. Certains
   pilotes disposent de plus d'une mthode pour dtecter la configuration
   du priphrique physique.  l'extrme, on trouve le cas o il faut
   paramtrer "en dur" les ressources du bus dans le noyau et recompiler
   celui-ci.  l'autre extrme, le pilote fait tout automatiquement et
   vous n'avez rien  faire. Il peut mme paramtrer les ressources du
   bus dans le matriel en utilisant les mthodes _PnP_.

   Entre les deux, on trouve les cas o il faut faire tourner un
   programme pour faire passer les infos au pilote ou mettre ces infos
   dans un fichier. Dans certains cas, le pilote peut tester le
   priphriques  des adresses ou il pense trouver le priphrique. Il
   peut alors essayer de tester diffrentes IRQ pour voir laquelle
   fonctionne (IRQ = Interrupt ReQuest / ReQute d'Interruption). Ce
   qu'il peut faire automatiquement ou non. Dans d'autres cas, le pilote
   utilise des mthodes _PnP_ pour trouver le priphrique et la faon
   dont les ressources du bus ont t affectes, mais ne pas les
   paramtrer lui-mme. Il peut aussi regarder certains fichiers du
   rpertoire /proc.

   On peut avoir besoin d'indiquer les ressources du bus comme paramtre
   au noyau pour un module chargeable. Voir
   /usr/lib/modules_help/descr.gz pour avoir une liste des paramtres
   possibles. Le modules  charger est indiqu dans /etc/modules avec ses
   paramtres. Dans certains autres cas les ressources du bus peuvent
   tre indiques au noyau par des paramtres. Ceux-ci sont mis dans le
   fichier lilo.conf sous la forme append="...". Dans ce cas le programme
   lilo doit tre excut pour enregistrer ces donnes dans le code de
   dmarrage du noyau.

   Alors qu'il y a une grande diversit dans la manire dont les pilotes
   peuvent trouver les ressources du bus, le but final est le mme. Il y
   a tellement de priphriques diffrents et de pilotes de priphriques
   pour les grer que vous pouvez avoir besoin de consulter la
   documentation de votre pilote particulier pour trouver comment
   celui-ci gre les ressources du bus et ce que vous avez besoin de
   faire pour vous assurer qu'il trouve les infos dont il a besoin.
   Quelques brves indications sur un petit nombre de pilotes de
   priphriques sont donnes dans les paragraphes suivants.

6.2 Pilote du port srie : setserial

   Pour le pilote de port srie standard (et non pas pour les cartes
   multi-ports) vous utilisez setserial pour en configurer le pilote. Ce
   programme est souvent lanc  partir d'un fichier de dmarrage. Dans
   les versions les plus rcentes, on trouve un fichier /etc/serial.conf
   que vous pouvez "diter" en utilisant simplement la commande setserial
   de la manire habituelle et ce que vous paramtrez en utilisant
   setserial est sauvegard dans le fichier serial.conf. Le fichier
   serial.conf devrait tre consult lors de l'excution de la commande
   setserial lance par un fichier de dmarrage. Votre distribution peut
   le faire ou ne pas le faire pour vous.

   Il y a deux manires diffrentes d'utiliser setserial selon les
   options que vous choisissez. Une mthode consiste  indiquer la
   configuration manuellement au pilote. L'autre mthode consiste 
   tester une adresse donne et  voir s'il y a un port srie  cette
   adresse. On peut aussi tester cette adresses et essayer de dtecter si
   une interruption est utilise pour ce port. Le pilote excute quelque
   chose comme setserial au dmarrage, mais ne teste pas les
   interruptions, il affecte simplement l'interruption "standard" ce qui
   peut ne pas correspondre  la ralit. Il teste uniquement l'existence
   d'un port. Consulter le Serial-HOWTO pour avoir des dtails
   complmentaires.

6.3 Pilotes de cartes son

  OSS-Lite

   Vous devez passer IO, IRQ, et DMA en tant que paramtres  un module
   ou les compiler dans le noyau. Mais quelques cartes PCI seront
   dtectes automatiquement (par exemple en prenant les infos dans
   /proc/pci ou quelque chose d'quivalent). RedHat fournit un programme
   "sndconfig" qui dtecte les cartes ISA PnP et paramtre
   automatiquement les modules pour les charger avec les ressources de
   bus trouves.

  OSS (Open Sound System) et ALSA

   Ils dtecteront les cartes par les mthodes _PnP_ puis choisiront le
   pilote appropri et le chargeront. Ils paramtreront galement les
   ressources du bus sur une carte ISA-PnP. Vous pouvez avoir 
   intervenir manuellement pour rsoudre les problmes de conflits. Pour
   le pilote ALSA, la prise en charge de l'ISA-PnP est optionnelle et
   vous pouvez utiliser isapnp si vous le voulez.

7. Quelle est ma configuration actuelle?

   Ici "configuration" concerne l'attribution des ressources _PnP_ du bus
   (adresses, IRQ, et DMA). C'est une question  deux volets pour chaque
   priphrique, et chacun d'eux doit avoir le mme rponse.
    1. Quelle est la configuration du logiciel du pilote de priphrique
       ? Autrement dit : comment le pilote pense-t-il que le matriel est
       configur ?
    2. Quelle est la configuration (s'il y a lieu) du matriel
       priphrique ?

   Naturellement la configuration matrielle du priphrique et celle de
   son pilote doivent tre les mmes (et normalement, c'est le cas).
   Mais, si les choses ne se passent pas bien, c'est qu'il y a peut-tre
   une diffrence. Cela signifie que le pilote a des donnes incorrectes
   concernant la configuration relle du matriel, et dysfonctionnement.
   Si le logiciel que vous utilisez ne vous indique pas correctement ce
   qui ne va pas (ou n'effectue pas la configuration correcte
   automatiquement), il vous faudra chercher la configuration matrielle
   des priphriques et celle des pilotes correspondants. Alors que les
   pilotes de priphriques de Linux devraient "tout nous dire", il y a
   des cas o il n'est pas facile de dterminer comment le matriel a t
   configur.

   Un autre problme vient de ce que les messages  l'cran indiquant la
   configuration ne sont pas toujours clairs quant  la nature de la
   configuration qu'ils concernent : le pilote de priphrique, le
   priphrique lui-mme ou les deux. Si le pilote de priphrique s'est
   vu attribu une configuration et qu'ils teste le matriel pour
   vrifier qu'il est configur de la mme manire, alors la
   configuration indique par le pilote devrait tre  la fois celle du
   pilote et du matriel.

   Mais certains pilotes ne se comportent pas comme cela et peuvent
   accepter une configuration qui ne puisse pas se vrifier. Par exemple,
   "setserial" acceptera une configuration qui ne se vrifie pas (mme si
   vous demandez un test des ressources du bus). Dans ce cas "setserial"
   peut uniquement vous indiquer la configuration du pilote et pas celle
   du matriel.

   Quelques infos concernant la configuration peuvent tre obtenues en
   lisant les messages du BIOS et de Linux qui apparaissent  l'cran au
   dmarrage initial de l'ordinateur. Souvent, ces messages dfilent trop
   rapidement pour pouvoir tre lus, mais lorsque leur dfilement
   s'arrte, tapez plusieurs fois sur la touche "Majuscule + dfilement
   arrire" (Shift-PageUp) pour les visualiser. Pour visualiser la suite,
   taper sur la touche "Majuscule + dfilement avant" (Shift-PageDow). La
   commande "dmesg" n'importe quand n'affichera que les messages du noyau
   Linux et les messages les plus importants peuvent manquer (y compris
   ceux du BIOS). Les messages de Linux peuvent quelquefois n'indiquer
   que la vue de la configuration par les pilotes de priphrique, et ces
   informations peuvent parfois provenir d'un fichier de configuration
   incorrect.

   Les messages du BIOS affichent la configuration relle du matriel 
   cet instant donn, mais un SE _PnP_, isapnp ou les utilitaires PCI
   peuvent la modifier ultrieurement. Les messages du BIOS sont affichs
   avant ceux de Linux. Comme alternative au rappel des messages par les
   touches "majuscule + dfilement arrire", essayez de geler l'affichage
   en tapant sur la touche "Pause". Taper sur n'importe quelle touche
   pour continuer. Mais, une fois que les messages de Linux commencent 
   apparatre, c'est trop tard pour utiliser la touche "Pause"
   puisqu'alors, les messages de Linux ne sont pas gels.

7.1 Comment mes pilotes de priphriques sont-ils configurs ?

   Il y a des programmes que l'on peut lancer de la ligne de commande
   (tel que "setserial" pour les ports srie) pour le dterminer.
   L'arborescence du rpertoire /proc est utile. /proc/ioports indique
   les adresses d'E/S utilises par les pilotes (ou essaye si c'est
   faux). Ils peuvent ne pas tre configurs de cette faon dans le
   matriel.

   /proc/interrupts n'indique que les interruptions utilises
   actuellement et beaucoup de celles qui ont t alloues aux pilotes ne
   sont pas affiches car elles ne sont pas actuellement utilises. Par
   exemple, mme s'il y a une disquette dans l'unit et qu'elle est prte
    tre utilise, l'interruption la concernant ne sera pas affiche, 
   moins qu'elle ne soit effectivement en cours d'utilisation. De plus,
   une interruption indique ici ne signifie pas qu'elle existe dans le
   matriel. Un indice du fait qu'elle n'existe pas dans le matriel
   consiste  vrifier que le nombre d'interruptions gnres est 0. Et
   encore, mme si l'on voit que quelques interruptions ont t gnres,
   cela peut signifier que cette interruption n'existe pas pour ce
   priphrique mais par un autre priphrique qui n'est pas en cours
   d'utilisation mais qui a pu gnrer une interruption ou deux. Dans le
   noyau 2.2 l'arborescence /proc a t modifie.

7.2 Comment mes priphriques sont-ils configurs ?

   C'est facile de trouver quelles ressources du bus ont t attribues 
   des priphriques sur un bus PCI : on utilise soit la commande "lspci"
   ou, pour les noyaux <: 2.2: voir /proc/pci; pour les noyaux 2.2+:
   /proc/bus/pci/devices. Pour le bus ISA, on peut essayer de faire
   tourner pnpdump --dumpregs, mais ce n'est pas une mthode sre. Les
   rsultats peuvent tre difficile  dcoder. Ne pas confondre les
   adresses de port de lecture que pnpdump "essaye" (et o il trouve
   quelque chose) avec les adresses d'E/S du priphrique trouv. Ce ne
   sont pas les mmes.

   Les messages en provenance du BIOS, lors du dmarrage, indique la
   configuration matrielle au moment du dmarrage. Si vous vous basez
   sur le BIOS pour faire votre configuration, ils faut qu'elle soit
   encore valable. Les messages de Linux peuvent provenir des pilotes qui
   ont fait des essais pour vrifier la prsence du matriel (et
   ventuellement des essais sur les IRQ et le DMA). Naturellement, si le
   priphrique fonctionne correctement, alors il doit tre configur
   comme son pilote.

8. Appendice

8.1 Adresses

   Il y a trois types d'adresses : les adresses mmoire centrale, les
   adresses d'E/S et les adresses de configuration. Pour le bus PCI, les
   adresses de configuration constituent un espace d'adressage spar,
   exactement comme le sont les adresses d'E/S. Sauf dans le cas des
   adresses de configuration ISA, qu'une adresse sur le bus d'adresses
   (ou sur le bus partag adresses-donnes dans le cas du PCI) soit ou
   non une adresse mmoire, une adresse d'E/S ou une adresse de
   configuration dpend uniquement des tensions sur d'autres fils
   (pistes) du bus.

  Adresses de configuration sur le bus ISA (Port de lecture etc.)

   En ce qui concerne le bus ISA, il n'y a pas, techniquement, d'espace
   d'adressage de configuration, mais il existe, pour le CPU, une mthode
   spciale d'accs aux registres de configuration sur les cartes PnP.
   Trois adresses d'E/S sont rserves  cet usage. Ces 3 adresses ne
   sont pas diffrentes pour chaque carte, mais sont partages par toutes
   les cartes.

   Les trois adresses sont appeles port de lecture, port d'criture et
   port d'adresse. Ces ports ont la taille d'un octet. Chaque carte PnP
   possde un certain nombre de registres car ces trois adresses seules
   ne sont pas suffisantes pour une simple carte. Pour communiquer avec
   une carte, le numro de la carte (handle) est envoy  toutes les
   cartes sur le port d'criture. Une seule carte reconnat son numro et
   se met  l'coute. Alors l'adresse du registre concern est envoye
   sur le port adresse (de toutes les cartes, mais une seule est 
   l'coute). Ensuite, on fait une criture sur le port d'criture ou une
   lecture sur le port de lecture.

   Le port d'criture est toujours  l'adresse A79 et le port d'adresse
   est toujours 279. Le port de lecture n'est pas dtermin et est
   initialis par le logiciel de configuration  une adresse qui est
   suppose ne pas tre en conflit avec une autre carte ISA. S'il y a
   conflit, il modifiera l'adresse. Pour toutes les cartes PnP, cette
   adresses est "programme". Donc, si vous utilisez disons, isapnp, pour
   initialiser ou tester des donnes de configuration, vous aurez besoin
   de connatre l'adresse du port de lecture.

  Champs d'adresses

   Le terme "adresse" est quelquefois utilis dans ce document pour
   parler d'une srie d'adresses contigus. Comme les adresses sont
   donnes en octets, une simple adresses contient uniquement un octet
   mais les adresses E/S (et mmoire centrale) ont besoin de plus que
   cela. Donc un espace de, disons, 8 octets est souvent utilis pour les
   adresses d'E/S alors que le nombre d'adresses en mmoire centrale
   alloues  un priphrique est beaucoup plus grand. Pour un port srie
   (priphrique d'E/S), il suffit de donner l'adresse de dpart du
   priphrique (par exemple 3F8) puisqu'il est bien connu que le champ
   d'adresses de ce type de priphrique est seulement de 8 octets. Cette
   adresse de dpart est connue sous le nom "d'adresse de base".

  Espace d'adresses

   En ce qui concerne l'ISA, pour accder  la fois aux "espaces"
   d'adresses E/S et mmoire (centrale) on utilise le mme bus d'adresses
   (les fils utiliss pour les adresses sont partags). Comment le
   priphrique reconnat-il si une adresse qui apparat sur le bus
   d'adresses est une adresse mmoire ou une adresse E/S ? Eh bien, il y
   a quatre lignes spcialises du bus qui vhiculent cette information
   et un peu plus. Si l'un de ces quatre fils est aliment, cela indique
   que le CPU veut lire une adresse E/S, et la mmoire centrale ne tient
   pas compte de l'adresse prsente sur les fils d'adresses du bus. Les
   trois autres fils sont utiliss  des fins identiques. En rsum : il
   existe des lignes de lecture et d'criture pour les adresses mmoire
   centrale et pour celles d'E/S (4 fils en tout).

   Pour le bus PCI, l'ide de base est identique et on utilise galement
   4 fils, mais c'est ralis de faon lgrement diffrente. Au lieu
   d'avoir uniquement l'un des quatre fils aliment, on code un nombre
   binaire sur ces fils (16 possibilits diffrentes). On peut donc
   vhiculer plus d'informations. Quatre de ces 16 valeurs sont utilises
   pour les espaces mmoire et E/S comme dans le paragraphe ci-dessus. En
   plus, on trouve l'espace des adresses de configuration qui utilise
   deux valeurs supplmentaires. Les dix possibilits restantes sont
   rserves pour d'autres utilisations.

  Vrification des champs d'adresses (Test des conflits d'adresses E/S ISA)

   Pour le bus ISA, il existe un systme implant sur chaque carte PnP
   pour vrifier que d'autres cartes n'utilisent pas la mme adresse. Si
   deux cartes ou plus utilisent les mmes adresses d'E/S, aucune des
   cartes ne fonctionnera correctement. Un bon logiciel _PnP_ devrait
   affecter les ressources du bus pour viter de tels conflits, mais,
   mme dans ce cas, une carte ancienne pourrait se cacher quelque part
   avec la mme adresse.

   Le test consiste, pour la carte,  donner, sur le bus, comme numros
   de test ses propres registres d'E/S. Le logiciel _PnP_ les lit et
   vrifie qu'il lit les mmes numros. Si tel n'est pas le cas, quelque
   chose ne va pas (comme, par exemple, une autre carte  la mme
   adresse). Il rpte alors le test avec un autre numro de test.
   Puisqu'en ralit il teste le champ des adresses d'E/S assign  cette
   carte, on l'appelle " test des champs d'adresses". On devrait plutt
   l'appeler "test des conflits d'adresses". S'il y a un conflit
   d'adresses, on obtient un message d'erreur qu'il faut rsoudre par ses
   propres moyens.

  Communication directe via la mmoire.

   Traditionnellement, la plupart des priphriques d'E/S utilisaient les
   E/S mmoire pour communiquer avec le CPU. Par exemple, le port srie
   fonctionne de cette faon. Le pilote de priphrique, qui tourne sur
   le CPU lit et crit les donnes de/vers l'espace des adresses d'E/S et
   la mmoire centrale. Une mthode plus rapide consisterait  faire
   mettre les donnes directement en mmoire centrale par le
   priphrique. Une manire de le raliser est d'utiliser l'accs direct
   mmoire ( Canaux DMA). Une autre mthode consiste  affecter un espace
   de la mmoire centrale au priphrique. Comme cela, le priphrique
   lit et crit directement en mmoire centrale sans avoir  se
   proccuper de l'accs direct mmoire (DMA). De tels priphriques
   possdent normalement des adresses d'E/S et des adresses mmoire.

8.2 Les interruptions - Description dtaille.

   Le systme d'interruption vhicule un paquet d'informations, mais
   seulement de faon indirecte. Le signal d'interruption (une tension
   sur un fil) indique simplement  un circuit appel contrleur
   d'interruptions qu'un certain priphrique a besoin que l'on s'occupe
   de lui. Le contrleur d'interruption le signale alors au CPU. Le CPU
   va chercher le pilote de ce priphrique et en excute une partie que
   l'on dsigne sous le nom de "routine de service de l'interruption" (ou
   "routine de gestion de l'interruption"). Cette "routine" essaie de
   voir ce qui s'est pass et se charge de traiter la question comme, par
   exemple, de transfrer des octets du (ou vers le) priphrique. Ce
   programme (cette routine) peut facilement analyser ce qui s'est pass
   puisqu'il connat les adresses des registres ( condition que les
   numros d'interruption (IRQ) et que les adresses d'E/S aient t
   correctement renseignes). Ces registres contiennent les informations
   concernant l'tat du priphrique. Le logiciel lit le contenu de ces
   registres et, en examinant ce contenu, voit ce qui s'est pass et
   entreprend l'action approprie.

   Donc, chaque pilote de priphrique a besoin de savoir quel est le
   numro d'interruption (IRQ) qui le concerne. Sur le bus PCI (et pour
   les ports srie sur un bus ISA depuis la version du noyau 2.2) il est
   possible que deux priphriques ou plus se partagent le mme IRQ
   (numro d'interruption). Cela est rendu possible en faisant excuter
   par le CPU toutes les routines de service d'interruption de tous les
   priphriques qui utilisent cette interruption. La premire chose que
   ralise une telle routine de service consiste  tester si
   l'interruption concerne son priphrique. Si tel n'est pas le cas
   (fausse alarme), elle se termine et le traitement continue avec la
   routine de service suivante etc.

8.3 Interruptions PCI

   Les interruptions PCI sont diffrentes, mais comme elles correspondent
   normalement aux IRQ, elles se comportent  peu prs de la mme faon.
   Le fait que les interruptions PCI puissent tre partages constitue
   une diffrence majeure. Par exemple l'IRQ5 peut tre partage entre
   deux priphriques PCI. Cette possibilit de partage est automatique :
   il n'est pas ncessaire de disposer d'un matriel ou d'un logiciel
   spcial. On a entendu parler de situations o un tel partage ne
   fonctionne pas, mais la cause rside certainement dans le logiciel du
   pilote de priphrique. Tous les pilotes de priphrique PCI sont
   supposs fonctionner avec partage des interruptions. Il faut cependant
   noter que le partage d'une mme interruption entre un bus ISA et PCI
   n'est pas possible. Mais un partage illgal d'interruption
   fonctionnera  condition que les priphriques en conflit ne soient
   pas utiliss en mme temps. "En mme temps" signifie ici qu'un
   programme en cours d'excution "ouvre" le priphrique dans le
   programme C.

   Vous pouvez avoir besoin de connatre quelques-uns des dtails du
   systme d'interruption PCI de faon  pouvoir paramtrer la mmoire
   CMOS du BIOS ou pour positionner les cavaliers sur de vieilles cartes
   PCI. Le bus PCI possde quatre lignes d'interruptions de INTA#  INTD#
   (A, B, C et D). Pour un systme  7 connecteurs, d'aprs les
   spcifications, on aurait la possibilit de disposer de 7 x 4 = 28
   lignes d'interruptions diffrentes. Mais ces spcifications ne
   permettent qu'un nombre infrieur de lignes d'interruption. Ce n'est
   pas trop contraignant puisque l'on peut partager les interruptions.
   Beaucoup de bus PCI ne paraissent disposer que de 4 lignes
   d'interruption. Appelons ces lignes (fils ou pistes) W, X, Y et Z.
   Supposons que l'on dsigne l'interruption B de l'emplacement numro 3
   comme tant l'interruption 3B. Alors, on peut utiliser le fil W pour
   partager les interruptions 1A, 2B, 3C, 4D, 5A, 6B, 7C. On le ralise
   physiquement en connectant le fil W aux fils 1A, 2B etc... De mme, le
   fil X pourrait tre connect aux fils 1B, 2C, 3D, 4A, 5B, 6C, 7D. Au
   dmarrage, le BIOS fait correspondre X, W, Y, Z aux interruptions.
   Ensuite il crit dans un registre physique de chaque priphrique
   quelle interruption lui a t affecte de sorte que le priphrique
   (et tout ce qui interroge le priphrique) sache quelle IRQ il
   utilise.

   Les fils X, W, Y et Z mentionns ci-dessus sont dsigns dans les
   spcifications PCI par les noms INTA#, INTB#, INTC# et INTD#. Cette
   dnomination officielle PCI porte  confusion puisque, maintenant,
   INTA# a deux significations selon que l'on parle du connecteur ou du
   bus PCI. Par exemple, si 3C correspond  X alors on dira que l'INTC#
   du connecteur 3 est relie  l'INTA# (X) du bus PCI. C'est une
   notation confuse.

   Il y a galement une autre obligation. Un connecteur PCI doit utiliser
   les premires lettres d'interruption en premier. Donc, s'il n'y a
   qu'un connecteur  utiliser une interruption, ce doit tre L'INTA#.
   S'il utilise 2 interruptions ce doivent tre INTA# et INTB# etc.
   Jusqu' 8 priphriques peuvent tre connects  une carte  un
   emplacement donn, mais ils ne peuvent disposer que de 4 interruptions
   PCI. Cela ne pose pas de problme puisque les interruptions peuvent
   tre partages et donc, chacun des 8 priphriques (s'ils sont
   prsents) pourra disposer d'une interruption. La lettre d'interruption
   PCI d'un priphrique est souvent fixe et cble dans le priphrique.

   Le BIOS affecte les IRQ(demandes d'interruptions) de faon  viter
   les conflits avec les IRQ qu'il connat sur le bus ISA. Quelquefois,
   dans le menu CMOS, on peut affecter des IRQ aux cartes PCI (mais ce
   n'est pas aussi facile  faire que ce qui a t expliqu ci-dessus).
   Il existe une situation dans laquelle Windows met  zro tous les
   numros d'interruption dans les cartes PCI aprs que l'affectation des
   numros d'interruption a t effectu. Alors, quelqu'un qui utilise
   Windows et qui lance Linux  partir de Windows verra Linux ne trouver
   que des IRQ incorrectement paramtres  zro.

   Vous pourriez penser que l'utilisation par le PCI des IRQ (bus ISA)
   peut tre lent etc. Pas vraiment. Le(s) circuit(s) contrleur(s)
   d'interruptions ISA possde(nt) un fil d'interruption directement
   reli au CPU afin que celui-ci puisse ragir immdiatement. Alors que
   les signaux sur les bus d'adresse et de donnes ISA doivent cheminer 
   travers le bus PCI pour atteindre le CPU, les signaux d'interruption
   IRQ lui parviennent pratiquement directement.

8.4 Isolation

   C'est uniquement valable pour le bus ISA. L'isolation est une mthode
   complexe d'assignation d'un identificateur temporaire (id number =
   numro d'identification ou Card Select Number (CSN) = numro de
   slection de carte)  chaque priphrique _PnP_ sur le bus. Puisqu'il
   existe des moyens plus efficaces (mais plus complexes) pour le faire,
   certains pourront affirmer que c'est une mthode simpliste. On
   n'utilise qu'une seule adresse d'criture pour toutes les critures
   sur tous les priphriques _PnP_ connects. Cette adresse est utilise
   pour envoyer (assigner) un identificateur unique  chaque priphrique
   _PnP_. L'attribution de cet identificateur impose qu'un seul
   priphrique soit  l'coute lorsque cet identificateur est envoy
   (crit)  cette adresse commune. Tous les priphriques _PnP_ ont un
   numro de srie unique qu'ils utilisent dans le processus d'isolation.
   La ralisation de l'isolation ressemble  un jeu. Elle est ralise en
   utilisant l'quivalent d'un bus  un seul fil reliant tous les
   priphriques _PnP_ et du programme d'isolation.

   Lors de la premire manche de ce "jeu", tous les priphriques _PnP_
   sont  l'coute sur ce fil et envoient simultanment une squence de
   bits sur le fil. Les valeurs permises sont soit des 1 (tension
   positive) soit des "0 ouverts" sans tension (circuit ouvert ou
   troisime tat). Chaque priphrique _PnP_ commence  envoyer
   squentiellement son numro de srie, bit par bit, en commenant par
   le bit de poids fort, sur le fil. Si l'un des priphriques envoie un
   1 sur le fil, un 1 sera reu par tous les autres. Si tous les
   priphriques envoient un "0 ouvert", on n'entendra rien sur le fil.
   L'objectif est d'liminer ( la fin de cette premire manche) tout le
   monde sauf le priphrique ayant le numro de srie le plus lev. Par
   "liminer", on entend cesser d'couter plus avant l'adresse d'criture
   que tous les priphriques encore dans la course continuent d'couter.
   On appelle galement cela "se retirer". (Il faut noter que tous les
   numros de srie sont de mme longueur).

   En premier lieu, ne prenons en considration que le bit de poids le
   plus lev du numro de srie mis sur le fil par tous les
   priphriques n'ayant pas encore d'identificateur. Si l'un des
   priphriques _PnP_ envoie un 0 (0 ouvert) mais reoit un 1, cela
   signifie qu'un autre priphrique _PnP_ possde un numro de srie
   suprieur au sien. Donc, il se retire provisoirement du jeu et
   n'coute plus ce qui se passe sur la ligne jusqu' la fin de cette
   manche (quand un identificateur est attribu au gagnant : celui qui a
   le numro de srie le plus lev). Alors, les priphriques encore de
   la partie possdent tous le bit de poids fort (un 1), donc, nous
   pouvons supprimer ce bit et prendre en compte uniquement le "numro de
   srie tronqu" rsultant pour continuer  participer  cette manche.
   Retournez au dbut de ce paragraphe et rptez le processus jusqu' ce
   que le numro de srie complet ait t trait pour chacun des
   priphriques (voir ci-dessous comment est trait le cas o il n'y a
   que des 0).

   Il est donc clair que le numro de srie le plus lev ne sera pas
   limin de la partie. Mais qu'en est-il si les chiffres de tte (du
   numro de srie ventuellement tronqu) sont tous des 0 ?. Dans ce cas
   un "0 ouvert" est envoy sur la ligne et tous les participants restent
   en lice. S'ils ont tous des zros en tte, alors les 0 sont limins
   exactement comme les 1 au paragraphe ci-dessus. La partie continue et
   les chiffres suivants (du numro de srie) sont envoys.

    la fin de la manche (lorsque le bit de poids faible du numro de
   srie du concurrent restant a t mis), seul le priphrique _PnP_
   ayant le numro de srie le plus lev est prsent. On lui donne alors
   un identificateur et il quitte la partie dfinitivement. Ensuite, tous
   les limins de la dernire manche (ceux qui n'ont pas encore obtenu
   d'identificateur) reviennent dans le jeu et une nouvelle manche
   commence avec un concurrent de moins. Finalement, tous les
   priphriques _PnP_ se verront attribuer un identificateur. Il est
   facile de prouver que cet algorithme fonctionne.

   Une fois que tous les identificateurs ont t attribus,ils sont
   utiliss pour s'adresser  chacun des priphriques _PnP_ pour les
   configurer et lire leur configuration. On notera que ces
   identificateurs ne sont utiliss que pour la configuration _PnP_ et ne
   sont pas utiliss pour les communications normales avec le
   priphrique _PnP_. Au dmarrage de l'ordinateur, tous les
   identificateurs sont perdus et, donc, un BIOS PnP refait normalement
   ce processus d'isolation  chaque fois que vous remettez votre PC en
   service.

   FIN DU Plug-and-Play-HOWTO
