  Le SCSI HOWTO Linux
  par  Drew Eckhardt,<drew@PoohSticks.ORG> (transforme au for-
  mat      linuxdoc-sgml      par      Dieter       Faulbaum),
  <faulbaum@bii.bessy.de>   (Adaptation  francaise  :  Thierry
  Danis thierry.danis@hol.fr, le 28 Novembre 1997).
  Version 2.30, 30 Aout 1996

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

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

  Ce document est distribue sous les contraintes de la GPL  (GNU  Public
  Licence).  Les  lignes  suivantes sont le texte integral anglais de la
  licence.

       This documentation is free documentation; you can redistribute it and/or
       modify it under the terms of the GNU General Public License as published by
       the Free Software Foundation; either version 2 of the License, or
       (at your option) any later version.

       This documentation is distributed in the hope that it will be useful,
       but WITHOUT ANY WARRANTY; without even the implied warranty of
       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
       GNU General Public License for more details.

       You should have received a copy of the GNU General Public License
       along with this documentation; if not, write to the Free Software
       Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

  En  dehors  de  l'aspect  GPL,  j'apprecierais   que   les   personnes
  interessees a publier ce document me demandent (<drew@PoohSticks.ORG>)
  auparavant si une version plus recente existe. A  chaque  fois  qu'une
  version  un peu ancienne est publiee, on me pose des questions qui ont
  deja leur reponse dans les derniers documents,  et  la  reputation  de
  l'editeur  en  fait  les  frais.  Je  prefererais  egalement que toute
  reference a un site de distribution gratuit, voire a des distributeurs
  commerciaux, soit laissee intacte.

  IMPORTANT:

  LES  RAPPORTS D'ANOMALIES ET AUTRES APPELS A L'AIDE QUI NE SUIVENT PAS
  LES PROCEDURES DECRITES DANS  LA  SECTION  ``Signaler  une  anomalie''
  SERONT IGNORES.

  Ce  HOWTO  couvre le sous-systeme SCSI de Linux, tel qu'il existe dans
  le noyau version 1.2.10 et dans des  codes  alpha  plus  recents.  Les
  versions plus vieilles du code SCSI ne sont pplluuss ssuuppppoorrtteeeess et peuvent
  differer sensiblement en ce qui concerne les pilotes implementes,  les
  performances et les options disponibles.

  Pour  toute information supplementaire, vous pouvez vous inscrire a la
  liste   de   diffusion   linux-scsi,   en   envoyant   un   email    a
  majordomo@vger.rutgers.edu  contenant  la ligne suivante dans le corps
  du message :

       subscribe linux-scsi

  Vous pouvez vous radier de la liste en envoyant un  email  a  la  meme
  adresse contenant dans le corps du message :

       unsubscribe linux-scsi

  Une  fois  votre inscription effective, vous pouvez envoyer des emails
  dans la liste de diffusion a l'adresse suivante :

       linux-scsi@vger.rutgers.edu

  Je suis conscient que ce document n'est pas  des  plus  conviviaux  et
  qu'il  comporte  certainement des erreurs et des imprecisions. Si vous
  avez des remarques constructives, n'hesitez pas a me les poster.

  22..  LLeess pprroobblleemmeess ccoouurraannttss

  Ce chapitre recense un  certain  nombre  de  problemes  habituellement
  rencontres.  S'il  n'y   a  rien  ici  qui  reponde  a  vos questions,
  consultez egalement les chapitres relatifs aux cartes  d'interface  et
  aux peripheriques.

  22..11..  DDyyssffoonnccttiioonnnneemmeenntt ggeenneerraalliissee

  Si vous rencontrez des erreurs aleatoires, il y a fort a parier que la
  cause en est un cable defectueux ou une mauvaise terminaison.

  Certaines  cartes,  comme  celles  architecturees  autour  du   recent
  composant  NCR,  effectuent  un  filtrage numerique et une negociation
  active de signal et sont par le fait moins sensibles aux problemes  de
  connectique.

  D'autres  cartes, comme par exemple les Adaptec 154xC, 154xCF et 274x,
  sont  eexxttrreemmeemmeenntt  sensibles  et  peuvent  ne  plus  fonctionner  avec
  certains cordons qui ne perturberaient pas d'autres cartes.

  Je le repete donc : certaines cartes sont ttrreess sensibles aux problemes
  de mauvais  cables  et  de  terminaison,  aussi  est-il  important  de
  verifier  ces  deux  points  avant  toute  chose lorsque des problemes
  apparaissent.

  Pour diminuer les risques potentiels, vous devez utiliser  des  cables
  qui :

  1. se prevalent d'une compatibilite SCSI-II,

  2. ont une impedance caracteristique de 132 ohms,

  3. proviennent  tous  d'une  meme  source,  afin  d'eviter  les ecarts
     d'impedance,

  4. sont proposees par un vendeur repute (tel qu'Amphenol).

  Un leger courant pour la  terminaison  doit  etre  fourni  par  chaque
  equipement  present  sur le bus SCSI, via une diode pour prevenir tout
  retour de tension.  De  cette  maniere,  une  tension  suffisante  est
  disponible  en bout de chaine, la ou le bus en a besoin. Pour prevenir
  tout endommagement du a un court-circuit, TERMPWR doit  etre  controle
  au  travers  d'un fusible ou de tout autre dispositif de limitation du
  courant.

  Si plusieurs equipements, des cables externes ou un FAST SCSI  2  sont
  utilises,  une  terminaison  -- active ou forcee -- parfaite doit etre
  mise a chaque extremite du bus.

  Reportez-vous a la FAQ Comp.Periphs.Scsi (disponible sur  tsx-11  dans
  /pub/linux/ALPHA/scsi)   pour   plus   de   renseignements   sur   les
  terminaisons actives.

  22..22..  LLaa lliiggnnee ddee ccoommmmaannddee dduu nnooyyaauu

  D'autres parties du document feront plus tard reference a la "ligne de
  commande du noyau".

  La  ligne  de  commande  du  noyau  est un ensemble d'options que vous
  pouvez specifier, soit apres le nom de  l'image  a  l'invite  de  LILO
  (LILO  : ), soit dans un champ "append" du fichier de configuration de
  LILO (LILO 0.14 et superieurs utilisent le fichier /etc/lilo.conf, les
  versions precedentes /usr/lilo/config).

  Demarrez  votre  systeme avec LILO et appuyez sur une des touches ALT,
  CTRL ou SHIFT, au  moment  ou  il  affiche  le  prompt.  LILO  devrait
  repondre par :

       :

  A  cet  instant,  vous pouvez selectionner l'image du noyau sur lequel
  continuer le demarrage (en tapant son label) ou  avoir  la  liste  des
  images, en apppuyant sur ?. Par exemple :

       :?

       ramdisk floppy disquedur

  Pour  demarrer  (booter)  le  noyau avec la ligne de commande que vous
  avez choisie entrez simplement le nom  du  noyau,  suivi  d'une  liste
  d'options.  Chaque  option est separee de la precedente par un espace.
  L'appui sur ENTREE  valide  la  ligne  et  continue  le  processus  de
  demarrage.

  Les options sont de la forme :

       variable=liste_de_valeurs

  Ici,  lliissttee__ddee__vvaalleeuurrss  peut  etre  une  simple valeur ou une liste de
  valeurs delimitees par des virgules, sans espaces. Exception faite  de
  la  specification  du  peripherique  de  boot, chaque valeur doit etre
  numerique et peut etre fournie en decimal ou en hexadecimal.

  Par exemple, pour demarrer Linux avec  une  carte  compatible  Adaptec
  1520 non reconnue au demarrage, vous pourriez entrer :

       :floppy aha152x=0x340,11,7,1

  Si  vous  ne  tenez  pas  a taper cette commande a chaque demarrage du
  systeme, il est egalement possible d'utiliser l'option  "append"  dans
  le fichier de configuration de LILO (LILO 0.13 et plus).

  Cela donnera une ligne du genre :

       append="aha152x=0x340,11,7,1"

  22..33..  UUnn ppeerriipphheerriiqquuee aappppaarraaiitt aa ttoouutteess lleess aaddrreesssseess SSCCSSII

  Si c'est le cas, vous avez certainement selectionne comme adresse pour
  ce peripherique la meme adresse que le controleur  (traditionnellement
  l'adresse  7,  bien  que quelques cartes soient configurees autrement,
  comme certaines Future Domain fixees a 6 par exemple).

  Changez la configuration des cavaliers.

  22..44..  LLee mmeemmee ppeerriipphheerriiqquuee eesstt rreeccoonnnnuu aa cchhaaqquuee uunniittee llooggiiqquuee

  Ce peripherique a certainement un firmware bugge.

  Une  solution  temporaire  consiste  a  utiliser  la ligne de commande
  suivante :

       max_scsi_luns=1

  Si cela marche, vous pouvez ajouter votre peripherique a la liste  des
  peripheriques  bugges,  dans  les  sources  du  noyau.  La variable en
  question  s'appelle  bbllaacckklliisstt  et   se   trouve   dans   le   fichier
  drivers/scsi/scsi.c.   Envoyez  ensuite  le  patch  a  Linus  Torvalds
  <Linus.Torvalds@cs.Helsinki.FI>.

  22..55..  VVoouuss aavveezz ddeess ''sseennssee eerrrroorrss'' aalloorrss  qquuee  vvoouuss  ssaavveezz  qquuee  vvoottrree
  mmaatteerriieell nn''aa ppaass dd''eerrrreeuurrss

  Cela est parfois du a un mauvais  cordon  ou  a  une  terminaison  mal
  adaptee.

  Referez-vous au chapitre ``Dysfonctionnement generalise''.

  22..66..  UUnn nnooyyaauu ccoonnffiigguurree aavveecc ssuuppppoorrtt rreesseeaauu nnee mmaarrcchhee ppaass

  Les  routines  d'auto-detection  pour  la plupart des cartes reseau ne
  sont pas passives.  Il  se  peut  qu'elles  entrent  en  conflit  avec
  certaines cartes SCSI et qu'elles en perturbent le bon fonctionnement.

  22..77..  DDeess ppeerriipphheerriiqquueess ssoonntt ddeetteecctteess,,  mmaaiiss  iill  eesstt  iimmppoossssiibbllee  dd''yy
  aacccceeddeerr

  Un peripherique SCSI a  ete  detecte  par  le  noyau  mais  vous  etes
  incapable  d'y  acceder (les commandes mkfs /dev/sdc, tar xvf /dev/st2
  par exemple echouent).

  Vous n'avez pas de fichier special /dev/xxx pour votre peripherique.

  Sous Unix, les peripheriques sont en mode bloc ou en  mode  caractere.
  Les  peripheriques en mode bloc utilisent un mecanisme de cache, alors
  que les peripheriques en mode caractere ne sont  pas  bufferises.   Un
  peripherique  est  donc  defini  sous  Unix  par  son  mode  (bloc  ou
  caractere), son numero majeur (ce numero correspond au pilote  qui  le
  gere  --  ainsi, le majeur mode bloc 8 correspond aux disques SCSI) et
  un numero mineur (ce mineur definit quelle unite est accedee via cette
  specification  de peripherique -- ainsi, le peripherique reference par
  le majeur  caractere  4  et  le  mineur  0  est  la  premiere  console
  virtuelle, mineur 1 est la console suivante, etc.). Cependant, acceder
  aux  peripheriques  par  un  espace  de  nommage  separe  romprait  la
  tradition  d'Unix/Linux  ('tout  est  fichier'  !). C'est pourquoi des
  fichiers speciaux sont crees sous /dev.  Ces  fichiers  speciaux  vous
  permettront  d'acceder  directement  a votre troisieme disque SCSI via
  /dev/sdc, au premier port serie via /dev/ttyS0, etc.

  La meilleure methode pour creer un fichier special est  d'utiliser  le
  script MAKEDEV :

  cd /dev

  puis

  MAKEDEV  (en  tant  que  root)  pour les peripheriques que vous voulez
  creer. Par exemple :

        ./MAKEDEV sdc

  Les caracteres generiques "devraient" marcher. Par exemple :

        ./MAKEDEV sd\*

  "devrait" creer les entrees pour tous les disques  SCSI  (la  commande
  precedente  devrait  avoir  cree  /dev/sda  a  /dev/sdp, avec 15 sous-
  partitions pour chaque disque).

        ./MAKEDEV sdc\*

  "devrait" creer les entrees pour /dev/sdc et  ses  15  sous-partitions
  possibles (/dev/sdc1, /dev/sdc2, etc.).

  J'ai  dit "devrait" parce que c'est le comportement standard d'Unix --
  le script MAKEDEV de votre installation pourrait ne pas se conformer a
  cette facon de faire ou pourrait avoir restreint le nombre de fichiers
  speciaux qu'il peut creer, auquel cas ce qui precede  ne  serait  plus
  tout a fait vrai.

  Si  MAKEDEV  ne fait pas le travail pour vous, vous allez devoir creer
  les fichiers speciaux a la main grace a la commande mmkknnoodd.

  Le mode (bloc ou caractere), le majeur et le mineur sont precises pour
  les  divers peripheriques SCSI dans le chapitre ``Fichiers speciaux''.

  Notez les valeurs trouvees dans ce chapitre  et  tapez  (en  tant  que
  root) :

       mknod /dev/peripherique b|c majeur mineur

  par exemple :

       mknod /dev/sdc b 8 32
       mknod /dev/st0 c 9 0

  22..88..  LLee SSCCSSII ssee bbllooqquuee

  Il   peut   y   avoir   de  nombreuses  raisons  au  blocage  du  bus.
  Eventuellement, reportez-vous au chapitre dedie  a  votre  carte  pour
  plus de details.

  Certains  cas  de  blocage  semblent  se  produire  lorsque  plusieurs
  peripheriques sont en cours d'utilisation simultanement. Si cela  vous
  arrive,  essayez  de  contacter  le  fabricant  des  peripheriques  et
  regardez  s'il  n'existe  pas  des  mises  a  jour  de  firmware   qui
  resoudraient le probleme. A l'occasion, essayez de changer de cable ou
  branchez les peripheriques sur une autre machine.

  Il se peut egalement que ce soit du a des secteurs defectueux  sur  un
  des  disques  ou  encore  a une mauvaise gestion du DMA (Direct Memory
  Access) par la carte mere (pour les cartes d'interface qui travaillent
  en  DMA).  En  fait,  tout  un  tas d'autres raisons peut expliquer un
  blocage du bus.

  De temps en temps, comme nous  venons  de  le  signaler,  des  cas  de
  blocage  apparaissent lorsque plusieurs peripheriques sont utilises en
  meme temps sur le bus. Si votre  controleur  est  capable  de  traiter
  plusieurs  requetes  en meme temps, essayer de reduire la taille de la
  queue a 1 et regardez si la situation s'ameliore. Cela etant, si  vous
  utilisez  des  peripheriques  lents (lecteurs de bandes ou lecteurs de
  CDROM peu  rapides),  reduire  ainsi  la  taille  de  la  queue  n'est
  certainement pas la meilleure solution.

  22..99..  CCoonnffiigguurreerr eett rreeggeenneerreerr llee nnooyyaauu

  Les  pilotes  SCSI  non  utilises  consomment  inutilement de precieux
  octets et peuvent amener les systemes possedant peu de  memoire  a  en
  manquer  (la  memoire  du  noyau  est non paginable (swappable)). Pour
  cette raison, il est recommande de generer un noyau ne comportant  que
  le strict necessaire pour votre machine.

       cd /usr/src/linux

  Si  vous comptez utiliser une partition racine (root device) autre que
  la partition racine courante ou une resolution autre que du VGA 80x25,
  voire  si  vous generez une disquette de demarrage, editez le makefile
  et assurez-vous que les lignes

       ROOT_DEV =

  et

       SVGA_MODE =

  sont correctement positionnees.

  Si vous avez applique des patches,  assurez-vous  que  vous  tous  vos
  fichiers sont correctement recompiles. Dans le doute, tapez :

       make mrproper

  Dans tous les cas, vous devrez configurer le noyau :

       make config

  Repondez  aux  questions.  Apres avoir sauvegarde votre configuration,
  regenerez les dependances et recompilez le noyau :

  make depend
  make

  Une fois la generation du noyau terminee, n'oubliez  pas  de  relancer
  lilo  (//ssbbiinn//lliilloo).  Vous pouvez egalement construire une disquette de
  demarrage :

       make zdisk

  22..1100..  LLeess uunniitteess llooggiiqquueess aauuttrreess qquuee llaa pprreemmiieerree nnee ffoonnccttiioonnnneenntt ppaass

  De  nombreux  peripheriques  SCSI  verrouillent completement le bus ou
  reagissent bizarrement lorsque  vous  tentez  d'acceder  a  une  unite
  logique  (LUN)  qui  n'est  pas l'unite 0. C'est pourquoi les versions
  recentes du noyau Linux n'essaient  plus  par  defaut  de  tester  les
  unites  logiques  autres  que  0.   Si  cela  vous  gene,  vous pouvez
  positionner max_scsi_luns sur la ligne de commande  du  noyau  ;  vous
  pouvez   aussi   recompiler   le   noyau   en   positionnant  l'option
  CONFIG_SCSI_MULTI_LUN au moment de la configuration.

  Il est habituel de mettre

       max_scsi_luns=8

  sur la ligne de commande de LILO.

  Si, malgre tout, vos unites logiques ne sont toujours pas correctement
  detectees (cela peut arriver avec de vieux controleurs SCSI->MFM, RLL,
  ESDI ou SMD), essayez de supprimer le petit bout de code suivant de la
  fonction scan_scsis() du fichier drivers/scsi/scsi.c :

       /* Some scsi-1 peripherals do not handle lun != 0.
          I am assuming that scsi-2 peripherals do better */
       if((scsi_result[2] & 0x07) == 1 &&
          (scsi_result[3] & 0x0f) == 0) break;

  33..  SSiiggnnaalleerr uunnee aannoommaalliiee

  Soumis  a  des contraintes de place, les developpeurs des parties SCSI
  de Linux ne maintiennent pas obligatoirement les vieilles versions  du
  code.  Si  vous  ne  tournez pas avec la derniere version du noyau (la
  plupart des  distributions  de  Linux,  (MCC,  SLS,  Yggdrasil,  etc.)
  peuvent  avoir  jusqu'a  une  vingtaine  de  patches  de retard sur le
  dernier noyau), il y a une forte probabilite pour que  vous  ne  soyez
  pas  capable  de  resoudre  votre  probleme.  Avant  de  signaler  une
  anomalie, verifiez si  elle  existe  encore  avec  la  toute  derniere
  version du noyau.

  Si  apres  avoir mis a jour votre noyau et lu entierement ce document,
  vous pensez vraiment avoir decouvert un probleme, envoyez par email un
  rapport  d'anomalie  a  la  liste  de  diffusion  SCSI, ou il aura des
  chances d'etre lu par la plupart  des  personnes  ayant  participe  au
  developpement des pilotes SCSI pour Linux.

  Mettez  dans  votre  rapport  d'anomalie  le maximum d'information sur
  votre configuration materielle, le texte exact des messages que  Linux
  affiche  au  demarrage,  le  moment  ou  l'erreur se produit et a quel
  endroit dans les  sources  l'erreur  a  ete  levee.  Referez-vous  aux
  chapitres ``Capture des messages SCSI'' et ``Localisation de l'origine
  d'un panic()''.

  Des informations incompletes peuvent conduire a de mauvais diagnostics
  ou  a  un classement vertical de la part du developpeur du pilote, qui
  risque d'estimer qu'il a plus important a corriger.

  Retenez bien ceci : si nous ne pouvons pas reproduire le  probleme  et
  si  vous  ne  pouvez pas nous dire ce qui ne marche pas, l'anomalie ne
  sera jamais corrigee.

  33..11..  CCaappttuurree ddeess mmeessssaaggeess SSCCSSII

  Si aucun archiveur (logger) de messages ne tourne, il  va  falloir  en
  lancer un.  Verifiez que le systeme de fichiers /proc est monte :

       grep proc /etc/mtab

  S'il ne l'est pas, il faut le monter :

       mkdir /proc
       chmod 755 /proc
       mount -t proc /proc /proc

  Recopiez  ensuite  la version du noyau et ses messages dans un fichier
  de log :

       cat /proc/version > /tmp/log
       cat /proc/kmsg >> /tmp/log

  Attendez une seconde ou deux  (le  temps  que  le  ccaatt  //pprroocc//kkmmssgg  se
  termine) puis tapez CTRL-C.

  Si  un  logger  de messages tourne, vous allez devoir chercher dans le
  fichier de traces adequat  (jetez  un  oeil  a  /etc/syslog.conf  pour
  trouver  ou  se cache ce fichier). Vous pouvez aussi taper la commande
  ddmmeessgg.

  Si Linux n'est pas lance, formatez une disquette sous DOS.   Si  votre
  distribution monte la disquette en tant que racine (root) plutot qu'un
  disque RAM, vous allez devoir formater une disquette et la mettre dans
  le  lecteur  non  utilise  par  la  racine  (si  vous disposez de deux
  lecteurs). Si vous n'avez  pas  de  second  lecteur,  il  vous  faudra
  utiliser l'option de demarrage 'ramdisk'.

  Maintenant,   demarrez   depuis   la   disquette   de  boot  de  votre
  distribution, de preference en mode utilisateur simple  (single  user)
  et en demandant a placer la racine (root) dans un disque RAM.

       mkdir /tmp/dos

  Inserez la disquette dans un lecteur non utilise pour monter la racine
  et montez-la :

       mount -t msdos /dev/fd0 /tmp/dos

  ou

       mount -t msdos /dev/fd1 /tmp/dos

  Copiez-y ensuite votre fichier de traces :

       cp /tmp/log /tmp/dos/log

  Demontez votre disquette DOS

       umount /tmp/dos

  et arretez Linux.

       shutdown

  Redemarrez sous DOS puis incluez le fichier de traces dans votre mail.

  33..22..  LLooccaalliissaattiioonn ddee ll''oorriiggiinnee dd''uunn ppaanniicc(())

  Ainsi  que  d'autres  Unix le font, Linux appelle la fonction du noyau
  panic()  lorsqu'une  erreur   fatale   est   detectee.   Par   contre,
  contrairement a d'autres Unix, Linux ne produit pas un fichier de dump
  dans la swap. Il ne redemarre pas non plus. Il laisse dans le  fichier
  de traces des informations interessantes. Par exemple :

       Unable to handle kernel NULL pointer dereference at virtual address c0000004
       current->tss,cr3 = 00101000, %cr3 = 00101000
       *pde = 00102027
       *pte = 00000027
       Oops: 0000
       EIP:    0010:0019c905
       EFLAGS: 00010002
       eax: 0000000a   ebx: 001cd0e8   ecx: 00000006   edx: 000003d5
       esi: 001cd0a8   edi: 00000000   ebp: 00000000   esp: 001a18c0
       ds: 0018   es: 0018   fs: 002b   gs: 002b   ss: 0018
       Process swapper (pid: 0, process nr: 0, stackpage=001a09c8)
       Stack: 0019c5c6 00000000 0019c5b2 00000000 0019c5a5 001cd0a8 00000002 00000000
              001cd0e8 001cd0a8 00000000 001cdb38 001cdb00 00000000 001ce284 0019d001
              001cd004 0000e800 fbfff000 0019d051 001cd0a8 00000000 001a29f4 00800000
       Call Trace: 0019c5c6 0019c5b2 0018c5a5 0019d001 0019d051 00111508 00111502
                   0011e800 0011154d 00110f63 0010e2b3 0010ef55 0010ddb7
       Code: 8b 57 04 52 68 d2 c5 19 00 e8 cd a0 f7 ff 83 c4 20 8b 4f 04
       Aiee, killing interrupt handler
       kfree of non-kmalloced memory: 001a29c0, next= 00000000, order=0
       task[0] (swapper) killed: unable to recover
       Kernel panic: Trying to free up swapper memory space
       In swapper task - not syncing

  Prenez  la  valeur  hexadecimale  du  registre  EIP  (le  compteur  de
  programme ; ici, en l'occurence, 19c905).  Cherchez  ensuite  dans  le
  fichier   /usr/src/linux/zSystem.map   (ou   le   fichier   System.map
  correspondant au noyau que vous etes  en  train  d'executer)  la  plus
  grande valeur inferieure a la valeur du registre EIP. Par exemple,

       0019a000 T _fix_pointers
       0019c700 t _intr_scsi
       0019d000 t _NCR53c7x0_intr

  indique   dans   quelle   fonction  l'erreur  fatale  s'est  produite.
  Recompilez ce fichier en ayant autorise les  options  de  debug  (vous
  pouvez  aussi  les  autoriser  a  un  niveau plus global en editant le
  fichier /usr/src/linux/Makefile et en  ajoutant  l'option  "-g"  a  la
  variable CFLAGS).

       #
       # standard CFLAGS
       #

  Par exemple :

       CFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -pipe

  devient

       CFLAGS = -g -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -pipe

  Regenerez le noyau, incrementalement ou en tapant

       make clean
       make

  Rendez  le  noyau  demarrable  (bootable) en creant une entree dans le
  fichier /etc/lilo.conf :

       image = /usr/src/linux/zImage
       label = experimental

  N'oubliez pas de relancer LILO en tant  que  root  (//ssbbiinn//lliilloo).  Vous
  pouvez aussi creer une disquette de demarrage :

       make zImage

  Redemarrez et notez le nouvel EIP pour l'erreur.

  Si  vous  avez  installe  script, lancez-le ; il va tracer toute votre
  session dans un fichier.

  Maintenant, lancez

       gdb /usr/src/linux/tools/zSystem

  et tapez

       info line *<votre EIP>

  Par exemple,

       info line *0x19c905

  GDB devrait repondre quelque chose du genre

       (gdb) info line *0x19c905
       Line 2855 of "53c7,8xx.c" starts at address 0x19c905 <intr_scsi+641&>
          and ends at 0x19c913 <intr_scsi+655>.

  Memorisez cette information. Entrez ensuite

       list <numero de ligne>

  Par exemple,

       (gdb) list 2855
       2850    /*      printk("scsi%d : target %d lun %d unexpected disconnect\n",
       2851                host->host_no, cmd->cmd->target, cmd->cmd->lun); */
       2852            printk("host : 0x%x\n", (unsigned) host);
       2853            printk("host->host_no : %d\n", host->host_no);
       2854            printk("cmd : 0x%x\n", (unsigned) cmd);
       2855            printk("cmd->cmd : 0x%x\n", (unsigned) cmd->cmd);
       2856            printk("cmd->cmd->target : %d\n", cmd->cmd->target);
       2857            if (cmd) {;
       2858                abnormal_finished(cmd, DID_ERROR << 16);
       2859            }
       2860            hostdata->dsp = hostdata->script + hostdata->E_schedule /
       2861                sizeof(long);
       2862            hostdata->dsp_changed = 1;
       2863        /* SCSI PARITY error */
       2864        }
       2865
       2866        if (sstat0_sist0 & SSTAT0_PAR) {
       2867            fatal = 1;
       2868            if (cmd && cmd->cmd) {
       2869                printk("scsi%d : target %d lun %d parity error.\n",

  quit vous permet de sortir de GDB.

  Sauvegardez egalement cette information, car elle permettra de fournir
  le  contexte  dans  lequel l'erreur s'est produite, pour le cas ou les
  developpeurs n'auraient pas exactement la meme arborescence.

  44..  LLeess mmoodduulleess

  Ce chapitre fournit des details specifiques sur le support des modules
  chargeables  et  sur la maniere dont ces modules sont utilises avec le
  SCSI.

  44..11..  IInnffoorrmmaattiioonnss ggeenneerraalleess

  Les   modules   chargeables   permettent   a   l'utilisateur   ou    a
  l'administrateur  du systeme d'etendre les fonctionnalites du noyau en
  y chargeant des fichiers objet. L'utilisation  la  plus  courante  des
  modules  est  l'ajout  de pilotes pour de nouveaux peripheriques ou la
  prise en compte de differents types de systemes de fichiers.

  L'utilisation des modules pour le SCSI presente  plusieurs  avantages.
  Un  de  ceux-ci est que le responsable d'un parc important de machines
  n'a a gerer qu'un seul noyau pour  tout  le  parc  et  n'a  plus  qu'a
  charger les modules necessaires machine par machine.

  Pour  ceux  qui ont l'intention de creer une nouvelle distribution, il
  est possible de lancer un script depuis la disquette de demarrage  qui
  va  demander a l'utilisateur quels modules sont a charger. Cela permet
  de gagner de la memoire (qui serait gaspillee si  le  noyau  contenait
  tous  les pilotes) et cela reduit le risque que l'auto-detection d'une
  carte vienne perturber le fonctionnement d'autres cartes.

  Les modules sont parfaits pour les portables, qui ont tendance a  etre
  moins  fournis  que  leurs  grands  freres de bureaux. Dans ce cas, un
  noyau aussi reduit que possible  avec  chargement  des  modules  a  la
  demande  est  l'ideal.  De  plus,  les  modules  sont  bien adaptes au
  mecanisme des cartes PCMCIA,  puisqu'ils  peuvent  etre  charges  puis
  decharges  au  gre  des insertions/retraits des cartes PCMCIA. (Note :
  actuellement, les pilotes qlogic et 152x supportent le PCMCIA).

  Un dernier avantage des modules est que les  developpeurs  de  pilotes
  ont  plus  de  facilite  a  mettre au point et tester leurs pilotes si
  ceux-ci sont sous forme  de  modules  (il  n'est  plus  necessaire  de
  redemarrer  la  machine  a  chaque  essai, a condition bien sur que le
  pilote ne soit pas bugge au point qu'il ait mis en rideau le PC).

  Mais,  il  y  a  toujours  un  mais,  les  modules  ont  aussi   leurs
  limitations.  Si votre partition racine (root) est sur un peripherique
  SCSI, vous ne serez pas capable d'utiliser les versions 'modularisees'
  des  pilotes SCSI necessaires a l'acces a votre disque. Cela est du au
  fait que le noyau doit etre capable  de  monter  la  partition  racine
  avant  de  pouvoir  charger  le  moindre module depuis le disque. Cela
  etant, des reflexions sont en cours pour modifier le  chargeur  et  le
  noyau  de  maniere  a  ce  que celui-ci soit capable de precharger des
  modules avant d'essayer de monter la partition  racine.  Il  est  fort
  probable qu'a l'avenir la limitation actuelle ne soit plus de mise.

  44..22..  LLee ssuuppppoorrtt ddeess mmoodduulleess ddaannss lleess nnooyyaauuxx 11..22..NN

  Les  modules  noyau  pour le SCSI sont partiellement supportes dans la
  serie 1.2.N du noyau.  Alors  qu'aucun  des  pilotes  de  haut  niveau
  (disque,  bande, etc.) ne peut etre modularise, la plupart des pilotes
  de bas niveau peuvent etre charges et  decharges  a  la  demande  (par
  exemple  les 1542 et 1522). Chaque fois qu'un pilote de bas niveau est
  charge, il commence  par  rechercher  les  cartes  qu'il  peut  gerer.
  Ensuite,  pour  chaque  carte  detectee, le bus SCSI est scrute et des
  structures de donnees internes sont renseignees, si  bien  qu'il  sera
  possible   d'utiliser  tous  les  peripheriques  attaches  aux  cartes
  reconnues.

  Lorsque vous en avez termine avec un pilote de  bas  niveau,  celui-ci
  peut etre decharge. Gardez a l'esprit que l'utilisation d'un pilote se
  fait au travers des montages,  des  fichiers  ouverts,  etc.  Si  vous
  essayez  de  decharger  un  module  en cours d'utilisation (utilitaire
  rrmmmmoodd), le noyau va refuser le retrait du pilote. Lorsqu'un pilote est
  decharge, toutes ses structures internes sont liberees, si bien que le
  systeme retourne dans l'etat ou il se trouvait  avant  l'insertion  du
  module. Vous pourrez recharger le pilote plus tard si vous le desirez.

  44..33..  LLee ssuuppppoorrtt ddeess mmoodduulleess ddaannss lleess nnooyyaauuxx 11..33..NN

  Le code SCSI a ete completement modularise dans les noyaux 1.3.N. Vous
  pouvez  donc  demarrer  avec  un noyau n'ayant aucun support SCSI, les
  modules  se  chargeant  par  la  suite,  jusqu'a  ce  que   tous   les
  peripheriques SCSI possibles soient accessibles.

  Si  vous  le  voulez,  vous pouvez integrer dans le noyau une certaine
  partie du code SCSI et charger  le  reste  plus  tard  sous  forme  de
  modules. Tout cela depend entierement de vous.

  Si vous demarrez avec un noyau qui n'a aucun support SCSI, vous devrez
  commencer par charger la base SCSI. La base se trouve dans  un  module
  nomme  "scsi_mod"  ; elle est indispensable a la gestion du SCSI. Elle
  ne contient par contre aucun pilote specifique de bas niveau et de  ce
  fait  ne scrutera ni carte, ni peripherique. Cette base n'activera pas
  non plus de pilotes de disques SCSI, de lecteurs de  bandes,  etc.  Si
  vous  avez  repondu  'Y'  a  la  question  CCOONNFFIIGG__SSCCSSII  au  moment  de
  construire le noyau, vous n'aurez pas besoin de charger ce module.

  Maintenant que "scsi_mod" est  present  dans  le  noyau,  vous  pouvez
  ajouter  les  modules  plus  ou  moins  dans n'importe quel ordre pour
  ouvrir l'acces a vos peripheriques. Des compteurs  d'utilisation  sont
  presents  pour  eviter  de  retirer un pilote occupe. Si vous utilisez
  rmmod, vous en serez averti par un message d'erreur.

  Les pilotes de haut niveau pour les disques, les  lecteurs  de  CDROM,
  les  lecteurs  de  bandes  et  le  support  SCSI generique se trouvent
  respectivement dans les modules  "sd_mod",  "sr_mod",  "st"  et  "sg".
  Lorsque  vous chargez un pilote de haut niveau, tous les peripheriques
  detectes (par les pilotes de bas niveau) et geres par ce  pilote  sont
  automatiquement actives.

  L'utilisation des modules avec des pilotes de bas niveau a ete decrite
  dans le chapitre ``Le support des modules  dans  les  noyaux  1.2.N''.
  Lorsqu'un pilote de bas niveau est charge, le bus est scrute et chaque
  peripherique reconnu est ensuite eventuellement pris en charge par  un
  pilote de plus haut niveau (voir paragraphe precedent).

  55..  CCaarrtteess dd''iinntteerrffaaccee

  Ce chapitre donne des informations specifiques sur les diverses cartes
  d'interface SCSI qui sont supportees d'une maniere ou d'une autre  par
  Linux.

  55..11..  MMaatteerriieell ssuuppppoorrttee eett nnoonn ssuuppppoorrttee

  Les pilotes de la distribution du noyau :

  Adaptec   152x,   Adaptec  154x  (les  cartes  DTC  329x  fonctionnent
  theoriquement, mais ne sont pas explicitement gerees),  Adaptec  174x,
  Adaptec  274x/284x (le support pour la 294x necessite une version plus
  recente du pilote), BusLogic MultiMaster  Host  Adapters,  les  cartes
  compatibles  avec  les  protocoles  EATA-DMA  et EATA-PIO (DPT PM2001,
  PM2011, PM2012A, PM2012B,  PM2021,  PM2022,  PM2024,  PM2122,  PM2124,
  PM2322,  PM2041,  PM2042,  PM2044,  PM2142,  PM2144,  PM2322,  PM3021,
  PM3122, PM3222, PM3224, PM3334, quelques cartes  de  NEC,  AT&T,  SNI,
  AST, Olivetti et Alphatronix), Future Domain 850, 885, 950 et d'autres
  cartes de cette serie (sauf les cartes 840, 841, 880 et  881  a  moins
  que  vous  n'appliquiez le patch adequat), Future Domain 16x0 avec les
  composants TMC-1800, TMC-18C30 ou  TMC-18C50,  NCR53c8xx,  PAS16,  les
  ports SCSI, Seagate ST0x, les cartes Trantor T128/T130/T228, Ultrastor
  14F, 24F et 34F et les Western Digital 7000.

  MCA :

  Les cartes MCA compatibles avec une  des  cartes  precedemment  citees
  fonctionnent.

  Les pilotes alpha :

  Plusieurs pilotes ALPHA sont disponibles a

       ftp://tsx-11.mit.edu/pub/linux/ALPHA/scsi

  Certains pilotes fonctionnent apres quelques modifications :

  NCR53c8x0/7x0:

       Un pilote NCR53c8xx a ete developpe mais il ne marche toujours pas avec les
       composants NCR53c700, NCR53c700-66, NCR53c710 et NCR53c720. Une liste des
       modifications necessaires pour le faire marcher sur chacun de ces composants
       est fournie ci-apres, accompagnee d'un resume de la difficulte de chaque patch.

       NCR53c720 (facile) - modifications dans la detection du composant, dans la
       phase d'initialisation, dans la traduction des adresses des registres '810
       vers l'organisation (mapping) des registres '7xx.

       NCR53c710 (facile) - modifications dans la detection du composant, dans la
       phase d'initialisation, dans la traduction des adresses des registres '810
       vers l'organisation (mapping) des registres '7xx, modification des
       gestionnaires d'interruption pour traiter l'interruption IID de l'instruction
       INTFLY pour l'emuler (Note aux relecteurs (a supprimer dans la version
       definitive) je ne suis pas sur d'avoir bien compris ce que voulait dire
       l'auteur : change interrupt handlers to treat IID interrupt from INTFLY
       instruction to emulate it),

       NCR53c700, NCR53c700-66 (tres complique) - modifications dans la detection
       des composants, dans la phase d'initialisation. Modification du code du NCR
       pour ne pas utiliser DSA, modification du code de la gestion des commutations
       de contextes.

  Les cartes SCSI qui ne marcheront pas :

  Tous  les  adapteurs  parallele->SCSI,  les  cartes Rancho SCSI et les
  cartes Grass Roots SCSI. Les cartes BusLogic  FlashPoint,  telles  que
  les BT-930/932/950, ne sont actuellement pas supportees.

  Les cartes SCSI qui ne marcheront JAMAIS :

  Les  cartes  non  compatibles Adaptec, les cartes non NCR53c8xx DTC (y
  compris les 3270 et les 3280).

  Les cartes CMD SCSI.

  L'obtention d'informations techniques  sur  ces  cartes  necessite  la
  signature   d'un  accord  de  confidentialite  (NDA  :  non-disclosure
  agreement) avec DTC/CMD.  En consequence, distribuer  un  pilote  pour
  Linux  est  impossible  car  se  conformer a cet accord signifie qu'il
  n'est pas possible de fournir les sources, ce qui est en violation  de
  la  GPL.  Inversement,  se conformer a la GPL signifie que les sources
  doivent etre rendus publics, ce qui est en conflit avec la NDA.

  Si vous voulez utiliser Linux  sur  du  materiel  non  supporte,  deux
  options s'offrent a vous :

  1. ecrire  vous-meme  le  pilote (Eric Youngdale et moi-meme repondons
     volontiers aux questions  techniques  sur  les  pilotes  SCSI  pour
     Linux),

  2. faire developper le pilote (les tarifs habituels des sous-traitants
     rendent  cette   solution   non   viable   pour   une   utilisation
     personnelle),

  55..11..11..  CCaarrtteess ccoonnttrroolleeuurr mmuullttiipplleess

  Avec  certaines  cartes  (voir ``Guide de l'acheteur : comparaison des
  fonctionnalites''), vous pouvez utiliser plusieurs controleurs du meme
  type  sur la meme machine. Dans ce cas, la plus petite adresse SCSI va
  etre referencee par le noyau comme scsi0,  la  suivante  comme  scsi1,
  etc.

  Dans tous les cas, il est possible d'utiliser des controleurs de types
  differents, sous reserve que leurs adresses n'entrent pas en  conflit.
  Les  cartes controleur sont scrutees dans l'ordre suivant (defini dans
  le tableau builtin_scsi_hosts[] du fichier drivers/scsi/hosts.c) :

       BusLogic,   Ultrastor   14/34F,   Ultrastor   14F,   Adaptec
       151x/152x,  Adaptec  154x,  Adaptec 174x, AIC7XXX, AM53C974,
       Future Domain 16x0, Always IN2000, Generic NCR5380,  QLOGIC,
       PAS16,  Seagate,  Trantor  T128/T130,  NCR53c8xx,  EATA-DMA,
       WD7000 et le pilote de mise au point.

  Dans la plupart des cas (c'est-a-dire si vous n'utilisez pas  en  meme
  temps  une  BusLogic  et  une Adaptec), le tableau precedent peut etre
  change pour definir un ordre qui vous convient  mieux  (de  maniere  a
  garder  le  meme  ordre pour les peripheriques de votre ancienne carte
  lorsque vous ajoutez une nouvelle carte dans votre systeme);  il  vous
  suffit de deplacer les entrees du tableau.

  55..22..  PPrroobblleemmeess hhaabbiittuueellss

  55..22..11..  TTiimmeeoouuttss SSCCSSII

  Verifiez que les interruptions sont bien autorisees et qu'il n'y a pas
  de conflits d'IRQ, de DMA ou d'adresses avec d'autres cartes.

  55..22..22..  EEcchheecc ddee ll''aauuttoo--ddeetteeccttiioonn ddeess ccaarrtteess  qquuii  ss''aappppuuiieenntt  ssuurr  llee
  BBIIOOSS

  Si votre controleur SCSI est un des suivants :

       Adaptec  152x,  Adaptec  151x,  Adaptec  AIC-6260,   Adaptec
       AIC-6360,  Future Domain 1680, Future Domain TMC-950, Future
       Domain TMC-8xx, Trantor T128, Trantor T128F, Trantor  T228F,
       Seagate ST01, Seagate ST02 ou un Western Digital 7000

  et qu'il n'est pas detecte au demarrage (vous avez eu par exemple :

       scsi : 0 hosts

  ou encore

       scsi%d : type

  au  demarrage),  vous  avez  certainement  un probleme avec la routine
  d'auto-detection qui ne reconnait pas votre carte controleur.

  L'auto-detection echoue pour les pilotes qui s'appuient sur le BIOS si
  celui-ci  est  desactive.  Verifiez  plutot deux fois qu'une que votre
  BIOS est active et qu'il n'entre pas en conflit avec celui d'un  autre
  peripherique.

  L'auto-detection  peut egalement echouer si la "signature" de la carte
  et son adresse de BIOS ne font pas  partie  de  la  liste  des  cartes
  connues.

  Si  le  BIOS  est installe, redemarrez sous DOS et utilisez DEBUG pour
  trouver la signature de votre carte.

  Par exemple, si votre carte se trouve a l'adresse 0xc8000,  redemarrez
  sous DOS puis tapez :

       debug
       d c800:0
       q

  Envoyez  ensuite  un  message  a  la  liste  de diffusion SCSI avec le
  message ASCII obtenu, sa longueur et son  deplacement  par  rapport  a
  l'adresse  de  base  (par exemple 0xc8000). Attention : le texte exact
  est necessaire et vous aurez certainement a fournir une version  ASCII
  et une autre binaire du message.

  Si aucun BIOS n'est installe et si vous utilisez une Adaptec 152x, une
  Trantor T128 ou un controleur Seagate, vous pouvez utiliser  la  ligne
  de  commande  (LILO)  ou bien surcharger des variables au moment de la
  compilation de maniere a ce  que  l'auto-detection  fonctionne  malgre
  tout.

  Reportez-vous a la section appropriee de votre carte SCSI, ainsi qu'au
  chapitre ``Dysfonctionnement generalise''.

  55..22..33..  PPaannnneess ddee ccoonnttrroolleeuurrss uuttiilliissaanntt ddeess EE//SS mmaappppeeeess eenn mmeemmooiirree

  (Les  cartes Trantor T128 et Seagate sont de telles cartes. Les cartes
  Adaptec, Generic NCR5380, PAS16 et Ultrastor n'en sont pas)

  Les pannes sont souvent dues a un 'cache' des ports  d'entrees/sorties
  incorrect.  L'espace  d'adressage  de la carte doit etre indique comme
  'non cachable' dans les parametres  de  la  XCMOS.  Si  ce  n'est  pas
  possible, il vous faudra completement interdire le 'cache'.

  Si  vous  avez  manuellement specifie l'adresse de la carte, souvenez-
  vous que Linux a besoin de la veritable adresse de la carte et non pas
  de  l'adresse  segmentee  (par  segments  de  16 octets) a laquelle la
  documentation pourrait faire reference.

  Ainsi, 0xc8000 est une adresse valide, tandis que 0xc800 ne marche pas
  et  risque de causer des problemes d'integrite de la memoire du noyau.

  55..22..44..  kkeerrnneell ppaanniicc :: ccaannnnoott mmoouunntt rroooott ddeevviiccee"" aauu ddeemmaarrrraaggee aavveecc uunnee
  ddiissqquueettttee ddee ddeemmaarrrraaggee ccoommppoorrttaanntt uunn ppiilloottee AALLPPHHAA

  Vous allez devoir editer l'image binaire  du  noyau  (avant  ou  apres
  l'avoir ecrite sur la disquette) pour modifier quelques champs de deux
  octets (en petit indien -- little  endian),  afin  de  garantir  qu'il
  fonctionnera sur votre systeme.

  1. le  peripherique  de  pagination  (swap) par defaut. Il se trouve a
     l'offset 502 et doit valoir 0x00 0x00

  2. la taille du disque memoire (RAM disk) se trouve  a  l'offset  504.
     Elle doit valoir la taille de la disquette de demarrage, en Ko. Par
     exemple, pour une disquette  5,25",  on  trouvera  1200.  Pour  une
     disquette 3,5", on aura 1440.

       C'est a dire que les octets doivent etre

       3,5" : 0xA0 0x05
       5,25" : 0xB0 0x04

  3. l'identificateur  du  peripherique  de  la  racine (root device) se
     trouve a la position 508 et doit valoir 0x00 0x00  (qui  represente
     le peripherique de demarrage).

  Recopiez  le  fichier  sur  la  disquette  par  dddd ou rraawwrriittee. Inserez
  ensuite la disquette dans un lecteur  puis  relancez.  Attendez  qu'il
  vous  soit  demande  d'inserer  la  disquette  racine (root disk) puis
  mettez celle fournie avec votre distribution.

  55..22..55..  IInnssttaallllaattiioonn dd''uunn ppiilloottee nnoonn iinncclluuss ddaannss llee nnooyyaauu ddee  llaa  ddiiss--
  ttrriibbuuttiioonn

  Vous devez  commencer  avec  la  version  du  noyau  utilisee  par  le
  developpeur  du  pilote. Il arrive qu'on trouve la version en question
  dans la documentation incluse avec le pilote.

  Des versions recentes du noyau sont presentes a l'adresse

       nic.funet.fi:/pub/OS/Linux/PEOPLE/Linus

  dans les fichiers linux-version.tar.gz

  On peut egalement les trouver sur divers sites et autres miroirs (dont
  tsx-11.mit.edu).

       cd /usr/src

  Supprimez  l'ancienne  arborescence  des sources de Linux ou faites-en
  une copie :

       mv linux linux-old

  Desarchivez le fichier

       gunzip < linux-0.99.12.tar.gz | tar xvfp -

  (pour la version 0.99.12 ici). Appliquez les patches.  Habituellement,
  les  patches  sont relatifs a un des repertoires de l'arborescence. En
  recherchant la chaine '---' dans le  fichier  de  patch,  vous  pouvez
  savoir a partir d'ou l'appliquer. Ainsi, des lignes

       --- ./kernel/blk_drv/scsi/Makefile

       --- ./config.in Wed Sep  1 16:19:33 1993

  vous  pouvez  deduire  que  les  fichiers  a  modifier sont relatifs a
  /usr/src/linux.

  Desarchivez les sources du pilote a l'endroit approprie :

       tar tfv patches.tar

  vous fournira  d'abord  une  liste  des  fichiers.  Deplacez  quelques
  fichiers  si  necessaire  (les  sources  des  pilotes  SCSI doivent se
  trouver dans le repertoire /usr/src/linux/kernel/drivers/scsi).

  Vous pouvez ensuite aller dans le repertoire racine du patch et  taper
  :

       patch -p0 < patch_file

  Vous  pouvez  egalement  demander  a  'patch'  d'eliminer  les chemins
  initiaux des noms des fichiers a  modifier.  Ainsi,  si  les  fichiers
  commencent par

       --- linux-new/kernel/blk_drv/scsi/Makefile

  et   que   vous   voulez   appliquer   le   patch  directement  depuis
  /usr/src/linux, vous pouvez faire les operations suivantes :

       cd /usr/src/linux
       patch -p1 < patches

  pour supprimer le "linux-new" des noms des fichiers.

  Une fois les patches appliques, verifiez qu'il n'y a pas eu de  rejets
  (un  fichier  de  rejet  a  la  meme nom que le fichier a modifier, un
  suffixe # y etant ajoute).

       find /usr/src/linux/ -name "*#" -print

  Si vous trouvez des fichiers de rejet, editez-les. Parfois, seules les
  chaines  d'identification RCS seront differentes. Cela ne posera alors
  pas  de  probleme.  Dans  d'autres  cas,  il  vous  faudra   appliquer
  d'importantes  parties du patch a la main. Il n'est pas dans l'optique
  de ce document de decrire les fichiers de differences ou l'utilisation
  de patch.

  Referez-vous  egalement  a  la  section  ``Configurer  et regenerer le
  noyau''.

  55..22..66..  IInnssttaallllaattiioonn dd''uunn ppiilloottee qquuii nn''aa ppaass ddee ppaattcchheess

  L'auteur d'un pilote ne fournit parfois pas de patches avec les .c  et
  .h  qui  forment  le  pilote.  Il se peut aussi que les patches soient
  faits pour une vieille version du noyau et qu'ils risquent de  ne  pas
  passer avec le noyau courant.

  1. copiez les .c et les .h dans /usr/src/linux/drivers/scsi

  2. ajoutez l'option de configuration

     Editez   /usr/src/linux/config.in   puis  ajoutez  une  ligne  (une
     variable de configuration booleenne  pour  votre  pilote)  dans  le
     chapitre

       *
       * SCSI low-level drivers
       *

  Par exemple

       bool 'Always IN2000 SCSI support' CONFIG_SCSI_IN2000 y

  3. ajoutez les entrees dans le Makefile

     Editez  /usr/src/linux/drivers/scsi/Makefile  et ajoutez une entree
     similaire a

       ifdef CONFIG_SCSI_IN2000
       SCSI_OBS := $(SCSI_OBJS) in2000.o
       SCSI_SRCS := $(SCSI_SRCS) in2000.c
       endif

  juste avant la ligne

       scsi.a: $(SCSI_OBJS)

  du makefile. Ici, le fichier .c est votre fichier source et le .o  est
  le  fichier  objet  genere a partir de votre fichier source (le .c est
  remplace par le .o).

  4. ajoutez les points d'entree

     Editez /usr/src/linux/drivers/scsi/hosts.c puis ajoutez un #include
     pour  le fichier d'entete, mis en conditionnel par la constante que
     vous venez  de  definir  dans  le  fichier  de  configuration.  Par
     exemple, apres

       #ifdef CONFIG_SCSI_GENERIC_NCR5380
       #include "g_NCR5380.h"
       #endif

  vous pouvez ajouter

       #ifdef CONFIG_SCSI_IN2000
       #include "in2000.h"
       #endif

  Vous  devez egalement ajouter l'entree pour le Scsi_Host_Template dans
  le tableau scsi_hosts[]. Jetez un oeil dans  le  fichier  .h  et  vous
  devriez y trouver un #define qui ressemble a :

       #define IN2000 {"Always IN2000", in2000_detect, \
           in2000_info, in2000_command,    \
           in2000_queuecommand,            \
           in2000_abort,                   \
           in2000_reset,                   \
           NULL,                           \
           in2000_biosparam,               \
           1, 7, IN2000_SG, 1, 0, 0}

  Ajoutez  la constante IN2000 dans le tableau scsi_hosts[], rendue con-
  ditionnelle par le symbole que vous venez de definir dans  le  fichier
  de configuration.

  Par exemple, apres

       #ifdef CONFIG_SCSI_GENERIC_NCR5380
               GENERIC_NCR5380,
       #endif

  vous pouvez ajouter

       #ifdef CONFIG_SCSI_IN2000
               IN2000,
       #endif

  Referez-vous au chapitre ``Configurer et regenerer le noyau''.

  55..22..77..  PPaannnnee dd''uunnee ccaarrttee PPCCII ddaannss uunn ssyysstteemmee CCoommppaaqq

  Un  certain  nombre de machines Compaq logent les extensions 32-bit du
  BIOS permettant de tester les controleurs PCI dans  une  zone  memoire
  inaccessible  au  noyau  Linux  (cela  est  du  a l'organisation de la
  memoire). Si Linux est incapable de detecter une carte PCI SCSI connue
  comme etant supportee et si le noyau affiche un message du genre

       pcibios_init: entry in high memory, unable to access

  allez chercher

       ftp://ftp.compaq.com/pub/softpaq/Software-Solutions/sp0921.zip

  C'est  un  programme auto-extractible qui vous permettra de reloger le
  code du BIOS32.

  55..22..88..  UUnn ssyysstteemmee SSCCSSII aavveecc ddeess ccoonnttrroolleeuurrss PPCCII ssee  bbllooqquuee  aapprreess  llee
  mmeessssaaggee %%dd HHoossttss

  Certains  systemes  PCI  ont  un  BIOS  defectueux  qui   masque   les
  interruptions  et  qui n'arrive pas a les demasquer avant de rendre la
  main a l'appelant. Le patch suivant corrige ce probleme :

  --- bios32.c.orig       Mon Nov 13 22:35:31 1995
  +++ bios32.c    Thu Jan 18 00:15:09 1996
  @@ -56,6 +56,7 @@
   #include <linux/pci.h>

   #include <asm/segment.h>
  +#include <asm/system.h>

   #define PCIBIOS_PCI_FUNCTION_ID        0xb1XX
   #define PCIBIOS_PCI_BIOS_PRESENT       0xb101
  @@ -125,7 +126,9 @@
          unsigned long address;          /* %ebx */
          unsigned long length;           /* %ecx */
          unsigned long entry;            /* %edx */
  +       unsigned long flags;

  +       save_flags(flags);
          __asm__("lcall (%%edi)"
                  : "=a" (return_code),
                    "=b" (address),
  @@ -134,6 +137,7 @@
                  : "0" (service),
                    "1" (0),
                    "D" (&bios32_indirect));
  +       restore_flags(flags);

          switch (return_code) {
                  case 0:
  @@ -161,11 +165,13 @@
          unsigned char present_status;
          unsigned char major_revision;
          unsigned char minor_revision;
  +       unsigned long flags;
          int pack;

          if ((pcibios_entry = bios32_service(PCI_SERVICE))) {
                  pci_indirect.address = pcibios_entry;

  +               save_flags(flags);
                  __asm__("lcall (%%edi)\n\t"
                          "jc 1f\n\t"
                          "xor %%ah, %%ah\n"
  @@ -176,6 +182,7 @@
                          : "1" (PCIBIOS_PCI_BIOS_PRESENT),
                            "D" (&pci_indirect)
                          : "bx", "cx");
  +               restore_flags(flags);

                  present_status = (pack >> 16) & 0xff;
                  major_revision = (pack >> 8) & 0xff;
  @@ -210,7 +217,9 @@
   {
          unsigned long bx;
          unsigned long ret;
  +       unsigned long flags;

  +       save_flags(flags);
          __asm__ ("lcall (%%edi)\n\t"
                  "jc 1f\n\t"
                  "xor %%ah, %%ah\n"
  @@ -221,6 +230,7 @@
                    "c" (class_code),
                    "S" ((int) index),
                    "D" (&pci_indirect));
  +       restore_flags(flags);
          *bus = (bx >> 8) & 0xff;
          *device_fn = bx & 0xff;
          return (int) (ret & 0xff00) >> 8;
  @@ -232,7 +242,9 @@
   {
          unsigned short bx;
          unsigned short ret;
  +       unsigned long flags;

  +       save_flags(flags);
          __asm__("lcall (%%edi)\n\t"
                  "jc 1f\n\t"
                  "xor %%ah, %%ah\n"
  @@ -244,6 +256,7 @@
                    "d" (vendor),
                    "S" ((int) index),
                    "D" (&pci_indirect));
  +       restore_flags(flags);
          *bus = (bx >> 8) & 0xff;
          *device_fn = bx & 0xff;
          return (int) (ret & 0xff00) >> 8;
  @@ -254,7 +267,9 @@
   {
          unsigned long ret;
          unsigned long bx = (bus << 8) | device_fn;
  +       unsigned long flags;

  +       save_flags (flags);
          __asm__("lcall (%%esi)\n\t"
                  "jc 1f\n\t"
                  "xor %%ah, %%ah\n"
  @@ -273,7 +288,9 @@
   {
          unsigned long ret;
          unsigned long bx = (bus << 8) | device_fn;
  +       unsigned long flags;

  +       save_flags(flags);
          __asm__("lcall (%%esi)\n\t"
                  "jc 1f\n\t"
                  "xor %%ah, %%ah\n"
  @@ -292,7 +309,9 @@
   {
          unsigned long ret;
          unsigned long bx = (bus << 8) | device_fn;
  +       unsigned long flags;

  +       save_flags(flags);
          __asm__("lcall (%%esi)\n\t"
                  "jc 1f\n\t"
                  "xor %%ah, %%ah\n"
  @@ -303,6 +322,7 @@
                    "b" (bx),
                    "D" ((long) where),
                    "S" (&pci_indirect));
  +       restore_flags(flags);
          return (int) (ret & 0xff00) >> 8;
   }

  @@ -311,7 +331,9 @@
   {
          unsigned long ret;
          unsigned long bx = (bus << 8) | device_fn;
  +       unsigned long flags;

  +       save_flags(flags);
          __asm__("lcall (%%esi)\n\t"
                  "jc 1f\n\t"
                  "xor %%ah, %%ah\n"
  @@ -322,6 +344,7 @@
                    "b" (bx),
                    "D" ((long) where),
                    "S" (&pci_indirect));
  +       restore_flags(flags);
          return (int) (ret & 0xff00) >> 8;
   }

  @@ -330,7 +353,9 @@
   {
          unsigned long ret;
          unsigned long bx = (bus << 8) | device_fn;
  +       unsigned long flags;

  +       save_flags(flags);
          __asm__("lcall (%%esi)\n\t"
                  "jc 1f\n\t"
                  "xor %%ah, %%ah\n"
  @@ -341,6 +366,7 @@
                    "b" (bx),
                    "D" ((long) where),
                    "S" (&pci_indirect));
  +       restore_flags(flags);
          return (int) (ret & 0xff00) >> 8;
   }

  @@ -349,7 +375,9 @@
   {
          unsigned long ret;
          unsigned long bx = (bus << 8) | device_fn;
  +       unsigned long flags;

  +       save_flags(flags);
          __asm__("lcall (%%esi)\n\t"
                  "jc 1f\n\t"
                  "xor %%ah, %%ah\n"
  @@ -360,6 +388,7 @@
                    "b" (bx),
                    "D" ((long) where),
                    "S" (&pci_indirect));
  +       restore_flags(flags);
          return (int) (ret & 0xff00) >> 8;
   }

  55..33..  AAddaapptteecc 115522xx,, 115511xx,, 11550055,, 228822xx,, SSoouunndd BBllaasstteerr 1166 SSCCSSII,, SSCCSSII PPrroo,,
  GGiiggaabbyyttee eett aauuttrreess pprroodduuiittss bbaasseess ssuurr ll''AAIICC 66226600//66336600 ((ssttaannddaarrdd))

  Configurations supportees :

       adresses du BIOS : 0xd8000, 0xdc000, 0xd0000, 0xd4000, 0xc8000, 0xcc000,
                          0xe0000, 0xe4000.
       Ports            : 0x140, 0x340
       IRQs             : 9, 10, 11, 12
       DMA              : non utilise
       E/S              : port mappe

  Auto-detection :

       Cela marche avec de nombreuses cartes qui ont un BIOS installe. Toutes les autres cartes,
       y compris les Adaptec 1510 et les Sound Blaster 16 SCSI, necessitent d'utiliser une ligne
       de commande du noyau ou une surcharge au moment de la compilation.

  Surcharge de l'auto-detection :

  Au moment de la compilation :

       Definissez PORTBASE, IRQ, SCSI_ID, RECONNECT, PARITE de maniere adequate (voir Definitions)

  Ligne de commande du noyau :

       aha152x=<PORTBASE>[,<IRQ>[,<SCSI-ID>[,<RECONNECT>[,<PARITE>]]]]

  Le  champ  SCSI-ID  est  l'identificateur SCSI de la carte controleur.
  Aucun autre peripherique connecte sur ce bus SCSI  ne  doit  avoir  ce
  numero. Habituellement, il est fixe a 7.

  Pour forcer l'auto-detection a l'adresse 0x340, l'IRQ 11, SCSI-ID 7 et
  autoriser la connexion/deconnexion, vous devez utiliser  la  ligne  de
  commande suivante :

       aha152x=0x340,11,7,1

  Problemes prehistoriques, resolus en mettant a jour le noyau :

  1. le  pilote  n'arrive  pas  a  gerer  les  cartes VLB. Il y avait un
     probleme de temporisation avec les noyaux anterieurs a  la  version
     1.0.5.

  Les constantes :

       AUTOCONF       : utiliser la configuration reportee par le controleur (uniquement pour les 152x)
       IRQ            : surcharge du niveau d'interruption (9,10,11 ou 12) (11 par defaut)
       SCSI_ID        : surcharge du SCSI ID de l'AIC-6260 (0-7) (7 par defaut)
       RECONNECT      : surcharge l'indicateur de deconnexion/reselection (une valeur non nulle
                        signifie 'autoriser', une valeur nulle signifie 'interdire')
       DONT_SNARF     : n'enregistre pas les ports (pl12 et inferieurs)
       SKIP_BIOSTEST  : ne teste pas la signature du BIOS (pour la AHA-1510 ou en cas de BIOS debraye)
       PORTBASE       : force le port de base. Il ne faut pas essayer l'auto-detection

  55..44..  AAddaapptteecc 115544xx,, AAMMII FFaassttDDiisskk VVLLBB,, DDTTCC 332299xx ((ssttaannddaarrdd))

  Configurations supportees :

       Ports          : 0x330 et 0x334
       IRQs           : 9, 10, 11, 12, 14, 15
       Canaux DMA     : 5, 6, 7
       E/S            : port mappe, controle de bus (bus master)

  Auto-detection :

       detecte uniquement les cartes en 0x330 et 0x334.

  Surcharge de l'auto-detection :

       aha1542=<PORTBASE>[,<BUSON>,<BUSOFF>[,<VITESSEDMA>]]

  Notes :

  1. BusLogic  produit  une  serie  de cartes logiciellement compatibles
     avec les Adaptec 1542. Ces cartes existent en  ISA,  VLB,  EISA  et
     plusieurs varietes en PCI.

  2. Des  cartes  sans  suffixe  et  les  premieres cartes a suffixe 'A'
     n'acceptent pas le 'decoupage' /  'reassemblage'  (scatter/gather),
     et,  de ce fait, ne fonctionnent pas. Moyennant une redefinition du
     mot 'fonctionnement', on peut les  faire  marcher  a  condition  de
     mettre  AAHHAA11554422__SSCCAATTTTEERR a 0 dans le fichier drivers/scsi/aha1542.h.

  Problemes prehistoriques, resolus en mettant a jour le noyau :

  1. Les versions du noyau anterieures a la version  0.99.10  ne  gerent
     pas la version 'C' des controleurs.

  2. Les  versions  du noyau anterieures a la version 0.99.14k ne gerent
     pas les options suivantes pour les cartes version 'C' :

  +o  support du BIOS pour le mapping etendu des disques > 1G

  +o  support du BIOS pour plus de 2 disques

  +o  support du BIOS pour la scrutation automatique du bus SCSI

  3. Les versions du noyau anterieures a la version 0.99.15e  ne  gerent
     pas  les  versions  'C' avec support du BIOS pour plus de 2 disques
     active et le support du BIOS pour le mapping etendu des  disques  >
     1G desactive

  4. Les  versions  du  noyau  anterieures  a  la  version  0.99.14u  ne
     supportent les versions 'CF' de ce type de cartes

  5. Il existait un sequencement  critique  (race  condition)  dans  les
     versions  du noyau anterieures a la version 1.0.5 lorsque plusieurs
     peripheriques etaient accedes simultanement.

  Problemes frequents :

  1. erreurs 'non attendues' avec des cartes 154xC ou 154xCF.

     Certaines cartes 154xC parmi les premiers exemplaires generaient un
     signal  a  haute  frequence sur un des signaux SCSI, provoquant des
     reflexions dans des cables de mauvaise impedance.

     Les nouvelles cartes  ne  sont  pas  vraiment  meilleures  et  sont
     pointilleuses  sur  la qualite des cables et sur la sensibilite des
     terminaisons.

     Referez-vous aux chapitres Problemes frequents  ``#2''  et  ``#3'',
     ``Problemes habituels'', ou ``Dysfonctionnement generalise''.

  2. erreurs  'non  attendues' avec des cartes 154xC ou 154x lorsqu'a la
     fois des peripheriques internes et externes sont connectes.

     C'est probablement un probleme  de  terminaison.  Afin  de  pouvoir
     utiliser   l'option   logicielle   permettant   de   desactiver  la
     terminaison interne de la carte, vous devez positionner le cavalier
     1 sur OFF.

     Referez-vous  aux  chapitres  Problemes frequents ``#1'' et ``#3'',
     ``Problemes habituels'', ou ``Dysfonctionnement generalise''.

  3. le sous-systeme SCSI se bloque completement.

     Dans  certains  cas,  le  blocage  semble  se  produire   lors   de
     l'utilisation   simultanee  de  plusieurs  peripheriques.  Si  cela
     arrive, contactez le fabricant de ces peripheriques et voyez si une
     eventuelle  mise  a  jour  du  firmware  resoudrait le probleme. En
     dernier recours, vous pouvez modifier AAHHAA11554422__MMAAIILLBBOOXX a 1  dans  le
     fichier aha1542.h. Cela va limiter le nombre de commandes presentes
     sur le bus SCSI a 1 a la  fois.  Il  se  peut  que  ca  resolve  le
     probleme.   Par   contre,   une  fois  encore,  si  vous  avez  des
     peripheriques lents (lecteur  de  bandes,  lecteur  de  CDROM),  ce
     contournement risque de ne pas etre une solution utilisable.

     Reportez-vous  aux  chapitres Problemes frequents ``#1'' et ``#2'',
     ``Problemes habituels'' ou ``Le SCSI se bloque''.

  4. Le message  "Interrupt  received,  but  no  mail"  est  affiche  au
     demarrage et vos peripheriques SCSI ne sont pas detectes.

     Desactivez  les  options  du BIOS pour la gestion du mapping etendu
     pour les disques > 1G, pour la gestion de plus de  2  peripheriques
     et  pour la scrutation automatique du bus (autoscanning). Ou alors,
     passez a une version de Linux 0.99.14k (ou plus recente).

  5. Si des erreurs de temporisation infinie apparaissent sur des cartes
     version 'C', entrez dans le programme de configuration Adaptec puis
     autorisez la negociation synchrone.

  6. Linux 1.2.x affiche le message

     "Unable to determine Adaptec DMA priority.  Disabling board."

     Cela est du a un conflit  sur  certains  systemes  avec  un  pilote
     BusLogic  obsolete.  Vous pouvez soit regenerer votre noyau sans ce
     pilote, soit lui fournir une option sur la ligne  de  commande  lui
     indiquant   de  scruter  une  adresse  autre  que  celle  de  votre
     controleur. Par exemple, si votre carte Adaptec repond a  l'adresse
     0x334 et qu'il n'y a aucune autre carte en 0x330, utilisez la ligne
     de commande suivante :

       buslogic=0x330

  7. Le  systeme  se  bloque  lors  d'acces   simultanes   a   plusieurs
     peripheriques  sur  des  cartes  1542C ou 1540C avec la deconnexion
     activee.

     Quelques versions du firmware des Adaptec avaient des erreurs.  Une
     mise  a  jour  avec la version du BIOS v2.11 est censee corriger ce
     probleme.

  55..55..  AAddaapptteecc 117744xx

  Configurations supportees :

       Emplacements   : 1-8
       Ports          : non significatif (carte EISA)
       IRQs           : 9, 10, 11, 12, 14, 15
       Canaux DMA     : non significatif (carte EISA)
       E/S            : port mappe, controle de bus

  Auto-detection :

       fonctionne avec toutes les configurations gerees

  Surcharge de l'auto-detection :

       aucune

  Remarque :

  1. Cette carte n'est plus fabriquee par Adaptec.

  Problemes courants :

  1. Si le pilote de l'Adaptec 1740 affiche le message  "aha1740:  Board
     detected, but EBCNTRL = %x, so disabled it."

     votre  carte a ete desactivee parce qu'elle ne tournait pas en mode
     etendu (enhanced mode). Les cartes qui fonctionnent  en  mode  1542
     standard ne sont pas gerees.

  55..66..  AAddaapptteecc 227744xx,, 228844xx ((ssttaannddaarrdd)) 229944xx ((AALLPPHHAA))

  Une  nouvelle  version  qui gere egalement les cartes Adaptec 294x est
  disponible a l'adresse

       ftp://ftp.ims.com/pub/Linux/aic7xxx

  Configurations supportees :

                           274x           284x            294x
       Emplacements EISA : 1-12           N/A             N/A
       Ports             : N/A            TOUS            TOUS
       IRQs              : ALL            TOUTES          TOUTES
       Canaux DMA        : N/A            TOUS            N/A
       E/S               : port mappe, controle de bus

  Surcharge de l'auto-detection :

  Ligne de commande du noyau :

       aha274x=extended
       (pour forcer le mapping etendu)

  Remarques :

  1. Le BIOS doit etre active

  2. Le canal B des cartes 2742AT est ignore

  3. CONFIG_PCI (lors de la generation du noyau) doit  etre  positionnee
     si vous utilisez une carte PCI.

  55..77..  AAllwwaayyss IINN22000000 ((ssttaannddaarrdd))

  Configurations supportees :

       Ports          : 0x100, 0x110, 0x200, 0x220
       IRQs           : 10, 11, 14, 15
       DMA            : non utilise
       E/S            : port mappe

  Auto-detection :

       le BIOS n'est pas necessaire

  Surcharge de l'auto-detection :

       aucune

  Problemes courants :

  1. un  probleme connu concerne les systemes avec des disques IDE et la
     pagination (swapping).

  55..88..  CCaarrtteess ccoonnttrroolleeuurrss mmuullttii--mmaaiittrreess BBuussLLooggiicc

  (cette  section  est   Copyright   1995   par   Leonard   N.   Zubkoff
  <lnz@dandelion.com>)   (le   fichier   README.BusLogic  constitue  une
  documentation plus complete du pilote BusLogic ; lisez-le)

                    Pilote SCSI BusLogic Multi-Maitres pour Linux

                         Version 1.2.2 pour Linux 1.2.13
                         Version 1.3.2 pour Linux 1.3.88

                   ftp://ftp.dandelion.com/BusLogic-1.2.2.tar.gz
                   ftp://ftp.dandelion.com/BusLogic-1.3.2.tar.gz

                                   16 Avril 1996

                                 Leonard N. Zubkoff
                                 Dandelion Digital
                                 lnz@dandelion.com

  BusLogic  Inc.  concoit  et  fabrique  un  ensemble de  controleurs SCSI de hautes
  performances,  qui partagent une interface de  programmation commune pour diverses
  architectures  de bus, par le biais de leur technologie ASIC Multi-Maitres (Multi-
  Master ASIC). Ce pilote gere tous les controleurs BusLogic Multi-Maitres actuels,
  et devrait gerer toutes les cartes Multi-Maitres a venir avec peu (voire aucune) de
  modifications.  Les controleurs  bases sur la  nouvelle architecture FlashPoint ne
  sont pas geres par ce pilote ; reportez-vous au fichier  README.FlashPoint pour la
  marche a suivre pour passer d'une carte FlashPoint LT non geree a une carte BT-948
  supportee.

  Mes buts principaux lorsque j'ai ecrit ce pilote BusLogic completement nouveau pour
  Linux  etaient d'exploiter les performances maximales que les controleurs SCSI Bus-
  Logic  et les peripheriques SCSI  modernes sont capables d'atteindre  et de fournir
  un pilote extremement fiable sur lequel des applications critiques puissent s'appu-
  yer. Tout  peut etre configure sur la ligne de  commande du noyau, des performances
  jusqu'aux detections d'erreurs. Cela permet a chaque installation d'ajuster les pa-
  rametres de performance et de gestion des erreurs aux besoins locaux.

  BusLogic  est une  compagnie avec laquelle il a ete tres agreable de travailler, et
  je  recommande chaleureusement leurs produits a la communaute Linuxienne. En Novem-
  bre 1995, j'ai eu l'opportunite de devenir site beta testeur pour leur dernier pro-
  duit Multi-Maitres - le controleur SCSI BT-948 PCI Ultra -, puis de nouveau pour le
  controleur BT-958 PCI Wide Ultra en Janvier 1996. Cela a ete un benefice reciproque,
  car  nous avons apporte a BusLogic un environnement de test que leurs propres equi-
  pes ne pouvaient pas avoir  et la communaute Linuxienne a dispose de controleurs de
  hautes  performances  qui avaient  correctement ete testes sur Linux avant meme que
  les  produits ne soient  commercialises. Cette  relation avec BusLogic m'a en outre
  donne  l'occasion d'interagir  directement avec leur  equipe technique  et ainsi de
  leur  donner connaissance des besoins et des potentialites du monde Linux. Leur in-
  teret et leur support sont tres apprecies.

  Contrairement  a d'autres  vendeurs, si vous contactez le support technique de Bus-
  Logic et que vous annoncez que vous tournez sous Linux, ils ne vont pas vous retor-
  quer que votre utilisation de leur produit n'est pas supportee. Leurs dernieres pu-
  blications commerciales mentionnent meme "Les controleurs SCSI BusLogic sont compa-
  tibles avec tous les systemes d'exploitation importants, incluant : ... Linux ...".

  BusLogic, Inc. se trouve a 4151  Burton Drive, Santa Clara, California, 95054, USA,
  et vous pouvez les contacter par  telephone au 408/492-9090 ou  par fax au 408/492-
  1542. BusLogic dispose d'un  site Web (http://www.buslogic.com), d'un site FTP ano-
  nyme (ftp.buslogic.com)  et d'une BBS au 408/492-1984. Le support technique de Bus-
  Logic  peut etre joint par  courrier electronique a l'adresse techsup@buslogic.com,
  par  telephone au 408/654-0760 ou par fax au  408/492-1542. Des  renseignements sur
  leurs representants en Europe et au Japon sont disponibles sur leur site Web.

                          LES CONTROLEURS GERES

  La  liste  suivante comporte les  controleurs  SCSI BusLogic  geres a la date de ce
  document.  Il est  recommande qu'une  personne se  portant  acquereur  d'une  carte
  BusLogic  non listee  dans la table  suivante contacte l'auteur de ce document pour
  verifier si elle est supportee ou si elle le sera un jour.

  Les series "W" :

  BT-948      PCI     Ultra Fast Terminaison unique SCSI-2
  BT-958      PCI     Ultra Wide Terminaison unique SCSI-2
  BT-958D     PCI     Ultra Wide Differentielle SCSI-2

  Les series "C" :

  BT-946C     PCI     Fast Terminaison unique SCSI-2
  BT-956C     PCI     Fast Wide Terminaison unique SCSI-2
  BT-956CD    PCI     Fast Wide Differentielle SCSI-2
  BT-445C     VLB     Fast Terminaison unique SCSI-2
  BT-747C     EISA    Fast Terminaison unique SCSI-2
  BT-757C     EISA    Fast Wide Terminaison unique SCSI-2
  BT-757CD    EISA    Fast Wide Differentielle SCSI-2
  BT-545C     ISA     Fast Terminaison unique SCSI-2
  BT-540CF    ISA     Fast Terminaison unique SCSI-2

  Les series "S":

  BT-445S     VLB     Fast Terminaison unique SCSI-2
  BT-747S     EISA    Fast Terminaison unique SCSI-2
  BT-747D     EISA    Fast Differentielle SCSI-2
  BT-757S     EISA    Fast Wide Terminaison unique SCSI-2
  BT-757D     EISA    Fast Wide Differentielle SCSI-2
  BT-545S     ISA     Fast Terminaison unique SCSI-2
  BT-542D     ISA     Fast Differentielle SCSI-2
  BT-742A     EISA    Terminaison unique SCSI-2 (742A version H)
  BT-542B     ISA     Terminaison unique SCSI-2 (542B version H)

  Les series "A" :

  BT-742A     EISA    Terminaison unique SCSI-2 (742A versions A - G)
  BT-542B     ISA     Terminaison unique SCSI-2 (542B versions A - G)

  Les controleurs AMI FastDisk, veritables clones BusLogic, sont geres par ce pilote.

                  REMARQUES SUR L'INSTALLATION DES CARTES BT-948/958/958D

  Les  controleurs SCSI BT-948/958/958D PCI Ultra ont des fonctionnalites qui peuvent
  necessiter une certaine attention lors de l'installation de Linux.

  o Affectation des ports d'entree/sortie PCI

    Lorsqu'elles  sont  configurees avec les valeurs par defaut usine, les cartes BT-
    948/958/958D vont  uniquement reconnaitre les affectations des ports d'E/S faites
    par le BIOS  PCI de la  carte mere. Les  BT-948/958/958D ne  repondront  plus aux
    ports d'E/S compatibles ISA auxquels les controleurs SCSI BusLogic precedents re-
    pondaient. Le pilote gere les affectations des ports d'E/S PCI. C'est la configu-
    ration a privilegier. Toutefois, si le pilote BusLogic obsolete doit etre utilise
    pour une raison quelconque, comme par exemple une distribution Linux qui n'utili-
    serait pas encore le nouveau pilote dans son noyau de demarrage, BusLogic a fourni
    une option de configuration AutoSCSI qui autorise les ports d'E/S compatibles ISA.

    Pour  activer  cette  option de  compatibilite  ascendante, appelez  l'utilitaire
    AutoSCSI  par  CTRL-B au demarrage du systeme  et  choisissez "Adapter Configura-
    tion",  "View/Modify Configuration", puis  changez les parametres "ISA Compatible
    Port"  de "Disable"  a "Primary"  ou "Alternate". Une  fois que  ce  pilote a ete
    installe, l'option "ISA Compatible Port" doit etre remise a "Disable" pour eviter
    tout conflit de futurs ports  d'E/S. Les anciennes  cartes BT-946C/956C/956CD ont
    egalement cette option de configuration, mais le defaut usine est "Primary".

  o L'ordre de scrutation des emplacements PCI

    Dans les  systemes  comportant  plusieurs  controleurs PCI BusLogic, l'ordre dans
    lequel les  emplacements PCI sont scrutes peut apparaitre inverse pour les cartes
    BT-948/958/958D par rapport aux cartes  BT-946C/956C/956CD. Pour demarrer  depuis
    un disque SCSI, il est  necessaire que le  BIOS du controleur et  le noyau soient
    d'accord  sur quel  disque est le disque de  demarrage (boot disk). Cela implique
    qu'ils reconnaissent les  controleurs PCI dans  le meme ordre. Le  BIOS PCI de la
    carte mere fournit un moyen standard d'enumerer les controleurs PCI. Ce moyen est
    utilise par le noyau Linux. Certaines  implementations du BIOS PCI  enumerent les
    emplacements PCI par ordre croissant des numeros de bus et des numeros de contro-
    leurs, alors que d'autres le font dans le sens contraire.

    Malheureusement,  Microsoft  a  decide  que Windows 95  enumererait  toujours les
    emplacements  PCI  dans l'ordre  croissant des  numeros  de bus et des numeros de
    controleurs independamment de l'enumeration du BIOS PCI  et ils ont exige que leur
    facon de faire soit  supportee par le  BIOS des  controleurs pour  etre  certifie
    Windows 95. En  consequence, les defauts usine des cartes BT-948/958/ 958D enume-
    rent les controleurs par numeros croissants. Pour  desactiver ce  fonctionnement,
    appelez l'utilitaire AutoSCSI par CTRL-B au demarrage du systeme, puis choisissez
    "Adapter Configuration",  "View/Modify Configuration",  appuyez sur  CTRL-F10 et
    changez l'option "Use Bus And Device # For PCI Scanning Seq." a 0FF.

    Ce pilote va interroger la valeur de l'option de  Sequence De Scrutation PCI,  de
    maniere  a reconnaitre les controleurs dans le meme ordre qu'ils ont ete enumeres
    par le BIOS du controleur.

                          LA LISTE DE DIFFUSION DES ANNONCES BUSLOGIC

  La  liste de diffusion des  annonces BusLogic constitue un forum d'information pour
  les  utilisateurs Linux des  nouveautes (nouvelles  versions du  pilote  et  autres
  annonces  concernant le  support pour  Linux des  controleurs  BusLogic). Pour vous
  inscrire a la liste, envoyez un message a l'adresse suivante :
  "BusLogic-announce-request@dandelion.com", avec la ligne  "subscribe" dans le corps
  du message.

  55..99..  LLeess ccoonnttrroolleeuurrss BBuussLLooggiicc FFllaasshhPPooiinntt

  (cette  section  est   Copyright   1995   par   Leonard   N.   Zubkoff
  <lnz@dandelion.com>)

  Il  n'y a pas de pilote Linux pour les cartes FlashPoint LT/DL/LW (BT-930/932/950),
  et quand il va y en avoir ou s'il y en aura n'est pas tres clair. Les cartes Flash-
  Point  ont une  architecture differente des  cartes Multi-Maitres  et  n'ont pas de
  processeurs  sur la carte ; elles disposent d'un simple sequenceur SCSI. Elles sont
  concues pour les ordinateurs  de bureau  et ne sont pas  specialement concues  pour
  des systemes d'exploitation multitaches performants comme Linux.

  Les  cartes Multi-Maitres BT-948/958 ont  un processeur  embarque et l'interface de
  programmation  par "boite a lettres"  permet de faire du parallelisme et du pipeli-
  ning  entre le controleur et le systeme d'exploitation, alors que les cartes Flash-
  Point necessitent de frequentes interventions du processeur principal. Etant  donne
  que les  delais de  prise en  compte des  interruptions  augmentent sur  un systeme
  charge, les BT-948/958 continuent d'avoir d'excellentes  performances au  contraire
  des FlashPoint, qui  s'ecroulent  rapidement. De plus, le  firmware des  BT-948/958
  possede la  connaissance  de bas niveau pour une  interaction  efficace avec le bus
  SCSI. Avec un  sequenceur  SCSI comme dans les  FlashPoint, le  noyau Linux doit en
  revanche contenir  lui-meme  toutes ces  informations de  bas niveau,  et il est en
  general long d'arriver a faire marcher tout cela proprement. Etant  donne le faible
  ecart de prix entre  ces deux  modeles, les  cartes BT-948 et  BT-958 sont de toute
  evidence le meilleur choix pour Linux.

  <debut de citation>

                                  ANNONCE
                  Mise a jour des BusLogic FlashPoint vers les BT-948
                               1er Fevrier 1996

  Depuis  leur  apparition en Octobre 1995, les  BusLogic  FlashPoint  LT  ont  pose
  des  problemes  sous  Linux, si  bien  qu'aucun  pilote  n'est  encore  disponible
  pour  cette  nouvelle  carte  Ultra SCSI. Bien que le produit  soit officiellement
  declare  comme  une carte pour machine de bureau  et ne  soit pas particulierement
  efficace  dans  des environnements  multitaches  performants  tels  que  Linux, la
  FlashPoint LT  a ete annoncee  comme etant le dernier cri, le  nec plus ultra, par
  les vendeurs d'ordinateurs  et elle s'est retrouvee sur certains de leurs systemes
  haut de gamme, a l'exclusion  de ceux equipes  des anciennes cartes Multi-Maitres.
  Cela  a  cause du tort a de  nombreuses personnes  qui  ont  par megarde achete un
  systeme en s'attendant a ce que tous les produits BusLogic soient geres par Linux,
  et qui  ont finalement  decouvert que la FlashPoint n'etait pas supportee et ne le
  serait pas avant longtemps, si elle devait l'etre un jour.

  Apres  que  ce  probleme a  ete  identifie, BusLogic  est entree  en contact  avec
  ses  principaux clients  OEM pour  annoncer que les cartes  Multi-Maitres BT-946C/
  956C seraient  toujours disponibles,  et  que les  utilisateurs  Linux qui avaient
  par  megarde  commande des systemes a base  de FlashPoint pourraient mettre a jour
  leur  machine avec une BT-946C. Si cela a aide de nouveaux acheteurs, cela n'etait
  qu'une solution partielle au probleme plus general du support de la FlashPoint pour
  les  utilisateurs  de  Linux. Cette  annonce n'apportait  aucun soutien a ceux qui
  avaient  initialement achete une FlashPoint pour  un systeme d'exploitation qui la
  gerait  et qui decidaient plus tard de passer a Linux ou  ceux qui avaient achete
  une  FlashPoint,  croyant  qu'elle etait  geree  et  qui etaient  incapables de la
  retourner.

  Mi-Decembre,  j'ai demande a  rencontrer le  responsable de la gestion de BusLogic
  pour  discuter  du support pour le  logiciel libre (free software)  et pour  Linux
  de la FlashPoint. Des  bruits plus ou moins  exacts avaient  circule  publiquement
  sur l'attitude  de BusLogic  envers Linux  et  j'avais le sentiment  que le  mieux
  etait d'en  discuter  directement. J'envoyai  un message par  email un  soir  a 11
  heures  et  la  reunion  eut lieu  le lendemain  apres-midi. Malheureusement,  les
  rouages  administratifs tournent lentement, particulierement  lorsqu'une compagnie
  est en cours d'acquisition, c'est pourquoi il a fallu attendre jusqu'a  maintenant
  que tous les details soient parfaitement clairs et qu'une annonce publique  puisse
  etre faite.

  BusLogic  n'est  pas  prete  aujourd'hui  a publier  les  informations necessaires
  a ce  que des parties  tierces puissent  ecrire des pilotes  pour  la  FlashPoint.
  Les  seuls pilotes  existants pour  la FlashPoint  ont  ete  ecrits  par  l'equipe
  technique de BusLogic  et il n'existe pas de documentation suffisamment  detaillee
  pour permettre a un developpeur exterieur d'ecrire un pilote sans aide consequente.
  Alors  qu'il y a des gens  chez BusLogic  qui ne veulent  pas entendre  parler  de
  divulgation  de details  sur l'architecture  de la  FlashPoint, le debat n'est pas
  entierement  clos. Dans tous les cas, meme  si la documentation  etait  disponible
  aujourd'hui, il faudrait certainement pas mal de temps pour qu'un pilote reellement
  utilisable soit ecrit, surtout que je ne suis pas convaincu que l'effort en vaille
  la peine.

  De toute facon, BusLogic continue a fournir une solution SCSI de hautes performan-
  ces pour Linux  et ils ne desirent pas voir quelqu'un incapable de travailler sous
  Linux  sous pretexte qu'il a une FlashPoint LT. En consequence, BusLogic  a mis en
  place un programme de mise a jour permettant a n'importe quel utilisateur de Linux
  dans le monde de changer sa FlashPoint LT pour une nouvelle carte BT-948 Multi-Mai-
  tres  PCI Ultra SCSI. La BT-948  est  la successeur  Ultra SCSI de  la BT-946C, et
  possede  toutes les  fonctionnalites des controleurs BT-946C et  FlashPoint  LT, y
  compris une terminaison adaptative (smart termination) et une PROM  flashable pour
  faciliter les mises a jour du firmware. Elle est bien sur compatible avec le pilote
  actuel de Linux. Le prix pour cette mise a jour a ete fixe a 45 dollars americains,
  et  le programme de mise a jour est  realise par le Support Technique de BusLogic,
  qui peut etre contacte par courrier electronique a l'adresse techsup@BusLogic.com,
  par telephone au +1 408 654-0760 ou par fax au +1 408 492-1542.

  J'ai un site en beta test pour le controleur BT-948 et les versions 1.2.1  et 1.3.1
  de mon pilote BusLogic contiennent deja le support pour les BT-948. Une gestion sup-
  plementaire (non indispensable) pour les cartes Multi-Maitres Ultra SCSI sera ajou-
  tee dans une future version. En resultat de ce mecanisme de test 'cooperatif', plu-
  sieurs  problemes du firmware  ont ete deceles et  corriges (assurez-vous que vous
  avez  la version 5.05R ou plus). Mon systeme de test Linux tres charge a fourni un
  environnement de test ideal pour tester le mecanisme de detection et de correction
  d'erreurs  SCSI, qui  est bien moins  souvent mis en evidence sur les  machines de
  production,  mais qui est crucial pour la  stabilite generale du systeme. Il a ete
  tres pratique de pouvoir travailler directement avec leur ingenieur responsable du
  firmware en reproduisant les problemes sous le controle de l'environnement de debug
  du firmware. Il est certain que les  techniques ont  enormement evolue  depuis  le
  temps ou je  travaillais sur un  firmware pour du  materiel embarque. Je travaille
  actuellement sur des  mesures de performances  et j'espere avoir prochainement des
  chiffres et des statistiques.

  BusLogic  m'a demande d'envoyer cette  annonce puisqu'un important pourcentage des
  questions  relatives au  support de la  FlashPoint m'a  directement ete envoye par
  email ou a ete poste dans les groupes de news de Linux auxquels je participe. Pour
  resumer, BusLogic offre aux  utilisateurs Linux de mettre a jour leur carte Flash-
  Point LT (BT-930) non geree par une carte geree BT-948 pour une somme de 45 dollars
  americains.

  Contactez le support technique de BusLogic a l'adresse techsup@BusLogic.com ou au
  +1 408 654-0760 pour beneficier de leur offre.

                  Leonard N. Zubkoff
                  lnz@dandelion.com
  <fin de citation>

  55..1100..   SSmmaarrttCCaacchhee  IIVV  eett  SSmmaarrttRRAAIIDD ((ssttaannddaarrdd)) EEAATTAA:: DDPPTT SSmmaarrttCCaacchhee,,
  SSmmaarrttCCaacchhee PPlluuss,, SSmmaarrttCCaacchhee IIIIII,,

  Cartes  gerees  :  toutes,  du moment qu'elles supportent le protocole
  EATA-DMA.

  Parmi ces cartes, on trouve :

  La famille des DPT Smartcache (Plus) :
  PM2011      ISA     Fast Terminaison unique SCSI-2
  PM2012B     EISA    Fast Terminaison unique SCSI-2

  La famille des DPT Smartcache III :
  PM2021      ISA     Fast Terminaison unique SCSI-2
  PM2021W     ISA     Wide Terminaison unique SCSI-2
  PM2022      EISA    Fast Terminaison unique SCSI-2
  PM2022W     EISA    Wide Terminaison unique SCSI-2
  PM2024      PCI     Fast Terminaison unique SCSI-2
  PM2024W     PCI     Wide Terminaison unique SCSI-2
  PM2122      EISA    Fast Terminaison unique SCSI-2
  PM2122W     EISA    Wide Terminaison unique SCSI-2
  PM2124      PCI     Fast Terminaison unique SCSI-2
  PM2124W     PCI     Wide Terminaison unique SCSI-2
  PM2322      EISA    Fast Terminaison unique SCSI-2
  PM2322W     EISA    Wide Terminaison unique SCSI-2

  La famille des DPT Smartcache VI :
  PM2041W     ISA     Wide Terminaison unique SCSI-2
  PM2041UW    ISA     Ultra Wide Terminaison unique SCSI-2
  PM2042W     EISA    Wide Terminaison unique SCSI-2
  PM2042UW    EISA    Ultra Wide Terminaison unique SCSI-2
  PM2044W     PCI     Wide Terminaison unique SCSI-2
  PM2044UW    PCI     Ultra Wide Terminaison unique SCSI-2
  PM2142W     EISA    Wide Terminaison unique SCSI-2
  PM2142UW    EISA    Ultra Wide Terminaison unique SCSI-2
  PM2144W     PCI     Wide Terminaison unique SCSI-2
  PM2144UW    PCI     Ultra Wide Terminaison unique SCSI-2
  PM2322W     EISA    Wide Terminaison unique SCSI-2
  PM2322UW    EISA    Ultra Wide Terminaison unique SCSI-2

  La famille des DPT SmartRAID :
  PM3021      ISA     Fast Terminaison unique SCSI-2
  PM3021W     ISA     Wide Terminaison unique SCSI-2
  PM3122      EISA    Fast Terminaison unique SCSI-2
  PM3122W     EISA    Wide Terminaison unique SCSI-2
  PM3222      EISA    Fast Terminaison unique SCSI-2
  PM3222W     EISA    Wide Terminaison unique SCSI-2
  PM3224      PCI     Fast Terminaison unique SCSI-2
  PM3224W     PCI     Wide Terminaison unique SCSI-2
  PM3334W     PCI     Wide Terminaison unique SCSI-2
  PM3334UW    PCI     Ultra Wide Terminaison unique SCSI-2

  mais egalement les  versions  'differentielles'  des  controleurs  ci-
  dessus.

  et quelques controleurs de :

  NEC, AT&T, SNI, AST, Olivetti, Alphatronix.

  Configurations supportees :

       Emplacements   : Tous
       Ports          : Tous
       IRQs           : Tous les niveaux sur changements d'etat (edge triggered)
       Canaux DMA     : Tous les ISA, non significatifs pour les EISA/PCI
       E/S            : port mappe, controle de bus
       Canaux SCSI    : Tous

  Auto-detection :

       fonctionne avec toutes les configurations gerees

  La derniere version du pilote EATA-DMA est disponible a l'adresse :

       ftp.i-Connect.Net:/pub/Local/EATA/

  Liste de diffusion :

  La  liste  de  diffusion EATA constitue un forum pour les utilisateurs
  Linux des pilotes EATA-DMA et EATA-PIO pour  les  discussions  et  les
  annonces des nouvelles versions et autres annonces.  Pour vous abonner
  a la liste, envoyez un  message  a  "linux-eata-request@i-connect.net"
  avec la ligne "subscribe" dans le corps du message.

  Support du repertoire /proc/scsi :

  Pour  avoir  acces  a  des  statistiques  plus  poussees,  entrez  les
  commandes suivantes :

  eecchhoo ""eeaattaa__ddmmaa llaatteennccyy"" >>//pprroocc//ssccssii//eeaattaa__ddmmaa//<<nnoo__ddrriivveerr>>

  Pour ensuite desactiver les statistiques, faites :

  eecchhoo ""eeaattaa__ddmmaa nnoollaatteennccyy"" >>//pprroocc//ssccssii//eeaattaa__ddmmaa//<<nnoo__ddrriivveerr>>

  Problemes habituels :

  1. La Slackware ne trouve pas le controleur.

     Solution : utilisez une des disquettes de boot ascsi*.

  2. Le pilote IDE arrive a detecter l'interface ST-506 de la carte EATA
     dans les anciens noyaux (<v1.3).

     a. Cela  ressemble a l'un des 2 exemples suivants :

          hd.c: ST-506 interface disk with more than 16 heads detected,
            probably due to non-standard sector translation.  Giving up.
            (disk %d: cyl=%d, sect=63, head=64)

     hdc: probing with STATUS instead of ALTSTATUS
     hdc: MP0242 A, 0MB w/128KB Cache, CHS=0/0/0
     hdc: cannot handle disk with 0 physical heads
     hdd: probing with STATUS instead of ALTSTATUS
     hdd: MP0242 A, 0MB w/128KB Cache, CHS=0/0/0
     hdd: cannot handle disk with 0 physical heads

     Si  le  pilote  IDE a des problemes a cause de cela (vous ne pouvez
     pas acceder  a  vos  veritables  peripheriques  IDE  par  exemple),
     changez le port d'E/S et/ou les IRQ de la carte EATA.

     b. Si  le pilote IDE trouve des equipements qu'il sait traiter, par
        exemple des disques durs d'une capacite <=504MB, il  va  allouer
        le  port  d'E/S  et  l'IRQ de maniere a ce que le pilote eata ne
        puisse pas les utiliser. Dans ce  cas,  changez  aussi  le  port
        d'E/S et le niveau d'interruption (IRQ != 14, 15).

  3. Le  firmware  de  certaines  vieilles cartes SK2011 est defectueux.
     Contactez le support client de DPT pour une mise a jour.

  Remarques :

  1. CCOONNFFIIGG__PPCCII doit etre positionnee si vous utilisez une carte PCI.

  55..1111..  FFuuttuurree DDoommaaiinn 1166xx00 wwiitthh TTMMCC--11880000,, TTMMCC--1188CC3300,, TTMMCC--1188CC5500 oouu  ccoomm--
  ppoossaanntt TTMMCC--3366CC7700

  Configurations supportees :

       BIOS           : 2.0, 3.0, 3.2, 3.4, 3.5
       Adresses BIOS  : 0xc8000, 0xca000, 0xce000, 0xde000
       Ports          : 0x140, 0x150, 0x160, 0x170
       IRQs           : 3, 5, 10, 11, 12, 14, 15
       DMA            : non utilise
       E/S            : port mappe

  Auto-detection :

       fonctionne avec toutes les configurations gerees. Requiert un BIOS active

  Surcharge de l'auto-detection :

       aucune

  Problemes prehistoriques, regles par une mise a jour :

  1. Les vieilles versions ne gerent pas le composant  TMC-18C50  et  se
     plantent avec les nouvelles cartes.

  2. Les  routines  d'auto-detection des vieilles versions n'ont pas les
     plus recentes signatures des BIOS.

  3. Les versions avant celle incluse  dans  Linux  1.0.9  et  1.1.6  ne
     gerent pas le nouveau composant SCSI ou le BIOS 3.4.

  Remarque :

  1. Le  BIOS des Future Domain scrute souvent les peripheriques SCSI de
     l'identificateur le plus eleve jusqu'a l'ID 0, dans l'ordre inverse
     des  autres  BIOS  SCSI.  sda  va  alors  correspondre  au  dernier
     peripherique (par analogie avec le DOS, D: au  lieu  de  C:).  Vous
     aurez   certainement   besoin   d'utiliser  l'option  de  surcharge
     'disktab' avec LILO.

  55..1122..  NNCCRR55338800 ggeenneerriiqquuee // TT113300BB ((ssttaannddaarrdd))

  Configurations supportees et non supportees :

       Ports          : Tous
       IRQs           : Tous
       canaux DMA     : le DMA n'est pas utilise
       E/S            : port mappe

  Auto-detection :

       aucune

  Surcharge de l'auto-detection :

  A la compilation :

       definissez GENERIC_NCR5380_OVERRIDE. Ce doit etre un tableau de
       nuplets de la forme {'port', 'irq', 'dma', 'type de carte'}. Par exemple :
       #define GENERIC_NCR5380_OVERRIDE {{0x330, 5, DMA_NONE, BOARD_NCR5380}}

       pour une carte NCR5380 de port 0x330 et d'IRQ 5.

       #define GENERIC_NCR5380_OVERRIDE {{0x350, 5, DMA_NONE, BOARD_NCR53C400}}

       pour une carte T130B sur le port 0x350.

       Les vieilles versions du code suppriment l'entree BOARD_*.

       Les valeurs symboliques IRQ_NONE et IRQ_AUTO peuvent etre employees pour le
       champ IRQ.

  Ligne de commande du noyau :

       ncr5380=port,irq
       ncr5380=port,irq,dma
       ncr53c400=port,irq

       255 peut etre utilise pour 'pas d'irq' et 254 pour 'auto-detection de l'irq'.

  Problemes frequents :

  1. Utilisation  d'une  carte  T130B  avec  le  vieux  pilote   NCR5380
     generique  (version  6  pre-publique) qui ne gerait pas la ligne de
     commande pour le ncr53c400.

     Les registres des cartes compatibles NCR5380 ont un deplacement  de
     8  par  rapport  a  l'adresse  de base. Ainsi, si votre adresse est
     0x350, utilisez :

       ncr5380=0x358,254

  sur la ligne de commande du noyau.

  Problemes prehistoriques, regles par une mise a jour :

  1. Le noyau se bloque lors d'acces disques avec  une  carte  T130B  ou
     d'autres cartes NCR53c400.

     Les  versions  6  pre-publiques  du  pilote  generique  NCR5380  ne
     geraient pas les interruptions sur ces cartes.  Mettez a jour votre
     pilote.

  Remarques :

  1. Le  pilote  generique ne gere pas le DMA actuellement et le pseudo-
     DMA n'est pas mieux supporte par le pilote generique.

  55..1133..  NNCCRR5533cc88xxxx ((ssttaannddaarrdd))

  Configurations supportees et non supportees :

       Adresses de base : Toutes
       IRQs             : Toutes
       Canaux DMA       : non significatif (PCI)
       E/S              : port mappe, controle de bus

  Auto-detection :

       requiert un BIOS PCI, utilise les routines du BIOS PCI pour rechercher les
       controleurs et pour lire les donnees de configuration

  Le pilote utilise les valeurs pre-programmees dans certains  regsitres
  pour son initialisation, aussi un BIOS doit-il etre active.

  Problemes prehistoriques, regles par une mise a jour :

  1. D'anciennes   versions   de  Linux  avaient  un  probleme  avec  la
     pagination (swapping). Reportez-vous au chapitre  ``Le  systeme  se
     fige en swappant''

  2. Les  noyaux des distributions incluent la version 4 ou 5 du pilote,
     qui ne gere pas certaines  fonctionnalites  bien  utiles  comme  la
     deconnexion  /  reconnexion  (l'effet  le  plus manifeste en est le
     blocage complet des peripheriques SCSI lors  du  rembobinage  d'une
     bande), controleurs multiples et operations sans BIOS.

     La derniere version du pilote est disponible a l'adresse :

       ftp://tsx-11.mit.edu/pub/linux/ALPHA/scsi/ncr53c810

  La  versions  courante  est  pour la 1.2.10 (et les derniers patches),
  bien que la prochaine version soit destinee exclusivement  aux  noyaux
  1.3.x.  Ces patches ne sont pas totalement propres, a cause de patches
  pour  le  format  ELF  (et  d'autres)  qui  se  trouvaient  dans   mon
  arborescence de travail. Si vous ne pouvez pas corriger vous-memes les
  (quatre) problemes d'application des patches, ne les utilisez  surtout
  pas.  Seul  le  dernier  patch  est  necessaire  ;  ce ne sont pas des
  versions incrementales.

  Si vous ne pouvez pas attendre et desirez utiliser le  dernier  pilote
  NCR avec un noyau 1.3.x, Harald Evensen <Harald.Evensen@pvv.unit.no> a
  adapte les patches pour les noyaux 1.3.x

       ftp://ftp.pvv.unit.no/pub/Linux/ALPHA/ncr

  Ces patches devraient s'appliquer sans problemes.

  S'il vous plait, lisez tous les fichiers README dans ces  repertoires.
  Vous  devriez  egalement  rejoindre  la liste de diffusion NCR si vous
  etes  interesse  a  avoir  les  dernieres  versions  du  pilote.   Les
  corrections  de  bugs  intermediaires  et les annonces sont faites sur
  cette liste.

  Pour vous inscrire, envoyez un courrier a majordomo@colorado.edu avec

       subscribe ncr53c810

  dans le corps du message. Pour vous retirer de la liste, envoyez a  la
  meme adresse un message contenant

       unsubscribe ncr53c810

  Problemes frequents :

  1. De  nombreuses  personnes ont rencontre des problemes de composants
     fonctionnant bien  sous  DOS  mais  plantant  sous  Linux  avec  un
     probleme  de  temporisation  (timeout) lors du test 1 (interruption
     perdue).

     Cela est souvent du a un desaccord entre la valeur selectionnee par
     le   cavalier  reglant  le  niveau  d'interruption  (IRQ)  pour  un
     emplacement ou un peripherique de la carte mere et la valeur  fixee
     dans la CMOS. VERIFIEZ TOUJOURS QUE :

  +o  L'IRQ  que  vous  employez est utilisee uniquement par le composant
     NCR de votre carte ou par l'emplacement dans lequel  la  carte  NCR
     est installee

  +o  Les cavaliers de selection des IRQ pour le composant de la carte ou
     pour son emplacement correspondent a la configuration de la CMOS

  +o  Certaines  cartes  meres   PCI   savent   faire   une   affectation
     "automatique" des  IRQ. Cela ne fonctionnera pas.

     Cela   peut   egalement   etre  du  aux  INTB,  INTC  ou  INTD  PCI
     selectionnees sur une carte PCI dans un systeme  qui  ne  gere  que
     l'INTA  PCI.  Si  vous  utilisez  une  carte NCR qui vous permet de
     choisir par cavalier la ligne d'interruption PCI utilisee, assurez-
     vous que vous avez configure l'INTA.

     Enfin,  le  PCI  doit utiliser des interruptions sur niveau (level-
     sensitive) plutot que sur  front  (edge  triggered).  Verifiez  que
     votre  carte  est  positionnee  pour  generer des interruptions sur
     niveau. Si cela ne marche toujours pas, essayez  les  interruptions
     sur front, au cas ou votre systeme serait defectueux.

     Ce  probleme  est  assez frequent avec quelques cartes Viglen, pour
     lesquelles la configuration des cavaliers d'interruptions n'est pas
     documentee  dans  le manuel. On m'a dit que ce qui devrait etre une
     IRQ5 est en fait une IRQ9. Votre cas sera peut-etre different.

  2. Des  blocages  et   d'autres   problemes   apparaissent   lors   de
     l'utilisation  d'une carte video PCI S3 928 et Tseng Lab ET4000W32.

     Il  y  a  des  bugs  materiels  dans  certaines  versions  de   ces
     composants. Ne les utilisez pas.

  3. Un  message  au demarrage vous indique que l'organisation (mapping)
     des E/S a ete desactivee parce que les bits 0..1  de  l'adresse  de
     base 0 indiquaient un mapping non E/S. Le message exact est :

     the I/O mapping was disabled because base address 0 bits 0..1 indicated a
     non I/O mapping

  Cela  est du a un bug du BIOS sur certaines machines : la lecture dou-
  ble mots de registres de configuration retourne les mots de 16 bits de
  poids forts et de poids faibles inverses.

  4. Certaines  machines ont des problemes si l'ecriture differee PCI ou
     la  bufferisation  CPU->PCI  sont  activees.  Si  vous   avez   des
     problemes, desactivez ces options.

  5. Certains  systemes avec le firmware NCR SDMS dans la ROM du BIOS de
     la carte et dans le BIOS du systeme ne sont pas capables de  booter
     sous  DOS.  Desactiver l'image dans un des BIOS devrait resoudre le
     probleme.

  6. Si vous rencontrez le message

       "scsi%d: IRQ0 not free, detaching"

  ou

       "scsi%d: IRQ255 not free, detaching"

  le composant NCR avait tous ses bits a 0 ou a 1 dans  le  registre  de
  configuration  PCI.  Soit  vous  avez  des  problemes de configuration
  (reportez-vous au chapitre ``Problemes frequents 1''), soit le BIOS de
  votre carte mere est defectueux.

  Un contournement serait d'editer le fichier drivers/scsi/ncr53c7,8xx.c
  puis de changer pci_init() pour mettre :

       irq = my_irq;

  avant

       return normal_init (tpnt, board, chip, (int) base,
           (int) io_port, (int) irq, DMA_NONE, 1, bus, device_fn,
           options);

  7. Certains systemes ont des composants BIOS honteusement  bugges.  Ne
     faites pas de rapport d'anomalie avant d'etre certain que vous avez
     recu les plus recentes ROM de votre vendeur.

  8. Les lignes de commande ncr53c810=xxx, etc. ne marchent pas.

     Dans les noyaux d'origine, les points  d'entree  correspondants  ne
     sont intentionnellement pas inclus dans le fichier init/main.c :

     Le  pilote fait malgre tout des auto-detections pour une carte dont
     des parametres ont ete passes sur la ligne de commande.  Ainsi,  si
     une  ligne  de  commande  est  utilisee  alors  que  la carte a ete
     reconnue par la routine de configuration PCI, vous allez au  devant
     de gros problemes.

     La  seule  raison  pour  laquelle  vous pourriez avoir besoin d'une
     surcharge par la ligne de commande serait de contourner un  bug  du
     materiel  PCI  et  du  BIOS.  Dans  ce  cas,  certaines routines de
     correction d'erreurs ne marcheront pas, rendant la  surcharge  plus
     qu'inutile.

     Enfin, pratiquement toutes les personnes qui _pensent_ avoir besoin
     d'une surcharge sur la ligne de commande le font parce qu'elles ont
     eu  un  message de la part du pilote. Si le pilote vous signale que
     vous  avez  une  probleme  de  configuration,  votre  systeme   est
     defectueux  ou  alors  vous  avez  un  probleme de configuration et
     aucune ligne de commande ne pourra y remedier.

     Si quelqu'un a ajoute les points d'entree adequats dans le  fichier
     init/main.c pour les lignes de commande, elle ne sont pas gerees et
     peuvent parfaitement ne pas fonctionner.

  9. Certaines cartes NCR (Nexstor est la plus connue)  qui  n'utilisent
     pas  un  BIOS NCR sortent en timeouts. Certaines de ces ROMs gerent
     les transferts synchrones  et  asynchrones,  mais  etablissent  une
     negociation  de  transferts  synchrones au demarrage du systeme, ce
     qui laisse les disques dans un etat non defini. Lorsque  le  pilote
     NCR  Linux  issu  de  la  distribution essaie de dialoguer avec ces
     peripheriques, il expire en timeout et ne s'en sort pas car  il  ne
     fait ni reset du bus, ni renegociation.

     Si   vous  rencontrez  ce  probleme,  vous  pouvez  desactiver  les
     transferts synchrones dans le  programme  de  configuration  de  la
     carte  ou  mettre  a jour votre pilote NCR avec une version recente
     ALPHA qui sait traiter la negociation synchrone.

  10.
     Les cartes Tyan S1365  '825  ont  des  problemes  de  temporisation
     (timeouts),  tout  particulierement  lorsque  les deconnexions sont
     autorisees. Les documentations de certaines de ces cartes inversent
     les  positions du cavalier d'activation de la terminaison - si bien
     que celle-ci est activee alors que vous auriez voulu la desactiver,
     et inversement.

     Essayez de changer la position du cavalier.

  Remarques :

  1. CCOONNFFIIGG__PPCCII doit etre positionnee

  55..1144..  SSeeaaggaattee SSTT00xx//FFuuttuurree DDoommaaiinn TTMMCC--88xxxx//TTMMCC--99xxxx ((ssttaannddaarrdd))

  Configurations supportees et non supportees :

  Adresses de base : 0xc8000, 0xca000, 0xcc000, 0xce000, 0xdc000, 0xde000
  IRQs             : 3, 5
  Canaux DMA       : le DMA n'est pas utilise
  E/S              : mappees en memoire

  Auto-detection :

       teste uniquement les adresses, le niveau d'interruption (IRQ) etant suppose
       valoir 5 ; necessite un BIOS installe.

  Surcharge de l'auto-detection :

  A la compilation :

       Definir OVERRIDE a la valeur de l'adresse de base, CONTROLLER a FD ou SEAGATE
       en fonction de la configuration et IRQ a la valeur de niveau d'interruption
       de la carte.

  Ligne de commande du noyau :

       st0x=adresse,irq ou tmc8xx=adresse,irq (uniquement pour les noyau 0.99.13b et
       plus recents)

  Problemes prehistoriques, regles par une mise a jour :

  1. Les versions des noyaux 0.99.12 et anterieurs avaient  un  probleme
     d'acquittement  (handshaking)  avec  certains  peripheriques lents.
     Notamment, voici ce  qui  se  passait  lorsque  vous  ecriviez  des
     donnees sur le bus :

     a. ecrire  l'octet  dans  le  registre  de  donnee ; le registre de
        donnees est place sur le bus,

     b. temps_restant = 12us,

     c. attendre tant que temps_restant > 0 et que le signal  REQ  n'est
        pas genere,

     d. si temps_restant > 0, generer le signal ACQ,

     e. attendre tant que temps_restant > 0 et le signal REQ est genere,

     f. redescendre le signal ACQ

     Ce probleme  apparaissait  sur  certains  peripheriques  lents  qui
     traitaient  chaque  commande  apres l'avoir lue et pour lesquels le
     protocole REQ/ACQ (requete / acquittement) prenait plus de  12us  -
     REQ  n'etait  pas  faux au moment ou le pilote l'attendait, si bien
     que le pilote finissait pas envoyer plusieurs octets de  donnees  a
     chaque impulsion REQ.

  2. Avec  Linux  0.99.12,  j'ai  introduit un bug en corrigeant le code
     d'arbitrage. Sur certains systemes, la selection des  peripheriques
     sortait en echec. Ce probleme a ete corrige en 0.99.13.

  Problemes frequents :

  1. Certains commandes sortent en timeouts lorsque Linux essaie de lire
     une table de partition ou de faire d'autres acces disques.

     La carte est fournie avec une configuration prevue par defaut  pour
     MSDOS,  c'est-a-dire  que  les interruptions sont desactivees. Pour
     les reactiver sur les cartes Seagate, fermez les pattes F-G  (choix
     de l'IRQ 5) sur le cavalier W3 (ST01) ou JP3 (ST02).

  2. Le  pilote  ne  parvient  pas  a  gerer  certains peripheriques, en
     particulier des  derouleurs  de  bandes  SCSI  bon  marche  et  des
     lecteurs de CDROM.

     La  Seagate  reporte  le  protocole  REQ/ACQ  du  bus SCSI dans les
     signaux IO CHANNEL READY et, eventuellement,  OWS  du  bus  du  PC.
     Malheureusement, vous n'etes pas averti de l'expiration du timer de
     surveillance (watchdog timer) et vous n'avez aucun moyen de  savoir
     avec  certitude  que  le  signal  REQ  est  descendu ; vous risquez
     finalement de voir passer une seule impulsion REQ  comme  plusieurs
     impulsions REQ.

     Etre  capable  de  traiter  ce cas implique de mettre en oeuvre une
     boucle active pour surveiller la descente du signal  REQ,  avec  un
     delai  de surveillance au cas ou vous auriez manque la transition a
     cause d'une interruption, etc. Vous observerez une degradation  des
     performances ; il pourrait etre judicieux de ne pas appliquer cette
     methode a tous les peripheriques SCSI. La selection peut  se  faire
     peripherique  par peripherique via le champ "broken" des entrees du
     tableau scsi_devices. Si vous  avez  des  problemes,  vous  pourrez
     tenter d'ajouter votre peripherique a la liste des equipements pour
     lesquels le champ "broken" n'est pas positionne a 0  (actuellement,
     il n'y a que les lecteurs de CDROM TENEX).

  3. Une  carte Future Domain (en particulier les  840, 841, 880 et 881)
     ne marche pas.

     Quelques-unes des cartes  Future  Domain  utilisent  l'organisation
     (mapping)  des  registres  des  Seagate  ;  les  bits  MSG et CD du
     registre d'etat sont inverses.

     Editez le fichier seagate.h, echangez les definitions  de  SSTTAATT__MMSSGG
     et  SSTTAATT__CCDD  puis  recompilez  le noyau avec la variable CCOONNTTRROOLLLLEERR
     definie a SSEEAAGGAATTEE et les variables  IIRRQQ  et  OOVVEERRRRIIDDEE  correctement
     positionnees.

  4. Lors  d'une tentative de partionnement de votre disque (par fdisk),
     vous  avez  un  message  indiquant  que  les  ioctl   HDIO_REQ   ou
     HDIO_GETGEO ont echoue, ou encore

     You must set heads sectors and cylinders.
     You can do this from the extra functions menu.

  Reportez-vous a la section ``Partitionnement des disques''

  5. Apres  avoir  specifie  manuellement  la  geometrie  du disque, les
     essais de  lecture  de  la  table  des  partitions  provoquent  les
     messages d'erreurs "partition boundary not on a cylinder boundary",
     "physical and logical boundaries don't match", etc.

     Reportez-vous a la section ``Partitionnement des disques''

  6. Sur certains systeme qui fonctionnaient avant la  version  0.99.13,
     les  nouvelles  versions  de Linux echouent. Les anciennes versions
     affectaient les registres CONTROL et DATA dans un  ordre  different
     de  celui explique dans la documentation Seagate, ce qui perturbait
     certains  systemes.  Les  nouvelles  versions  se   conforment   au
     document, mais cela perturbe maintenant d'autres systemes.

  Le code du fichier seagate.c ressemble maintenant a :

       cli();
       DATA = (unsigned char) ((1 << target) | (controller_type == SEAGATE ? 0x80 : 0x40));
       CONTROL = BASE_CMD | CMD_DRVR_ENABLE | CMD_SEL |
                   (reselect ? CMD_ATTN : 0);
       sti();

  Votre probleme peut etre corrige en changeant ce code en :

       cli();
       CONTROL = BASE_CMD | CMD_DRVR_ENABLE | CMD_SEL |
                   (reselect ? CMD_ATTN : 0);
       DATA = (unsigned char) ((1 << target) | (controller_type == SEAGATE ? 0x80 : 0x40));
       sti();

  Constantes :

  FAST ou FAST32 pour la mise en oeuvre de transferts aveugles

  ARBITRATE      va forcer le controleur a arbitrer le bus en mode de
                 compatibilite SCSI-II, plutot que d'attendre le signal BUS FREE
                 avant de continuer. Cela devrait nous permettre de traiter une
                 commande par unite logique le jour ou j'integrerai mes
                 modifications de reorganisation dans les sources de
                 l'arborescence de reference.

  SLOW_HANDSHAKE autorise la compatibilite avec des peripheriques deficients,
                 qui n'acquittent pas suffisamment rapidement (par exemple
                 certains lecteurs de CDROM) pour le code des cartes Seagate.

  SLOW_RATE=x,   x etant un entier specifiant un taux de transfert par defaut
                 si le protocole d'acquittement (handshaking) ne fonctionne
                 pas correctement.

  55..1155..  PPAASS1166 SSCCSSII ((ssttaannddaarrdd))

  Configurations supportees et non supportees :

       Ports          : 0x388, 0x384, 0x38x, 0x288
       IRQs           : 10, 12, 14, 15
            IMPORTANT : les IRQ DOIVENT etre differentes des IRQ utilisees par la
                        partie de gestion du son de la carte
       DMA            : n'est pas utilise par la partie SCSI de la carte
       E/S            : port mappe

  Auto-detection :

       n'a pas besoin du BIOS

  Surcharge de l'auto-detection :

       A la compilation : definissez PAS16_OVERRIDE comme un tableau de nuplets
       de la forme {'port', 'irq'}. Par exemple :

       #define PAS16_OVERRIDE {{0x388, 10}}

       pour une carte de port 0x388, IRQ 10.

  Ligne de commande du noyau :

  pas16=port,irq

  Constantes :

       AUTOSENSE  - si elle est definie, la commande SCSI 'REQUEST SENSE' sera
                    automatiquement emise pour les commandes qui se terminent
                    avec un status 'CHECK CONDITION'.

       PSEUDO_DMA - autorise le PSEUDO-DMA materiel ; devrait resulter en un
                    gain de performance de l'ordre de x3 / x4 par rapport aux
                    E/S scrutees (polled I/O).

       PARITY     - activation du controle de parite. N'est pas gere.

       SCSI2      - activation de la gestion de 'files marquees' pour le SCSI-II
                    (SCSI-II tagged queuing). Non teste.

       UNSAFE     - autorise les interruptions pendant les transferts
                    pseudo-DMA. Vous activerez cela uniquement si vous avez
                    des problemes de perte de caracteres durant les
                    communications a haute vitesse. Cependant, meme dans ce cas,
                    vous auriez plutot interet a jouer avec les tailles de blocs de
                    transfert.

       USLEEP     - autorise la gestion des peripheriques qui ne se deconnectent
                    pas. Non teste.

  Problemes frequents :

  1. Commandes en timeouts, interruptions, etc.

     Utilisez les patches pour les NCR5380 que j'ai postes sur le reseau
     il y a quelque temps (ils devraient etre integres dans la prochaine
     version  alpha).  Ces  patches  corrigent  un sequencement critique
     (race condition) des precedentes versions du  pilote  NCR5380.  Ils
     corrigent   egalement   un   probleme   de   gestion  de  plusieurs
     peripheriques pour les controleurs bases sur le NCR5380.

     Si cela  echoue,  vous  devrez  interdire  l'option  PSEUDO_DMA  en
     changeant     la    ligne    #define    PSEUDO_DMA    du    fichier
     drivers/scsi/pas16.c en #undef PSEUDO_DMA.

     Remarquez que cette solution doit  etre  consideree  uniquement  en
     dernier recours, car elle penalise gravement les performances.

  55..1166..  TTrraannttoorr TT112288//TT112288FF//TT222288 ((ssttaannddaarrdd))

  Configurations supportees et non supportees :

  Adresses de base :  0xcc000, 00xc8000, 0xdc000, 0xd8000
  IRQs             : aucune, 3, 5, 7 (toutes cartes)
                     10, 12, 14, 15 (T128F uniquement)
  DMA              : non utilise
  E/S              : memoire mappee

  Auto-detection :

       fonctionne sur toutes les configurations supportees ; necessite un BIOS
       installe.

  Surcharge de l'auto-detection :

       A la compilation : la variable T128_OVERRIDE doit etre un tableau
       de nuplets de la forme {'adresse', 'irq'}. Par exemple :

       #define T128_OVERRIDE {{0xcc000, 5}}

       pour une carte a l'adresse 0xcc000, IRQ 5.

       Les valeurs symboliques IRQ_NONE et IRQ_AUTO peuvent etre employees pour le
       champ IRQ.

  Ligne de commande du noyau :

       t128=adresse,irq
       -1 peut etre utilise pour "pas d'irq", -2 pour "auto-detection de l'irq".

  Constantes :

  AUTOSENSE  - si elle est definie, la commande SCSI 'REQUEST SENSE' sera
               automatiquement emise pour les commandes qui se terminent
               avec un status 'CHECK CONDITION'.

  PSEUDO_DMA - autorise le PSEUDO-DMA materiel ; devrait resulter en un
               gain de performance de l'ordre de x3 / x4 par rapport aux
               E/S scrutees (polled I/O).

  PARITY     - activation du controle de parite. N'est pas gere.

  SCSI2      - activation de la gestion de 'files marquees' pour le SCSI-II

  UNSAFE     - autorise les interruptions pendant les transferts
               pseudo-DMA. Vous activerez cela uniquement si vous avez
               des problemes de perte de caracteres durant les
               communications a haute vitesse. Cependant, meme dans ce cas,
               vous auriez tout interet a jouer avec les tailles de blocs de
               transfert.

  USLEEP     - autorise la gestion des peripheriques qui ne se deconnectent
               pas. Non teste.

  Problemes frequents :

  1. Commandes en timeouts, interruptions, etc.

     Utilisez les patches pour les NCR5380 que j'ai postes sur le reseau
     il y quelque temps (ils devraient etre integres dans  la  prochaine
     version  alpha).  Ces  patches  corrigent  un sequencement critique
     (race condition) des precedentes versions du  pilote  NCR5380.  Ils
     corrigent   egalement   un   probleme   de   gestion  de  plusieurs
     peripheriques pour les controleurs bases sur le NCR5380.

     Si cela  echoue,  vous  devrez  interdire  l'option  PSEUDO_DMA  en
     changeant     la    ligne    ##ddeeffiinnee    PPSSEEUUDDOO__DDMMAA    du    fichier
     drivers/scsi/pas16.c en ##uunnddeeff PPSSEEUUDDOO__DDMMAA.

     Remarquez que cette solution doit  etre  consideree  uniquement  en
     dernier recours, car elle penalise gravement les performances.

  55..1177..  UUllttrraassttoorr 1144ff ((IISSAA)),, 2244ff ((EEIISSAA)),, 3344ff ((VVLLBB)) ((ssttaannddaarrdd))

  Configurations supportees :

       Ports          : 0x130, 0x140, 0x210, 0x230, 0x240, 0x310, 0x330, 0x340
       IRQs           : 10, 11, 14, 15
       Canaux DMA     : 5, 6, 7
       E/S            : port mappe, controle de bus

  Auto-detection :

       ne marche pas pour les cartes sur le port 0x310. Le BIOS n'est pas necessaire.

  Surcharge de l'auto-detection :

       uniquement a la compilation (definissez PORT_OVERRIDE)

  Problemes frequents :

  1. L'adresse 0x310 n'est pas reconnue par le code d'auto-detection  et
     peut creer des conflits si le reseau est active.

     Utilisez une adresse differente.

  2. L'utilisation   d'une   carte  Ultrastor  a  l'adresse  0x330  peut
     provoquer des blocages du systeme lorsque les pilotes sons sont  en
     phase d'auto-detection.

     Utilisez une adresse differente.

  3. D'autres  pilotes  effectuent  des  auto-detections  dangereuses  a
     diverses adresses. Si vous avez des problemes de detection ou si le
     systeme se bloque au demarrage, essayez une autre adresse.

     0x340 est reputee etre une adresse qui marche.

  4. Linux  ne  detecte  aucun  peripherique  SCSI, mais reconnait votre
     disque dur connecte a une carte  SCSI  Ultrastor  comme  un  disque
     normal,  sans  que le pilote de disque arrive a le gerer. Notez que
     lorsque cela se produit, vous avez probablement le message

       hd.c: ST-506 interface disk with more than 16 heads detected,
       probably due to non-standard sector translation.  Giving up.
       (disk %d: cyl=%d, sect=63, head=64)

  Si c'est le cas, vous utilisez la carte Ultrastor  en  mode  emulation
  WD1003. Vous devez alors :

     a. basculer la carte Ultrastor en mode natif. C'est ce qu'il y a de
        mieux  a  faire,  etant  donne  que  les   disques   SCSI   sont
        sensiblement plus rapides que les disques IDE, specialement avec
        les patches de lectures/ecritures groupees. Certains ont  obtenu
        des  debits  soutenus  de  plus de 2Mo/s a travers le systeme de
        gestion de fichiers, apres application de ces patches.

        Notez que cela ne sera pas necessaire si vous n'utilisez pas  de
        disque  dur ou si vous branchez plus de deux disques durs sur la
        carte Ultrastor.

     b. utilisez la ligne de commande du noyau

          hd=cylindres,tetes,secteurs

     pour surcharger les parametres  de  configuration  par  defaut,  de
     maniere  a pouvoir demarrer vous-meme, tout en vous assurant que le
     nombre de cylindres <= 2048, le nombre de tetes <= 16 et le  nombre
     de  secteurs  <=  255  soient tels que cylindres * tetes * secteurs
     soit le meme dans les deux representations.

     Vous devez egalement preciser la  geometrie  du  disque  au  moment
     d'utiliser  fdisk  sous Linux. Si vous omettez de le faire, de mau-
     vaises valeurs risqueraient d'etre ecrites dans la table des parti-
     tions.  Ces  valeurs seront correctes pour Linux, mais provoqueront
     des erreurs sous MSDOS, qui se base sur les  triplets  <tete/cylin-
     dre/secteur> de la table des partitions.

     Une fois que Linux a demarre, vous pouvez vous epargner la peine de
     preciser manuellement a chaque demarrage la geometrie en  modifiant
     comme il le faut la macro HD_TYPE du fichier include/linux/config.h
     et en recompilant le noyau.

  55..1188..  WWeesstteerrnn DDiiggiittaall 77000000 ((ssttaannddaarrdd))

  Configurations supportees :

       Adresses du BIOS : 0xce000
       Ports            : 0x350
       IRQs             : 15
       Canaux DMA       : 6
       E/S              : port mappe, controle de bus

  Auto-detection :

       necessite un BIOS active.

  Problemes frequents :

  1. Il existe plusieurs  versions  du  composant  et  du  firmware.  La
     version 3 de la carte est connue pour ne pas fonctionner, alors que
     les cartes de version 5 marchent.  De  meme,  les  composants  sans
     suffixe  ne  fonctionnent  pas,  alors  que  ceux  marques d'un 'A'
     marchent.

  2. La carte gere quelques adresses BIOS qui n'apparaissent pas dans la
     liste  des  adresses  supportees.  Si  vous vous trouvez dans cette
     situation, utilisez une  des  adresses  supportees  et  envoyez  un
     rapport  d'anomalie  suivant  la procedure decrite dans le chapitre
     ``Signaler une anomalie''.

  55..1199..  AAMM5533//7799CC997744 ((AALLPPHHAA))

  ftp://tsx-11.mit.edu/pub/linux/ALPHA/scsi/AM53C974-0.3.tar.gz

  Configurations supportees :

       Ports          : Tous
       IRQs           : Tous
       Canaux DMA     : 6
       E/S            : port mappe, controle de bus (sans intelligence)

  55..2200..  qqllooggiicc ((ssttaannddaarrdd))

  He, Drew, ou est ce chapitre (I (D.F.). Je ne  l'ai  vu  que  dans  la
  table des matieres ;-) ?

  66..  DDiissqquueess

  Les informations contenues dans ce chapitre concernent les disques.

  66..11..  MMaatteerriieell ssuuppppoorrttee eett nnoonn ssuuppppoorrttee

  Tous  les  peripheriques  SCSI a acces direct, d'une taille de bloc de
  256, 512 ou 1024 octets devraient fonctionner. Les autres  tailles  de
  bloc  ne  marchent  pas  (notez  que cela peut souvent etre corrige en
  modifiant la taille des blocs  et/ou  des  secteurs  en  utilisant  la
  commande SCSI MODE SELECT).

  La  taille  des  secteurs fait reference au nombre d'octets de donnees
  presents par secteur  sur  un  peripherique  (les  lecteurs  de  CDROM
  utilisent par exemple une taille de secteur de 2048 octets).

  La  taille  des  blocs  fait  reference a la taille des blocs logiques
  utilises pour s'interfacer avec le peripherique. Bien que cette valeur
  soit  habituellement  identique  a  la  taille  des secteurs, certains
  peripheriques regroupent plusieurs secteurs physiques plus petits (par
  exemple  256 octets dans le cas des peripheriques Syquest de 55 Mo) en
  un seul bloc logique plus important ou l'inverse  (des  blocs  de  512
  octets sur les lecteurs de CDROM compatibles SUN, par exemple).

  Les  peripheriques  amovibles  incluent  les  disques  Bernouilis, les
  disques flopticals, les disques magneto-optiques et les Syquest.

  En theorie, les peripheriques d'une taille inferieure a  1  To  (tera-
  octets) devraient marcher. Il n'y a en particulier aucun probleme avec
  les minuscules disques de 9 Go.

  66..22..  PPrroobblleemmeess ffrreeqquueennttss

  66..22..11..  MMeessssaaggee ''CCyylliinnddrree ssuuppeerriieeuurr aa 11002244''

  Au moment du partitionnement, un message d'avertissement  "cylinder  >
  1024"  s'affiche  ou  bien  vous etes incapable de demarrer depuis une
  partition possedant des cylindres au-dela du cylindre 1024.

  C'est une limitation du BIOS.

  Reportez-vous aux chapitres ``Geometrie'' et ``Partitionnement''  pour
  des explications plus detaillees.

  66..22..22..  VVoouuss eetteess iinnccaappaabbllee ddee ppaarrttiittiioonnnneerr ""//ddeevv//hhdd**""

  Les /dev/hd* font reference a des peripheriques IDE. Utilisez /dev/sd*
  pour vos disques SCSI.

  Reportez-vous aux chapitres ``Fichiers  speciaux'',  ``Geometrie''  et
  ``Partitionnement''  pour les noms de fichiers corrects et la marche a
  suivre pour le partionnement.

  66..22..33..  IImmppoossssiibbiilliittee dd''eejjeecctteerr llee mmeeddiiaa dd''uunn ppeerriipphheerriiqquuee aammoovviibbllee

  Linux  tente  de  verrouiller  la porte du lecteur lorsqu'un media est
  monte,  afin  d'eviter  les  endommagements  du  systeme  de  fichiers
  resultants d'un changement de support.

  Demontez vos disques amovibles avant de les ejecter.

  66..22..44..   IImmppoossssiibbiilliittee  ddee ddeemmaarrrreerr ddeeppuuiiss uunn ddiissqquuee SSCCSSII eenn uuttiilliissaanntt
  LLIILLOO

  Dans  certaines  conditions,  le  pilote  SCSI  et le BIOS ne sont pas
  d'accord sur le mapping du BIOS correct a utiliser.  Le  resultat  est
  que  LILO  se bloque apres avoir affiche les lettres 'LI' au moment du
  boot.

  Comme contournement, trouvez quelle geometrie est  utilisee  sous  DOS
  puis   creez   une   entree   pour   votre   disque  dans  le  fichier
  /etc/lilo/disktab.

  Vous pouvez eventuellement egalement utiliser l'option  "linear"  pour
  LILO.

  66..22..55..  FFddiisskk rreeppoonndd ppaarr

       You must set heads sectors and cylinders.
       You can do this from the extra functions menu.

  et  la  geometrie  du  disque  n'est  pas  memorisee lorsque fdisk est
  reexecute.

  Reportez-vous au chapitre ``Partitionnement''.

  66..22..66..  UUnn sseeuull ppeerriipphheerriiqquuee eesstt ddeetteeccttee ssuurr uunnee  ccaarrttee  ppoonntt  ((bbrriiddggee
  bbooaarrdd)) aavveecc pplluussiieeuurrss ppeerriipphheerriiqquueess

  Linux ne recherche pas les unites logiques (LUNs) superieures a 0  sur
  les peripheriques SCSI qui retournent une version ANSI SCSI 1. Si vous
  voulez que toutes les unites logiques soient reconnues, allez modifier
  la fonction scan_scsis() du fichier drivers/scsi/scsi.c.

  66..22..77..  LLee ssyysstteemmee ssee ffiiggee eenn sswwaappppaanntt

  La  version 1.1.38 devrait avoir corrige le probleme. Essayez de faire
  une mise a jour de votre pilote.

  66..22..88..  LLeess ddiissqquueess CCoonnnneerr CCFFPP11006600SS ssoonntt eennddoommmmaaggeess

  Cela est du a un erreur du microcode dans  les  fonctions  de  lecture
  anticipee et dans le cache.

  >D'apres Soenke Behrens, du support technique de Conner :

  Ces dernieres semaines, nous avons recu des appels de plusieurs clients
  qui nous affirmaient avoir de serieux problemes avec les disques SCSI
  Conner CFP1060x de 1Go en utilisant le systeme d'exploitation Linux.
  Des erreurs etaient detectees par e2fsck a chaque demarrage du systeme
  (inodes abimes) entre autres.

  Une correction est maintenant disponible pour les clients possedant
  des CFP1060x (versions de microcode 9WA1.62/1.66/1.68) sous Linux. Pour
  appliquer la mise a jour, vous aurez besoin d'une disquette bootable DOS,
  et des pilotes ASPI qui permettent l'acces au disque dur. La mise a jour
  telecharge un nouveau code de gestion de files (mise en file et lecture)
  dans la memoire SCSI non-volatile du disque.

  Si vous avez des problemes avec des disques dont le microcode est a la
  version 9WA1.60, contactez votre centre Conner le plus proche pour une
  mise a jour. La version du microcode peut etre trouvee sur l'etiquette
  du disque ou, sur sa face inferieure, sur l'etiquette d'un des circuits
  integres.

  Si vous vous sentez assez sur de vous pour faire vous-meme la mise a jour,
  appelez le support technique de Conner, apres avoir note la version de
  votre microcode. Le support technique de Conner en Europe peut etre joint
   au +44-1294-315333. Le support americain peut etre joint au 1-800-4CONNER.

  Salutations,
  Soenke Behrens
  Support Technique Europe

  66..33..  FFiicchhiieerrss ssppeecciiaauuxx

  Les  disques  SCSI utilisent le majeur bloc 8. Il n'y a pas d'acces en
  mode "raw", comme sous BSD.

  16 mineurs sont attribues pour chaque disque SCSI, mineur %  16  ==  0
  representant  le  disque  entier,  1  <=  (mineur  %  16)  <=  4 les 4
  partitions principales et 5 <= (mineur %  16)  <=  15  les  partitions
  etendues.

  Exemple de configuration avec un seul controleur :

  Peripherique                 Adresse  Unite logique     disque SCSI
  Seagate 84M                  0        0                 /dev/sda
  Disque 0 SCSI->SMD bridge    3        0                 /dev/sdb
  Disque 1 SCSI->SMD bridge    3        1                 /dev/sdc
  Derouleur de bande Wangtek   4        0                 aucun
  Maxtor 213M                  6        0                 /dev/sdd

  etc.

  La convention de nommage standard est

  /dev/sd{lettre} pour le disque entier ((mineur % 16) == 0)

  /dev/sd{lettre}{partition}  pour  les  partitions  de  ce disque (1 <=
  (mineur % 16) <= 15)

  Par exemple :

  /dev/sda        peripherique mode bloc de majeur 8 et de mineur 0
  /dev/sda1       peripherique mode bloc de majeur 8 et de mineur 1
  /dev/sda2       peripherique mode bloc de majeur 8 et de mineur 2
  /dev/sdb        peripherique mode bloc de majeur 8 et de mineur 16

  etc.

  66..44..  PPaarrttiittiioonnnneemmeenntt

  Vous pouvez partitionner vos disques  SCSI  en  utilisant  l'outil  de
  votre  choix,  sous  DOS,  OS/2, Linux ou n'importe quel autre systeme
  d'exploitation supportant le schema de partionnement standard.

  Le meilleur moyen d'utiliser  le  programme  fdisk  de  Linux  est  de
  specifier  le peripherique sur la ligne de commande. Par exemple, pour
  partitionner le premier disque SCSI, tapez :

       fdisk /dev/sda

  Si vous ne precisez pas explicitement le peripherique, le programme de
  partionnement  pourrait  prendre par defaut /dev/hda, qui n'est pas un
  disque SCSI.

  Il peut arriver que fdisk affiche

  You must set heads sectors and cylinders.
  You can do this from the extra functions menu.

  Command (m for help):

  ou qu'il sorte un message comme quoi "HDIO_REQ ou HDIO_GETGEO ioctl" a
  echoue.   Dans  ce  cas, specifiez manuellement la geometrie du disque
  (``Geometrie'')  au  moment  de  lancer  fdisk   ou   entrez-la   dans
  /etc/disktab  si  vous  avez  l'intention  de  booter sur ce disque en
  utilisant LILO.

  Si  vous  avez  manuellement  precise  la  geometrie  du  disque,  les
  utilisations  ulterieures  de  fdisk  vous  donneront  le meme message
  d'erreur.  C'est  normal,  puisque  les  PC  ne   stockent   pas   les
  informations  de geometrie dans la table des partitions. Cela ne cause
  AUCUN PROBLEME et vous n'aurez pas de soucis a acceder aux  partitions
  creees par Linux. Certains programmes mal ecrits peuvent en etre genes
  ; contactez votre revendeur et insistez pour qu'il corrige son code si
  cela arrivait.

  Un message d'avertissement vous signale parfois que votre partition se
  termine au-dela du cylindre 1024. Si vous creez une  telle  partition,
  vous  ne  serez  pas capable de demarrer dessus avec LILO. Cela etant,
  rien n'empeche de creer une partition racine (root)  partiellement  ou
  entierement  situee  au-dela  de  ce  cylindre  1024.  Il est en effet
  toujours possible de creer une petite partition /boot sous la barriere
  des  1024  ou  de  demarrer  le  noyau  directement  depuis  une autre
  partition.

  66..55..  GGeeoommeettrriiee

  Sous Linux, chaque disque est vu tel que le controleur SCSI le voit  :
  N  blocs,  numerotes  de  0 a N - 1, sans erreurs, la ou le DOS / BIOS
  considerent avoir affaire a des disques intelligents et appliquent une
  transformation  arbitraire  <tete/cylindre/secteur>  a  cet  adressage
  lineaire.

  Cela peut poser un probleme lorsque  vous  partitionnez  votre  disque
  sous  Linux,  puisqu'il  n'y  a  pas de moyen portable de recuperer la
  geometrie estimee par le DOS/BIOS. Dans la plupart des cas, un ioctl()
  HDIO_GETGEO   peut   etre   implemente   pour   obtenir   ce  mapping.
  Malheureusement, lorsque le vendeur (au  hasard  Seagate)  choisit  un
  mapping  retors,  non  standard  et  non  documente,  cela  n'est plus
  possible et il est necessaire de preciser manuellement la geometrie.

  Si vous en arrivez la, plusieurs options sont possibles :

  1. Si cela ne vous gene pas d'utiliser DOS ou de  demarrer  depuis  le
     disque  avec LILO, creez une traduction telle que tete * cylindre *
     secteur * 512 < taille de votre disque en octets (un megaoctet  est
     defini par 2^20 octets).

     1 <= tete <= 256
     1 <= cylindre <= 1024
     1 <= secteur <= 63

  2. Utilisez le mapping du BIOS. Dans certains cas, cela implique qu'il
     faudra reconfigurer  le  disque  de  maniere  a  ce  qu'il  soit  a
     l'adresse  SCSI  0  et qu'il faudra desactiver le second disque IDE
     (si vous en avez un).

  Sous DOS, vous  pouvez  utiliser  un  programme  tel  que  NU  (Norton
  Utilities).  Vous pouvez aussi lancer le programme suivant :

  begin 664 dparam.com
  MBAZ``##_B+^!`+N!`(H'0SP@=/D\,'5:@#]X=`6`/UAU4(!_`3AU2H!_`P!U
  M1(I7`H#J,(#Z`7<Y@,*`M`C-$PCD=3-14HC()#\PY.@R`.@J`%J(\/[`,.3H
  M)0#H'0!8AL2Q!M+L0.@7`+K"`;0)S2'#NIP!ZR"ZQ0'K&[K5`>L6N]T!,=*Y
  M"@#W\8#",$N(%PG`=>^)VK0)S2'#=7-A9V4Z(&1P87)A;2`P>#@P#0H@("!O
  L<B`@9'!A<F%M(#!X.#$-"B1);G9A;&ED(&1R:79E#0HD("`D```````D``!O
  `
  end

  Lorsque  vous  le  lancerez,  il  affichera  le nombre de secteurs, de
  cylindres et de tetes du disque dont l'adresse BIOS a ete fournie  sur
  la ligne de commande (0x80 pour le premier disque, 0x81 pour le second
  disque, etc.).

  Par exemple, dparam 0x80

  60      17      1007

  signifie que C: a 60 secteurs, 17 tetes et 1007 cylindres.

  77..  LLeess lleecctteeuurrss ddee CCDDRROOMM

  Ce chapitre contient des  informations  specifiques  aux  lecteurs  de
  CDROM.

  77..11..  MMaatteerriieell ssuuppppoorrttee eett nnoonn ssuuppppoorrttee

  Les  lecteurs  de  CDROM  SCSI  avec une taille de bloc de 512 ou 2048
  octets doivent marcher. D'autres tailles  de  bloc  ne  fonctionneront
  pas.

  77..22..  PPrroobblleemmeess ffrreeqquueennttss

  77..22..11..  IImmppoossssiibbiilliittee ddee mmoonntteerr llee CCDDRROOMM

  La syntaxe correcte pour monter un CDROM ISO-9660 est la suivante :

       mount -t iso9660 /dev/sr0 /point_de_montage -o ro

  Il  est  evident  que  pour que cela fonctionne, il faut avoir integre
  dans le noyau (ou en module) le support SCSI  pour  votre  controleur,
  pour le pilote SCSI et le systeme de fichiers iso9660.

  Notez  aussi  que dans les noyaux 1.1.32, les peripheriques en lecture
  seule tels que les CDROM ne peuvent pas etre montes avec  les  options
  par defaut (lecture/ecriture (read/write)).

  77..22..22..  IImmppoossssiibbiilliittee dd''eejjeecctteerr llee CCDDRROOMM

  Linux  tente  de  verrouiller  la porte du lecteur lorsqu'un media est
  monte,  afin  d'eviter  les  endommagements  du  systeme  de  fichiers
  resultants d'un changement de support.

  77..22..33..  IImmppoossssiibbiilliittee dd''eeccoouutteerr ddeess CCDD aauuddiioo

  Essayez donc workman ou xcdplayer.

  77..22..44..  WWoorrkkmmaann oouu xxccddppllaayyeerr nnee mmaarrcchheenntt ppaass

  Les  fonctions  de  controle  des fonctionnalites audio font partie de
  l'ensemble des commandes de la norme SCSI-II. Les lecteurs qui ne sont
  pas  SCSI-II  n'ont  donc  que  peu  de  chances  de marcher. De plus,
  quelques lecteurs de CDROM SCSI-I et SCSI-II utilisent un ensemble  de
  commandes  proprietaires au lieu des commandes de la norme SCSI-II. Il
  existe une version de xcdplayer pour les lecteurs NEC - jetez un  oeil
  sur tsx-11.mit.edu au repertoire /pub/linux/BETA/cdrom.

  Ces  programmes  peuvent  egalement  marcher avec quelques lecteurs de
  CDROM non SCSI, si leurs pilotes implementent les memes ioctls que les
  pilotes SCSI.

  77..22..55..  LLeess ddiissqquueess ssuupppplleemmeennttaaiirreess ssuurr lleess cchhaarrggeeuurrss SSCCSSII nnee mmaarrcchheenntt
  ppaass

  La  plupart  des  chargeurs  de  CDROM  attribuent une unite logique a
  chaque  disque.  Verifiez  que  vous  avez  bien  un  fichier  special
  (/dev/...)  pour  chaque  plateau de votre chargeur (reportez-vous aux
  chapitres ``Fichiers speciaux'' et ``Les unites logiques autres que la
  premiere ne fonctionnent pas''.

  77..33..  FFiicchhiieerrss ssppeecciiaauuxx

  Les CDROM SCSI utilisent le majeur 11.

  Les  mineurs sont attribues dynamiquement (reportez-vous aux chapitres
  ``Disques'', ``Fichiers speciaux'' pour des exemples) le premier CDROM
  trouve ayant le mineur 0, le deuxieme le mineur 1, etc.

  La convention standard de nommage est la suivante :

  /dev/sr{chiffre},  bien  que  certaines  distributions  aient  utilise
  /dev/scd{chiffre}. Par exemple :

  /dev/sr0        /dev/scd0
  /dev/sr1        /dev/scd1

  88..  LLeess lleecctteeuurrss ddee bbaannddeess

  Les informations de ce chapitre concernent les lecteurs de bandes.

  88..11..  MMaatteerriieell ssuuppppoorrttee eett nnoonn ssuuppppoorrttee

  Les peripheriques utilisant des tailles de blocs  fixes  ou  variables
  plus  petites  que  la  taille du buffer du pilote SCSI (32Ko dans les
  sources de la distribution du noyau) sont geres.

  Les parametres (taille de bloc, bufferisation,  densite)  sont  regles
  via  des  ioctls  (habituellement  par  le programme mmtt) ; ils restent
  actifs  meme  si  le  peripherique  est  ferme  puis  reouvert   (ici,
  peripherique  est  a prendre au sens : fichier special representant ce
  peripherique).

  Theoriquement, tous les lecteurs doivent marcher, y compris :

  +o  Lecteurs Archive Viper QIC (dont les modeles 150Mo et 525Mo)

  +o  Lecteurs Exabyte 8mm

  +o  Lecteurs Wangtek 5150S

  +o  Lecteurs Wangdat DAT

  88..22..  PPrroobblleemmeess ffrreeqquueennttss

  88..22..11..  LLee lleecctteeuurr ddee bbaannddee nn''eesstt ppaass rreeccoonnnnuu aauu ddeemmaarrrraaggee

  Essayez de demarrer avec une bande dans le lecteur.

  88..22..22..  IImmppoossssiibbiilliittee  ddee  lliirree  ccoorrrreecctteemmeenntt  ddeess  bbaannddeess  ccoommppoorrttaanntt
  pplluussiieeuurrss ffiicchhiieerrss

  En lisant des bandes avec  plusieurs  fichiers,  le  premier  tar  est
  correct,  mais  le  suivant  echoue sans remontee d'erreurs. Un second
  essai de tar reussit.

  Les programmes utilisateur, tels que tar, ne  savent  pas  interpreter
  les marques de fichiers. Le premier tar lit la bande jusqu'a la fin du
  fichier. Le second tar essaie de lire la marque de fichier (file mark)
  et  n'obtient  aucune donnee. Par contre, la bande a depasse la marque
  de fichier, si bien que la troisieme lecture lit le  deuxieme  fichier
  de la bande.

  Utilisez  mmtt sur le fichier special attaquant le lecteur en mode 'non-
  rembobinage' (no-rewind) pour avancer jusqu'au fichier suivant.

  88..22..33..  LLaa ddeeccoommpprreessssiioonn eecchhoouuee

  Les programmes de decompression ne sont  pas  capables  de  gerer  les
  zeros qui comblent le dernier bloc du fichier.

  Pour  eliminer  les avertissements et les erreurs, mettez vos fichiers
  compresses dans un fichier tar. Plutot que de faire :

       tar cfvz /dev/nst0 fichier.1 fichier.2 ...

  faites :

       tar cfvz tmp.tar.z fichier.1 fichier.2 ...

       tar cf /dev/nst0 tmp.tar.z

  88..22..44..  PPrroobblleemmeess ddee lleeccttuurree ddee bbaannddeess ffaaiitteess ssuurr dd''aauuttrreess ssyysstteemmeess

  Vous  n'arrivez  pas  a  relire  une  bande faite sur un autre systeme
  d'exploitation ou bien un autre systeme d'exploitation n'arrive pas  a
  relire les bandes faites sous Linux.

  Les  differents  systemes  utilisent  souvent  des  tailles  de  blocs
  differentes. Sur un lecteur de bande utilisant une taille  fixe,  vous
  allez  avoir  des  erreurs en essayant de lire des blocs inscrits avec
  une autre taille.

  Pour lire ces bandes, vous devez ajuster la taille des blocs de  votre
  pilote de bandes a la taille avec laquelle la bande a ete ecrite. Vous
  pouvez aussi essayer de le configurer pour qu'il  utilise  une  taille
  variable.

  REMARQUE  :  cette taille est une taille physique de bloc et n'est pas
  le facteur de blocage utilise par tar, dump et consors.

  Vous pouvez le faire par la commande mmtt :

       mt setblk <taille>

  ou

       mt setblk 0

  pour indiquer au pilote d'utiliser une taille de bloc variable.

  Notez que ces options de mmtt ne sont pas supportees par la version  GNU
  de  mt qui est incluse dans certaines distributions de Linux. Utilisez
  plutot la version mt  derivee  de  BSD.  Les  sources  devraient  etre
  disponibles a l'adresse

       tsx-11.mit.edu:/pub/linux/ALPHA/scsi

  SSTT__BBUUFFFFEERR__BBLLOOCCKKSS         (definie        dans        le        fichier
  /usr/src/linux/drivers/scsi/st_options.h dans les  noyaux  recents  et
  /usr/src/linux/drivers/scsi/st.c   dans   les   anciens   noyaux)  est
  initialisee de maniere a autoriser une taille maximale des buffers  de
  32Ko. Editez le fichier precedent pour augmenter cette limite.

  88..22..55..  MMeessssaaggee dd''eerrrreeuurr ""NNoo ssuucchh ddeevviiccee""

  Tous les essais pour acceder a la bande se terminent par un message du
  genre

  "No such device".

  Verifiez le type du fichier special  representant  votre  lecteur.  Ce
  doit  etre  un  fichier en mode caractere, les majeur et mineur devant
  etre en  concordance  avec  les  valeurs  definies  dans  le  chapitre
  ``Fichiers speciaux''.

  88..22..66..   LLeess  lleeccttuurreess ddee bbaannddeess aa uunnee cceerrttaaiinnee ddeennssiittee mmaarrcchheenntt,, mmaaiiss
  lleess eeccrriittuurreess eecchhoouueenntt

  Plusieurs  lecteurs  de  bandes  acceptent  les lectures a une densite
  inferieure pour compatibilite avec des materiels  plus  anciens,  mais
  ils n'ecrivent pas a ces memes densites.

  C'est  le  cas en particulier des lecteurs QIC, qui peuvent relire des
  vieilles cassettes de 60Mo, mais qui ne savent  plus  ecrire  que  des
  bandes de 120, 150, 250 ou 525Mo.

  88..22..77..  LLee rreeppoossiittiioonnnneemmeenntt ddee llaa bbaannddee bbllooqquuee llee bbuuss SSCCSSII

  Cela  est  frequent  avec  les  equipements  SCSI qui ne gerent qu'une
  commande  en  attente   a   la   fois   (reportez-vous   au   chapitre
  ``Peripheriques  multiples''  pour  une explication plus detaillee, et
  ``Guide de l'acheteur : comparaison des  fonctionnalites''  pour  voir
  quels  lecteurs  souffrent  de cette limitation), bien que cela puisse
  egalement etre du a un lecteur de bandes refusant les deconnexions.

  Dans tous les cas, vous pouvez contourner ce probleme  en  editant  le
  fichier drivers/scsi/sr.c et en ajoutant une ligne

       #define ST_NOWAIT

  au debut. Regenerez ensuite le noyau.

  Cela  va  avoir pour effet de retarder les eventuelles erreurs jusqu'a
  la prochaine commande SCSI executee. Il est pour  cela  preferable  de
  faire

       mt status

  apres  qu'une commande de repositionnement a ete demandee par mmtt. Cela
  vous evitera d'ecraser des fichiers sur la bande si le  positionnement
  a echoue.

  Vous pouvez aussi envisager de changer votre controleur pour un modele
  mieux supporte ou de vous equiper d'un lecteur de bande  plus  recent,
  si  vous  avez besoin d'utiliser ce contournement et que vous desiriez
  ecrire plusieurs fichiers sur une meme bande.

  88..33..  FFiicchhiieerrss ssppeecciiaauuxx

  Les lecteurs de bandes SCSI utilisent le majeur 9.

  Linux utilise le type dev_t sur 16 bits, dont  8  bits  sont  reserves
  pour  le  mineur.  Pour cette raison, les mineurs pour les bandes SCSI
  sont  affectes  dynamiquement  et  commencent  au  plus  petit  numero
  d'adapteur SCSI, peripherique ou unite logique.

  Les  mineurs des fichiers speciaux rembobinant les bandes commencent a
  0, 0 etant le premier lecteur de bande SCSI (/dev/st0 cree  par  mmkknnoodd
  //ddeevv//sstt00  cc 99 00), le deuxieme lecteur etant /dev/st1 (mmkknnoodd //ddeevv//sstt11 cc
  99 11), etc.

  Les mineurs des fichiers speciaux ne rembobinant pas les bandes ont le
  bit  de  poids  fort  a 1, c'est-a-dire que /dev/nst0 a ete cree par :
  mmkknnoodd //ddeevv//nnsstt00 cc 99 112288.

  La convention standard de nommage est

  /dev/nst{chiffre} pour les operations sans rembobinage
  /dev/st{chiffre}  pour les operations avec rembobinage

  99..  PPiilloottee ggeenneerriiqquuee

  Les informations contenues dans ce chapitre sont specifiques au pilote
  SCSI generique.

  99..11..  MMaatteerriieell ssuuppppoorrttee

  Le  pilote  SCSI generique fournit une interface normalisee permettant
  d'envoyer des commandes SCSI a tous les peripheriques SCSI -  disques,
  bandes, CDROM, chargeurs multi-disques, etc.

  Tout  equipement  electriquement compatible avec votre carte SCSI doit
  fonctionner.

  99..22..  PPrroobblleemmeess ffrreeqquueennttss

  Aucun :-)

  99..33..  FFiicchhiieerrss ssppeecciiaauuxx

  Les fichiers speciaux du  pilote  SCSI  generique  utilisent  le  mode
  caractere,   de   majeur   21.  A  cause  des  memes  contraintes  que
  precedemment, les mineurs sont attribues dynamiquement a partir de  0,
  un par peripherique,

  /dev/sg0

  correspondant  au  plus  petit  peripherique  ou  unite logique sur le
  premier controleur.

  1100..  GGuuiiddee ddee ll''aacchheetteeuurr

  Une question frequente est :

  "Linux gere un nombre plutot eleve  de  controleurs  differents.  Quel
  controleur dois-je acheter ?"

  La  reponse depend des performances que vous esperez ou dont vous avez
  besoin,  de  la  carte  mere  et  des  peripheriques  que  vous   avez
  l'intention de connecter a votre machine.

  1100..11..  TTyyppeess ddee ttrraannssffeerrtt

  Le  facteur  le plus important affectant les performances (en terme de
  debit et de temps de reponse  lors  des  E/S  SCSI)  est  le  type  de
  transfert  utilise.  La  table  ci-dessous  liste  les divers types de
  transfert, les effets de  chacun  sur  les  performances  et  quelques
  recommandations sur leur emploi.

     TTyyppee ddee ttrraannssffeerrtt
        Description / Performance / Recommandations

     SSccrruuttaattiioonn ppuurree ((PPuurree PPoolllleedd))
        Une  carte  d'E/S  scrutee conduit le processeur central a faire
        tout le traitement SCSI, y compris le protocole REQ/ACQ.

        Meme un  processeur  rapide  va  etre  plus  lent  a  gerer  les
        sequences  REQ/ACQ qu'une simple machine a etats finis. Le debit
        peut descendre a 150Ko/s  sur  une  machine  rapide  et  parfois
        60Ko/s sur une machine lente (a travers le systeme de fichiers).

        Le pilote doit egalement se mettre en boucle (tight  loop)  tant
        que  le bus SCSI est occupe, ce qui conduit a une utilisation de
        100% du processeur et a des temps de  reponse  deplorables  lors
        des   E/S   SCSI.   Les  lecteurs  de  CDROM  lents  qui  ne  se
        deconnectent/reconnectent  pas  vont  completement  ecrouler  le
        systeme avec de telles cartes.

        Non recommandees.

     SSccrruuttaattiioonn iinntteerr--vveerrrroouuiilllleeee ((IInntteerrlloocckkeedd PPoolllleedd))
        Les cartes utilisant des E/S a scrutation inter-verrouillee sont
        principalement  les  memes  que  les  cartes   precedentes,   le
        protocole  REQ/ACQ etant effectue conjointement avec les signaux
        de protocole du bus PC. Tous les traitements SCSI hors protocole
        REQ/ACQ sont geres par le processeur.

        Avec  de  telles cartes, des pointes de 500-600Ko/s peuvent etre
        mesurees a travers le systeme de fichiers.

        De meme qu'avec les cartes a scrutation pure, le pilote doit  se
        mettre  en  boucle  tant que le bus SCSI est occupe, ce qui rend
        l'utilisation du processeur dependante des taux de transfert des
        peripheriques et des deconnexions/reconnexions. L'utilisation du
        processeur peut varier de 25% pour des lecteurs de CDROM  simple
        vitesse  qui  gerent proprement les deconnexions/reconnexions, a
        100% pour les peripheriques rapides ou  les  lecteurs  de  CDROM
        deficients qui n'arrivent pas a se deconnecter/reconnecter.

        Sur mon 486-66, avec une carte T128, j'utilise 90% du processeur
        pour un debit soutenu de 547Ko/s avec un disque  dont  le  debit
        maximum est de 1080Ko/s.

        Ces cartes sont parfois acceptables pour des peripheriques lents
        (bandes, CDROM) lorsque le prix est le principal critere.

     SSccrruuttaattiioonn ppaarr FFIIFFOO ((FFIIFFOO PPoolllleedd))
        Les cartes implementant une scrutation  par  FIFO  utilisent  un
        tampon  de  taille reduite (typiquement 8Ko) entre le processeur
        et le bus SCSI et possedent quelque intelligence.  Le processeur
        principal  n'est plus mis a contribution que lors des transferts
        de donnees a pleine vitesse avec la FIFO ou lorsqu'il termine le
        traitement des interruptions FIFO pour les conditions vides, les
        deconnexions/reconnexions, etc.

        Les taux de transfert maximums devraient  etre  suffisants  pour
        traiter  la  plupart des peripheriques SCSI et peuvent atteindre
        4Mo/s sur un Seagate Baracuda rapide avec une  Adaptec  1520  en
        utilisant  des  commandes  SCSI  directes de lecture de blocs de
        64Ko.

        L'utilisation du processeur central depend des taux de transfert
        des   peripheriques,   les   plus   rapides   generant  le  plus
        d'interruptions et demandant donc plus de temps processeur. Bien
        que  le  taux  d'utilisation du processeur puisse etre important
        avec des peripheriques rapides (jusqu'a 75%), le  systeme  reste
        utilisable.   Ces   cartes   offrent   une   excellente  reponse
        interactive  avec  des  peripheriques  defectueux  qui   ne   se
        deconnectent/reconnectent  pas  (typiquement, des lecteurs CDROM
        bon marche).

        Recommandees  pour  un   usage   personnel,   pour   un   budget
        raisonnable.

     DDMMAA eessccllaavvee
        Les  pilotes  pour  les  cartes mettant en oeuvre du DMA esclave
        programment le controleur DMA du PC pour un  canal  lorsqu'elles
        font   un  transfert  de  donnees  et  rendent  le  controle  au
        processeur principal.

        Les taux de transfert  sont  habituellement  penalises  par  les
        mauvaises  performances des controleurs DMA utilises sur les PC,
        une telle carte 8-bits ne pouvant pas depasser les  140-150Ko/s.

        La  consommation  du processeur est tres raisonnable, legerement
        moins qu'avec les cartes  a  scrutation  par  FIFO.  Ces  cartes
        tolerent  parfaitement  les  peripheriques  defectueux qui ne se
        deconnectent/reconnectent pas (typiquement, des  lecteurs  CDROM
        bon marche).

        Acceptables  pour  les  lecteurs  CDROM  lents,  les lecteurs de
        bandes, etc.

     DDMMAA aa ccoonnttrroollee ddee bbuuss ((BBuussmmaasstteerriinngg DDMMAA))
        Ces cartes sont intelligentes. Les pilotes pour ces  controleurs
        envoient   dans   une   structure   d'E/S   une  commande  SCSI,
        l'identificateur de la destination  et  de  son  unite  logique,
        ainsi  que l'adresse de fin des donnees, puis ils avertissent la
        carte qu'ils ont une commande pour elle. Le pilote rend la  main
        au  systeme et la carte repond plus tard pour signaler qu'elle a
        termine l'E/S.

        Puisque l'intelligence est dans le firmware du controleur et non
        dans   le   pilote,  les  pilotes  pour  ces  cartes  supportent
        classiquement plus de fonctionnalites -  transferts  synchrones,
        files marquees (tagged queuing), etc.

        Avec  les  patches  de  lectures/ecritures groupees, des taux de
        transferts  a  travers  le  systeme   de   fichiers   atteignent
        pratiquement  100% des performances maximales en ecriture et 75%
        en lecture.

        L'utilisation du processeur est reduite a  son  minimum,  quelle
        que  soit la charge des E/S, avec 5% d'utilisation sur des acces
        a un CDROM double vitesse via une Adaptec 1540 et 20% lors  d'un
        transfert soutenu a 1,2Mo/s sur un disque SCSI.

        Recommandees dans tous les cas ou le prix n'est pas la priorite,
        ou la carte mere n'est pas defectueuse (certaines de ces  cartes
        ne  fonctionnent  pas  avec  le  controle  de  bus)  et  ou  des
        applications pour lesquelles le temps  d'obtention  des  donnees
        est  plus  important que le debit (le supplement (overhead) du a
        l'utilisation d'un controleur de bus est de 3-4ms par  commande)
        ne seront pas utilisees.

  1100..22..  DDeeccoouuppaaggee//RReeaasssseemmbbllaaggee ((SSccaatttteerr//ggaatthheerr))

  Le second point le plus important pour les performances est la gestion
  des E/S par decoupage/reassemblage. Le  supplement  d'execution  d'une
  commande   SCSI   est   non   negligeable  (de  l'ordre  de  plusieurs
  millisecondes). Les controleurs de bus intelligents tels que l'Adaptec
  1540  peuvent  prendre 3-4ms pour traiter une commande SCSI avant meme
  que la cible ne la recoive. Sur les peripheriques non  bufferises,  ce
  supplement  est toujours suffisant pour manquer un tour de galette, ce
  qui conduit a des taux de transfert de 60Ko/s (sur un lecteur a  3.600
  tours/minute)   par   bloc   transfere.   Ainsi,  pour  maximiser  les
  performances, il est necessaire de minimiser le  nombre  de  commandes
  SCSI  envoyees  pour  transferer  une  certaine quantite de donnees en
  augmentant le nombre d'octets  transferes  pour  chaque  commande.  La
  conception  du  cache  des  tampons de Linux fait que les blocs disque
  contigus ne  sont  pas  contigus  en  memoire.  Avec  les  patches  de
  lectures/ecritures  groupees,  4Ko  utiles  de  donnees  sont!   !   !
  contigus. La taille totale des blocs transferes en une seule  commande
  SCSI  est  donc  de  1Ko * nombre de regions de decoupage/reassemblage
  sans le patch et de 4Ko * nombre de regions avec. Nous avons determine
  experimentalement  que  64Ko est une valeur raisonnable pour une seule
  commande SCSI - c'est-a-dire 64 buffers de decoupage/reassemblage sans
  le  patch, 16 avec. Suite au changement de 16Ko a 64Ko des transferts,
  nous avons observe une amelioration de 50% du debit maximal, a travers
  le  systeme  de  fichiers,  pour les ecritures et les lectures, a 100%
  pour les premieres et 75% pour les secondes, avec  une  carte  Adaptec
  1540.

  1100..33..  BBAALL ccoonnttrree nnoonn--BBAALL ((MMaaiillbbooxx vvss.. nnoonn--mmaaiillbbooxx))

  Certains controleurs intelligents, comme les cartes Ultrastor, WD7000,
  Adaptec 1540, 1740 et BusLogic ont utilise une interface de type boite
  aux   lettres,   dans  laquelle  les  commandes  SCSI  sont  executees
  simplement en placant une structure SCSI a une adresse memoire  donnee
  (BAL),  en  le  signalant  a la carte (c'est-a-dire en positionnant un
  indicateur d'emission pour la BAL),  puis  en  attendant  une  reponse
  (courrier  entrant).  Grace a cette interface de programmation de haut
  niveau, les utilisateurs peuvent souvent mettre a jour leur carte pour
  beneficier  des avantages des nouvelles fonctionnalites, telles que le
  FAST ou le WIDE SCSI, sans modifications du logiciel. Les pilotes  ont
  tendance  a  etre  plus simples, a offrir plus de fonctionnalites et a
  etre plus stables.

  D'autres controleurs intelligents, comme la famille des NCR53c7/8xx ou
  les composants Adaptec AIC-7770/7870 (comprenant les cartes 274x, 284x
  et 2940) utilisent  une  interface  de  programmation  de  moins  haut
  niveau.  Leurs performances peuvent etre meilleures, puisque la charge
  de travail peut etre repartie entre le processeur de la  carte  et  le
  processeur   (plus  rapide)  principal  de  la  machine.  Ils  offrent
  egalement une plus grande souplesse pour la realisation  de  certaines
  fonctionnalites   (le   mode   cible   (target   mode)  pour  certains
  peripheriques par exemple). De plus,  ces  cartes  peuvent  etre  plus
  economiques  a  la  production  (dans  certains cas, cette economie se
  retrouve au niveau du consommateur - voir les NCR).  En  contrepartie,
  les pilotes sont plus compliques (comprenez : sont plus sujets a avoir
  des erreurs) et ils doivent etre modifies pour prendre en  compte  les
  fonctionnalites presentes sur les composants plus recents.

  1100..44..  LLeess ttyyppeess ddee bbuuss

  Le  type du bus est le prochain choix a considerer (ISA, EISA, VESA et
  PCI). Les personnes chargees du marketing clament souvent  des  debits
  maximums  (bandwidth)  absurdes,  bases  sur  des taux de transfert en
  rafale (burst) qui relevent presque de la fiction et qui ne servent de
  toute  facon  a rien. Par opposition, j'ai choisi de parler de valeurs
  realistes, quotidiennes, basees sur  les  performances  mesurees  avec
  divers peripheriques.

     BBuuss
        Debit maximum / description,

     IISSAA
        Le  debit  maximum  est  legerement  meilleur que 5Mo/s pour des
        cartes a controle de bus.  Avec  un  bus  ISA,  l'arbitrage  des
        controleurs  de  bus est realise par un venerable DMA 8237 ; les
        temps d'acquisition du  bus  sont  relativement  mediocres.  Les
        pilotes  d'interruptions  sont  a trois etats (tri-state) ou sur
        changement  d'etat  (edge  triggered).  Cela  signifie  que  les
        interruptions ne peuvent pas etre partagees. Generalement, l'ISA
        n'est pas bufferise et le bus memoire de  la  machine  hote  est
        occupe   a  chaque  transfert.  Aucun  mecanisme  n'existe  pour
        empecher une saturation du bus.

     VVEESSAA
        Le debit maximum se situe  aux  alentours  de  30Mo/s.  Certains
        systemes VESA exploitent le bus en dehors de ses specifications,
        ce qui les rend incompatibles avec  certaines  cartes.  Tenez-en
        compte  au moment d'acheter votre materiel s'il ne beneficie pas
        d'une garantie. Generalement, le VESA est non bufferise ; le bus
        memoire de la machine hote est occupe a chaque transfert.

     EEIISSAA
        Le   debit  maximum  se  situe  aux  alentours  de  30Mo/s,  les
        operations de controle de bus etant  generalement  plus  rapides
        que  pour le VESA. Certains systemes EISA bufferisent le bus, ce
        qui permet d'observer des  transferts  en  rafale  vers  le  bus
        memoire  de  la  machine  hote,  plus  rapide,  et  de minimiser
        l'impact  sur  les  performances  du  processeur  central.   Les
        gestionnaires  d'interruptions  EISA  peuvent etre a trois etats
        (tri-state), sur changement d'etat (edge  triggered)  ou  actifs
        sur  collecteur  ouvert  (open  collector  level-active)  ; cela
        permet  le   partage   des   interruptions   avec   les   autres
        gestionnaires  qui  le  gerent.  Puisque l'EISA alloue un espace
        d'adressage separe pour  chaque  carte,  il  est  habituellement
        moins sujet aux conflits de ressources que l'ISA ou le VESA.

     PPCCII
        Le  debit  maximum  se situe aux alentours de 60Mo/s. La plupart
        des systemes  PCI  utilisent  des  tampons  d'ecriture  differee
        (write posting buffers) sur la carte, ce qui permet de minimiser
        l'effet des transferts  rapides  de  part  et  d'autre  sur  les
        performances  du bus et du processeur central. Les gestionnaires
        d'interruptions PCI sont actifs sur  collecteur  ouvert  ;  cela
        permet   le   partage   des   interruptions   avec   les  autres
        gestionnaires qui le gerent. Des  mecanismes  sont  prevus  pour
        eviter  la saturation du bus et pour permettre a l'esclave et au
        maitre de suspendre une operation de controle de bus.

        Puisque le PCI offre un mecanisme plug-n-play via des  registres
        de  configuration  reinscriptibles  sur  chaque  carte,  dans un
        espace   d'adressage   separe,   un   systeme   qui   implemente
        correctement la gestion PCI est plug-and play.

        Le  PCI  est  tres severe sur la longueur des pistes, la charge,
        les specifications mecaniques, etc. et devrait  finalement  etre
        plus fiable que le VESA ou l'ISA.

        Pour  resumer,  le  PCI  est  le  meilleur  bus  pour  PC ; il a
        cependant  des  inconvenients.  Le  PCI  en  est  encore  a  ses
        balbutiements  et,  bien que les constructeurs aient corrige les
        problemes, il  circule  toujours  quelques  vieilles  cartes  au
        composant  PCI  ou  au  BIOS  defectueux. Je recommanderais pour
        cette raison que vous vous  assuriez  de  pouvoir  retourner  le
        materiel  en cas de defaut. Si les plus recentes cartes PCI sont
        veritablement plug-and-play, les anciennes cartes  necessitaient
        une  intervention  de  la part de l'utilisateur pour positionner
        correctement   les   cavaliers   et   configurer   le   logiciel
        (l'affectation  des  interruptions  par  exemple).  Bien  que la
        plupart des utilisateurs aient resolu leurs problemes PCI,  cela
        a demande du temps et je deconseillerais l'achat d'une carte PCI
        si la disponibilite du systeme est tres critique.

  Pour de nombreux peripheriques SCSI lents (disques a 2Mo/s  ou  moins,
  lecteurs  de  CDROM,  lecteurs  de  bandes),  il  n'y a pas de grandes
  variations de debit en fonction de l'interface avec le bus du PC. Pour
  les  disques  SCSI  actuels (typiquement, les derniers disques haut de
  gamme de plusieurs giga-octets ont un taux par tete de 4  a  5Mo/s  et
  plusieurs  compagnies experimentent des disques a 14Mo/s par tete), le
  debit sera nettement meilleur avec des controleurs sur  des  bus  plus
  rapides ; certains ont meme releve un facteur d'amelioration de 2,5 en
  passant d'une carte ISA Adaptec 1542 a une carte PCI NCR53c810.

  A l'exception des cas  ou  un  mecanisme  d'ecriture  differee  ou  de
  bufferisation  des  ecritures  est mis en oeuvre, lorsqu'un des bus de
  votre systeme est occupe, tous  les  autres  bus  sont  inutilisables.
  Ainsi,  bien  qu'une  saturation du bus n'affecte pas les performances
  SCSI, elle peut avoir un effet negatif sur la reponse  interactive  du
  systeme. Par exemple, si vous avez un disque SCSI a 4Mo/s en ISA, vous
  perdrez 80% de votre bande passante. Dans un  systeme  ISA/VESA,  vous
  n'obtiendrez  pas  mieux  que 6Mo/s. La plupart du temps, l'impact sur
  les taches en arriere plan est egalement tres sensible.

  Notez  bien  qu'avoir  plus  de  16Mo  de   memoire   n'implique   pas
  l'utilisation  d'une carte SCSI a controle de bus ISA. Contrairement a
  certains autres systemes d'exploitation,  Linux  effectue  une  double
  bufferisation  lors des transferts a acces direct memoire (DMA) sur un
  controleur ISA a destination d'une zone  au-dela  des  16Mo.  De  tels
  transferts ne sont penalises que de 1,5%, ce qui est tres raisonnable.

  Pour terminer, la difference de prix pour des cartes a controle de bus
  pour chacune de ces interfaces de bus est souvent minime.

  Avec  tout  cela  a  l'esprit,  en  fonction  de  vos  priorites,  vos
  preferences iront vers

       Stabilite, installations critiques,
       et pas de garantie                      EISA ISA VESA PCI

       Performances et installations personnelles
                                               PCI EISA VESA ISA

  Comme je l'ai deja mentionne  plus  haut,  le  controle  de  bus  (bus
  mastering)  plus  que  tout  autre  mode  de  transfert aura un impact
  benefique sur les performances de tout le systeme et il doit etre plus
  important dans votre choix que le type de bus au moment de votre achat
  d'une carte SCSI.

  1100..55..  PPeerriipphheerriiqquueess mmuullttiipplleess

  Si vous envisagez d'utiliser plusieurs  peripheriques  sur  votre  bus
  SCSI,  assurez-vous  que  votre  controleur  est  capable de supporter
  plusieurs commandes en attente a un  instant  donne.  C'est  essentiel
  pour  les  lecteurs  de bandes et souhaitable si vous comptez melanger
  des peripheriques de vitesses differentes (un lecteur de CDROM  et  un
  disque  dur,  par  exemple).  Si  le pilote Linux ne gere qu'une seule
  commande a la fois, vous risquez de bloquer vos  entrees/sorties  avec
  vos disques durs pendant que le lecteur de bandes rembobine ou va a la
  fin de la  cassette  (cela  peut  durer  une  demi-heure).  Avec  deux
  disques,  le  probleme  n'est  pas  aussi  sensible, bien que le debit
  atteigne la moyenne des deux transferts, plutot que leur somme.

  1100..66..  LLeess ooppttiioonnss SSCCSSII--II,, SSCCSSII--IIII,, SSCCSSII--IIIIII FFAASSTT eett WWIIDDEE,, eettcc..

  Au  fil  des ans, le SCSI a evolue, les nouvelles versions de la norme
  apportant de meilleures performances, des methodes pour augmenter  les
  debits,  des  commandes normalisees pour les nouveaux peripheriques et
  de nouvelles commandes pour les peripheriques deja supportes.

  En tant que telles, les evolutions de la version ne  signifient  rien.
  Exception  faite  de  quelques  details mineurs (du genre : le SCSI-II
  n'autorise pas l'option "initiateur unique" du SCSI-I),  les  versions
  sont  compatibles  ascendantes,  les  nouvelles  fonctionnalites etant
  integrees en tant qu'options et n'etant pas obligatoires. La  decision
  d'appeler  un  peripherique  SCSI SCSI-I, SCSI-II ou SCSI-III est donc
  entierement un choix de vente.

  1100..77..  CCoommppaarraaiissoonn ddeess ppiillootteess

  Comparaison  des  pilotes  (les  chips  supportes  sont  listes  entre
  parentheses)

                                          Nombre de
                                          commandes       SG              > 1
  Pilote          Mode de transfert       simultanees     limite          cartes

                                          total/LUN

  AM53C974        Controle de bus, DMA    12s/1s          255s            O
  aha152x         Scrutation par FIFO(8k) 7s/1s           255s            N
      (AIC6260,
      AIC6360)
  aha1542         Controle de bus, DMA    8s/1s           16              O
  aha1740         Controle de bus, DMA    32s             16              N
  aha274x         Controle de bus, DMA    4s/1s           255s            O
  BusLogic        Controle de bus, DMA    192/31          128s, 8192h     O
  (ces valeurs sont valables pour les BT-948/958/958D, les cartes plus
                               anciennes supportant moins de commandes)

  eata_dma        Controle de bus, DMA    64s-8192h/2-64  512s, 8192h     O
  fdomain         Scrutation par FIFO(8k) 1s              64s             N
      (TMC1800,   sauf le TMC18c30
      TMC18c30,   avec une FIFO de 2k
      TMC18c50,
      TMC36c70)

  in2000*         Scrutation par FIFO(2k) 1s              255s            N
  g_NCR5380       Scrutation pure         16s/2s          255s            O
      (NCR5380,
      NCR53c80,
      NCR5381,
      NCR53c400)
  gsi8*           DMA esclave             16s/2s          255s
      (NCR5380)
  PAS16           Scrutation pure         16s/2s          255s            O
      (NCR5380)   ou Scrutation inter-verrouillee
                  (quelques echecs sur certains systemes !)
  seagate         Scrutation inter-verrouillee
                                          1s/1s           255s            N
  wd7000          Controle de bus, DMA    16s/1s          16              O
  t128            Scrutation inter-verrouillee
                                          16s             255s            O
      (NCR5380)
  qlogic          Scrutation inter-verrouillee
                                          1s/1s           255s            N
  ultrastor       Controle de bus, DMA    16s/2s          32              O
  53c7,8xx        Controle de bus, DMA
      (NCR53c810,
       NCR53c815,
       NCR53c820,
       NCR53c825)
      rel5                                1s/1s           127s            N
      rel10                               8s/1s           127s            O

  Remarques :

  1. Les  pilotes marques d'un asterisque (*) ne sont pas inclus dans la
     distribution du noyau et des images de demarrage  binaires  peuvent
     ne pas etre disponibles.

  2. Les   nombres   suffixes   par  un  's'  representent  des  limites
     arbitraires dans le logiciel, qui  peuvent  etre  changees  par  un
     #define au moment de la compilation.

  3. Les  limitations  materielles  sont indiquees par le suffixe 'h' et
     peuvent differer des limites logicielles actuellement imposees  par
     les pilotes de Linux.

  4. Des  nombres  sans  suffixe  peuvent  indiquer soit des limitations
     materielles, soit des limitations logicielles.

  5. La version 5 du  pilote  NCR53c810  est  incluse  dans  les  noyaux
     standard  1.2.x  et 1.3.x ; la version 10 peut etre telechargee par
     FTP anonyme.

  6. A l'exception de la AM53C974, les cartes a controle de bus DMA sont
     intelligentes  ;  les  NCR executent du microcode depuis la memoire
     principale, les AIC7770  executent  leur  microcode  depuis  de  la
     memoire embarquee sur le composant, toutes les autres utilisent une
     interface du style BAL (mailbox).

  1100..88..  CCoommppaarraaiissoonn ddeess ccoonnttrroolleeuurrss

  Carte                   Pilote          Bus     Prix    Remarques

  Adaptec AIC-6260        aha152x         ISA             composant,
                                                          pas une carte
  Adaptec AIC-6360        aha152x         VLB             composant,
                                                          pas une carte
      (utilise dans la plupart des cartes multi-E/S
       VESA/ISA avec des cartes principales Zenon)
  Adaptec 1520            aha152x         ISA
  Adaptec 1522            aha152x         ISA     $80     1520 avec CdD
                                                          (Controleur de Disquet-
                                                           tes)
  Adaptec 1510            aha152x         ISA             1520 sans ROM de boot,
                                                          auto-detection echouent.
  Adaptec 1540C           aha1542         ISA
  Adaptec 1542C           aha1542         ISA             1540C avec CdD
  Adaptec 1540CF          aha1542         ISA             FAST SCSI-II
  Adaptec 1542CF          aha1542         ISA     $200    1540CF avec CdD
  Adaptec 1640            aha1542         MCA

  Adaptec 1740            aha1740         EISA            n'est plus fabriquee
  Adaptec 1742            aha1740         EISA            n'est plus fabriquee
                                                          1740
                                                          avec CdD
  Adaptec 2740            aha274x         EISA
  Adaptec 2742            aha274x         EISA            avec CdD
  Adaptec 2840            aha274x         VLB
  Adaptec 2842            aha274x         VLB             avec CdD
  Adaptec 2940            aha274x         PCI
  Always IN2000           in2000          ISA
  BusLogic BT-948         BusLogic        PCI     $180    Ultra SCSI
  BusLogic BT-958         BusLogic        PCI     $230    Wide Ultra SCSI

  (reportez-vous au chapitre  ``Cartes  controleurs  multi-maitres  Bus-
  Logic'' pour des details sur d'autres cartes BusLogic)

  DPT     PM2011          eata_dma        ISA             FAST SCSI-II
          PM2012A         eata_dma        EISA            FAST SCSI-II
          PM2012B         eata_dma        EISA            FAST SCSI-II
          PM2021          eata_dma        ISA             FAST SCSI-II
          PM2022          eata_dma        EISA            FAST SCSI-II
          PM2024          eata_dma        PCI             FAST SCSI-II
          PM2122          eata_dma        EISA            FAST SCSI-II
          PM2322          eata_dma        EISA            FAST SCSI-II
          PM2124          eata_dma        PCI             FAST SCSI-II
          PM2124          eata_dma        PCI             FAST SCSI-II
          PM2124          eata_dma        PCI             FAST SCSI-II
          PM2124          eata_dma        PCI             FAST SCSI-II
          PM2124          eata_dma        PCI             FAST SCSI-II
          PM2124          eata_dma        PCI             FAST SCSI-II
          PM2041W         eata_dma        ISA             Wide
                                                          Terminaison unique
                                                                  (Single-ended)
                                                          SCSI-II
          PM2041UW        eata_dma        ISA             Ultra Wide
                                                          Terminaison unique
          PM2042W         eata_dma        EISA            Wide
                                                          Terminaison unique
          PM2042UW        eata_dma        EISA            Ultra Wide
                                                          Terminaison unique
          PM2044W         eata_dma        PCI             Wide
                                                          Terminaison unique
          PM2044UW        eata_dma        PCI             Ultra Wide
                                                          Terminaison unique
          PM2142W         eata_dma        EISA            Wide
                                                          Terminaison unique
          PM2142UW        eata_dma        EISA            Ultra Wide
                                                          Terminaison unique
          PM2144W         eata_dma        PCI             Wide
                                                          Terminaison unique
          PM2144UW        eata_dma        PCI             Ultra Wide
                                                          Terminaison unique
          PM3021          eata_dma        ISA             multi-canaux
                                                          raid/emplacements simm
          PM3122          eata_dma        EISA            multi-canaux/raid
          PM3222          eata_dma        EISA            multi-canaux
                                                          raid/emplacements simm
          PM3224          eata_dma        PCI             multi-canaux
                                                          raid/emplacements simm
          PM3334          eata_dma        PCI             Wide Ultra SCSI
                                                          multi-canaux
                                                          raid/emplacements simm

  DTC 3290                aha1542         EISA            bien qu'ils devraient
                                                          marcher, les materiels
                                                          DTC ne sont pas geres,
                                                          a cause de la politique
                                                          de diffusion des docu-
                                                          mentations
  DTC 3130                53c7,8xx        PCI             '810
  DTC 3130B               53c7,8xx        PCI             '815
  DTC 3292                aha1542         EISA            3290 avec CdD
  DTC 3292                aha1542         EISA            3290 avec CdD
  Future Domain 1680      fdomain         ISA             CdD
  Future Domain 3260      fdomain         PCI
  NCR53c810 (cartes       53c7,8xx        PCI     $60     composant, pas une
      vendues                                     (carte) carte. Les cartes ne
      par FIC, Chaintech,                                 possedent pas de BIOS,
      Nextor, Gigabyte, etc.                              bien que la plupart des
      Cartes avec composant vendues                       cartes non equipees de
      par AMI, ASUS, J-Bond,                              NCR aient le BIOS SDMS
      etc. Frequentes dans les
      systemes PCI DEC)
  NCR53c815 (            53c7,8xx         PCI     $100    NCR53c810 + BIOS
      Intel PCISCSIKIT,
      NCR8150S, etc.)
  NCR53c825              53c7,8xx         PCI     $120    Variante "WIDE" du
                                                          NCR53c815.  Notez que
                                                          le pilote actuel de
                                                          Linux ne negocie pas de
                                                          transferts "WIDE".
  Pro Audio Spectrum 16   pas16           ISA             Carte son avec SCSI
  Seagate ST01            seagate         ISA     $20     Le BIOS ne marche qu'a-
                                                          vec certains lecteurs
  Seagate ST02            seagate         ISA     $40     ST01 avec CdD
  Sound Blaster 16 SCSI   aha152x         ISA             Carte son avec SCSI
  Western Digital 7000    wd7000          ISA             avec CdD
  Trantor T128            t128            ISA
  Trantor T128F           t128            ISA             T128 avec CdD et sup-
                                                          port pour des IRQs ele-
                                                          vees
  Trantor T130B           g_NCR5380       ISA
  Ultrastor 14F           ultrastor       ISA             avec CdD
  Ultrastor 24F           ultrastor       EISA            avec CdD
  Ultrastor 34F           ultrastor       VLB

  Remarques :

  1. Trantor  a  ete recemment rachetee par Adaptec et certains de leurs
     produits sont maintenant vendus sous le nom d'Adaptec.

  2. Suite a un depot de bilan, il n'existe plus aucun support technique
     a cette heure pour les cartes Ultrastor.

  3. Le prix des cartes a controle de bus NCR53c810 n'est pas une erreur
     de frappe ; il inclut le paquetage standard  des  pilotes  ASPI/CAM
     pour  DOS,  OS/2  et  Windows  (acces  32 bits) et d'autres pilotes
     peuvent etre telecharges gratuitement.

     Certains n'ont pas eu a se plaindre de la compagnie

       SW (swt@netcom.com) (214) 907-0871 fax (214) 907-9339

  Au 23 decembre 1995, leur prix etait de $53 pour les cartes '810.

  4. Les  derniers  composants  SCSI   d'Adaptec   font   montre   d'une
     sensibilite   inhabituelle   aux   problemes   de   cablage  et  de
     terminaison. C'est pourquoi je ne  recommanderais  pas  les  cartes
     Adaptec 154x C et CF, pas plus que la serie 2xxx.

     A  remarquer  que  ces problemes de fiabilite ne sont pas constates
     sur les vieilles cartes 154x B et 174x A ou encore, d'apres ce  que
     j'en  sais,  sur les cartes a base des composants AIC-6360/AIC-6260
     (1505, 1510, 1520, etc.).

     La qualite de leur support technique a egalement baisse, les delais
     se  sont  frequemment  allonges  et  les employes sont incompetents
     (arguant par exemple de certaines clauses  de  confidentialite  sur
     des  documents,  alors  qu'il  n'y  en avait pas), parfois hostiles
     (refusant de passer les questions a d'autres techniciens lorsqu'ils
     sont incapables d'y repondre eux-memes).

  5. Si  des  utilisateurs desirent une collaboration ou veulent etablir
     des relations 'politiques' avec Adaptec, les remarques  precedentes
     doivent  etres  prises  en  consideration.  Cela etant, les Adaptec
     152x/1510/1505 sont meilleures que les autres cartes  ISA  dans  la
     meme  gamme  de prix et il y a des affaires a faire avec des cartes
     usagees ou des surplus de 154x B et 1742, ce qui, a mon avis,  doit
     faire oublier le probleme du support.

  6. Toutes  les  cartes  DPT peuvent etre mises a jour avec des modules
     memoire  (cache)  et  raid.  Toutes  les  cartes   sont   egalement
     disponibles en versions "Wide" et/ou differentielles.

  7. Les  cartes  NCR  ne sont pas toutes equivalentes. Ainsi, alors que
     l'ASUS SC200 utilise une terminaison active, la plupart des  autres
     cartes  NCR53c810 utilisent une terminaison passive. Presque toutes
     les cartes '825 ont une terminaison active, mais certaines ont  une
     ROM  pour le BIOS tandis que d'autres ont une ROM Flash. La plupart
     des  cartes  '825  ont  un  large  connecteur  externe,  un   large
     connecteur interne et un connecteur interne fin, bien que quelques-
     unes n'aient pas ce dernier (les cartes bon marche de CSC).

  1100..99..  PPoouurr rreessuummeerr

  La majorite des utilisateurs de cartes ISA, EISA, VESA et  PCI  seront
  probablement  mieux  servis  par les cartes multi-maitres BusLogic, de
  par leur performance,  leurs  fonctionnalites  (comme  la  terminaison
  active) et leur compatibilite avec les Adaptec 1540. Un certain nombre
  de modeles est disponible avec des interfaces EISA, ISA, PCI et  VESA,
  en  terminaison  simple  ou  differentielle, en 8 ou 16 bits. Les tous
  recents  modeles  Ultra  SCSI  PCI,  les   BT-948/958/958D,   incluent
  egalement une ROM Flash pour faciliter les mises a jour du firmware et
  une terminaison automatique "adaptative" (smart termination).

  Les personnes desirant tirer les meilleures performances d'E/S peuvent
  envisager  l'acquisition  de cartes de chez DPT, qui sont les seules a
  gerer le RAID, le cache et plusieurs canaux SCSI.

  Les personnes avec des systemes PCI  pourront  regarder  du  cote  des
  cartes  basees  sur  le  composant  NCR53c8xx.  Ce  sont  des cartes a
  controle de bus ; on peut trouver des '810 a $53 l'unite (c'est-a-dire
  moins cheres que les Adaptec 1520). Le magazine C't a evalue certaines
  de ces cartes. Il ressort des tests qu'elles sont plus rapides que les
  Adaptec  2940  et  les  BusLogic  BT-946C  (sous DOS) et qu'elles s'en
  tirent honorablement sous Linux (jusqu'a 6Mo/s a travers le systeme de
  fichiers).  Les inconvenients de ces cartes comparees aux BusLogic est
  qu'elles ne sont pas  compatibles  avec  les  Adaptec  1540,  qu'elles
  peuvent etre livrees avec ou sans terminaison active et que vous allez
  devoir recuperer les dernieres versions des pilotes (standard dans les
  noyaux  1.3.5x  et  disponibles  par  FTP  pour les noyaux 1.2.x) pour
  exploiter pleinement le materiel, et  qu'enfin  vous  aurez  peut-etre
  plus  de  problemes qu'avec des interfaces de type BAL (mailbox) comme
  sur les BusLogic ou les DPT.

  S'il est important que tout marche du premier coup, une  carte  multi-
  maitres  BusLogic  ou  DPT  est  probablement  le  meilleur  choix, la
  simplicite des interfaces de type BAL comparee  a  la  complexite  des
  interfaces des NCR53c8xx et des Adaptec AIC7xxx faisant la difference.

  Ceux qui veulent des cartes  non  PCI  pour  un  petit  budget  seront
  certainement  heureux  de  trouver  leur  bonheur  dans les surplus de
  cartes Adaptec 154x B ou 174x A, voire avec des clones d'Adaptec  1520
  (aux  alentours  de  $80)  pour  des cartes neuves. Ces cartes ont des
  debits et une reponse interactive acceptables pour un prix modique.

  1111..  AAffffeeccttaattiioonn ddeess nnuummeerrooss ddee mmiinneeuurr

  Suite a l'utilisation par Linux du type dev_t  sur  16  bits,  8  bits
  etant  reserves  pour  le  mineur,  les  disques SCSI, les lecteurs de
  bandes ou de CDROM et les fichiers speciaux generiques ont des mineurs
  attribues dynamiquement, suivant l'algorithme suivant :

       Pour tous les controleurs SCSI, de scsi0 jusqu'a scsiN
               Pour tous les identificateurs SCSI sur le bus, de 0 a 7, sauf pour
               l'identificateur du controleur courant
                       Pour toutes les unites logiques, de 0 a max_scsi_luns
                       - test de la combinaison <bus, cible, unite logique> en
                         envoyant une commande TEST UNIT READY. Si une unite logique
                         est supposee absente, ne plus continuer les tests pour le
                         couple <bus, cible>.
                       - emission d'une commande INQUIRY pour determiner ce qui
                         a ete trouve (type du peripherique, vendeur, modele,
                         version du firmware, etc.).
                       - renvoi du resultat de cette reconnaissance a une fonction
                         speciale d'identification propre a chaque pilote de haut
                         niveau present (par exemple le pilote de disques, de
                         lecteur de bandes, etc.). Attachement de ce peripherique
                         a la prochaine unite disponible pour chaque pilote qui
                         desire gerer ce peripherique. Le gestionnaire generique
                         va tous les attacher.
                       - s'il s'agissait d'un peripherique SCSI-I ou qui fait
                         partie d'une liste de peripheriques connus comme ne
                         gerant pas plusieurs unites logiques, stopper les tests
                         pour le couple <bus, cible>.
                       - s'il s'agissait d'un peripherique connu comme pouvant
                         gerer plusieurs unites logiques, une scrutation de toutes
                         les unites logiques potentielles est commencee, surchargeant
                         la valeur max_scsi_luns.

  Il  y  a  souvent des problemes avec ce genre d'approche, car si votre
  systeme  possede  des  peripheriques  qui  ne  sont  pas  branches  en
  permanence,  les  mineurs  vont dependre des peripheriques presents au
  moment du boot. Cela peut etre genant, car les scripts de demarrage ou
  le  fichier  /etc/fstab  peuvent contenir des instructions pour monter
  des partitions specifiques. Ces commandes peuvent echouer si le disque
  a un mineur different d'une fois sur l'autre.

  Ce  probleme  n'a pas ete completement resolu. Un programme qu'on peut
  trouver sur tsx-11 cree une arborescence /dev/scsi basee sur le numero
  d'hote,  l'identificateur  et  le numero d'unite logique. Ce n'est pas
  particulierement propre, mais cela permet d'eviter pas mal d'ennuis.

  Une meilleure solution passera sans doute  par  le  pseudo  repertoire
  /proc/scsi.  Nous  y travaillons actuellement, aussi pour l'instant ne
  pouvons-nous pas dire quelle sera sa forme definitive.  A  l'heure  ou
  j'ecris  ces  lignes,  cette approche semble prometteuse pour resoudre
  certains de ces points.

