  HOWTO Linux _P_l_u_g_-_a_n_d_-_P_l_a_y
  David S.Lawyer    bf347@lafn.org
  v0.01, Mars 1999

  Aide  la gestion et  la comprhension des priphriques Plug-and-
  Play.  Comment rendre votre systme Linux apte  grer le Plug-and-
  Play. Cette premire version est incomplte, mais elle devrait tre
  utile.
  ______________________________________________________________________

  Table des matires


  1. Introduction

     1.1 Copyright, Marques dposes, Limitation de garantie & Crdits
        1.1.1 Copyright
        1.1.2 Marques dposes
        1.1.3 Limitation de garantie
     1.2 Pour le futur : Vous pouvez contribuer
     1.3 Nouvelles versions de cet HOWTO

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

     2.1 En quoi consiste le
     2.2 Comment un ordinateur trouve-t-il les priphriques (et inversement)
     2.3 Adresses d'E/S etc.
     2.4 Les IRQ, vue d'ensemble
     2.5 Les canaux DMA
     2.6 Rgions mmoire
     2.7 Les "ressources" en deux endroits
     2.8 Le  problme
     2.9 Le

  3. La solution

     3.1 Introduction
     3.2 Linux a besoin du
     3.3 Les bus
     3.4 Configuration d'un BIOS PnP
        3.4.1 Avez-vous un systme d'exploitation PnP ?
        3.4.2 Comment doivent tre contrles les ressources ?
        3.4.3 Rinitialiser la configuration ?

  4. Comment agir avec les cartes PnP

     4.1 Introduction
     4.2 Dsactiver le
     4.3 Le BIOS configure le PnP
     4.4 Isapnp
     4.5 Corriger le noyau pour rendre Linux compatible PnP
     4.6 Logiciels PnP et documents

  5. Appendice

     5.1 Adresses
        5.1.1 Adresses de configuration sur le bus ISA (Port de lecture etc.)
        5.1.2 Gamme d'adresses
        5.1.3 Espace d'adresses
        5.1.4 Communication directe via la mmoire.
     5.2 Les interruptions - Description dtaille.
     5.3 Interruptions PCI
     5.4 Isolation



  ______________________________________________________________________

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

  DDffiinniittiioonn :: _P_l_u_g_-_a_n_d_-_P_l_a_y (Branchez-et-Utilisez),PPnnPP.  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1..  IInnttrroodduuccttiioonn

  11..11..  CCooppyyrriigghhtt,, MMaarrqquueess ddppoosseess,, LLiimmiittaattiioonn ddee ggaarraannttiiee && CCrrddiittss

  11..11..11..  CCooppyyrriigghhtt

  Copyright (c) 1998 by David S. Lawyer. Vous pouvez librement copier ou
  distribuer (vendre ou donner) ce document. Pour les corrections et les
  modifications mineures, prenez contact avec le gestionnaire. Sinon,
  vous pouvez en raliser des travaux drivs et les distribuer 
  condition de :


  1. Prendre contact avec le gestionnaire (s'il y en a un) ;

  2. Mettre le travail driv sur le site miroir internet du LDP afin
     que l'on puisse le tlcharger gratuitement ;

  3. tablir une licence dans l'esprit de celle-ci ou utiliser la
     licence GPL ;

  4. Reconnatre les mrites des auteurs et contributeurs importants.


  11..11..22..  MMaarrqquueess ddppoosseess

  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 (Micro$oft).


  11..11..33..  LLiimmiittaattiioonn ddee ggaarraannttiiee

  Une grande partie des informations contenues dans cet HOWTO ont t
  obtenues du Serial-HOWTO, d'Internet, de vendeurs etc. et peut se
  rvler non fiable.  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1..22..  PPoouurr llee ffuuttuurr :: VVoouuss ppoouuvveezz ccoonnttrriibbuueerr

  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. De mme, je ne comprends pas
  totalement comment le BIOS configure le PnP.  Donc, cet HOWTO est
  incomplet et peut se rvler inexact (faites-moi savoir o sont les
  erreurs). Dans cet HOWTO j'ai utilis;nbsp;?? pour indiquer que je ne
  connais pas vraiment la rponse.  Voudriez-vous amliorer (rcrire)
  et maintenir cet HOWTO;nbsp;? Je suis  la recherche de quelqu'un pour
  le faire.


  11..33..  NNoouuvveelllleess vveerrssiioonnss ddee cceett HHOOWWTTOO

  Les nouvelles versions du Plug-and-Play-HOWTO seront disponibles pour
  consultation et/ou tlchargement sur les sites miroirs du LDP.  Pour
  obtenir une liste de ces sites, consultez :
  <http://sunsite.unc.edu/LDP/mirrors.html>. Diffrents formats sont
  disponibles. Si vous voulez rapidement vrifier la date de la dernire
  version, regardez  : <http://sunsite.unc.edu/LDP/HOWTO/Plug-and-Play-
  HOWTO.html>.


  22..  QQuuee ddeevvrraaiitt ffaaiirree llee PPnnPP :: AAlllloouueerr lleess ""RReessssoouurrcceess""

  22..11..  EEnn qquuooii ccoonnssiissttee llee PPlluugg--aanndd--PPllaayy  ((PPnnPP)) ??

  En simplifiant beaucoup, le _P_l_u_g_-_a_n_d_-_P_l_a_y 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 _P_l_u_g_-_a_n_d_-_P_l_a_y 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
  s'exprimer plus prcisment, le PnP consiste  allouer les
  "ressources" suivantes  la fois aux pilotes et au matriel : adresses
  d'E/S, IRQ, canaux DMA, rgions mmoire. Si vous ne comprenez pas ce
  que signifient ces quatre notions, lisez les paragraphes suivants.
  Aprs que ces ressources ont t assignes, les noms des units
  priphriques dans le rpertoire /dev sont prts  tre utiliss.

  Cette mthode d'affectation de certaines ressources est quelquefois
  dsigne par le terme "configuration", mais c'est uniquement d'une
  configuration de bas niveau qu'il s'agit. Mme lorsque le _P_n_P est
  utilis au maximum, une bonne partie de la configuration des
  priphriques est ralise par autre chose que le _P_n_P. 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
  _P_n_P. Donc, quand on parle du PnP, "ressources" ne concerne qu'un sous-
  ensemble limit des ressources et "configuration" ne signifie qu'un
  certain type, seulement, de configuration.


  22..22..  CCoommmmeenntt uunn oorrddiinnaatteeuurr ttrroouuvvee--tt--iill lleess pprriipphhrriiqquueess ((eett iinnvveerrssee
  mmeenntt))

  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 et le 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 _p_l_u_g_-_a_n_d_-_p_l_a_y 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" (logiciel qui fait partie du systme d'exploitation et
  qui 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 vers les diffrents priphriques
  et en lit les infos. Pour cela, chaque pilote de priphrique doit
  connatre l'adresse utilise pour une telle communication.  Connatre
  une telle adresse correspond  mettre en oeuvre un canal de
  communication, mme si ce "canal" est en ralit un bus de donnes
  dans le PC qui est partag avec pratiquement tout le reste.


  22..33..  AAddrreesssseess dd''EE//SS eettcc..

  Les PC utilisent trois espaces d'adresses : mmoire principale, E/S,
  et configuration (uniquement dans le cas du bus PCI).  Seuls les deux
  premiers (mmoire et E/S) sont configurs par le PnP. Les trois types
  d'adresses partagent le mme bus  l'intrieur du PC. (De plus, dans
  le cas du bus PCI, le bus est galement utilis pour les donnes.)
  Mais la tension sur certains fils spcialiss indique  tous les
  priphriques si une adresse est, ou non, dans l'espace E/S ou dans
  l'espace mmoire centrale. Les priphriques sont normalement situs
  dans l'espace d'adressage E/S (bien que, dans certains cas ils soient
  galement situs dans l'espace d'adressage mmoire centrale). Une
  adresse E/S (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 connatre 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 connatre 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 et si vous indiquez une adresse
  errone au pilote, vous avez des problmes. Maintenant, dcrivons
  (dans les trois paragraphes suivants) quelques autres "ressources" qui
  peuvent tre affectes : ``IRQ'', ``Canaux DMA'', et ``Rgions
  mmoire''. Tous ces lments (y compris les adresses d'E/S) sont
  appels _"_r_e_s_s_o_u_r_c_e_s_".


  22..44..  LLeess IIRRQQ,, vvuuee dd''eennsseemmbbllee

  Aprs avoir lu ce paragraphe, il faut lire ``Interruptions --Details''
  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. Dans ce cas, le priphrique
  a besoin de connatre l'adresse (ou quelque chose d'quivalent) de son
  pilote de priphrique afin de pouvoir l'appeler. Par exemple, le
  priphrique peut venir de recevoir un ensemble d'octets destins  la
  mmoire centrale, et ce priphrique a besoin d'appeler son pilote
  pour qu'il vienne rcuprer ces octets immdiatement et les transfrer
  de la mmoire tampon, pratiquement pleine, du priphrique vers la
  mmoire centrale.

  Le priphrique 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. Le priphrique doit connecter 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.

  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2..55..  LLeess ccaannaauuxx DDMMAA

  Ne sont plus beaucoup utiliss puisque le vritable DMA ne concerne
  que le bus ISA et que l'quivalent du DMA pour le bus PCI est  la
  fois beaucoup plus rapide et ne ncessite pas de "canal DMA".  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
  ne#####"ne"??##### peut se faire  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2..66..  RRggiioonnss mmmmooiirree

  Certains priphriques se voient assigner des adresses dans l'espace
  de la mmoire principale aussi bien que dans celui des E/S.  Lorsque
  vous branchez une telle carte, en ralit vous connectez un module
  mmoire (de la mmoire principale, et pas seulement de la mmoire
  E/S). Cette mmoire est partage entre le priphrique et le 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.


  22..77..  LLeess ""rreessssoouurrcceess"" eenn ddeeuuxx eennddrrooiittss

  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, dans le
  cas d'un port srie il y a seulement 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).  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).

  22..88..  LLee  pprroobbllmmee

  L'architecture du PC fournit seulement un nombre limit d'IRQ, de
  canaux DMA, d'adresses d'E/S etc. 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
  invitables, 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.

  L'allocation des ressources, si elle est correctement ralise,
  tablit galement 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 rend bi-directionnel le canal de
  communication, o  la fois le pilote et le priphrique peuvent
  prendre l'initiative d'une communication.


  22..99..  LLee PPnnPP  ddtteeccttee lleess pprriipphhrriiqquueess ccoonnnneeccttss aauuxx ppoorrttss ssrriiee

  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 _P_n_P n'a pas
  vraiment de raison d'tre pour ces priphriques.

  Cependant, un systme d'exploitation _P_n_P les dtectera et saura quel
  modle de priphrique est connect. 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 "srie" du _P_n_P.



  33..  LLaa ssoolluuttiioonn PPlluugg--aanndd--PPllaayy  ((PPnnPP))

  33..11..  IInnttrroodduuccttiioonn

  Le Plug-and_Play (PnP) constitue une mthode d'automatisation de
  l'attribution des ressources PnP au matriel et au logiciel
  correspondant.  C'est--dire mettre en relation les priphriques et
  leurs pilotes ainsi que spcifier les "canaux" de communication. Avant
  le _P_l_u_g_-_a_n_d_-_P_l_a_y, 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 (ce qui ne fonctionnait pas
  toujours bien).

  Avec le PnP complet (qui, d'ailleurs, lui aussi, ne fonctionne pas
  toujours bien),  la fois le BIOS PnP et le systme d'exploitation
  cooprent. Quand l'ordinateur est mis sous tension, il excute le
  programme BIOS pour dmarrer. Si le systme d'exploitation est stock
  sur le disque dur (ce qui est gnralement le cas), il faut que le
  BIOS reconnaisse ce disque dur.  Si le disque est PnP, alors, le BIOS
  peut utiliser les mthodes PnP pour le trouver. De plus, pour
  configurer le BIOS au dmarrage de l'ordinateur, il faut un cran (une
  carte video) et un clavier pour que le BIOS puisse "PnP-configurer"
  ces priphriques si besoin est.

  Aprs avoir reconnu le disque dur, la carte vido et le clavier, le
  BIOS est prt pour "dmarrer" ("boot", chargement du systme
  d'exploitation du disque dur).  Si vous avez dit au BIOS que le
  systme d'exploitation est PnP, il devrait faire cela et laisser au
  systme d'exploitation le soin de terminer la configuration PnP.
  Sinon, un BIOS-PnP essaiera de faire le reste de la configuration par
  lui-mme.


  33..22..  LLiinnuuxx aa bbeessooiinn dduu PPnnPP

  PnP a t invent par Wintel (Microsoft et Intel). En partie pour
  cette raison (peut-tre partiellement due au syndrome du "pas invent
  ici"), et en partie  cause d'une rticence sur la faon dont il a t
  implment, il y a eu quelques prjugs contre le PnP dans la
  communaut Linux. Mais qu'on l'aime ou non, la plupart du matriel
  d'aujourd'hui est PnP et Linux n'a pas d'autre choix que de prendre en
  compte le _P_n_P.


  33..33..  LLeess bbuuss

  Le _P_n_P est cens fonctionner avec tous les bus tels que ISA et PCI.
  ISA est le vieux bus des vieux IBM PC alors que PCI est le bus plus
  rcent et plus rapide d'Intel. En fin de compte, le bus ISA devrait
  disparatre.  Le bus PCI a rserv de nombreuses adresses pour la
  configuration _P_n_P.  Linux utilise quelques-unes de ces adresses pour
  dtecter quels sont les priphriques PCI utiliss qui sont _P_n_P (qu'en
  est-il des priphriques non _P_n_P sur le bus PCI ??) et mettre
  l'information les concernant dans le "fichier"  /proc/pci.

  Pour le bus ISA, cela pose un rel problme,  la diffrence du bus
  PCI qui a t conu pour le PnP. Personne n'avait le PnP en tte quand
  le bus ISA a t conu et il n'y a pratiquement pas d'adresses
  disponibles pour leur utilisation pour le PnP. En consquence, la
  manire dont le PnP est gr sur le bus ISA est complique et
  ncessite que chaque priphrique PnP se voie attribuer un "numro"
  temporaire par le programme PnP de faon  pouvoir l'adresser pour la
  configuration PnP. L'attribution de ces "numros" est appele
  "isolation". Voir ``Isolation'', dans l'appendice, pour informations
  dtailles.
  33..44..  CCoonnffiigguurraattiioonn dd''uunn BBIIOOSS PPnnPP

   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 ?''

    ``Rinitialiser la configuration ?''


  33..44..11..  AAvveezz--vvoouuss uunn ssyyssttmmee dd''eexxppllooiittaattiioonn PPnnPP ??

  Si vous rpondez oui, alors le BIOS PnP commencera  configurer le
  disque dur etc., pour donner au systme la possibilit de dmarrer.
  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 prts  tre configurs par le systme
  d'exploitation. Si votre systme d'exploitation n'effectue pas cette
  configuration (quelques versions corriges de Linux le font), vous
  devrez probablement ne pas rpondre oui  cette question puisque le
  BIOS risque de laisser vos priphriques ISA en tat dsactiv ??

  Si vous rpondez non, alors le BIOS fera la configuration lui-mme. Il
  utilisera la configuration prcdente, sauvegarde dans la mmoire non
  volatile,  moins que vous n'ayez ajout de nouveaux priphriques
  PnP.  Si votre dernire session d'utilisation de l'ordinateur a t
  faite sous Linux, il n'y aura pas de modification de configuration.
  Mais si cette dernire session a t faite sous Windows 95 ou 98 (qui
  sont PnP), alors Windows peut avoir effectu une configuration
  diffrente de celle que vous voulez sous Linux. C'est l'une des
  manires de faire avec le _P_n_P : accepter simplement la configuration
  effectue par Windows 9x. Lorsque vous faites la configuration pour la
  premire fois sous Windows9x, vous pouvez dire au BIOS que vous avez
  un systme d'exploitation _P_n_P et ensuite lui dire que ce n'est pas le
  cas. Lorsque vous ajoutez un nouveau priphrique, le BIOS doit tre
  capable de le configurer par lui-mme sans l'aide de Windows, mais il
  peut aussi bien ne pas le faire ??

  Vous pouvez toujours faire tourner _i_s_a_p_n_p au dmarrage de Linux pour
  modifier la configuration ISA et adopter celle que vous voulez sous
  Linux. Cela n'apporte rien pour les cartes PCI, mais vous pouvez
  toujours voir comment elles ont t configures en regardant dans
  /proc/pci.  Il faudra alors vous assurer que les pilotes utiliss
  correspondent  vos fichiers de configuration Linux ("setserial",
  lilo.conf etc.).  Consultez ``BIOS Configures PnP'' pour avoir des
  informations complmentaires.


  33..44..22..  CCoommmmeenntt ddooiivveenntt ttrree ccoonnttrrlleess lleess rreessssoouurrcceess ??

  cela peut simplement signifier de dcider comment allouer les IRQ et
  les DMA.  Sur "auto", le bios se chargera de l'allocation. Sur manuel,
  vous entrerez dans un autre menu et pourrez rserver certaines IRQ 
  utiliser pour des cartes anciennes (cartes non-pnp). Maintenant le
  BIOS peut, ou non, reconnatre vos vieilles cartes. 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. 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.
  Celui-ci stockera alors les informations dans sa base de donnes en
  mmoire non volatile.


  33..44..33..  RRiinniittiiaalliisseerr llaa ccoonnffiigguurraattiioonn ??

  Cette opration effacera de la base de donnes 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.


  44..  CCoommmmeenntt aaggiirr aavveecc lleess ccaarrtteess PPnnPP

  44..11..  IInnttrroodduuccttiioonn

  Aujourd'hui, la plupart des nouvelles cartes internes sont _P_l_u_g_-_a_n_d_-
  _P_l_a_y (PnP). Certaines d'entre elles possdent des cavaliers (ou
  quelque chose de semblable) qui peuvent tre dplacs pour dsactiver
  le PnP.  Puisque le logiciel existe dans Linux (ainsi que dans
  Dos/Windows) pour grer le PnP, la plupart du temps il vaut mieux
  laisser le PnP activ mme si vous avez la possibilit de le
  dsactiver. Si vous corrigez le noyau pour utiliser le  _P_l_u_g_-_a_n_d_-_P_l_a_y,
  il ne configurera pas seulement le matriel en mettant les
  informations concernant les ressources dans ses registres, mais il
  essaiera de fournir cette information au logiciel de pilotage de telle
  sorte que vous n'aurez pas  le configurer. Par exemple, pour un port
  srie, vous n'aurez pas  utiliser "setserial".

  Si vous possdez une carte PnP, vous disposerez alors d'une ou de
  plusieurs des options suivantes pour le configurer :


    ``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'' (seulement si vous avez un BIOS PnP)

    ``Isapnp'' c'est un programme que vous pouvez toujours utiliser
     pour configurer les priphriques PnP sur le bus ISA (n'est pas
     destin aux priphriques PCI)

    ``Patch Kernel'' pour transformer Linux en un systme
     d'exploitation PnP.


  44..22..  DDssaaccttiivveerr llee PPnnPP  ??

  De nombreux priphriques sont uniquement PnP, sans option pour le
  dsactiver. Mme si vous disposez de cette option, vous pouvez ne pas
  vouloir le faire pour l'une des raisons suivantes :


  1. Si vous avez MS Windows sur la mme machine, vous voulez permettre
     au PnP sous MS Windows de configurer les priphriques
     diffremment.

  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. S'il est ncessaire d'utiliser un logiciel sous Dos/Windows pour
     configurer une configuration non PnP et qu'un jour, n'ayant pas
     Dos/Windows sous la main, vous ayez des difficults  changer de
     configuration.

  4. Vous avez (ou vous aurez) d'autres priphriques PnP qui auront
     besoin d'tre configurs et donc, il faudra utiliser le PnP 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 utilisiez 
     nouveau le logiciel de configuration pour rtablir le PnP).


  44..33..  LLee BBIIOOSS ccoonnffiigguurree llee PPnnPP

  Votre BIOS doit videmment supporter le PnP pour le faire. Pour
  trouver des informations complmentaires sur le BIOS, consultez le
  Web.  Quelques BIOS ont un support PnP minimal et essaient de
  contourner cette difficult en se dchargeant des tches de
  configuration sur des utilitaires Windows (ce qui n'est pas possible
  sous Linux). Dans ce cas, si le BIOS entretient une base de donnes de
  configuration, vous pouvez essayer de favoriser la mise au point de
  cette base de donnes en utilisant ICU sous DOS/Windows ou, si vous
  possdez l'un des Windows9x (qui sont des systmes d'exploitation
  PnP), vous pouvez simplement laisser Windows le faire sans utiliser
  ICU.

  Avant de faire tourner Linux, vous configurez le BIOS pour un "Systme
  d'exploitation ne supportant pas le PnP" (ou quelque chose comme
  cela). Consultez ``Configuration d'un BIOS PnP'' Grce  cela, le BIOS
  effectuera la configuration au lieu de laisser le systme
  d'exploitation le faire.

  La base de donnes, non volatile, du BIOS se nomme ESCD (Extended
  System Configuration Data -- Donnes de configuration du systme
  tendu). L'ESCD ne stocke pas seulement la configuration des
  priphriques PnP, mais galement les informations concernant les
  priphriques non PnP pour viter les conflits. Quand vous installez
  un priphrique non PnP, l'ESCD du BIOS s'attend  ce que vous l'en
  informiez en excutant l'utilitaire Dos/Windows ICU (Intel
  Configuration Utility -- utilitaire de configuration Intel) avant
  l'installation. Il faudra galement que vous utilisiez cet utilitaire
  pour informer l'ESCD des priphriques non PnP prsents dans le PC (
  moins que quelqu'un ne l'ait fait avant vous).

  La configuration ESCD, pour tre non volatile, est habituellement
  sauvegarde dans un circuit intgr, mais quelquefois, elle l'est sur
  le disque dur ?? Chaque fois que le BIOS dmarre sous Linux, il doit
  configurer les choses de cette faon. Vous pouvez prendre des notes
  sur la faon dont ICU (et le BIOS) ont configur les choses (ou
  l'imprimer). Cependant, si vous ajoutez un nouveau priphrique non
  PnP, vous devrez refaire tourner le programme ICU. S'il est PnP, alors
  le BIOS le configurera automatiquement et, avec un peu de chance, ne
  changera pas la configuration  de tous les autres priphriques
  prsents sur votre PC. Mais il peut avoir  reconfigurer quelques-uns
  des priphriques existants pour allouer des ressources au nouveau
  priphrique.

  Comment le BIOS l'a-t-il configur ? Le dcouvrir sous Linux peut tre
  difficile. Mais c'est facile pour le bus PCI : il suffit juste de
  regarder dans /proc/pci. Pour le bus ISA, les choses ne sont pas aussi
  faciles. En utilisant pnpdump on peut trouver des cartes PnP sur le
  bus ISA ainsi que la faon dont il aurait fallu les configurer, mais
  rien ne garantit qu'elles l'ont t de cette faon. On peut essayer
  quelques commandes isapnp en utilisant le mot-cl PEEK pour trouver
  quelles sont l'adresse d'E/S et l'IRQ, mais c'est compliqu. Ne
  confondez pas l'adresse de lecture du port "qu'essaie" pnpdump (et o
  il trouve quelque chose) avec l'adresse d'E/S du priphrique dtect.
  Ce ne sont pas les mmes.

  Notez que sous Dos/Windows la configuration est galement sauvegarde
  dans un fichier sur le disque dur pour que le systme d'exploitation
  sache o sont toutes les informations. Cela n'est pas le cas pour
  Linux qui effectue une dtection automatique des priphriques.


  44..44..  IIssaappnnpp

  La documentation concernant isapnp est difficile  comprendre si l'on
  ne connat pas les bases du _P_n_P. Cet HOWTO devrait aider  la
  comprendre.  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. Cela ncessite d'avoir le paquetage isapnptools,
  prsent dans beaucoup de distributions de Linux.  Tapez "locate pnp"
  pour voir ce qui est disponible sur votre systme pour isapnp.  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. Si vous utilisez  "isapnp" comme
  cela et que vous ayez un BIOS PnP, devez-vous dire au BIOS (quand vous
  le paramtrez) que vous avez un systme d'exploitation PnP ??

  Si vous lancez isapnp une seule fois pour configurer les priphriques
  ISA-PnP mais que vous ne le faites pas  chaque dmarrage de
  l'ordinateur, alors, si vous avez MS Windows 9x sur le mme PC, le
  problme suivant risque de survenir : quand vous utilisez MS Windows
  9x, Windows peut configurer vos cartes PnP de manire diffrente, de
  telle sorte qu'elles ne fonctionneront plus correctement (ou plus du
  tout) sous Linux.


  44..55..  CCoorrrriiggeerr llee nnooyyaauu ppoouurr rreennddrree LLiinnuuxx ccoommppaattiibbllee PPnnPP

  Une telle correction importante pour le faire existe. Le noyau
  rsultant est stable et une documentation est incluse : 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 des commandes dans l'un de ces fichiers pour une
  configuration personnalise.  Le 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://lucifer.hemmet.s-
  hem.chalmers.se/~dwh>


  44..66..  LLooggiicciieellss PPnnPP eett ddooccuummeennttss


    Consultez  <http://www.redhat.com/linux-info/pnp/> pour avoir des
     pointeurs sur des logiciels et des documentations sur PnP.

    Consultez  <http://www.microsoft.com/hwdev/respec/pnpspecs.htm>
     pour avoir des pointeurs sur les spcifications de PnP.




  55..  AAppppeennddiiccee

  55..11..  AAddrreesssseess

  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.


  55..11..11..  AAddrreesssseess ddee ccoonnffiigguurraattiioonn ssuurr llee bbuuss IISSAA ((PPoorrtt ddee lleeccttuurree
  eettcc..))

  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. Chaque carte est  l'coute de la mme adresse que l'on
  appelle un port d'criture.

  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.


  55..11..22..  GGaammmmee dd''aaddrreesssseess

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


  55..11..33..  EEssppaaccee dd''aaddrreesssseess

  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.


  55..11..44..  CCoommmmuunniiccaattiioonn ddiirreeccttee vviiaa llaa mmmmooiirree..

  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 (``DMA Channels'').  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.


  55..22..  LLeess iinntteerrrruuppttiioonnss -- DDeessccrriippttiioonn ddttaaiillllee..

  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.



  55..33..  IInntteerrrruuppttiioonnss PPCCII

  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.
  Mais comme le BIOS la met en correspondance avec une interruption
  (IRQ), cette mise en correspondance dtermine quelle IRQ est utilise.

  Vous pourriez penser que l'utilisation des IRQ vient du bus ISA et que
  cela 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.



  55..44..  IIssoollaattiioonn


  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 _P_n_P 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 _P_n_P connects. Cette adresse est utilise
  pour envoyer (assigner) un identificateur unique  chaque priphrique
  _P_n_P. 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 _P_n_P 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 _P_n_P et du programme d'isolation.

  Lors de la premire manche de ce "jeu", tous les priphriques _P_n_P
  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 _P_n_P 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 _P_n_P envoie un 0 (0 ouvert) mais reoit un 1, cela
  signifie qu'un autre priphrique _P_n_P 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 _P_n_P
  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 _P_n_P 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 _P_n_P pour les
  configurer et lire leur configuration. On notera que ces
  identificateurs ne sont utiliss que pour la configuration _P_n_P et ne
  sont pas utiliss pour les communications normales avec le
  priphrique _P_n_P. 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




































