The Linux SCSI HOWTO
 Drew Eckhardt,<[email protected]> (trasformato in formato
 linuxdoc-sgml da Dieter Faulbaum), <[email protected]>
 v2.30, 30 Agosto 1996

 1.  Introduzione

 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.


 That said, I'd appreciate it if people would ask me
 <[email protected]> if there's a newer version available before they
 publish it.  When people publish outdated versions, I get questions
 from users that are answered in newer versions, and it reflects poorly
 on the publisher.  I'd also prefer that all references to free
 distribution sites, and possibly competing distributions/products be
 left intact.


      L'unica licenza valida � quella originale in lingua inglese.
      Di seguito ne trovate una traduzione abbastanza fedele che
      per� non ha alcun valore.


 Questo documento � free; potete redistribuirlo e/o modificarlo nei
 termini stabiliti dalla GNU General Public License versione 2, o (a
 vostra scelta) qualsiasi versione successiva, pubblicata dalla Free
 Software Foundation.

 Questo documento viene distribuito nella speranza che sia di qualche
 utilit�, ma SENZA ALCUNA GARANZIA; senza nemmeno la garanzia implicita
 di COMMERCIABILIT� o di IDONEIT� AD UN PARTICOLARE COMPITO. Per
 ulteriori dettagli consultate la GNU General Public License.

 Dovreste aver ricevuto una copia della GNU General Public License con
 questo documento; se non � cos�, scrivete a: Free Software Foundation,
 Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

 Detto questo, apprezzerei se mi fosse chiesto <[email protected]> se
 esiste un'ultima edizione prima di pubblicarla. Quando vengono
 pubblicate delle versioni obsolete ricevo domande le cui risposte sono
 presenti nelle versioni aggiornate; inoltre preferirei che tutti i
 riferimenti a siti di distribuzione free e a distribuzioni o prodotti
 anche concorrenti fossero lasciati inalterati.

 IMPORTANTE:

 SEGNALAZIONI DI DIFETTI O ALTRE RICHIESTE DI AIUTO CHE NON SEGUANO LE
 PROCEDURE EVIDENZIATE NELLA SEZIONE ``SEGNALAZIONE DI BUG'' SARANNO
 IGNORATE.

 Questo HOWTO tratta il sottosistema Linux SCSI, come � implementato
 nella revisione 1.2.10 del kernel Linux e nel pi� recente codice
 alpha.  Revisioni meno recenti del codice SCSI _non sono supportate_,
 e possono differire in maniera significativa in termini di driver
 implementati, prestazioni e opzioni disponibili.

 Per ulteriori informazioni, potete abbonarvi alla mailing list linux-
 scsi inviando un messaggio a [email protected] con la riga



      subscribe linux-scsi




 nel testo. Potete anche ritirarvi dalla mailing list inviando una mail
 allo stesso indirizzo con



      unsubscribe linux-scsi




 nel testo.

 Una volta che avete aderito, potete inviare posta alla lista
 all'indirizzo:



      [email protected]




 Sono conscio che questo documento non � il pi� user-friendly
 possibile, e che ci potrebbero essere inesattezze o sviste. Se avete
 dei consigli costruttivi su come migliorare la situazione siete liberi
 di inviarmi dei messaggi in proposito.


 2.  Problemi comuni

 Questa sezione fornisce un elenco dei problemi in cui la gente incorre
 comunemente. Se non c'� nulla qui che risponda alle vostre domande,
 dovreste consultare anche le sezioni che riguardano la vostra scheda
 di interfaccia SCSI ed i dispositivi che vi stanno procurando dei
 problemi.


 2.1.  Malfunzionamento generale

 Se vi capitano errori casuali, le cause pi� probabili sono problemi di
 cavi e terminazioni.

 Alcuni prodotti, come quelli basati sui pi� recenti chip NCR, sono
 caratterizzati da filtraggio digitale e negazione attiva del segnale,
 e non sono molto sensibili ai problemi di cablaggio.

 Altri, come Adaptec 154xC, 154xCF, e 274x sono _estremamente_
 sensibili ai problemi di cablaggio e di terminazione e possono dare
 problemi anche con cavi che funzionano con altri sistemi.

 Insisto: alcuni adattatori host sono _estremamente_ sensibili ai
 problemi di cablaggio e di terminazione, quindi cavi e terminatori
 devono essere le due cose da controllare per prime nel caso in cui
 insorgano problemi.

 Per minimizzare i vostri problemi, dovreste usare cavi che:

 1. Siano conformi a SCSI-II.

 2. Abbiano una impedenza caratteristica di 132 ohm.

 3. Provengano tutti dallo stesso produttore, in modo da evitare errati
    accoppiamenti di impedenza.

 4. Provengano da un produttore fidato come Amphenol.

 La tensione di terminazione dovrebbe essere fornita da tutti i
 dispositivi sul bus SCSI, tramite un diodo, in modo tale da prevenire
 cali di corrente, cosicch� ci sia sempre potenza sufficiente nella
 parte terminale dei cavi, laddove � necessaria. Per prevenire danni
 nel caso in cui il bus vada in corto, TERMPWR dovrebbe essere fatto
 passare tramite un fusibile o altri dispositivi di limitazione di
 corrente.

 Se vengono utilizzati dispositivi multipli, cavi esterni, o FAST SCSI
 2, dovrebbe essere utilizzata su entrambe le estremit� del bus SCSI
 una perfetta terminazione attiva o forzata.

 Per ulteriori infomazioni a riguardo della terminazione attiva
 consultate le FAQ di Comp.Periphs.Scsi (disponibili presso tsx-11 in
 pub/linux/ALPHA/scsi).


 2.2.  La linea di comandi kernel

 Altre parti del documento si riferiscono ad una ``linea di comandi
 kernel''.

 La linea di comandi kernel � un insieme di opzioni che potete
 specificare o dal prompt di LILO dopo il nome di un'immagine, o nel
 campo append nel vostro file di configurazione LILO (in LILO .14 e pi�
 recenti, usate /etc/lilo.conf, per versioni pi� vecchie, usate
 /etc/lilo/config).

 Eseguite un boot del vostro sistema con LILO, e schiacciate uno dei
 tasti alt, control, o shift quando appare il prompt. LILO dovrebbe
 rispondere con



      :




 A questo prompt potete selezionare un'immagine kernel di cui eseguire
 il boot, od averne un elenco con ?. Ad esempio



      :?

      ramdisk floppy harddisk




 Per eseguire il boot di quel kernel con le opzioni della linea di
 comando che avete selezionato, semplicemente inserite il nome seguito
 da una lista di opzioni separate fra loro da spazi bianchi, terminando
 con invio.

 Le opzioni assumono la forma di:



      variabile=lista_di_valori




 Dove lista_di_valori pu� essere un singolo valore o una lista di
 valori separati da virgole senza nessuno spazio bianco. Con
 l'eccezione del dispositivo di root, valori individuali sono numeri, e
 possono essere specificati sia in decimale che in esadecimale.

 Ad esempio, per eseguire un boot di Linux con un clone Adaptec 1520
 non riconosciuto al bootup, potete digitare



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




 Se non volete digitare tutto questo nel momento del boot, � anche
 possibile utilizzare l'opzione ``append'' del file di configurazione
 LILO con LILO .13 e versioni pi� recenti.

 Ad esempio



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





 2.3.  Un dispositivo SCSI appare a tutti i possibili ID

 Se questo � il caso, avete impostato il dispositivo allo stesso
 indirizzo del controller (solitamente 7, anche se alcune schede usano
 altri indirizzi: il 6 viene usato da alcune schede di Future Domain.

 Cambiate l'impostazione dei jumper.


 2.4.  Un dispositivo SCSI appare a tutti i possibili LUN

 Il dispositivo ha un firmware difettoso.

 Come soluzione temporanea dovreste provare a usare l'opzione della
 riga di comando kernel:



      max_scsi_luns=1




 Se funziona c'� una lista di dispositivi difettosi nel sorgente del
 kernel, in drivers/scsi/scsi.c nella variabile blacklist (``lista
 nera'').  Aggiungete il vostro dispositivo alla lista e inviate un
 messaggio a Linus Torvalds <[email protected]>.



 2.5.  Vi capitano errori di ``sense'' (non viene riconosciuta la pre�
 senza dei dispositivi) ma sapete che i dispositivi non hanno problemi

 Alcune volte questo � causato da cavi scadenti o da terminazioni
 improprie.  Vedete la sezione ``Malfunzionamento Generale''.


 2.6.  Un kernel configurato con il supporto di rete non funziona

 Le routine di autorilevamento per molti driver di rete non sono
 passive, e la loro esecuzione interferisce con alcuni dei driver SCSI.


 2.7.  Dispositivo individuato, ma non accessibile

 Un dispositivo SCSI viene individuato dal kernel, ma non siete in
 grado di accedervi, ad esempio mkfs /dev/sdc, tar xvf /dev/rst2, ecc.
 non funzionano.

 Non avete un file speciale in /dev per il dispositivo.

 I dispositivi Unix sono identificati come dispositivi a blocchi
 (block) o a caratteri (character) (i dispositivi a blocchi passano
 attraverso un buffer, i dispositivi a carattere no), con un ``numero
 primario'' (major number) (che identifica il driver che viene
 utilizzato - block major 8 corrisponde ai dischi SCSI) ed un ``numero
 secondario'' (minor number) (che corrisponde all'unit� resa
 accessibile tramite un dato driver - ad esempio character major 4,
 minor 0 � la prima console virtuale, minor 1 la successiva, eccetera).
 Comunque, l'accedere a questi dispositivi tramite questi nomi sarebbe
 contrario alla metafora di unix/Linux secondo cui ``tutto � un file'',
 perci� vengono creati sotto /dev file speciali di dispositivo a
 blocchi e a caratteri. Questo vi permette di accedere al terzo disco
 SCSI (nell'insieme, non ad una partizione) con /dev/sdc, alla prima
 porta seriale come /dev/ttyS0, ecc.

 Il metodo preferibile per creare un file � quello di usare MAKEDEV -
 andate sulla directory /dev (cd /dev)

 ed eseguite MAKEDEV (come root) per i dispositivi che volete creare;
 ad esempio:



       ./MAKEDEV sdc




 anche i caratteri jolly ``dovrebbero'' funzionare, ad esempio:



       ./MAKEDEV sd\*




 ``dovrebbe'' creare tutti i dispositivi di dischi SCSI (facendo questo
 dovrebbero essere creati i dispositivi da /dev/sda a /dev/sdp, con
 quindici partizioni ciascuno).
       ./MAKEDEV sdc\*




 ``dovrebbe'' creare /dev/sdc e tutte e quindici le partizioni permesse
 su /dev/sdc, ecc.

 Dico ``dovrebbe'' perch� questo � il comportamento standard di unix -
 lo script MAKEDEV nella vostra installazione potrebbe non essere
 conforme a questo comportamento, o il numero di dispositivi che andr�
 a creare potrebbe essere minore.

 Se MAKEDEV non far� la magia giusta per voi, dovrete creare i file di
 dispositivo a mano con il comando mknod.

 La tipologia blocco/carattere, numeri primari e secondari sono
 indicati in maniera specifica per i vari dispositivi SCSI nella
 sezione ``File di dispositivo''.

 Prendete quei numeri e usate (come root):



      mknod /dev/device b|c major minor




 ad esempio:



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





 2.8.  Blocco del sistema SCSI

 I motivi possono essere molti. Consultate anche la sezione specifica
 per il vostro adattatore host per ulteriori possibili soluzioni.

 Ci sono casi in cui sembra che il blocco avvenga quando pi�
 dispositivi sono in funzione contemporaneamente. In questi casi,
 potete provare a mettervi in contatto con il produttore dei
 dispositivi in modo da vedere se ci sono disponibili degli
 aggiornamenti del firmware in grado di risolvere il problema. Se vi �
 possibile provate un cavo SCSI diverso, oppure provate su un altro
 sistema. Pu� dipendere anche da blocchi difettosi sui dischi, o da un
 cattivo utilizzo del DMA da parte della scheda madre (per adattatori
 host che fanno DMA). Ci sono probabilmente molte altre possibili cause
 che possono portare a problemi del genere.

 Qualche volta questi problemi insorgono quando sul bus sono in
 funzione pi� dispositivi contemporaneamente. In questo caso, se il
 vostro driver dell'adattatore host supporta la presenza contemporanea
 sul bus di pi� comandi, provate a ridurne il numero a 1 e vedete se
 ci� porta a dei miglioramenti. Se avete sul bus dispositivi a nastro o
 lettori CD lenti, quella appena esposta potrebbe non essere una
 soluzione praticabile.



 2.9.  Configurazione e compilazione del kernel

 Driver SCSI inutilizzati occupano memoria, aggravando il problema
 della mancanza di memoria in sistemi piccoli, dato che la memoria
 kernel � ``non paginabile''.

 La cosa migliore � quindi costruire un kernel ``personalizzato'' per
 il vostro sistema, con installati solo i driver di cui c'� effettiva
 necessit�.



      andate sulla directory /usr/src/linux




 Se state utilizzando un dispositivo root diverso da quello corrente, o
 uno schermo diverso da VGA 80x25, e state scrivendo un floppy per il
 boot, dovreste editare il makefile, e accertarvi che le righe



      ROOT_DEV =





 e



      SVGA_MODE =




 siano come le desiderate.

 Se avete installato delle patch, potreste voler essere certi che tutti
 i file siano ricompilati. In questo caso, dovreste digitare



      make mrproper




 Sia che abbiate eseguito make mrproper sia che non l'abbiate fatto,
 digitate



      make config




 e rispondete alle domande di configurazione. Poi eseguite





 make depend




 e infine




      make




 Una volta che la compilazione � completata, potrete aggiornare la
 configurazione di lilo, o scrivere un floppy di boot. Un disco di boot
 pu� essere fatto eseguendo



      make zdisk





 2.10.  LUN diversi da 0 non funzionano

 Molti dispositivi SCSI sono terribilmente difettosi, bloccano il bus
 SCSI, e causano altri problemi quando tentate di parlar loro a una
 unit� logica il cui numero sia diverso da zero.

 Quindi normalmente le versioni recenti del kernel di Linux non
 individueranno lun diversi da zero. Per modificare questo
 comportamento, dovete usare l'opzione della riga di comando
 max_scsi_luns, o ricompilare il kernel con l'opzione
 CONFIG_SCSI_MULTI_LUN.  Solitamente inserirete sulla vostra riga dei
 comandi LILO:



      max_scsi_luns=8




 Se dopo aver seguito questo suggerimento i vostri dispositivi multi-
 LUN non sono ancora individuati correttamente (come pu� essere il caso
 di molte vecchie bridge board SCSI->MFM, RLL, ESDI, SMD, e simili), il
 problema deriva da questa parte di codice:



      /* 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;




 che si trova in scan_scsis() in drivers/scsi/scsi.c. Cancellate questo
 codice e tutto dovrebbe funzionare a dovere.


 3.  Segnalazione di Bug

 A causa di problemi di spazio non sempre gli sviluppatori del Linux
 SCSI conservano vecchie revisioni del codice. Perci� se non state
 usando l'ultimo versione del kernel di Linux rilasciata al pubblico
 (notate che molte delle distribuzioni Linux, come MCC, SLS, Yggdrasil,
 ecc. restano a volte indietro anche di una ventina di patch) ci sono
 molte probabilit� che non saremo in grado di risolvere il vostro
 problema. Perci� prima di segnalare un problema, controllate per
 favore che si presenti anche con la versione pi� recente del kernel.

 Se dopo l'aggiornamento del kernel e la lettura approfondita di questo
 documento siete ancora convinti di aver trovato un errore, inviatene
 una descrizione al canale SCSI della mailing list, dove molte delle
 persone che hanno contribuito ai driver Linux SCSI la potranno vedere.

 Nel segnalare il bug, fornite pi� informazioni che potete a proposito
 della vostra configurazione hardware, il testo esatto di tutti i
 messaggi che Linux stampa quando esegue il boot e quando l'errore si
 verifica, e in che punto del codice sorgente si trova l'errore.
 Utilizzate le procedure elencate in ``Catturare i messaggi'' e
 ``Determinare la provenienza di una ``panic()''''.

 Se non fornite la maggior quantit� possibile di informazioni pu�
 risultare difficile diagnosticare correttamente il vostro problema, e
 gli sviluppatori potrebbero decidere che ci sono problemi pi�
 interessanti da risolvere.

 Insomma, se non siamo in grado di riprodurre il vostro difetto, e voi
 non siete in grado di indicarci cos'� che non funziona, il problema
 non verr� risolto.


 3.1.  Catturare i messaggi

 Se non state usando un sistema di registrazione ("log") dei messaggi
 del kernel, assicuratevi che il filesystem /proc sia montato.



      grep proc /etc/mtab




 Se il filesystem /proc non � montato, montatelo



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




 Copiate il numero di revisione e i messaggi del kernel in un file di
 log



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



 Premete CONTROL-C dopo un paio di secondi.

 Se state eseguendo un qualche logger, dovrete ``sbirciare'' tra i
 logfile giusti (/etc/syslog.conf dovrebbe essere utile per
 localizzarli), o usare dmesg.

 Se Linux non ha ancora eseguito il bootstrap, formattate un dischetto
 floppy sotto DOS. Notate che se avete una distribuzione che monta il
 dischetto di root da floppy piuttosto che dal RAM drive, dovrete
 formattare un dischetto leggibile nel drive non usato per montare la
 root o usare la loro opzione boot da ramdisk.

 Eseguite il boot di Linux dal vostro floppy di distribuzione di boot,
 preferibilmente in modalit� utente singolo usando un RAM disk come
 root.



      mkdir /tmp/dos




 Inserite il dischetto in un drive non usato per montare la root, e
 montatelo. Ad esempio



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




 o



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




 Copiateci il vostro log




      cp /tmp/log /tmp/dos/log




 Smontate il floppy DOS




      umount /tmp/dos





 e chiudete Linux


      shutdown




 Eseguite nuovamente un boot in DOS, e usando il vostro software di
 comunicazione preferito scrivete un messaggio e-mail includendo in
 esso il file di log.


 3.2.  Determinare la provenienza di una ``panic()''

 Come altri unix, quando si imbatte in un errore fatale, Linux chiama
 la funzione kernel panic(). A differenza di altri unix, Linux,
 piuttosto che salvare il core sul dispositivo di swap o di dump ed
 eseguire il reboot, stampa per l'utente un utile elenco di
 informazioni riguardanti lo stato del sistema che deve essere copiato
 a mano. Ad esempio:



      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




 Prendete il numero esadecimale sulla riga EIP:, in questo caso 19c905,
 e cercate in /usr/src/linux/zSystem.map il numero pi� alto non pi�
 grande di quell'indirizzo. Ad esempio:



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




 Questo vi dice in quale funzione �. Ricompilate il file sorgente che
 definisce quel file di funzione con la funzione di debugging attivata,
 o tutto il kernel se preferite e aggiungete un ``-g'' alla definizione
 CFLAGS in /usr/src/linux/Makefile.



      #
      # standard CFLAGS
      #




 Ad esempio,



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




 diventa




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




 Ricompilate il kernel, in maniera incrementale o facendo un




      make clean
      make




 Modificate il vostro /etc/lilo.conf in modo da poter eseguire il boot
 del kernel



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




 ed eseguite nuovamente LILO come root, o create un floppy per il boot



      make zImage




 Riavviate il sistema e registrate il nuovo EIP per l'errore.

 Se avete script installato, potreste voler eseguirlo, perch� tiene un
 log della vostra sessione di debugging nel file typescript.

 Adesso eseguite



      gdb /usr/src/linux/tools/zSystem




 e inserite



      info line *<il vostro EIP>




 ad esempio,



      info line *0x19c905




 A cui GDB risponder� qualcosa del tipo



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




 Scrivetevi queste informazioni, poi inserite


      list <numero di linea>




 Ad esempio:



















 (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",




 Ovviamente, ``quit'' vi porter� fuori da GDB.

 Segnatevi anche queste informazioni, poich� fornisce un contesto nel
 caso in cui i kernel degli sviluppatori differiscano dal vostro.


 4.  Moduli

 Questa sezione fornisce indicazioni specifiche riguardo al supporto
 dei moduli caricabili del kernel e al suo utilizzo con la SCSI.


 4.1.  Informazioni generali

 I moduli caricabili sono un mezzo tramite il quale l'utente o
 l'amministratore del sistema pu� caricare file nella memoria del
 kernel in modo tale da espandere le capacit� del kernel stesso. I
 moduli sono usati comunemente per i driver per supportare l'hardware,
 o per caricare filesystem.

 I moduli per SCSI presentano svariati vantaggi. Uno consiste nel fatto
 che un amministratore di sistema che cerchi di mantenere un alto
 numero di macchine pu� usare una sola immagine kernel per tutte le
 macchine, e poi caricare moduli di kernel per supportare hardware che
 � presente solo su alcune.

 � inoltre possibile per coloro che vogliono costruire una
 distribuzione usare uno script sul floppy di boot per chiedere
 all'utente quali moduli debbano essere caricati. Questo consente di
 risparmiare della memoria che altrimenti sarebbe sprecata per dei
 driver inutilizzati, e diminuisce inoltre la possibilit� che la
 ricerca di una scheda inesistente crei problemi ad una qualche altra
 scheda nel sistema.

 I moduli funzionano bene anche sui laptop, che hanno generalmente meno
 memoria delle macchine desktop, e la gente tende a tenere pi� piccola
 possibile l'immagine kernel e a caricare i moduli quando sono
 effettivamente necessari. Inoltre i moduli rendono pi� semplice il
 supporto delle schede PCMCIA SCSI sui laptop, visto che si pu�
 caricare e scaricare il driver quando la scheda viene inserita e
 rimossa. [nota: attualmente i driver qlogic e 152x supportano PCMCIA].
 Infine, c'� il vantaggio che gli sviluppatori del kernel riescono pi�
 facilmente a correggere e a testare i loro driver, poich� testare un
 nuovo driver non richiede che si compia un reboot della macchina
 (sempre che, ovviamente, la macchina non sia andata in crash a causa
 di un qualche bug presente nel driver).

 Nonostante il fatto che i moduli siano molto belli, c'� una
 limitazione.  Se la partizione di root � su un dispositivo SCSI, non
 potrete utilizzare versioni modularizzate del codice SCSI necessario
 per accedere al disco.  Questo � dovuto al fatto che il sistema deve
 montare la partizione di root prima di poter caricare dei moduli dal
 disco. Ci sono persone che pensano ai modi per modificare il loader e
 il kernel in modo che il kernel sia in grado di caricare da s� i
 moduli prima di tentare di caricare il filesystem root, cos� che un
 giorno anche questa limitazione sar� superata.


 4.2.  Il supporto dei moduli nel kernel 1.2.N

 Nella serie 1.2.N del kernel, c'� un supporto parziale per moduli
 kernel SCSI. Mentre nessuno tra i driver di alto livello (come dischi,
 nastri, ecc.) pu� essere utilizzato come modulo, molti dei driver di
 basso livello (ad esempio 1542, 1522) possono essere caricati e
 scaricati all'occorrenza. Ogni volta che caricate un driver di basso
 livello, il driver per prima cosa cerca delle schede che � in grado di
 controllare.  Poi viene effettuata una scansione del bus per ogni
 scheda trovata, e poi vengono costruite le strutture dati interne in
 modo tale da rendere possibile l'uso effettivo dei dispositivi
 collegati alle schede che il driver sta controllando.

 Quando avete terminato con un driver di basso livello lo potete
 scaricare. Dovete tenere a mente che i contatori d'uso sono mantenuti
 basandosi su filesystem caricati, file aperti, ecc, cos� se state
 ancora utilizzando un dispositivo controllato dal driver, l'utility
 rmmod vi dir� che il dispositivo � occupato, e si rifiuter� di
 scaricare il driver. Quando il driver � scaricato, tutte le strutture
 di dati associate risultano anch'esse libere, cos� che lo stato del
 sistema dovrebbe tornare a ci� che era prima che il modulo venisse
 caricato.  Questo significa che il driver pu� essere nuovamente
 montato in un momento successivo, se necessario.


 4.3.  Il supporto dei moduli nel kernel 1.3.N

 Nella serie 1.3 dei kernel, il codice SCSI � completamente
 modularizzato.  Questo significa che potete iniziare con un kernel che
 non possiede alcun supporto SCSI, cominciare a caricare i moduli e
 finire per avere un supporto completo.

 Se lo desiderate potete compilare alcune parti del codice SCSI nel
 kernel e poi caricare altre parti successivamente: quanto viene
 caricato durante l'esecuzione e quanto � interno al kernel dipende
 solo da voi.

 Se state incominciando con un kernel che non ha alcun tipo di supporto
 SCSI, allora la prima cosa da fare � di caricare il core SCSI nel
 kernel - questo � in un modulo chiamato ``scsi_mod''). Non sarete in
 grado di caricare nessun altro modulo SCSI finch� non lo avrete
 caricato nella memoria kernel. Poich� non contiene alcun driver di
 basso livello, l'atto di caricare questo modulo non provocher� una
 ricerca tra i bus, n� attiver� alcun driver per dischi SCSI, nastri
 ecc. Se avete risposto 'Y' alla domanda CONFIG_SCSI quando avete
 compilato il kernel, non avrete bisogno di caricare questo modulo.

 A questo punto potete aggiungere moduli pi� o meno in qualsiasi ordine
 per ottenere le funzionalit� desiderate. Vengono usati contatori di
 uso per prevenire lo scaricamento di qualsiasi componente che potrebbe
 ancora essere in funzione, e riceverete un messaggio da rmmod se un
 modulo � ancora occupato.

 I driver di alto livello si trovano in moduli di nome ``sd_mod'',
 ``sr_mod'', ``st'' e ``sg'' per il supporto rispettivamente di dischi,
 cdrom, nastri e dispositivi SCSI generici. Quando caricate un driver
 di alto livello viene esaminata la lista dei dispositivi collegati per
 trovare quelli che il driver pu� controllare, e questi ultimi vengono
 automaticamente attivati.

 L'uso dei moduli con i driver di basso livello � stato descritto nella
 sezione ``Il supporto dei moduli nel kernel  1.2.N''. Quando viene
 caricato un driver di basso livello viene eseguita una scansione del
 bus e ogni dispositivo viene esaminato da ciascuno dei driver di alto
 livello per vedere se si tratta di qualcosa che possono controllare:
 ogni cosa che viene riconosciuta viene automaticamente collegata ed
 attivata.


 5.  Host

 Questa sezione fornisce informazioni specifiche a proposito dei
 diversi adattatori host che sono in qualche modo supportati sotto
 linux.


 5.1.  Hardware supportato e non supportato

 Driver nella distribuzione del kernel:

 Adaptec 152x, Adaptec 154x (schede DTC 329x solitamente funzionano, ma
 non sono supportate), Adaptec 174x, Adaptec 274x/284x (il supporto per
 294x richiede un versione pi� recente del driver), BusLogic
 MultiMaster Host Adapters, schede che rispettano gli standard EATA-DMA
 e EATA-PIO (DPT PM2001, PM2011, PM2012A, PM2012B, PM2021, PM2022,
 PM2024, PM2122, PM2124, PM2322, PM2041, PM2042, PM2044, PM2142,
 PM2144, PM2322, PM3021, PM3122, PM3222, PM3224, PM3334, alcune schede
 NEC, AT&T, SNI, AST, Olivetti, e Alphatronix), Future Domain 850, 885,
 950, e altre schede di questa serie (ma non le 840, 841, 880, e 881 a
 meno di non aggiungere la patch appropriata), Future Domain 16x0 con
 chip TMC-1800, TMC-18C30, o TMC-18C50, NCR53c8xx, le porte SCSI della
 PAS16 SCSI, Seagate ST0x, schede Trantor T128/T130/T228, Ultrastor
 14F, 24F, e 34F, e Western Digital 7000.

 MCA:

 Le schede MCA compatibili con una scheda supportata (ad esempio
 Adaptec 1640 and BusLogic 640) funzionano.

 Driver alpha:

 Molti driver ALPHA sono disponibili presso



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




 Driver che funzioneranno con delle modifiche

 NCR53c8x0/7x0:


      E' stato sviluppato un driver NCR53c8xx, ma attualmente non funziona
      con chip NCR53c700, NCR53c700-66, NCR53c710, e NCR53c720. Segue un
      elenco di modifiche necessarie per far funzionare ciascuno di questi
      chip, ognuna accompagnata della complessit�.

      NCR53c720 (triviale) - modifiche al codice di rilevamento, modifiche
          all'inizializzazione, cambio del codice di correzione per
          rimappare i registri del '810 sul '7xx.

      NCR53c710 (triviale) - modifiche al codice di rilevamento, modifiche
          all'inizializzazione, cambio del codice di correzione per
          rimappare i registri del '810 sul '7xx, modifiche ai gestori di
          interrupt per trattare interrupt IID dall'istruzione INTFLY per
          emularlo.

      NCR53c700, NCR53c700-66 (molto complicato) - modifiche al codice di
          rilevamento, modifiche all'inizializzazione, cambio del codice NCR
          per non usare DSA, modifica del codice Linux per gestire i cambi
          di contesto.




 Host SCSI che non funzionano :

 Tutti gli adattatori parallelo->SCSI, schede SCSI Rancho e schede
 Grass Roots SCSI. Schede BusLogic FlashPoint, come ad esempio
 BT-930/932/950 non sono attualmente supportate.

 Host SCSI che non funzioneranno MAI :

 Schede non compatibili Adaptec, schede non NCR53c8xx DTC (incluse le
 3270 e 3280).

 Schede CMD SCSI.

 L'acquisire informazioni a proposito della programmazione richiede un
 patto di non divulgazione (Non-Disclosure Agreement) con DTC/CMD.
 Quindi sarebbe impossibile distribuire un driver Linux se ne fosse
 scritto uno, poich� seguire il NDA significherebbe non distribuire
 sorgente, in violazione della GPL, e seguire la GPL significherebbe
 distribuire sorgente, in violazione del NDA.

 Se volete eseguire Linux con qualche altro componente hardware non
 supportato, le vostre opzioni sono o di scrivervi da soli un driver
 (Eric Youngdale ed io siamo disposti a rispondere a domande a
 proposito di driver Linux SCSI), oppure commissionarlo a terzi (le
 normali tariffe di consulenza indicano che questa non � un opzione
 praticabile per l'uso personale).


 5.1.1.  Adattatori per host multipli

 Alcuni adattatori (``Guida all'acquisto: confronto delle
 caratteristiche''), permettono l'uso di pi� adattatori dello stesso
 tipo nello stesso sistema.  Con pi� adattatori dello stesso tipo nello
 stesso sistema, solitamente quello all'indirizzo pi� basso sar� scsi0,
 quello all'indirizzo seguente sar� scsi1, ecc.

 In tutti i casi, � possibile usare pi� adattatori di tipo diverso
 purch� i loro indirizzi non siano in conflitto. La scansione dei
 controller SCSI avviene nell'ordine specificato nel vettore
 builtin_scsi_hosts[] in drivers/scsi/hosts.c, che � generalmente:



 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, debugging driver.


 Nella maggior parte dei casi (ad esempio, non state provando ad usare
 driver sia il driver BusLogic che Adaptec), questo pu� essere
 modificato secondo le vostre esigenze (ad esempio, mantenere gli
 stessi dispositivi quando vengono aggiunti al sistema su un nuovo
 controller nuovi dispositivi SCSI) spostando le varie voci.


 5.2.  Problemi comuni



 5.2.1.  Timeout SCSI

 Accertatevi che gli interrupt siano attivati nella maniera corretta, e
 che non ci siano conflitti di IRQ, DMA, o di indirizzi con altre
 schede.


 5.2.2.  dipendono da BIOS per l'autorilevamento Fallimento delle rou�
 tine di autorilevamento su schede che

 Se il vostro adattatore � uno dei seguenti:


      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, o Western Digital 7000


 e non � individuato all'avvio del sistema, ad esempio vi appare



      scsi : 0 hosts




 o un messaggio



      scsi%d : tipo




 non � stampato per ogni adattatore SCSI supportato installato nel
 sistema, potreste avere un problema con la routine di autorilevamento
 che non riconosce la vostra scheda.

 L'autorilevamento fallir� ugualmente per driver che usano il BIOS per
 l'autorilevamento se il BIOS � disattivato. Controllate due volte che
 il vostro BIOS sia attivato, e non sia in conflitto con i BIOS di
 altre periferiche.

 L'autorilevamento fallir� anche nel caso in cui la ``signature''
 (``firma'': una stringa che identifica una particolare scheda) della
 scheda e/o l'indirizzo BIOS non combacino con indirizzi e signature
 conosciuti.

 Se il BIOS � installato usate DOS e DEBUG per trovare una signature
 che permetter� di individuare la scheda.

 Ad esempio, se la vostra scheda si trova all'indirizzo 0xc8000, sotto
 DOS eseguite



      debug
      d c800:0
      q




 e inviate un messaggio alla mailing list SCSI contenente il messaggio
 ASCII, la lunghezza e l'offset dall'indirizzo base (ad esempio,
 0xc8000).  Notate che � richiesto il testo ESATTO, e dovreste inviare
 sia le porzioni hesadecimali che ASCII del testo.

 Se il BIOS non � installato, e state usando un driver Adaptec 152x,
 Trantor T128, o Seagate, potete usare la linea di comando oppure
 intervenire a tempo di compilazione per forzare il riconoscimento.

 Consultate anche il sottoparagrafo appropriato per la vostra scheda
 SCSI e anche la sezione ``Malfunzionamento  generale''.


 5.2.3.  Schede che utilizzano I/O memory mapped non funzionano

 (Questo comprende le schede Trantor T128 e Seagate, ma non i driver
 Adaptec, generiche NCR5380, PAS16, e Ultrastor).

 Questo mancato funzionamento si ha spesso quando il caching delle
 porte di I/O memory mapped � eseguito in maniera non corretta.
 Dovreste avere lo spazio dell'indirizzo delle schede marcato come non
 cachable nei settaggi XCMOS.

 Se questo non � possibile, dovreste disattivare interamente la cache.

 Se avete specificato manualmente l'indirizzo della scheda, ricordatevi
 che Linux ha bisogno dell'indirizzo reale della scheda, e non del
 segmento di 16 byte a cui la documentazione pu� riferirsi.

 Ad esempio, 0xc8000 sarebbe corretto, 0xc800 non funzionerebbe e
 potrebbe causare problemi di corruzione della memoria.


 5.2.4.  Eseguendo il boot da un floppy con un driver ALPHA si ottiene.
 "kernel panic : cannot mount root device"

 Avrete bisogno di modificare l'immagine binaria del kernel (prima o
 dopo averla scritta sul disco), e di modificare alcuni campi a due
 byte (in formato little endian, cio� i bit meno significativi vengono
 per primi) per garantire che funzioner� sul vostro sistema:


 1. il dispositivo di swap predefinito, a offset 502, dovrebbe essere
    impostato a 0x00 0x00

 2. la dimensione del ram disk, a offset 504, dovrebbe essere impostata
    all'ampiezza del floppy di boot in K - ad esempio, 5.25" = 1200,
    3.5" = 1440.
      Questo significa che i byte sono

      3.5" : 0xA0 0x05
      5.25" : 0xB0 0x04





 3. dispositivo di root, a offset 508, dovrebbe essere impostato a 0x00
    0x00, cio� al dispositivo da cui si esegue il boot.

 Scrivete il file su disco usando dd o rawrite. Inserite il disco nel
 primo drive floppy, aspettate finch� non appare il prompt che vi dice
 di inserire il disco root, e poi inserite il floppy di root della
 vostra distribuzione.


 5.2.5.  Installare un driver di dispositivo non incluso nella dis�
 tribuzione del kernel

 Avete bisogno di incominciare con la versione del kernel usata
 dall'autore del driver. Probabilmente si parla di questa revisione
 nella documentazione del driver.

 Potete trovare parecchie revisioni recenti del kernel presso:


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




 con il nome linux-version.tar.gz

 Si trovano anche presso tsx-11.mit.edu e vari altri siti



      andate (cd) nella directory /usr/src.




 Rimuovete i vostri vecchi sorgenti Linux; se volete tenere una loro
 copia di backup:



      mv linux linux-old




 scompattate il file



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




 Applicate le patch. Le patch saranno relative a qualche directory nel
 filesystem. Esaminando le righe di file di output nel file di patch
 (con il comando ``grep ^---''), siete in grado di stabilire dove si
 trova il file; ad esempio patch con queste linee:



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

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




 avranno i file relativi a /usr/src/linux.

 Scompattate i sorgenti del driver in un luogo appropriato - potete
 digitare:



      tar tfv patches.tar




 per ottenere un elenco, e muovere i file nella maniera necessaria (i
 file del driver SCSI dovrebbero stare in
 /usr/src/linux/kernel/drivers/scsi).

 Oppure spostatevi nelle directory a cui sono relativi e digitate:



      patch -p0 < patch_file





 per applicare le patch. Ad esempio, se i file iniziassero con:



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




 e voi voleste applicare le patch mentre si trovano in /usr/src/linux,
 potreste entrare nella directory /usr/src/linux e digitare:



      patch -p1 < patches




 per trascurare la componente "linux-new".

 Dopo aver applicato le patch, controllate che non ci sia alcun errore
 di applicazione delle patch stesse, che si manifester� con il nome del
 file seguito da un suffisso #.



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

 Se qualcuno di questi esiste, osservateli attentamente. In alcuni
 casi, le differenze consisteranno negli identificatori RCS e saranno
 innocue, altre volte dovrete applicare manualmente delle parti
 importanti.  Documentare i file diff e patch va oltre gli scopi di
 questo documento.

 Consultate anche ``Configurazione e  compilazione del kernel''.


 5.2.6.  Installazione di un driver che non ha patch

 In alcuni casi un autore di driver pu� non offrire patch con i file .c
 e .h che contengono il suo driver, o le patch possono essere per una
 versione pi� vecchia del kernel e quindi non installarsi in maniera
 ``pulita''.


 1. Copiate i file .c e .h in /usr/src/linux/drivers/scsi

 2. Aggiungete l'opzione di configurazione

    Modificate /usr/src/linux/config.in, aggiungendo una riga nella
    sezione:



      *
      * SCSI low-level drivers
      *





 aggiungete una variabile booleana di configurazione per il vostro
 driver.  Ad esempio:



      bool 'Always IN2000 SCSI support' CONFIG_SCSI_IN2000 y





 3. Aggiungete le righe occorrenti al makefile

    Modificate /usr/src/linux/drivers/scsi/Makefile, aggiungendo
    qualcosa come:



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





 prima della riga:




 scsi.a: $(SCSI_OBJS)





 nel makefile, dove il file .c � il file .c che voi avete copiato, e il
 file .o � il nome base del file .c con un suffisso .o.

 4. Aggiungete i punti di entrata

    Modificate /usr/src/linux/drivers/scsi/hosts.c, aggiungendo un
    #include per l'header file, condizionato dal fatto che la macro di
    preprocessing CONFIG_SCSI (che avete aggiunto al file di
    configurazione) sia o meno definita. Ad esempio, dopo



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





 potreste aggiungere



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





 Dovrete anche aggiungere Scsi_Host_Template al vettore scsi_hosts[].
 Date un'occhiata nel file .h, e dovreste trovare un #define che
 assomiglia 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}





 Prendete il nome della definizione di preprocessore, e aggiungetela al
 vettore scsi_hosts[], condizionato dalla definizione o meno del sim�
 bolo di preprocessing che avete usato nel file di configurazione.

 Ad esempio, dopo:




 #ifdef CONFIG_SCSI_GENERIC_NCR5380
         GENERIC_NCR5380,
 #endif





 potreste aggiungere



      #ifdef CONFIG_SCSI_IN2000
              IN2000,
      #endif





 Vedete anche ``Configurazione e compilazione  del kernel''.



 5.2.7.  Una scheda PCI non funziona in un sistema Compaq

 Un certo numero di sistemi Compaq mappa le estensioni BIOS a 32 bit
 usate per cercare i dispositivi PCI, in una parte di memoria
 inaccessibile al kernel Linux a causa del layout della memoria. Se
 Linux non � in grado di individuare una scheda PCI SCSI supportata, e
 vi dice qualcosa come:



      pcibios_init: entry in high memory, unable to access




 Prendete:



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




 che � un archivio autoscompattante contenente un programma che
 rilocher� il codice BIOS32.


 5.2.8.  Un sistema con schede PCI rimane bloccato dopo il messaggio %d
 Host


 Alcuni sistemi PCI hanno BIOS malfunzionanti che disattivano gli
 interrupt e non sono in grado di riattivarli prima di restituire il
 controllo al programma chiamante. La seguente patch risolve questo
 problema:






 --- 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.3.  Adaptec 152x, 151x, 1505, 282x, Sound Blaster 16 SCSI, SCSI Pro,
 Gigabyte e altri prodotti basati su AIC 6260/6360 (Standard)


 Configurazioni supportate



      indirizzi BIOS  : 0xd8000, 0xdc000, 0xd0000, 0xd4000, 0xc8000, 0xcc000,
                        0xe0000, 0xe4000.
      Porte           : 0x140, 0x340
      IRQ             : 9, 10, 11, 12
      DMA             : non usato
      IO              : port mapped


 Autorilevamento:



      Funziona con molte schede con un BIOS installato. Tutte le altre schede,
      inclusa la Adaptec 1510, e la Sound Blaster16 SCSI devono usare una riga
      di comandi kernel o impostazioni a tempo di compilazione.




 Impostazioni manuali:

 Al momento della compilazione:



      Definite in modo appropriato PORTBASE, IRQ, SCSI_ID, RECONNECT,
      PARITY, vedete ``Definizioni''.




 Linea di comando kernel:



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




 SCSI-ID � lo SCSI ID dell'adattatore HOST, non degli eventuali
 dispositivi ad esso connessi. Solitamente dovrebbe essere 7.

 Per forzare il riconoscimento di una scheda a 0x340, IRQ 11, SCSI-ID
 7, con disconnessione/riconnessione permesse, dovreste usare la
 seguente opzione di riga di comandi:



      aha152x=0x340,11,7,1




 Problemi di ``arretratezza'' che si risolvono aggiornando :


 1. Il driver non funziona con le schede VLB. C'era un problema di
    temporizzazione in kernel pi� vecchi della revisione 1.0.5

 Definizioni:













 AUTOCONF        : usa la configurazione riportata dal controller (solo 152x)
 IRQ             : imposta il canale di interrupt (9,10,11 o 12) (predefinito
                   11)
 SCSI_ID         : imposta lo SCSI ID dell' AIC-6260 (0-7) (predefinito 7)
 RECONNECT       : imposta disconnessione/riconnessione (ponetelo diverso da
                   zero per permetterle e a zero per disattivarle)
 DONT_SNARF      : Non registrare le porte (pl12 e sotto)
 SKIP_BIOSTEST   : Non testare per una signature BIOS (AHA-1510 o BIOS
                   disattivato)
 PORTBASE        : Forza l'indirizzo base. Non effettuare la ricerca automatica.





 5.4.  Adaptec 154x, AMI FastDisk VLB, DTC 329x (Standard)


 Configurazioni supportate



      Porte           : 0x330 e 0x334
      IRQ             : 9, 10, 11, 12, 14, 15
      canali DMA      : 5, 6, 7
      IO              : port mapped, bus master




 Autorilevamento:



      trover� schede solo a 0x330 e 0x334.




 Impostazioni manuali:




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




 Note:


 1. BusLogic costruisce una serie di schede che sono compatibili a
    livello di software con Adaptec 1542, e ce ne sono per i bus ISA,
    VLB, EISA, e PCI.

 2. Schede il cui nome non ha suffisso, e vecchie schede con il
    suffisso ``A'' non supportano scatter/gather, e quindi non
    funzionano.  Comunque si riesce a farle funzionare in qualche modo
    se AHA1542_SCATTER � modificato in 0 in drivers/scsi/aha1542.h.

 Problemi di ``arretratezza'' che si risolvono aggiornando:


 1. Revisioni del kernel precedenti alla .99.10 non supportano la
    revisione 'C'.
 2. Revisioni del kernel precedenti alla .99.14k non supportano le
    opzioni di revisione 'C' per:


 �  supporto BIOS per il mapping esteso per dischi > 1G;

 �  supporto BIOS per pi� di 2 drive;

 �  supporto BIOS per autoscanning del bus SCSI.


 3. Le revisioni precedenti alla .99.15e del kernel non supportano il
    mapping esteso per dischi > 1G non attivo.

 4. Revisioni precedenti alla .99.14u del kernel non supportano le
    revisioni 'CF' delle schede.

 5. Le versioni precedenti alla 1.0.5 del kernel hanno un problema di
    corsa critica quando devono accedere a pi� dispositivi
    contemporaneamente.

 Problemi comuni :


 1. Ci sono errori inattesi con schede 154xC o 154xCF,


    Gli esemplari pi� vecchi delle schede 154xC hanno un alto grado di
    deviazione su uno dei segnali SCSI, che causa la riflessione del
    segnale quando vengono usati cavi di impedenza sbagliata.

    Le schede pi� recenti non sono molto migliori, ed hanno anche una
    estrema sensibilit� al tipo dei cavi e dei terminatori.

    Vedi anche Problemi Comuni ``#2'' e ``#3'' e ``Problemi comuni'',
    ``Malfunzionamento generale''.


 2. Ci sono errori inattesi con schede 154xC o 154x, con collegati
    dispositivi sia interni che esterni.

    Si tratta probabilmente di un problema di terminazione. Per poter
    disattivare via software la terminazione dell'adattatore host,
    dovete spegnere lo switch 1.

    Vedi anche Problemi Comuni ``#1'' e ``#3'' e ``Problemi  comuni'',
    ``Malfunzionamento generale''.

 3. Il sottosistema SCSI si blocca completamente.


    Ci sono casi in cui i bloccaggi sembrano avvenire quando pi�
    dispositivi sono in funzione contemporaneamente. In questo caso,
    potete tentare di mettervi in contatto con il produttore dei
    dispositivi e vedere se sono disponibili aggiornamenti firmware in
    grado di correggere il problema.  Come ultima risorsa, potete
    modificare, in aha1542.h, AHA1542_MAILBOX in 1. Questa operazione
    vi limiter� effettivamente a un solo comando sul bus SCSI alla
    volta, e ci� potrebbe migliorare la situazione. Se avete sul bus
    lettori a nastro o cdrom lenti, potrebbe essere una soluzione non
    pratica.

    Vedi anche Problemi Comuni ``#1'' e ``#2'' e ``Problemi comuni'',
    ``Problemi comuni : Blocco del sistema SCSI''.


 4. Un messaggio "Interrupt received, but no mail" viene stampato al
    bootup e i vostri dispositivi SCSI non vengono rilevati.

    Disattivate le opzioni BIOS per supportare la mappatura estesa per
    dischi > 1G per pi� di 2 drive, e per l'autoscanning del bus.
    Oppure, aggiornatevi a Linux .99.14k o a una versione pi� recente.

 5. Se capitano, sulla schede di revisione 'C', un infinit� di errori
    di timeout, potreste dovere entrare nel programma di setup Adaptec
    e attivare ``synchronous negotiation'' (negoziazione sincrona).

 6. Linux 1.2.x d� il messaggio

    Unable to determine Adaptec DMA priority.  Disabling board.

    Questo � dovuto a un conflitto su alcuni sistemi con il driver
    BusLogic obsoleto. O ricompilate il vostro kernel senza, oppure
    date al driver BusLogic un opzione di linea di comando che dice di
    guardare da qualche altra parte rispetto a dove � configurato il
    vostro controller. Ad esempio, se avete una scheda Adaptec alla
    porta 0x334, e nulla alla 0x330, usate un'opzione di linea di
    comando come:



      buslogic=0x330





 7. Il sistema si blocca con un accesso simultaneo a pi� dispositivi su
    un 1542C o 1540C e con sconnessione attiva.

    Alcune revisioni del firmware Adaptec hanno dei bug.
    L'aggiornamento al BIOS v2.11 risolve significativamente questi
    problemi.


 5.5.  Adaptec 174x


 Configurazioni supportate



      Slot            : 1-8
      Porte           : non applicabile: � una scheda EISA
      IRQ             : 9, 10, 11, 12, 14, 15
      Canali DMA      : non applicabile: � una scheda EISA
      IO              : port mapped, bus master




 Autorilevamento:



      funziona con tutte le configurazioni supportate.




 Impostazioni manuali:

      nessuna.




 Note:

 1. La produzione di questa scheda � stata interrotta da Adaptec.

 Problemi comuni :

 1. Se il driver Adaptec 1740 stampa il messaggio "aha1740: Board
    detected, but EBCNTRL = %x, so disabled it."

    la vostra scheda � stata disattivata perch� non stava funzionando
    in modalit� enhanced. Schede che funzionano in una modalit�
    standard 1542 non sono supportate.


 5.6.  Adaptec 274x, 284x (Standard) 294x (ALPHA)


 Una versione pi� recente che supporta anch'essa le schede Adaptec 294x
 � disponibile presso:



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




 Configurazioni supportate :



                        274x           284x            294x
      Slot EISA       : 1-12           N/A             N/A
      Porte           : N/A            TUTTE           TUTTE
      IRQ             : TUTTI          TUTTI           TUTTI
      Canali DMA      : N/A            TUTTI           N/A
      IO              : port mapped, bus master




 Impostazioni manuali:

 linea di comando kernel:



      aha274x=extended
      (per forzare il mapping esteso)





 Note:

 1. Il BIOS DEVE essere attivato.

 2. Il canale B su schede 2742AT � ignorato.


 3. CONFIG_PCI deve essere settato se state usando una scheda PCI


 5.7.  Always IN2000 (Standard)


 Configurazioni supportate :



      Porte          : 0x100, 0x110, 0x200, 0x220
      IRQ            : 10, 11, 14, 15
      DMA            : non usato
      IO             : port mapped




 Autorilevamento :



      BIOS non richiesto.




 Impostazioni manuali:



      nessuna.




 Problemi comuni :


 1. Ci sono problemi noti in sistemi con drive IDE e con lo swapping.


 5.8.  Adattatori Host BusLogic MultiMaster


 (questa sezione Copyright 1995 di Leonard N. Zubkoff
 <[email protected]>) (vedete README.BusLogic per ulteriori e pi�
 complete informazioni sui driver BusLogic)


















                 Driver SCSI BusLogic MultiMaster per Linux

                     Versione 1.2.2 per Linux 1.2.13
                     Versione 1.3.2 per 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 Aprile 1996

                          Leonard N. Zubkoff
                          Dandelion Digital
                          [email protected]

 BusLogic, Inc. progetta e produce una serie di adattatori host SCSI ad
 alte prestazioni che condividono una interfaccia di programmazione comune
 su varie architetture di bus grazie alla loro tecnologia MultiMaster
 ASIC. Questo driver supporta tutti gli adattatori host BusLogic
 MultiMaster attuali, e dovrebbe supportare ogni tipo di progetto
 MultiMaster futuro con piccole modifiche. Gli adattatori basati sulla
 nuova architettura FlashPoint non sono supportati da questo driver;
 consultate il file README.FlashPoint per informazioni a proposito di un
 programma di aggiornamento per gli utenti di Linux dal FlashPoint LT,
 non supportato, al BT-948, supportato.

 I miei principali obiettivi nello scrivere questo driver BusLogic
 completamente nuovo sono quelli di sfruttare la piena potenzialit� di
 cui sono capaci gli adattatori host BusLogic SCSI e le moderne
 periferiche SCSI, e di fornire un driver altamente robusto su cui si pu�
 contare per applicazioni critiche con alte prestazioni. Tutte le
 caratteristiche principali di performance e di correzione degli errori
 possono essere configurate dalla linea dei comandi kernel di Linux,
 permettendo cos� installazioni personalizzate per regolare le prestazioni
 e il recupero degli errori sulle proprie necessit�.

 BusLogic � stata una eccellente compagnia con cui lavorare e consiglio
 caldamente i loro prodotti alla comunit� Linux. Nel novembre del 1995 mi
 � stata offerta l'opportunit� di divenire un beta tester per il loro
 ultimo prodotto MultiMaster, l'adattatore host SCSI BT-948 PCI Ultra, e
 poi nuovamente per l'adattatore SCSI BT-958 PCI Wide Ultra nel gennaio
 1996. Tutto ci� si rivel� benefico per entrambi, poich� BusLogic
 raggiunse un grado e una tipologia di testing che il loro stesso gruppo
 di testing non pu� raggiungere facilmente, e la comunit� Linux ha a
 disposizione adattatori host di alta qualit� che sono stati ben testati
 con Linux prima ancora di essere immessi sul mercato. Questo rapporto ha
 inoltre dato a me la possibilit� di interagire direttamente con il loro
 staff tecnico, di comprendere di pi� a proposito della lavorazione
 interna sui loro prodotti, e in cambio di insegnare loro le necessit� e le
 potenzialit� della comunit� Linux. Il loro interesse e supporto �
 apprezzato enormemente.

 A differenza di altri venditori, se vi mettete in contatto con il
 Supporto Tecnico BusLogic per un problema, e state eseguendo Linux, non vi
 diranno che il vostro uso del prodotto non � supportato. La loro
 ultimissima produzione di marketing afferma infatti: "gli adattatori host
 BusLogic SCSI sono compatibili con tutti i maggiori sistemi operativi
 compresi: ... Linux ...".

 BusLogic, Inc. si trova a 4151 Burton Drive, Santa Clara, California,
 95054, USA e pu� essere raggiunta telefonicamente al 408/492-9090 o
 tramite FAX al 408/492-1542. BusLogic possiede un sito World Wide Web
 http://www.buslogic.com, un sito FTP a: ftp.buslogic.com, e una BBS a
 408/492-1984. Il Supporto Tecnico BusLogic Technical pu� essere contattato via
 posta elettronica all'indirizzo [email protected], per telefono al
 408/654-0760, o via FAX al 408/492-1542. Informazioni per
 contattare uffici in Europa e Giappone sono disponibili presso il sito web.
 ADATTATORI DI HOST SUPPORTATI

 L'elenco che segue comprende gli adattatori host BusLogic SCSI supportati
 alla data di questo documento. � consigliabile, per chiunque sia
 intenzionato a comprare un adattatore BusLogic SCSI non compreso in
 questo elenco, mettersi in contatto con l'autore prima dell'acquisto in
 modo da verificare se sar� o meno supportato.

 Serie "W":

 BT-948          PCI     Ultra Fast Single-ended SCSI-2
 BT-958          PCI     Ultra Wide Single-ended SCSI-2
 BT-958D         PCI     Ultra Wide Differential SCSI-2

 Serie "C":

 BT-946C         PCI     Fast Single-ended SCSI-2
 BT-956C         PCI     Fast Wide Single-ended SCSI-2
 BT-956CD        PCI     Fast Wide Differential SCSI-2
 BT-445C         VLB     Fast Single-ended SCSI-2
 BT-747C         EISA    Fast Single-ended SCSI-2
 BT-757C         EISA    Fast Wide Single-ended SCSI-2
 BT-757CD        EISA    Fast Wide Differential SCSI-2
 BT-545C         ISA     Fast Single-ended SCSI-2
 BT-540CF        ISA     Fast Single-ended SCSI-2

 Serie "S":

 BT-445S         VLB     Fast Single-ended SCSI-2
 BT-747S         EISA    Fast Single-ended SCSI-2
 BT-747D         EISA    Fast Differential SCSI-2
 BT-757S         EISA    Fast Wide Single-ended SCSI-2
 BT-757D         EISA    Fast Wide Differential SCSI-2
 BT-545S         ISA     Fast Single-ended SCSI-2
 BT-542D         ISA     Fast Differential SCSI-2
 BT-742A         EISA    Single-ended SCSI-2 (742A revisione H)
 BT-542B         ISA     Single-ended SCSI-2 (542B revisione H)

 Serie "A":

 BT-742A         EISA    Single-ended SCSI-2 (742A revisioni A - G)
 BT-542B         ISA     Single-ended SCSI-2 (542B revisioni A - G)

 Gli adattatori di host AMI FastDisk che sono cloni BusLogic sono supportati
 da questo driver.

                  BT-948/958/958D NOTE DI INSTALLAZIONE

 Gli Adattatori di Host BT-948/958/958D PCI Ultra SCSI, possiedono delle
 caratteristiche tali per cui potrebbero richiedere particolare
 attenzione durante l'installazione di Linux.

 o Assegnamento di una porta di I/O PCI

   Con la configurazione predefinita in fabbrica, il BT-948/958/958D
   riconoscer� solo le assegnazioni della porta I/O PCI fatte dal BIOS PCI
   della scheda madre. Il BT-948/958/958D non risponder� ad alcuna delle
   porte I/O ISA a cui precedentemente rispondevano gli adattatori host
   BusLogic SCSI. Questo driver supporta l'assegnamento della porta I/O
   PCI, perci� questa � la configurazione preferita. Comunque, se per
   qualche ragione si deve usare il driver obsoleto BusLogic, come ad
   esempio per una distribuzione Linux che non usa ancora questo driver
   nell'esecuzione del boot del kernel, BusLogic ha fornito una opzione di
   configurazione AutoSCSI per attivare una porta I/O legacy ISA compatibile.

   Per attivare questa opzione di compatibilit� all'indietro, invocate
   l'utility AutoSCSI tramite Ctrl-B all'accensione (startup) del sistema
   e selezionate "Adapter Configuration", "View/Modify Configuration", e
   poi cambiate l'impostazione di "ISA Compatible Port" da "Disable" a
   "Primary" o "Alternate". Una volta che questo driver sia stato
   installato, l'opzione "ISA Compatible Port" dovrebbe essere rimessa a
   "Disable", in modo tale da evitare possibili conflitti futuri di porta I/O.
   Anche i pi� vecchi BT-946C/956C/956CD possiedono questa opzione di
   configurazione, ma il l'impostazione predefinita in fabbrica � "Primary".

 o Ordine di scansione degli slot PCI

   In sistemi con pi� adattatori host BusLogic PCI, l'ordine secondo
   cui gli slots PCI sono scanditi potrebbe apparire rovesciato con
   BT-948/958/958D se comparato con il BT-946C/956C/956CD. Perch� il boot
   da un disco SCSI funzioni correttamente, � necessario che il BIOS
   dell'adattatore host BIOS e il kernel siano d'accordo su quale disco sia il
   dispositivo di boot, il che richiede che siano in grado di riconoscere
   nello stesso ordine gli adattatori host PCI. La scheda madre PCI BIOS
   fornisce un metodo standard per enumerare gli adattatori host PCI,
   che � usato dal kernel di Linux. Alcune implementazioni PCI BIOS
   enumerano gli slot PCI secondo il numero crescente del bus e del
   dispositivo, mentre altri lo fanno nella direzione opposta.

   Sfortunatamente Microsoft ha deciso che Windows 95 debba enumerare gli
   slot PCI in ordine crescente rispetto ai numeri del bus e dei
   dispositivi senza tener conto della enumerazione del PCI BIOS, e che il
   loro schema debba essere supportato dall'adattatore di host BIOS per
   ricevere la certificazione di Windows 95. Quindi i settaggi della
   factory default del BT-948/958/958D enumerano gli adattatori di host
   secondo i numeri crescenti dei bus e dei dispositivi. Per disattivare
   questa funzione, invocate la utility AutoSCSI, tramite via Ctrl-B
   all'accensione del sistema e selezionate "Adapter Configuration",
   "View/Modify Configuration", schiacciate Ctrl-F10 e poi disattivate
   l'opzione "Use Bus And Device # For PCI Scanning Seq."

   Questo driver interrogher� il settaggio dell'opzione PCI Scanning
   Sequence in modo da riconoscere gli adattatori di host nello stesso
   ordine in cui sono enumerati dal BIOS dell'adattatore host.

                     MAILING LIST DI ANNUNCI BUSLOGIC

 La mailing list di annunci della BusLogic costituisce un forum per
 informare gli utenti Linux di uscite sul mercato di nuovi driver e di
 altri annunci a proposito dei supporti Linux per gli adattatori di host
 BusLogic SCSI. Per iscriversi alla lista, inviate un messaggio a
 "[email protected]" con la riga "subscribe" nel testo.




 5.9.  Adattatori Host BusLogic FlashPoint


 (questa sezione Copyright 1995 by Leonard N. Zubkoff
 <[email protected]>)











 Non ci sono driver Linux disponibili per le FlashPoint LT/DL/LW
 (BT-930/932/950) e non � chiaro quando e se mai ce ne saranno. Le schede
 FlashPoint hanno un'architettura differente rispetto alle schede
 MultiMaster e non hanno nessuna CPU, solo un motore sequenziale
 SCSI. Sono commercializzati come un prodotto per workstation desktop, e non
 sono particolarmente adatti per un sistema operativo multitasking di alte
 prestazioni come Linux.

 Le MultiMaster BT-948/958 hanno una CPU, e l'interfaccia di
 programmazione a ``cassetta della posta''  permette parallelismi e
 pipeline tra il sistema operativo e l'adattatore host, laddove le schede
 FlashPoint richiedono frequenti interventi della CPU dell'adattatore.
 Anche quando la latenza degli interrupt cresce in un sistema multitasking
 sotto forte carico, la BT-948/958 dovrebbe mantenere delle eccellenti
 performance, mentre la performance della FlashPoint tende a calare
 piuttosto rapidamente. Inoltre, il firmware sulla BT-948/958 ha la
 capacit� di interagire propriamente a basso livello con il bus SCSI,
 mentre con un motore sequenziale � il driver Linux a doversi far carico
 di queste interazioni, e spesso impiega un sacco di tempo per riuscire a
 portare a termine il proprio lavoro. Data la differenza di prezzo
 piuttosto bassa fra questi prodotti, le BT-948 o BT-958 sono certamente
 la scelta migliore per Linux.

 (Inizio Citazione)

                                    ANNUNCIO
                  Programma di upgrade BusLogic FlashPoint/BT-948
                                 1 Febbraio 1996

 Sin dalla sua introduzione l'ottobre scorso, l'uso della BusLogic FlashPoint
 LT ha causato problemi ai membri della comunit� Linux, poich� nessun
 driver Linux � stato disponibile per questo nuovo prodotto Ultra
 SCSI. Nonostante sia ufficialmente considerato un prodotto per desktop
 workstation, e pur non essendo particolarmente adatto per un sistema
 operativo multitasking ad alte prestazioni come Linux, la FlashPoint LT �
 stata consigliata dai rivenditori di sistemi per computer come l'ultima
 novit�, ed � stata venduta perfino in molti dei loro sistemi high end, al
 posto dei meno recenti prodotti MultiMaster. Questo ha causato problemi a
 molte persone che hanno inavvertitamente comprato un sistema
 aspettandosi che tutti gli Adattatori host BusLogic SCSI fossero
 supportati da Linux, per poi scoprire che FlashPoint non � supportato e
 non lo sarebbe stato per un certo periodo, se non per sempre.

 Dopo che questo problema � stato individuato, BusLogic ha contattato i
 propri principali clienti OEM per assicurarsi che le schede BT-946C/956C
 MultiMaster fossero comunque ancora rese disponibili, e che gli utenti di
 Linux che avessero per errore ordinato dei sistemi con le FlashPoint
 potessero essere messi in condizione di aggiornarle alle BT-946C. Questo
 ha aiutato molti acquirenti di nuovi sistemi, ma � stata solo una
 soluzione parziale al problema generale del supporto per le FlashPoint per
 gli utenti di Linux. Non � servito, infatti, ad aiutare le persone
 che inizialmente avevano acquistato una FlashPoint per un sistema
 operativo supportato, e che poi avevano deciso di usare Linux, o per
 coloro i quali avevano comperato una FlashPoint LT, convinti che fosse
 supportata, e non sono stati in grado di restituirla.

 A met� dicembre, ho chiesto di incontrare il senior management di
 BusLogic per discutere a proposito di Linux e del supporto software
 free per le FlashPoint. Voci a proposito di una scarsa cura nei confronti
 della comunit� Linux da parte di BusLogic erano di pubblico dominio, e
 pensavo che la cosa migliore fosse parlare direttamente di questi
 argomenti. Inviai una email una sera dopo le 23 e l'incontro ebbe
 luogo il pomeriggio seguente. Sfortunatamente gli ingranaggi delle
 macchine corporative si muovono lentamente, specialmente quando una
 compagnia sta per essere acquisita, e quindi c'� voluto fino a ora perch�
 tutti i dettagli venissero determinati e venisse fatto un documento pubblico.
 BusLogic non � pronta per ora a rilasciare le informazioni necessarie
 perch� terzi possano scrivere driver per le FlashPoint. Gli unici
 driver per FlashPoint esistenti sono stati scritti direttamente da
 BusLogic Engineering, e non c'� una documentazione FlashPoint
 sufficientemente dettagliata per consentire a sviluppatori esterni di
 scrivere un driver senza assistenza. Mentre qualcuno alla BusLogic
 preferirebbe non divulgare affatto dettagli sull'architettura delle
 FlashPoint, la discussione non ha portato in nessuna direzione. In ogni
 caso, anche se fosse disponibile oggi della documentazione ci vorrebbe
 un po' di tempo prima che un driver utilizzabile venisse scritto,
 specialmente considerando il fatto che non sono convinto che lo sforzo
 richiesto valga la pena di essere compiuto.

 Comunque, BusLogic mantiene l'impegno di fornire soluzioni SCSI ad alte
 prestazioni per la comunit� Linux, e non vuole che qualcuno non sia in grado
 di eseguire Linux perch� possieda una Flashpoint LT. Perci� BusLogic ha
 messo in atto un programma diretto di aggiornamento per consentire a
 qualsiasi utente Linux in tutto il mondo di permutare la loro FlashPoint
 LT con una nuovo BT-948 MultiMaster PCI Ultra SCSI Host Adapter. Il
 BT-948 � il successore Ultra SCSI del BT-946C e ha tutte le migliori
 caratteristiche sia del BT-946C che della FlashPoint LT, compresa la
 terminazione intelligente e una flash PROM per facili aggiornamenti del
 firmware, ed � ovviamente compatibile con l'attuale driver Linux. Il
 prezzo per questo aggiornamento � stato fissato in 45 dollari americani, e
 il programma di aggiornamento verr� amministrato dal Supporto
 Tecnico BusLogic, che pu� essere raggiunto in email all'indirizzo
 [email protected], e telefonicamente al +1 408 654-0760, oppure via
 fax al +1 408 492-1542.

 Ero un beta tester per la BT-948 e le versioni 1.2.1 e 1.3.1 del mio
 driver BusLogic includono gi� il supporto per la BT-948. Un migliore
 supporto per le schede Ultra SCSI MultiMaster verr� aggiunto in una
 versione successiva. Come risultato di questo processo cooperativo di
 test, sono stati individuati e corretti numerosi errori nel firmware
 (accertatevi di avere la versione 5.05R o pi� recente del firmware).
 Il mio sistema di test Linux, pesantemente caricato, ha fornito un
 ambiente ideale per testare i processi di recupero dagli errori che sono
 molto pi� raramente esercitati nei sistemi produttivi, ma che sono
 cruciali per l'equilibrio complessivo del sistema. � stato
 particolarmente utile essere in grado di lavorare direttamente
 con il loro ingegnere firmware per mostrare i problemi sotto il
 controllo dell'ambiente di debug del firmware; ne � passato di tempo
 dall'ultima volta in cui ho lavorato sul firmware per un sistema
 embedded. Attualmente sto lavorando ad alcuni test di prestazioni e mi
 aspetto di avere dei dati da riportare fra non molto.

 BusLogic mi ha chiesto di fare questo annuncio poich� un larga parte
 delle domande che riguardano il supporto per la FlashPoint � stata
 inviata o a me per email o � apparsa nei newsgroup di Linux di cui
 faccio parte. Per sintetizzare, BusLogic sta offrendo agli utenti di
 Linux un aggiornamento dalla FlashPoint LT (BT-930), non supportata, alla
 BT-948, supportata, per 45$. Contattate il Supporto Tecnico BusLogic presso:
 [email protected] o +1 408 654-0760 per approfittare della loro offerta.

                 Leonard N. Zubkoff
                 [email protected]

 (Fine citazione)








 5.10.  EATA: DPT SmartCache, SmartCache Plus, SmartCache III, Smart-
 Cache IV e SmartRAID (Standard)


 Schede supportate: tutte quelle che supportano il protocollo EATA-DMA.

 Tra di esse ci sono:


 la famiglia DPT Smartcache (Plus):
 PM2011          ISA             Fast Single-ended SCSI-2
 PM2012B         EISA            Fast Single-ended SCSI-2

 la famiglia DPT Smartcache III:
 PM2021          ISA             Fast Single-ended SCSI-2
 PM2021W         ISA             Wide Single-ended SCSI-2
 PM2022          EISA            Fast Single-ended SCSI-2
 PM2022W         EISA            Wide Single-ended SCSI-2
 PM2024          PCI             Fast Single-ended SCSI-2
 PM2024W         PCI             Wide Single-ended SCSI-2
 PM2122          EISA            Fast Single-ended SCSI-2
 PM2122W         EISA            Wide Single-ended SCSI-2
 PM2124          PCI             Fast Single-ended SCSI-2
 PM2124W         PCI             Wide Single-ended SCSI-2
 PM2322          EISA            Fast Single-ended SCSI-2
 PM2322W         EISA            Wide Single-ended SCSI-2

 la famiglia DPT Smartcache VI:

 PM2041W         ISA             Wide Single-ended SCSI-2
 PM2041UW        ISA             Ultra Wide Single-ended SCSI-2
 PM2042W         EISA            Wide Single-ended SCSI-2
 PM2042UW        EISA            Ultra Wide Single-ended SCSI-2
 PM2044W         PCI             Wide Single-ended SCSI-2
 PM2044UW        PCI             Ultra Wide Single-ended SCSI-2
 PM2142W         EISA            Wide Single-ended SCSI-2
 PM2142UW        EISA            Ultra Wide Single-ended SCSI-2
 PM2144W         PCI             Wide Single-ended SCSI-2
 PM2144UW        PCI             Ultra Wide Single-ended SCSI-2
 PM2322W         EISA            Wide Single-ended SCSI-2
 PM2322UW        EISA            Ultra Wide Single-ended SCSI-2

 la famiglia DPT SmartRAID:
 PM3021          ISA             Fast Single-ended SCSI-2
 PM3021W         ISA             Wide Single-ended SCSI-2
 PM3122          EISA            Fast Single-ended SCSI-2
 PM3122W         EISA            Wide Single-ended SCSI-2
 PM3222          EISA            Fast Single-ended SCSI-2
 PM3222W         EISA            Wide Single-ended SCSI-2
 PM3224          PCI             Fast Single-ended SCSI-2
 PM3224W         PCI             Wide Single-ended SCSI-2
 PM3334W         PCI             Wide Single-ended SCSI-2
 PM3334UW        PCI             Ultra Wide Single-ended SCSI-2



 anche versioni differenti dei controller sopraindicati.

 E alcuni controller da:

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

 Configurazioni supportate



 Slot           : TUTTI
 Porte          : TUTTE
 IRQ            : TUTTI (level e edge triggered)
 Canali DMA     : ISA: TUTTI, EISA/PCI: non applicabile
 IO             : port mapped, bus master
 Canali SCSI    : TUTTI




 Autorilevamento :



      Funziona con tutte le configurazioni supportate




 L'ultima versione del driver EATA-DMA � disponibile su:




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




 Mailing list:

 La Mailing List EATA fornisce un forum agli utenti Linux del driver
 EATA-DMA e EATA-PIO per discussioni e annunci di nuove uscite sul
 mercato e altro.  Per abbonarvi alla mailing list, inviate un
 messaggio a "[email protected]" con la scritta
 "subscribe" nel corpo del messaggio.

 Supporto /proc/scsi:

 Per ottenere statistiche sui comandi, eseguite le seguenti procedure:
 echo "eata_dma latency" >/proc/scsi/eata_dma/<num_driver> e per
 disattivarlo: echo "eata_dma nolatency"
 >/proc/scsi/eata_dma/<num_driver>

 Problemi comuni


 1. Slackware non riesce a trovare il controller.

    Soluzione: usate uno dei dischi boot ascsi*.

 2. Nei vecchi kernel (<v1.3) il driver IDE pu� rilevare l'interfaccia
    ST-506 delle schede EATA.


    a. Ci sar� qualcosa di simile a uno dei seguenti due esempi:



         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





    Se il driver IDE si trova in difficolt� a causa di ci�, ad esempio
    non riuscite ad accedere al vostro (vero) hardware IDE, cambiate la
    porta IO e/o l'IRQ della scheda EATA.

    b. Se il vostro driver trova hardware che pu� controllare, ad
       esempio dischi fissi con una capacit� <=504MB, allocher� la
       porta IO e l'IRQ in modo che il driver eata non possa
       utilizzarli. In questo caso cambiate anche la porta IO e l'IRQ
       (diverso da 14,15).


 3. Alcune vecchie schede SK2011 hanno un firmware malfunzionante.
    Contattate l'ufficio di assistenza della DPT per un aggiornamento.

 Nota:

 1. CONFIG_PCI deve essere settata se state usando una scheda PCI.


 5.11.  Future Domain 16x0 con chip TMC-1800, TMC-18C30, TMC-18C50, o
 TMC-36C70


 Configurazioni supportate:



      BIOS           : 2.0, 3.0, 3.2, 3.4, 3.5
      Indirizzi BIOS : 0xc8000, 0xca000, 0xce000, 0xde000
      Porte          : 0x140, 0x150, 0x160, 0x170
      IRQ            : 3, 5, 10, 11, 12, 14, 15
      DMA            : non usato
      IO             : port mapped




 Autorilevamento:



      Funziona con tutte le configurazioni supportate, richiede
      l'installazione di un BIOS.




 Impostazioni manuali:


      nessuna.




 Problemi di ``arretratezza'' che si risolvono aggiornando:


 1. Le versioni pi� vecchie non supportano il chip TMC-18C50, e non
    funzioneranno con schede nuove.

 2. Le versioni pi� vecchie non conoscono le signature (firme) dei BIOS
    pi� recenti necessarie per l'autorilevamento.

 3. Le versioni precedenti a quella inclusa nel Linux 1.0.9 e 1.1.6 non
    supportano il nuovo chip SCSI o il BIOS 3.4

 Note:

 1. il BIOS Future Domain spesso cerca dispositivi SCSI partendo
    dall'ID pi� alto fino a 0, nell'ordine inverso rispetto agli altri
    BIOS SCSI. sda sar� l'ultima "lettera di drive" (ad esempio D:
    piuttosto che C:). Potreste anche dover ``scavalcare'' il disktab
    per LILO.


 5.12.  NCR5380 / T130B generico (Standard)


 Configurazioni supportate e non supportate



      Porte          : tutte
      IRQ            : tutti
      Canali DMA     : DMA non usato
      IO             : port mapped




 Autorilevamento:


      non disponibile.




 Impostazioni manuali:


      A tempo di compilazione: Definite GENERIC_NCR5380_OVERRIDE come un
      vettore con porta, irq, dma, tipo di scheda - ad esempio

      #define GENERIC_NCR5380_OVERRIDE {{0x330, 5, DMA_NONE, BOARD_NCR5380}}

      per una scheda NCR5380 alla porta 330, IRQ 5.

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

      per una T130B alla porta 0x350.

      Con versioni pi� vecchie del codice eliminate BOARD_*.

      Possono essere usati anche gli IRQ simbolici IRQ_NONE e IRQ_AUTO (nessun
      IRQ e IRQ rilevato automaticamente).




 linea di comandi kernel:



      ncr5380=porta,irq
      ncr5380=porta,irq,dma
      ncr53c400=porta,irq

      255 pu� essere usato per nessun irq, 254 per l'autorilevamento dell'irq.




 Problemi comuni


 1. Usando la scheda T130B con il vecchio (anteriore alla public
    release 6) driver generico NCR5380 che non supporta l'opzione della
    riga di comando ncr53c400.

    I registri NCR5380 si trovano ad un offset di 8 dall'indirizzo di
    base.  Quindi, se ad esempio il vostro indirizzo � 0x350, usate:




      ncr5380=0x358,254




 sulla riga dei comandi kernel.

 Problemi di ``arretratezza'' che si risolvono aggiornando:

 1. Il kernel si blocca durante l'accesso al disco con schede T130B o
    altre NCR53c400.

    Le versioni anteriori alla public release 6 del driver Generic
    NCR5380 non supportano gli interrupt su queste schede.  Aggiornate.

 Note:

 1. il driver generico non supporta ancora DMA, e pseudo-DMA non �
    supportato nel driver generico.


 5.13.  NCR53c8xx (Standard)


 Configurazioni supportate e non supportate :



      Indirizzi di base : TUTTI
      IRQ               : TUTTI
      canali DMA        : non applicabile alle schede PCI
      IO                : port mapped, busmastering




 Autorilevamento :



 richiede il BIOS PCI, usa routine del BIOS PCI per cercare dispositivi e
 leggere lo spazio di configurazione





 Il driver usa per l'inizializzazione i valori pre programmati in
 alcuni registri, perci� deve essere installato un BIOS.

 Problemi di ``arretratezza'' che si risolvono aggiornando:


 1. Versioni pi� vecchie di Linux avevano un problema con lo swapping,
    vedete ``Dischi: il sistema si blocca  durante lo swapping''

 2. Le versioni pi� vecchie di Linux non riconoscevano schede '815 e
    '825.

 3. I kernel delle distribuzioni includono le versioni 4 o 5 del
    driver, che non supportano cose utili come ad esempio
    disconnessione/riconnessione (l'effetto pi� significativo di ci� �
    rappresentato dal bloccaggio di tutti i dispositivi SCSI successivo
    al tentativo di tendere/riavvolgere/spaziare i file su un nastro),
    adattatori per host multipli, e operazioni senza BIOS.

    Il driver pi� recente � disponibile presso:



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




 Si tratta di una patch per kernel 1.2.10 e pi� recenti, anche se la
 prossima versione sar� esclusivamente per 1.3.x. Queste patch NON sono
 completamente pulite a causa di alcuni binari ELF e di altre patch che
 si trovavano nel mio albero dei sorgenti, e se non siete in grado di
 correggere manualmente i (quattro) problemi che dovreste incontrare,
 non dovreste usarle. Notate che � necessaria solo la patch pi�
 recente: non sono incrementali.

 Se desiderate usare il driver NCR pi� recente con un kernel 1.3.x
 prima di allora, Harald Evensen <[email protected]> ha
 adattato le patch per il 1.3.x



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




 Queste patch dovrebbero essere pulite.

 Consultate tutti i README in queste directory. Dovreste anche
 abbonarvi alla mailing list NCR se siete interessati a eseguire il
 codice ALPHA, poich� alla lista vengono inviate spesso soluzioni
 temporanee per bug e annunci di prossime uscite.

 Per iscrivervi inviate una mail a [email protected] con




 subscribe ncr53c810




 nel testo. Potete annullare l'iscrizione inviando una mail allo stesso
 indirizzo e mettendo



      unsubscribe ncr53c810




 nel testo.

 Problemi comuni


 1. Molte persone hanno avuto problemi con il chip che funzionava bene
    sotto DOS, ma poi aveva problemi sotto Linux con timeout sul test 1
    causati da un interrupt perso.

    Questo � spesso dovuto al fatto che l'IRQ � impostato in modo
    diverso sul jumper hardware IRQ di uno slot o dispositivo della
    mainboard e nel setup CMOS. CONTROLLATE DUE VOLTE CHE:

 �  L'IRQ che state usando venga usato solamente dal vostro chip
    onboard NCR, o dallo slot in cui � installata una scheda NCR.

 �  Qualsiasi configurazione dei ponticelli della mainboard che
    selezioni l'IRQ per il chip onboard o lo slot corrisponda alle
    impostazioni CMOS.

 �  Alcune schede principali PCI hanno una funzione di auto
    assegnamento, che non funzioner�.

    Potrebbe anche essere dovuto al fatto che INTB, INTC, o INTD sono
    selezionati su una scheda PCI in un sistema che supporta solamente
    INTA.  Se state usando una scheda NCR che ha ponticelli per
    selezionare tra linee di interrupt PCI, accertatevi che stiate
    usando INTA.

    Infine, PCI dovrebbe usare interrupt ``level-sensitive'' piuttosto
    che ``edge triggered''. Controllate che sulla vostra scheda siano
    impostati gli interrupt ``level-sensitive'', e se questo fallisce,
    provate ``edge triggered'' perch� il vostro sistema potrebbe avere
    problemi.

    Questo problema � frequente con schede madri Viglen, dove i
    settaggi dei jumper dell'IRQ della scheda principale non sono
    quelli documentati nel manuale. Per quello che so quello che viene
    chiamato IRQ5 � in realt� IRQ9, il vostro caso pu� essere diverso.


 2. Blocco/ altri problemi nascono quando si usa una scheda video S3
    928, o Tseng ET4000W32 PCI.

    Ci sono errori hardware in almeno alcune delle revisioni di questi
    chip.  Non usateli.

 3. Un messaggio al boot up vi indica che la mappatura I/O � stata
    disattivata a causa del fatto che i bit 0..1 dell'indirizzo di base
    0 hanno indicato una mappatura non I/O.

    Questo � dovuto a un errore di BIOS in qualche macchina che fa s�
    che i 16 bit pi� significativi e meno significativi dei registri di
    configurazione siano scambiati fra loro in lettura.

 4. Alcuni sistemi hanno problemi se la PCI scrive "posta", o se sono
    attivati CPU-> PCI buffering. Se avete problemi, disattivate queste
    opzioni.

 5. Alcuni sistemi con il software NCR SDMS su ROM BIOS e nel sistema
    BIOS non sono in grado di eseguire il boot su DOS. Disattivando
    l'immagine dovrebbe risolvere questo problema.

 6. Se avete il messaggio:



      "scsi%d: IRQ0 not free, detaching"





 o



      "scsi%d: IRQ255 not free, detaching"





 Il chip NCR aveva tutti i bit del registro di configurazione PCI posti
 a 0 o 1. O avete problemi di configurazione (vedete ``Problemi comuni
 1''), oppure avete una scheda principale BIOS difettosa.

 Come alternativa, potreste editare drivers/scsi/ncr53c7,8xx.c, e cam�
 biare pci_init() in modo da avere:




      irq = il_mio_irq;





 prima di



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





 7. Alcuni sistemi hanno chip BIOS difettosi. Non segnalate alcun bug
    finch� non siete sicuri di avere la ROM pi� recente.

 8. Le impostazioni della linea di comando ncr53c810=xxx ecc. non
    funzionano.

    Nei kernel gi� pronti delle distribuzioni questo accade perch� i
    loro punti di ingresso non sono inclusi in init/main.c, il che �
    piuttosto intenzionale:

    Il driver esegue sempre l'autorilevamento per una scheda pure se
    sono state usate particolari impostazioni manuali in una linea di
    comando, perci� se si tenta di evitare l'autorilevamento quando la
    scheda effettivamente si � mostrata alle routine di configurazione
    PCI, si hanno dei grossi problemi.

    L'unica ragione che renderebbe necessario scavalcare
    l'autorilevamento sarebbe se l'hardware PCI o il BIOS avessero dei
    problemi, nel qual caso per� certe routine di correzione di errori
    non funzionerebbero, rendendo tale ``scavalcamento'' piuttosto
    inutile.

    Infine, quasi tutte le persone che _pensano_ di aver bisogno di
    impostazioni particolari della linea di comando lo sono perch�
    ricevono dal driver dei messaggi di errore riguardanti la
    configurazione o qualche altra cosa. Se il driver afferma che avete
    un problema di configurazione, avete un sistema malfunzionante o un
    problema di configurazione e nessun tipo di impostazione
    particolare sar� in grado di risolvere questi problemi.

    Se qualcuno ha aggiunto i punti appropriati di entrata al
    init/main.c per consentire impostazioni nella linea di comando che
    evitino l'autorilevamento, tenete presente che si tratta di
    modifiche totalmente non supportate e potrebbero non funzionare.

 9. Alcune schede NCR (principalmente Nexstor) che non usano un BIOS
    NCR hanno errori di timeout. Alcune di queste ROM gestiscono
    trasferimenti sincroni, negoziano per trasferimenti sincroni
    all'accensione, e lasciano i drive in uno stato ignoto. Quando il
    driver Linux NCR tenta di parlare loro, riceve timeout e non riesce
    a riprendersi perch� non � in grado di eseguire un reset del bus o
    di rinegoziare.

    Se vi imbattete in questo problema, potete o disattivare i
    trasferimenti sincroni nel programma di setup della scheda, oppure
    aggiorarvi ad una versione ALPHA pi� recente del driver NCR che
    eseguir� la negoziazione sincrona.

 10.
    Le schede Tyan S1365 '825 hanno problemi di timeout, specialmente
    quando le disconnessioni sono attivate. La documentazione di alcune
    di queste schede d� informazioni scambiate sulla posizione dei
    jumper, cosicch� la terminazione � accesa quando non serve, ed �
    spenta quando serve.

    Provate a invertire la posizione dei jumper.

 Note:

 1. CONFIG_PCI deve essere settato


 5.14.  Seagate ST0x/Future Domain TMC-8xx/TMC-9xx (Standard)


 Configurazioni supportate e non supportate






 Indirizzi di base : 0xc8000, 0xca000, 0xcc000, 0xce000, 0xdc000, 0xde000
 IRQ               : 3, 5
 Canali DMA        : DMA non usato
 IO                : memory mapped




 Autorilevamento :



      rileva solo l'indirizzo, IRQ � assunto uguale a 5, richiede il BIOS.




 Impostazioni manuali:

 Tempo di compilazione :


      Definite OVERRIDE uguale all'indirizzo base, CONTROLLER a FD o
      SEAGATE come � appropriato, e IRQ all'IRQ.




 linea di comando kernel



      st0x=indirizzo,irq o tmc8xx=indirizzo,irq (funziona solo per .99.13b e
      pi� recenti)




 Problemi di ``arretratezza'' che si risolvono aggiornando:


 1. Versioni precedenti a quella nel kernel Linux .99.12 avevano
    problemi di handshaking con alcuni dispositivi lenti, e

    questo � ci� che accade quando scrivete dati sul bus


    a. Scrittura del byte nel registro dati, il contenuto del registro
       viene mandato al bus

    b. time_remaining = 12us

    c. aspetta mentre time_remaining > 0 e il segnale REQ � basso

    d. se time_remaining > 0, alza il segnale ACK

    e. aspetta mentre time_remaining > 0 e il segnale REQ � alto

    f. abbassa ACK

    Ci si � imbattuti nel problema con i dispositivi lenti che eseguono
    i comandi mentre li leggono, in cui l'handshake REQ/ACK impiega
    oltre 12 us - il segnale REQ non assume il valore ``falso'' quando
    il driver se l'aspetta, quindi il driver finisce per mandare pi�
    byte di dati ad ogni impulso di REQ.

 2. Con Linux .99.12, � stato introdotto un errore quando ho corretto
    il codice di arbitraggio, questo ha portato a selezioni fallite su
    alcuni sistemi. � stato corretto nel .99.13.

 Problemi comuni


 1. Ci sono errori di timeout quando Linux cerca di leggere la tavola
    delle partizioni o tenta di compiere altri accessi ai dischi.

    La scheda viene venduta con un'impostazione adatta all'uso con
    MSDOS, quindi gli interrupt sono disattivati. Per attivare la
    gestione degli interrupt, usate sulla Seagate i jumper W3 (ST01) o
    JP3 (ST02) e chiudete il contatto sui pin F-G per selezionare l'IRQ
    5.


 2. Il driver non � in grado di gestire alcuni dispositivi, in
    particolare nastri e cdrom SCSI economici.

    La Seagate lega l'handshaking dei segnali REQ/ACK del bus SCSI ai
    segnali IO CHANNEL READY e (opzionalmente) 0WS del bus PCI.
    Sfortunatamente non dice quando il timer watchdog si esaurisce, e
    non c'� modo per sapere se il segnale REQ si � abbassato, e
    potrebbe finire con il vedere un singolo impulso REQ come impulsi
    multipli.

    Per risolvere tutto ci� si pu� usare un loop molto stretto per
    rilevare l'abbassamento del segnale REQ, con un timeout nel caso in
    cui non si riesca a cogliere la variazione del segnale a causa di
    un interrupt, ecc.  Si otterrebbe per� un peggioramento delle
    prestazioni, quindi non � il caso di applicare questo metodo a
    tutti i dispositivi SCSI; viene invece applicato solo su certi
    dispositivi usando per tali dispositivi il campo ``broken'' (rotto)
    del vettore scsi_devices. Se avete problemi, dovreste cercare di
    aggiungere il vostro dispositivo alla lista dei dispositivi per i
    quali ``broken'' non � resettato a zero (attualmente, solo i drive
    TENEX CD-ROM)

 3. Una scheda Future domain (esempi specifici includono la 840, 841,
    880, and 881) non funziona.

    Alcune schede Future domain utilizzano la mappatura dei registri
    Seagate, e hanno i bit MSG e CD del registro di stato scambiati.

    Dovreste editare seagate.h, scambiando le definizioni di STAT_MSG e
    STAT_CD, e ricompilare il kernel con CONTROLLER definito a SEAGATE,
    un IRQ appropriato e specificare OVERRIDE.

 4. Quando cercate di partizionare il vostro drive con fdisk, ottenete
    dei messaggi di errore che indicano che HDIO_REQ o HDIO_GETGEO
    ioctl hanno fallito, o


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



 (devi impostare il numero delle testine, dei settori e dei cilindri.
 Puoi farlo dal menu ``extra functions'').

 Vedi ``Partizionare i dischi''.

 5. Dopo aver specificato manualmente la geometria del drive, tentativi
    seguenti di leggere la tavola delle partizioni danno messaggi di
    errore a proposito di limiti della partizione non sui limiti di un
    cilindro, limiti fisici e logici non coincidenti ecc. Vedete
    ``Partizionare i dischi''

 6. Alcuni sistemi che funzionavano con kernel antecedenti .99.13 hanno
    problemi con versioni di Linux pi� recenti. Versioni pi� vecchie di
    Linux assegnavano i registri CONTROL e DATA in un ordine diverso da
    quello evidenziato nella documentazione Seagate, e questo ha
    causato malfunzionamenti in alcuni sistemi. Versioni pi� recenti
    eseguono l'assegnazione nella maniera corretta, ma questo d�
    problemi su altri sistemi.

 Il codice in seagate.c � ora cos�:



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




 cambiando questo in:



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




 potrebbe risolvere il vostro problema.

 Definizioni:




      FAST o FAST32 user� trasferimenti alla cieca quando possibile

      ARBITRATE costringer� l'adattatore host a gestire il bus per ottenere una
              compatibilit� SCSI-II migliore, piuttosto che stare solo ad aspettare
              il BUS FREE e poi eseguire i propri compiti. Dovrebbe consentire di
              dare un comando per ciascun Lun quando integrer� le modifiche nei
              sorgenti delle distribuzioni.

      SLOW_HANDSHAKE permetter� la compatibilit� con dispositivi malfunzionanti
              che non svolgono l'handshake in maniera sufficientemente veloce (ad
              esempio, alcuni CD ROM) per il codice Seagate.

      SLOW_RATE=x, dove x � un numero vi lascer� specificare un tasso di
              trasferimento che verr� adottato nel caso l'handshake non funzionasse
              correttamente.




 5.15.  PAS16 SCSI (Standard)


 Configurazioni supportate e non supportate



      Porte          : 0x388, 0x384, 0x38x, 0x288
      IRQ            : 10, 12, 14, 15
          IMPORTANTE : l'IRQ DEVE essere diverso dall'IRQ usato per la parte
                       audio della scheda.
      DMA            : non � usato per la parte SCSI della scheda
      IO             : port mapped




 Autorilevamento



      Non richiede BIOS.




 Impostazioni manuali:




      Tempo di compilazione : definite PAS16_OVERRIDE come un vettore
      contenente porta e irq. Ad esempio

      #define PAS16_OVERRIDE {{0x388, 10}}

      per una scheda alla porta 0x388, IRQ 10.




 linea di comando kernel



      pas16=porta,irq




 Definizioni:















 AUTOSENSE - se definito, REQUEST SENSE sar� automaticamente eseguito per
         i comandi che ritornano con uno stato CHECK CONDITION.

 PSEUDO_DMA - abilita lo  PSEUDO-DMA hardware, che pu� dare un incremento nelle
         prestazioni di 3 o 4 volte.

 PARITY - abilita il controllo di parit�.  Non supportato.

 SCSI2 - abilita il supporto per lo "SCSI-II tagged queuing".  Non testato.

 UNSAFE - lascia attivate le interruzioni durante i trasferimenti
         pseudo-DMA. Dovete usarlo solo se avete problemi di caratteri persi
         durante comunicazioni ad alta velocit�, e, anche in questo caso,
         sarebbe bene che provaste a giocherellare un po' con transfersize.

 USLEEP - attiva il supporto per dispositivi che non disconnettono. Non
         testato.




 Problemi comuni


 1. Timeout di comandi, interruzioni, ecc.

    Dovreste installare i patch NCR5380 che ho messo sulla rete un po'
    di tempo fa, che dovrebbero essere integrati in qualche versione
    ALPHA futura.  Questi patch risolvono dei problemi dei primi driver
    NCR5380, ed anche del supporto per dispositivi multipli su schede
    basate su NCR5380.

    Se ci� non dovesse funzionare, dovreste disattivare l'opzione
    PSEUDO_DMA cambiando la riga #define PSEUDO_DMA in
    drivers/scsi/pas16.c a #undef PSEUDO_DMA.

    Notate che quest'ultima operazione deve essere considerata come
    l'``ultima spiaggia'', poich� ci sar� un netto calo delle
    prestazioni.


 5.16.  Trantor T128/T128F/T228 (Standard)


 Configurazioni supportate e non supportate



      Indirizzi di base :  0xcc000, 00xc8000, 0xdc000, 0xd8000
      IRQ               : nessuno, 3, 5, 7 (tutte le schede)
                          10, 12, 14, 15 (solo T128F)
      DMA               : non usato.
      IO                : memory mapped




 Autorilevamento :



      Funziona per tutte le configurazioni supportate, richiede il BIOS installato.




 Impostazioni manuali:



      Tempo di compilazione: definite T128_OVERRIDE come un vettore contenente
      indirizzo e irq. Ad esempio

      #define T128_OVERRIDE {{0xcc000, 5}}

      per una scheda all'indirizzo 0xcc000, IRQ 5.

      Possono essere usati gli IRQ simbolici IRQ_NONE e IRQ_AUTO.




 Linea di comando kernel :



      t128=indirizzo,irq
      Si pu� usare -1 per nessun irq, -2 per l'autorilevamento dell'irq.




 Definizioni:



      AUTOSENSE - se definito, REQUEST SENSE verr� eseguito in maniera
              automatica per i comandi che ritornano con uno stato CHECK CONDITION.

      PSEUDO_DMA - attiva lo PSEUDO-DMA hardware, dovrebbe fornire un aumento
      di prestazioni di 3 o 4 volte rispetto a polled I/O.

      PARITY - attiva il controllo di parit�. Non supportato.

      SCSI2 - attiva il supporto per lo "SCSI-II tagged queuing". Non testato.

      UNSAFE - lascia attivati gli interrupt durante il trasferimento pseudo-DMA.
              Dovete usarlo solo se avete problemi di caratteri persi durante
              comunicazioni ad alta velocit�, e, anche in questo caso, sarebbe bene
              che provaste a giocherellare un po' con transfersize.

      USLEEP - attiva il supporto per dispositivi che non disconnettono. Non
              testato.




 Problemi comuni

 1. Timeout di comandi, interruzioni ecc.

    Dovreste installare i patch NCR5380 che ho messo sulla rete un po'
    di tempo fa, che dovrebbero essere integrati in qualche versione
    ALPHA futura.  Questi patch risolvono dei problemi dei primi driver
    NCR5380, ed anche del supporto per dispositivi multipli su schede
    basate su NCR5380.

    Se ci� dovesse fallire, dovreste disattivare l'opzione PSEUDO_DMA
    cambiando la riga #define PSEUDO_DMA in drivers/scsi/pas16.c a
    #undef PSEUDO_DMA.

    Notate che quest'ultima operazione deve essere considerata come
    l'``ultima spiaggia'', poich� ci sar� un netto calo delle
    prestazioni.


 5.17.  Ultrastor 14f (ISA), 24f (EISA), 34f (VLB) (Standard)


 Configurazioni supportate



      Porte          : 0x130, 0x140, 0x210, 0x230, 0x240, 0x310, 0x330, 0x340
      IRQ            : 10, 11, 14, 15
      canali DMA     : 5, 6, 7
      IO             : port mapped, bus master




 Autorilevamento :



      non funziona per schede alla porta 0x310, BIOS non richiesto.




 Impostazioni manuali:




      solo a tempo di compilazione, definite PORT_OVERRIDE




 Problemi comuni

 1. L'indirizzo 0x310 non � supportato dal codice di autorilevamento, e
    potrebbe causare conflitti se il supporto di rete � installato.

    Usate un indirizzo diverso.

 2. Utilizzare un Ultrastor all'indirizzo 0x330 pu� causare un blocco
    del sistema quando i driver per le schede sonore stanno effettuando
    l'autorilevamento.

    Usate un indirizzo diverso.

 3. Vari altri driver eseguono rilevamenti in modo non sicuro a diversi
    indirizzi, se avete dei problemi con la ricerca o il sistema si
    blocca durante il boot, provate un indirizzo diverso.

    0x340, indirizzo noto per funzionare, � consigliato.

 4. Linux non trova dispositivi SCSI, ma individua il vostro disco
    fisso SCSI su una scheda Ultrastor SCSI come un normale disco
    fisso, e il driver del disco fisso si rifiuta di supportarla.
    Notate che quando questo avviene, probabilmente riceverete anche un
    messaggio

    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)
    Se questo � il caso la scheda Ultrastor � in modalit� emulazione
    WD1003.  Dovete:


    a. Ponete la scheda Ultrastor in modalit� nativa. Questa � l'azione
       raccomandata, poich� il driver SCSI pu� essere nettamente pi�
       veloce del driver IDE, specialmente se avete installato le patch
       per lettura/scrittura clustered. Alcuni utenti hanno ottenuto
       oltre 2M/sec usando queste patch.

       Notate che questo sar� necessario se volete usare un'unit� a
       dischi removibili o pi� di due dispositivi di disco fisso con la
       Ultrastor.

    b. Usate la seguente linea di comando kernel



         hd=cylinders,heads,sectors





    per scavalcare le impostazioni predefinite per poter eseguire il
    boot, tenendo il numero dei cilindri (cylinders) <= 2048, il numero
    delle testine (heads) <= 16, e il numero dei settori (sectors)<=
    255 in modo che cylinders * heads * sectors sia lo stesso per
    entrambe le mappature.

    Dovete inoltre specificare manualmente la geometria del disco
    quando state eseguendo fdisk sotto Linux. Se non lo fate il risul�
    tato sar� la scrittura scorretta della tavola delle partizioni, che
    funzioner� sotto Linux ma non sotto MSDOS che legge dalla tavola la
    geometria del drive.

    Una volta che Linux � partito, potete evitare l'inconveniente di
    dover eseguire il boot manualmente: basta ricompilare il kernel con
    una macro HD_TYPE definita appropriatamente in include/linux/con�
    fig.h.



 5.18.  Western Digital 7000 (Standard)


 Configurazioni supportate



      Indirizzi BIOS : 0xce000
      Porte          : 0x350
      IRQ            : 15
      Canali DMA     : 6
      IO             : port mapped, bus master




 Autorilevamento



      richiede il BIOS installato.


 Problemi comuni


 1. Ci sono parecchie revisioni del chip e del firmware. In genere le
    schede di revisione 3 non funzionano, quelle di revisione 5 si,
    chip senza suffisso non funzionano, chip con un suffisso 'A' s�.

 2. La scheda supporta un paio di indirizzi BIOS che non compaiono
    nell'elenco degli indirizzi supportati. Se vi capita questa
    situazione, usate uno degli indirizzi supportati e inviate una
    segnalazione di bug come spiegato in ``Senalazione di Bug''.


 5.19.  AM53/79C974 (ALPHA)




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




 Configurazioni supportate :



      Porte          : tutte
      IRQ            : tutti
      Canali DMA     : 6
      IO             : port mapped, bus master (modo non intelligente)





 5.20.  qlogic (Standard)

 Hey Drew, dove � questa sezione (io, (D.F) l'ho vista solo nell'indice
 ;-)?


 6.  Dischi


 Questa sezione d� informazioni specifiche sull'uso dei disk drive.


 6.1.  Hardware supportato e non supportato


 Tutti i dispositivi SCSI ad accesso diretto con dimensione dei blocchi
 pari a 256, 512, o 1024 byte dovrebbero funzionare. Altre dimensioni
 dei blocchi non funzioneranno (notate che spesso si pu� ovviare a ci�
 cambiando l'ampiezza dei blocchi e/o dei settori usando il comando
 SCSI MODE SELECT).

 Si intende con ``ampiezza di un settore'' il numero di byte di dati
 allocati per settore su un dispositivo, ad esempio i CD-ROM usano
 un'ampiezza di settore di 2048 byte.

 Si intende con ``ampiezza dei blocchi'' la grandezza dei blocchi
 logici usati come interfaccia con il dispositivo. Anche se solitamente
 questa misura coincide con l'ampiezza di settore, alcuni dispositivi
 mappano pi� settori fisici pi� piccoli (ad esempio, 256 byte nel caso
 del drive 55 M Syquest) a blocchi logici pi� grandi o viceversa (ad
 esempio, blocchi di 512 byte su drive CD-ROM SUN compatibili).

 Dispositivi per dischi removibili, inclusi Bernoulis, flopticals,
 dispositivi MO e Syquest.

 In teoria dovrebbero funzionare drive con ampiezza fino a un terabyte.
 Non c'� alcun problema con i piccoli drive 9G.


 6.2.  Problemi comuni



 6.2.1.  Messaggio ``Cylinder > 1024''


 Quando si fa una partizione, si riceve un messaggio di avviso a
 proposito di ``cylinder > 1024'', oppure non si � in grado di eseguire
 il boot da una partizione che include un cilindro logico superiore al
 1024.

 Questa � una limitazione BIOS.

 Vedete ``Dischi'' ``Geometria'' e ``Partizionare i dischi'' per una
 spiegazione.  Per spiegazioni vedete "Geometria" dei dischi e
 "Partizione" dei dischi.


 6.2.2.  Non siete in grado di fare una partizione su "/dev/hd*"


 "/dev/hd*" non sono dispositivi SCSI, /dev/sd* lo sono.

 Per i giusti nomi dei dispositivi e per le procedure di partizione
 vedete ``File di dispositivo'' e ``Dischi'' ``Geometria'' e
 ``Partizionare i dischi''.


 6.2.3.  Non riuscite a espellere il supporto da un dispositivo a dis�
 chi removibili


 Linux tenta di impedire l'espulsione dal drive quando viene montato un
 dispositivo per prevenire problemi sul filesystem causati da un
 cambiamento del supporto.

 Smontate i dischi prima di espellerli.



 6.2.4.  Non riuscite ad eseguire il boot usando LILO da un disco SCSI


 In alcuni casi il driver SCSI e il BIOS si trovano in disaccordo a
 proposito della corretta mappatura BIOS da utilizzare, e il tutto si
 risolve con il LILO bloccato dopo 'LI' al momento del boot e/o con
 altri problemi.

 Per aggirare questo problema dovrete determinare la mappatura della
 geometria usata sotto DOS, ed inserire i dati per il vostro disco in
 /etc/lilo/disktab.

 Altrimenti potreste usare l'opzione "linear" nel jfile di
 configurazione.


 6.2.5.  Fdisk risponde con




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




 e la geometria del disco non viene 'ricordata' quando il fdisk viene
 eseguito di nuovo.

 Vedete ``Partizionare i dischi''.


 6.2.6.  Solo un drive viene individuato su una bridge board con pi�
 drive connessi


 Linux non cercher� LUN al di fuori di zero su dispositivi SCSI
 anteriori alla revisione ANSI SCSI 1. Se desiderate che siano
 individuati dispositivi su LUN diversi, dovrete modificare
 scan_scsis() in drivers/scsi/scsi.c.


 6.2.7.  Il sistema si blocca quando effettua lo swap

 Pensiamo che questo inconveniente sia stato risolto, provate ad
 aggiornare all'1.1.38.


 6.2.8.  I dischi Conner CFP1060S vengono corrotti


 Questo � dovuto a un errore di microcodice nei codici di read-ahead e
 caching.

 >Dal supporto tecnico di Soenke Behrens di Conner:


























 Nel corso delle ultime settimane, abbiamo ricevuto parecchie telefonate
 da clienti che asserivano di avere seri problemi con i drive SCSI
 CFP1060x 1GB usando il sistema operativo Linux. Sintomi erano filesystem
 corrotti (inode danneggiati) riportati da e2fsck a ogni boot di sistema
 e errori simili.

 C'� ora disponibile un rimedio per i clienti con un CFP1060x (revisioni
 di microcodice 9WA1.62/1.66/1.68) e Linux. Per applicare l'aggiornamento,
 avrete bisogno di un disco DOS di boot e driver ASPI in grado di accedere
 al disco fisso. L'aggiornamento carica nella RAM non volatile del drive
 un nuovo codice di queuing e lookahead.

 Se avete problemi con un disco che ha un revisione di microcodice
 9WA1.60, dovrete contattare il pi� vicino centro di assistenza Conner per
 far aggiornare per il vostro disco. Trovate la revisione del microcodice
 sull'etichetta del drive e, sul lato inferiore del drive, su un'etichetta
 posta su uno degli integrati.

 Se pensate di essere in grado di fare da soli l'aggiornamento,
 mettetevi in contatto col Supporto Tecnico Conner e fatevi
 preparare la vostra revisione di microcodice. Potete contattare il
 Supporto Tecnico Conner per l'Europa al +44-1294-315333, mentre per gli
 USA al 1-800-4CONNER.

 Saluti
 Soenke Behrens
 European Technical Support




 6.3.  File di dispositivo


 I dischi SCSI usano dispositivi a blocchi con numero primario 8, e non
 ci sono dispositivi "raw" alla BSD.

 A ciascun disco SCSI sono destinati 16 numeri secondari, dove numero
 secondario 0 (modulo 16) rappresenta l'intero disco, i numeri
 secondari da 1 a 4 (modulo 16) le 4 principali partizioni, e i numeri
 secondari da 5 a 15 (modulo 16) le partizioni estese.

 Ad esempio, una configurazione potrebbe essere (con un solo adattatore
 host)


 Dispositivo             Target, Lun     disco SCSI
 84M Seagate             0       0       /dev/sda
 SCSI->SMD bridge disk 0 3       0       /dev/sdb
 SCSI->SMD bridge disk 1 3       1       /dev/sdc
 Wangtek tape            4       0       none
 213M Maxtor             6       0       /dev/sdd



 Ecc.

 La convenzione standard per i nomi �

 /dev/sd{lettera} per l'intero dispositivo ((secondario modulo 16) ==
 0) /dev/sd{lettera}{partizione} per le partizioni su quel dispositivo
 (1 <= (secondario modulo 16) <= 15)

 Ad esempio:


 /dev/sda        block device major 8 minor 0
 /dev/sda1       block device major 8 minor 1
 /dev/sda2       block device major 8 minor 2
 /dev/sdb        block device major 8 minor 16



 ecc.


 6.4.  Partizionare il disco


 Potete eseguire la partizione dei vostri dischi SCSI usando un
 programma di partizione di vostra scelta, sotto DOS, OS/2, Linux o
 qualsiasi altro sistema operativo che supporti la schema standard di
 partizione.

 Il metodo corretto di eseguire il programma Linux fdisk � di
 specificare il dispositivo sulla riga dei comandi. Ad esempio per
 eseguire la partizione del primo disco SCSI:



      fdisk /dev/sda




 Il programma potrebbe essere predisposto per usare /dev/hda, che non �
 un disco SCSI, se non specificate esplicitamente il dispositivo.

 In alcuni casi, fdisk risponder� con:



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

      Command (m for help):




 (dovete impostare il numero di testine, settori e cilindri. Potete
 farlo dal menu ``extra functions'')

 e/o d� un messaggio per il fatto che HDIO_REQ o HDIO_GETGEO ioctl
 hanno fallito. In questi casi, dovete specificare manualmente la
 geometria del disco, come viene spiegato in ``Geometria del  disco'',
 quando state eseguendo fdisk, e anche in /etc/disktab se volete
 eseguire da quel disco il boot del kernel con LILO.

 Se avete specificato manualmente la geometria del disco, i tentativi
 successivi di eseguire fdisk daranno gli stessi messaggi di errore.
 Questo � normale, poich� i PC non immagazzinano le informazioni sulla
 geometria dei dischi nella tavola delle partizioni. Di per s�, per�,
 questo NON CAUSER� ALCUN PROBLEMA, e voi non avrete alcun problema
 nell'accedere alle partizioni che avrete creato sul drive di Linux.
 Codici malamente realizzati di alcune ditte avranno dei problemi al
 riguardo, nel qual caso dovreste mettervi in contatto con la ditta e
 insistere perch� il codice venga corretto.

 In alcuni casi, riceverete un messaggio di avviso a proposito di una
 partizione che termina al di l� del cilindro 1024. Se create una di
 queste partizioni non sarete in grado di eseguire il boot del kernel
 Linux da quella partizione usando LILO. Notate comunque che questa
 restrizione non preclude la creazione di una partizione di root
 parzialmente o interamente al di sopra del cilindro 1024, poich� �
 possibile creare una piccola partizione /boot sotto il cilindro 1024
 oppure eseguire il boot dei kernel dalle partizioni esistenti.


 6.5.  Geometria del disco


 Sotto Linux ciascun disco viene visto nel modo in cui lo vede
 l'adattatore host SCSI: N blocchi, numerati da 0 a N-1, tutti liberi
 da errori, mentre DOS e BIOS, essendo ``nati prima'' dei dischi
 intelligenti, applicano una mappatura arbitraria di testine / cilindri
 / settori a questo metodo di indirizzamento lineare.

 Ci� pu� far sorgere un problema nel momento in cui viene fatta una
 partizione dei drive sotto Linux, poich� non c'� alcun modo comune di
 ottenere l'idea che DOS e BIOS hanno di questa mappatura della
 geometria.  Nella maggior parte dei casi, un HDIO_GETGEO ioctl() pu�
 essere implementato in modo da restituire questa mappatura.
 Sfortunatamente, nei casi in cui il fabbricante (ad esempio Seagate)
 ha scelto una mappatura perversa, non-standard e non documentata, ci�
 non � possibile, e la geometria deve essere specificata manualmente.

 Se � richiesta la specificazione manuale della geometria, avete pi�
 alternative a disposizione:


 1. Se non vi interessa usare DOS, o eseguire con LILO il boot del
    kernel dal drive, create una mappatura tale che testine * cilindri
    * settori * 512 < ampiezza del vostro drive in byte (un megabyte �
    definito come 2^20 byte).


    1 <= testine <= 256
    1 <= cilindri <= 1024
    1 <= settori <= 63



 2. Usate la mappatura BIOS. In alcuni casi, questo significher�
    riconfigurare il disco ponendolo all'ID SCSI 0, e disattivare il
    secondo drive IDE (se lo possedete).

 Altrimenti potete usare un programma come NU, o potete usare il
 seguente programma:


 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



 Quando lo eseguite stampa i settori, le testine, e i cilindri del
 drive il cui indirizzo BIOS � stato specificato sulla linea di comando
 (0x80 � il primo disco, 0x81 il secondo).

 Ad esempio, dparam 0x80

 60      17      1007



 significa che C: ha 60 settori, 17 testine e 1007 cilindri.


 7.  CD-ROM


 Questa sezione fornisce informazioni specifiche per lettori cdrom.


 7.1.  Hardware supportato e non supportato


 I CD SCSI con un'ampiezza di blocco di 512 o 2048 byte dovrebbero
 funzionare. Altre ampiezze di blocco non funzioneranno.


 7.2.  Problemi comuni



 7.2.1.  Non riuscite a montare un cd-rom


 La corretta sintassi per montare un CD-ROM ISO-9660  �:



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




 Notate che perch� questo funzioni dovete avere il kernel configurato
 con i supporti per SCSI, adattatore, il CD-ROM SCSI e il filesystem
 iso9660.

 Notate inoltre che per quel che riguarda Linux 1.1.32 dispositivi di
 sola lettura com i CD-ROM NON POSSONO essere montati con le opzioni di
 default leggi/scrivi.


 7.2.2.  Non riuscite ad espellere il cd-rom


 Linux tenta di impedire l'espulsione dal drive quando il dispositivo
 viene montato viene per prevenire problemi sul filesystem causati da
 un improvviso cambiamento del CD.


 7.2.3.  Non riuscite a far suonare i CD audio.


 I programmi Workman o xcdplayer lo faranno per voi.


 7.2.4.  Workman or Xcdplayer non funzionano


 Le funzioni per controllare le funzioni audio fanno parte dell'insieme
 di comandi SCSI-II, perci� probabilmente non funzioneranno con drive
 che non siano SCSI-II. Inoltre, molti lettori CD-ROM SCSI-I, e alcuni
 SCSI-II usano un insieme di comandi di proprietari per accedere alle
 funzioni audio invece che l'insieme di comandi SCSI-II. Per i drive
 NEC, esiste in giro una versione di xcdplayer adattata in maniera
 speciale per usare questo insieme di comandi - provate a dare
 un'occhiata a tsx-11.mit.edu in pub/linux/BETA/cdrom.

 Questi programmi potrebbero funzionare con alcuni dei lettori CD non-
 SCSI se il lettore implementa le stesse ioctl dei driver SCSI.


 7.2.5.  Drive addizionali sui cambia-CD non funzionano


 La maggior parte dei cambia-CD assegna ciascun disco a un'unit�
 logica. Assicuratevi di avere dei file speciali per ciascun disco del
 cambia-CD (vedete ``File di dispositivo'') e vedete ``LUN diversi da 0
 non funzionano''.


 7.3.  File di dispositivo


 I CD-ROM SCSI usano il numero primario 11.

 I numeri secondari sono allocati dinamicamente (vedete ``Dischi'',
 ``File di dispositivo'' per un esempio) dove il primo CD-ROM trovato �
 ha il numero secondario 0, il secondo l'1 e cos� via.

 La convenzione standard per l'attribuzione dei nomi �:

 /dev/sr{numero}, anche se alcune distribuzioni hanno usato
 /dev/scd{numero}, con esempi quali


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




 8.  Nastri


 Questa sezione d� informazioni specifiche sui drive per nastri scsi.


 8.1.  Hardware supportato e non supportato


 Drive che usano una ampiezza di blocco, sia fissa che variabile,
 minore dell'ampiezza del buffer del driver (definita a 32 K nei
 sorgenti delle distribuzioni) sono supportati.

 I parametri (ampiezza dei blocchi, buffer, densit�) sono impostati con
 ioctl (solitamente con il programma mt), e rimangono attivi dopo che
 il dispositivo � chiuso e riaperto.

 Virtualmente tutti i drive dovrebbero funzionare, inclusi:

 �  Drive Archive Viper QIC, compresi i modelli 150M e 525M.

 �  Drive Exabyte 8mm.

 �  Drive Wangtek 5150S.

 �  Drive Wangdat DAT.

 8.2.  Problemi comuni



 8.2.1.  Il drive del nastro non � riconosciuto al momento del boot


 Provate a eseguire il boot con un nastro nel drive.


 8.2.2.  Nastri con pi� file non sono letti nel modo giusto


 Quando si legge un nastro con pi� file, il primo tar ha successo, il
 secondo fallisce silenziosamente, e riprovare il secondo tar ha
 successo.

 Programmi user level, come il tar, non capiscono i mark dei file. Il
 primo tar legge fino alla fine del file. Il secondo cerca di leggere
 all'altezza del mark del file, non trova nulla, ma il nastro si muove
 al di l� del mark. Il terzo tar ha successo perch� il nastro �
 all'inizio del file successivo.

 Usate mt su dispositivi che non riavvolgono per spostarvi al file
 successivo.


 8.2.3.  La decompressione fallisce

 I programmi di decompressione non sono in grado di maneggiare gli zero
 che riempiono l'ultimo blocco del file.

 Per prevenire avvertimenti ed errori, mettete i vostri file compressi
 tutti insieme in un file .tar; ad esempio, piuttosto che fare:



      tar cfvz /dev/nrst0 file.1 file.2 ...




 eseguite:



      tar cfvz tmp.tar.z file.1 file.2 ...

      tar cf /dev/nrst0 tmp.tar.z





 8.2.4.  Problemi nel trasferire nastri da/a altri sistemi


 Non siete in grado di leggere un nastro scritto con un sistema
 operativo diverso, oppure un altro sistema operativo non � in grado di
 leggere un nastro scritto in Linux.

 Sistemi diversi spesso usano diverse ampiezze di blocco. Su un
 dispositivo a nastro che usa un'ampiezza di blocco fissa, vi
 imbatterete in errori nel momento in cui vi accingerete a leggere
 blocchi scritti utilizzando un'ampiezza di blocco diversa.

 Per leggere questi nastri dovete impostare l'ampiezza del blocco del
 lettore in modo che corrisponda con l'ampiezza del blocco usata quando
 il nastro � stato scritto.

 NOTA: questa � l'ampiezza di blocco hardware, non il fattore di blocco
 usato con tar, dump ecc.

 Potete farlo con il comando mt -



      mt setblk <dimensione>




 o



      mt setblk 0




 per ottenere il supporto per blocchi di ampiezza variabile.

 Notate che queste opzioni di mt non sono supportate sotto la versione
 GNU di mt che � inclusa in qualche distribuzione di Linux. Dovete
 usare invece il comando Linux SCSI mt derivato da BSD. I sorgenti
 dovrebbero essere disponibili in:




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




 Notate inoltre che per default, ST_BUFFER_BLOCKS (definito in
 /usr/src/linux/drivers/scsi/st_options.h, nei kernel pi� recenti, st.c
 in quelli pi� vecchi) � impostato in modo da permettere al massimo
 un'ampiezza di buffer di 32 K, dovrete modificare il sorgente per
 usare blocchi pi� grossi.


 8.2.5.  Messaggio di errore "No such device"

 Tutti i tentativi di accedere al nastro finiscono in un

 "No such device"

 o messaggi di errori simili. Controllate la tipologia del vostro
 dispositivo a nastro, DEVE essere un dispositivo a carattere con
 numeri primario e secondario che combaciano con quelli specificati in
 ``File di dispositivo''.


 8.2.6.  La lettura di nastri a certe densit� funziona, mentre la
 scrittura no.


 Molti lettori di nastri supportano la lettura a densit� pi� basse per
 mantenere la compatibilit� con hardware pi� vecchio, ma non sono in
 grado di scrivere alle stesse densit�.
 Questo � in particolare il caso dei lettori QIC che leggono vecchi
 nastri 60 M, ma scrivono solo i nuovi formati 120, 150, 250, e 525 M.


 8.2.7.  Il riposizionamento del nastro blocca l'accesso a tutti i dis�
 positivi SCSI


 Questo problema � pi� comune con driver SCSI che supportano solo un
 comando alla volta (vedete ``Dispositivi multipli'' per una
 spiegazione, e ``Guida  all'acquisto: confronto delle
 caratteristiche'' per vedere quali driver hanno questa limitazione),
 comunque ci potrebbero essere dei lettori di nastri che si rifiutano
 di disconnettersi.

 In entrambi i casi potete aggirare il problema modificando il file
 drivers/scsi/st.c; aggiungete:



      #define ST_NOWAIT




 all'inizio e ricompilate il kernel.

 Notate che questo fa s� che eventuali condizioni di errore vengano
 riportate solo quando il successivo comando SCSI viene eseguito.
 Perci� potreste voler fare qualcosa tipo:



      mt status




 dopo un comando mt di posizionamento di un file, cos� che non
 sovrascrivete file di nastro se il comando di posizionamento �
 fallito.

 Potreste anche prendere in considerazione il passaggio a una scheda
 SCSI meglio supportata o a un nuovo lettore di nastri se avete bisogno
 di usare questo stratagemma e dovete scrivere molti file su nastro.


 8.3.  File di device


 I nastri SCSI usano un dispositivo a caratteri con numero primario 9.

 A causa di vincoli imposti dall'uso da parte di Linux di un dev_t di
 16 bit con soli 8 bit allocati al numero secondario, i numeri
 secondario del nastro SCSI sono assegnati in maniera dinamica
 cominciando dal pi� basso HOST/ID/LUN SCSI.

 I dispositivi in grado di riavvolgere sono numerati da 0, dove il
 primo nastro SCSI, /dev/rst0, � c 9 0, il secondo, /dev/rst1, c 9 1,
 eccetera. I dispositivi che non riavvolgono hanno il bit alto settato
 nel numero secondario, ad esempio /dev/nrst0 � c 9 128.

 La convenzionale attribuzione dei nomi �:



 /dev/nst{numero}       per dispositivi che non riavvolgono
 /dev/st{numero}                per dispositivi che riavvolgono




 9.  Generico


 Questa sezione d� informazioni specifiche sul driver SCSI generico


 9.1.  Hardware supportato


 Il dispositivo generico SCSI fornisce un'interfaccia per inviare
 comandi SCSI a tutti i dispositivi SCSI - dischi, nastri, CDROM, robot
 cambiatori di supporti ecc.

 Tutto ci� che � compatibile elettricamente con la vostra scheda SCSI
 dovrebbe funzionare


 9.2.  Problemi comuni


 Nessuno :-).


 9.3.  File di Device


 I dispositivi generici SCSI sono a carattere, con numero primario 21.
 A causa dei vincoli imposti dall'uso da parte di Linux di un dev_t di
 16 bit, i numeri secondari sono assegnati in modo dinamico da 0, uno
 per dispositivo, con


 /dev/sg0



 che corrisponde al pi� basso target/lun sulla prima scheda SCSI.


 10.  Guida all'acquisto

 Una domanda frequente �: "Linux supporta un certo numero di schede
 diverse, quindi quale adattatore host SCSI dovrei comprare?"

 La risposta dipende dalle prestazioni che vi aspettate o di cui avete
 bisogno, dalla scheda madre, dalle periferiche SCSI che pensate di
 connettere alla vostra macchina.


 10.1.  Tipologie di trasferimento


 Il principale fattore che influenza le prestazioni (in termini di
 velocit� di trasferimento - throughput - e di tempo per le risposte
 interattive durante l'I/O SCSI) � il tipo di trasferimento usato. La
 tabella sotto elenca i diversi tipi di trasferimento, gli effetti che
 hanno sulle prestazioni e alcune raccomandazioni a proposito del loro
 uso.


    Tipo di trasferimento
       Descrizione / Prestazioni/ Raccomandazioni.


    Pure Polled
       Una scheda con I/O pure polled user� la CPU per gestire tutti i
       processi SCSI, incluso il trattamento di REQ/ACK.

       Anche una CPU veloce sar� pi� lenta di una semplice macchina a
       stati finiti nel maneggiare la sequenza di handshaking REQ/ACK;
       la velocit� di picco nei trasferimenti sar� 150 K/sec su una
       macchina veloce, e forse 60 K/sec su una macchina lenta
       (attraverso il filesystem).

       Inoltre il driver deve eseguire un loop stretto finch� il bus �
       occupato, e questo porta l'utilizzo della CPU vicino al 100% e
       una capacit� di risposta estremamente povera durante l'I/O SCSI.
       CD-ROM lenti, che non disconnettono/riconnettono uccideranno le
       performance interattive con queste schede.

       Non consigliato.


    Interlocked Polled
       Le schede che usano un I/O interlocked polled sono
       essenzialmente le stesse dell'I/O pure polled, solo i segnali
       SCSI REQ/ACK sono agganciati ai segnali di handshake del PC bus.
       Tutto il lavoro di gestione SCSI al di l� del handshake � fatto
       dalla CPU.

       La velocit� di trasferimento massima attraverso il filesystem �
       stimata in 500-600 K/sec.

       Come con le schede pure polled I/O, il driver deve eseguire un
       loop stretto finch� il bus SCSI � in attivit�, e questo porta ad
       un uso della CPU dipendente dai tassi di trasferimento dei
       dispositivi, e da quando si disconnettono/riconnettono.
       L'utilizzo di CPU pu� variare tra il 25% per CD a singola
       velocit� che gestiscono appropriatamente
       disconnessione/riconnessione, fino al 100% per i drive pi�
       veloci o per CD malfunzionanti che non riescono a
       disconnettere/riconnettere.

       Sul mio 486-66, con una T128, uso il 90% del mio tempo CPU per
       sostenere un throughput di 547 K/sec su un drive con una
       velocit� massima di 1080 K/sec con una scheda T128.

       Accettabile alcune volte per nastri vecchi e CDROM quando il
       basso costo � essenziale


    FIFO Polled
       Le schede che usano un I/O FIFO polled mettono un piccolo buffer
       (solitamente 8K) tra la CPU ed il bus SCSI, e spesso
       implementano una certa quantit� di intelligenza. L'effetto � che
       la CPU risulta legata solo quando trasferisce dati alla massima
       velocit� al buffer e quando esegue il resto della gestione degli
       interrupt per la condizione di buffer vuoto,
       disconnessione/riconnessione ecc.

       La velocit� massima di trasferimento dovrebbe essere sufficiente
       a gestire la maggior parte dei dispositivi SCSI, ed � stata
       misurata una velocit� fino a 4 M/sec utilizzando comandi raw per
       leggere blocchi di 64 K su un veloce Seagate Baracuda con un
       Adaptec 1520.

       L'utilizzo di CPU dipende dalla velocit� di trasferimento dei
       dispositivi: dispositivi pi� rapidi generano pi� interruzioni
       per tempo unitario, il che richiede pi� tempo di CPU. Anche se
       l'utilizzo della CPU potrebbe essere alto (forse il 75%) con
       dispositivi veloci, il sistema solitamente rimane utilizzabile.
       Queste schede forniranno eccellenti performance interattive con
       dispositivi malfunzionanti incapaci di
       disconnettere/riconnettere (tipicamente lettori di CD
       economici).

       Raccomandato a chi vuole risparmiare.


    Slave DMA
       I driver per schede che usano slave DMA programmano il
       controller DMA del PC per un canale quando effettuano un
       trasferimento dati, e restituiscono il controllo alla CPU.

       La velocit� massima di trasferimento � solitamente limitata dal
       poco performante controller DMA usato sui PC; una scheda ad 8
       bit di questo genere pu� avere problemi ad andare pi� veloce di
       140-150K/sec.

       L'uso della CPU � molto ragionevole, leggermente minore di
       quanto abbiamo visto con le schede I/O FIFO polled. Queste
       schede sono molto tolleranti verso i dispositivi malfunzionanti
       che non disconnettono/riconnettono (tipicamente drive CSG
       limitDROM economici).

       Accettabile per lettori CD, nastri ecc. lenti.


    Busmastering DMA
       Queste schede sono intelligenti. I driver di queste schede
       inviano un comando SCSI, target e lun di destinazione, e dove i
       dati dovrebbero finire in una struttura, e dicono alla scheda:
       "Hey, ho un comando per te". Il driver restituisce il controllo
       ai vari programmi in esecuzione, ed alla fine la scheda SCSI
       annuncia che il lavoro � stato eseguito.

       Poich� l'intelligenza risiede nel firmware dell'adattatore host
       e non nel driver, i driver per queste schede solitamente
       supportano pi� funzioni, trasferimento sincrono, tagged queuing,
       ecc.

       Con i patch di lettura/scrittura clustered, la velocit� massima
       di traferimento attraverso il filesystem si avvicina al 100%
       dell'head rate in scrittura, al 75% in lettura.

       L'utilizzo di CPU � minimo, qualunque sia il carico di lavoro di
       I/O, l'uso della CPU � stato misurato in un 5% accedendo ad un
       CDROM a doppia velocit� con un Adaptec 1540 e del 20% sostenendo
       un trasferimento di 1,2 M/sec su un disco SCSI.

       Raccomandato in tutti quei casi in cui la disponibilt� di denaro
       non � troppo ristretta, la scheda madre non ha problemi (alcune
       schede madri con problemi non funzionano con bus master), e non
       vengono eseguite applicazioni in cui il tempo per i dati � pi�
       importante del throughput (l'overhead del bus master potrebbe
       arrivare a 3-4 ms per comando).


 10.2.  Scatter/gather



 Il secondo aspetto driver/hardware pi� importante per quel che
 riguarda le prestazioni � il supporto per l'I/O scatter/gather.
 L'overhead dell'esecuzione di un comando SCSI � significativo,
 nell'ordine di millisecondi. Bus master intelligenti, come l'Adaptec
 1540 possono impiegare 3-4 ms per processare un comando SCSI prima che
 il suo destinatario riesca a vederlo. Su dispositivi senza buffer,
 questo overhead � sempre sufficiente per far saltare una rotazione del
 disco, risultando in una velocit� di trasferimento di circa 60 K/sec
 (assumendo un drive che ruoti a 3600 RPM) per blocco trasferito alla
 volta. Perci�, per massimizzare le prestazioni, � necessario
 minimizzare il numero di comandi SCSI necessari per trasferire un
 certa quantit� di dati, trasferendo pi� dati per comando. A causa del
 design del buffer cache di Linux, i blocchi di dischi contigui non
 sono contigui nella memoria. Con le patch di lettura/scrittura
 clustered, sono contigui buffer ampi 4 K. Quindi, la quantit� massima
 di dati che pu� essere trasferita tramite comandi SCSI sar� di 1K *
 numero delle regioni scatter/gather senza la patch di
 lettura/scrittura clustered, e di 4K * numero delle regioni con la
 patch.  Per via sperimentale abbiamo determinato che 64 K � una
 quantit� ragionevole da trasferire con un solo comando SCSI, cio� 64
 buffer scatter/gather con la patch e 16 senza. Con il cambiamento da
 16 K a 64 K trasferiti, abbiamo constatato un miglioramento
 dell'headrate dal 50% scrivendo e leggendo attraverso il filesystem,
 al 70 e 100% rispettivamente usando una scheda della serie Adaptec
 1540.


 10.3.  Mailbox contro non-mailbox


 Un numero di adattatori host intelligenti, come Ultrastor, WD7000,
 Adaptec 1540, 1740, e le schede BusLogic usano una interfaccia a
 ``metafora della cassetta della posta'', dove i comandi SCSI sono
 eseguiti mettendo una struttura di comandi SCSI in una locazione di
 memoria fissa (la ``cassetta della posta''), avvisando la scheda (cio�
 ``alzando la bandierina sulla cassetta''), e aspettando una risposta
 (la posta in arrivo).  Con questa interfaccia di programmazione di
 alto livello, gli utenti possono spesso aggiornarsi ad una revisione
 pi� recente della scheda per assicurarsi i vantaggi delle nuove
 caratteristiche, come ad esempio FAST + WIDE SCSI, senza cambiamenti
 software. I driver tendono a essere pi� facili da implementare,
 possono implementare un insieme pi� ampio di caratteristiche, e
 possono essere pi� stabili.

 Altri adattatori host intelligenti, come ad esempio la famiglia
 NCR53c7/8xx, e i chip Adaptec AIC-7770/7870 (incluse le schede 274x,
 284x, e 2940) usano un'interfaccia di programmazione di livello pi�
 basso. Questa potrebbe rivelarsi pi� veloce poich� il lavoro pu�
 essere spostato tra il processore della scheda e CPU pi� veloci, pu�
 permettere una maggiore flessibilit� nell'implementazione di alcune
 caratteristiche (ad esempio il modo target per dispositivi arbitrari),
 e queste schede sono meno costose da costruire (in alcuni casi, questo
 vantaggio arriva fino al consumatore: � il caso di molte delle schede
 NCR). Per quel che riguarda i difetti, i driver tendono a essere pi�
 complessi (cio� c'� pi� possibilit� che ci siano degli errori), e
 devono essere modificati per poter trarre vantaggio delle
 caratteristiche presenti sui chip pi� recenti.


 10.4.  Tipi di bus


 Il tipo di bus � la cosa succesiva da prendere in considerazione, la
 scelta si pone fra ISA, EISA, VESA, e PCI. Il marketing spesso declama
 le qualit� delle schede citando assurdi numeri riguardanti la
 larghezza di banda basati su velocit� di trasferimento fantasiose,
 cosa che non � particolarmente utile. Invece ho scelto di parlare di
 numeri veri basati su prestazioni misurate con varie periferiche.


    Bus
       Larghezza di banda, descrizione.


    ISA
       La larghezza di banda � leggermente superiore a 5 M/sec per
       disposivi che supportano il busmastering. Con un bus ISA, il
       controllo del busmaster � effettuato dal venerabile controller
       DMA 8237, il che provoca tempi di acquisizione del bus
       relativamente alti. I driver per gli interrupt sono edge
       triggered a tre stati, ci� significa che gli interrupt non
       possono essere condivisi. Solitamente ISA non ha il buffer, cio�
       il bus host/memoria non pu� effettuare nessun'altra operazione
       quando c'� un trasferimento in corso. Non c'� nessun meccanismo
       di prevenzione nei confronti del bus-hogging.


    VESA
       La larghezza di banda � di circa 30 M/sec. Alcuni sistemi VESA
       gestiscono il bus non rispettando le specifiche, il che li rende
       incompatibili con alcune schede, quindi questo aspetto dovrebbe
       essere preso in considerazione prima di acquistare hardware
       senza una garanzia che ne permetta la restituzione. Generalmente
       VESA non ha il buffer, cio� il bus memoria/host non pu�
       effettuare nessun'altra operazione quando c'� un trasferimento
       in corso.


    EISA
       La larghezza di banda � di circa 30M/sec, e le operazioni di
       busmastering sono generalmente pi� veloci che sul VESA. Alcuni
       sistemi EISA hanno un buffer per il bus, il che permette
       trasferimenti rapidi al bus host/memory, pi� veloce, e minimizza
       l'impatto sulla CPU. I driver di interrupt EISA possono essere
       edge-triggered a tre stati o level-active a collettore aperto,
       permettendo la condivisione degli interrupt con i driver che la
       supportano. Poich� EISA alloca uno spazio di indirizzi separato
       per ogni scheda, � solitamente meno probabile avere conflitti
       rispetto a ISA e VESA.


    PCI
       La larghezza di banda � di circa 60 M/sec. La maggior parte dei
       sistemi PCI implementano buffer sull'host bridge, facendo s� che
       differenze di velocit� fra i due lati abbiano un impatto minimo
       sulle prestazioni di bus e CPU. I driver di interrupt PCI sono
       level-active a collettore aperto e permettono la condivisione
       degli interrupt con i driver che la supportano. Sono previsti
       meccanismi che prevengono il bus hogging, e la sospensione delle
       operazioni di bus-mastering sia da parte del master che dello
       slave.

       Poich� PCI fornisce un meccanismo di plug-n-play con registri di
       configurazione riscrivibili su ogni scheda, in spazi di
       indirizzi separati, un sistema PCI propriamente implementato �
       plug-and play.

       PCI � estremamente preciso per quel che riguarda la lunghezza
       delle tracce, il carico, le specifiche meccaniche ecc. e
       dovrebbe essere definitivamente pi� affidabile di VESA e ISA.

       Insomma, PCI � il miglior bus per PC, sebbene abbia i suoi
       difetti. � piuttosto recente, e sebbene molti fabbricanti
       abbiano risolto i problemi, c'� ancora in giro una certa
       quantit� di hardware PCI pi� vecchio e difettoso, e alcuni BIOS
       per schede madri malfunzionanti. Per questa ragione, raccomando
       _fortemente_ una garanzia che preveda la restituzione
       dell'hardware. Mentre le schede madri PCI pi� recenti siano
       veramente plug-and-play, le schede pi� vecchie potrebbero
       richiedere che l'utente imposti delle opzioni (ad esempio
       l'assegnazione degli interrupt) tramite ponticelli oppure via
       software. Anche se molti utenti hanno risolto i loro problemi
       PCI, c'� voluto del tempo e per questa ragione non me la sento
       di consigliare un acquisto di PCI se per voi avere il sistema in
       funzione � una cosa che deve avvenire prima di subito.

 Per molti dispositivi pi� lenti, come dischi con un ritmo lettura di
 circa 2 M/sec o meno, CD-ROM, nastri ci sar� solo una piccola
 differenza di throughput con le diverse interfacce dei bus PC. I
 driver veloci pi� recenti (tipicamente i drive ad alte prestazioni da
 molti gigabyte hanno velocit� di lettura di  4-5 M/sec, e almeno una
 compagnia sta attualmente sperimentando un'unit� con velocit� di
 14M/sec), il throughput sar� sensibilmente migliore con controller su
 bus pi� veloci: si pu� notare un miglioramento di prestazioni di 2
 volte e mezza passando da una scheda Adaptec 1542 ISA a una NCR53c810
 PCI.

 Con l'eccezione di situazioni in cui venga usato il meccanismo di
 scrittura-posting, o quello simile di scrittura-buffering, quando uno
 dei bus del vostro sistema � occupato tutti i bus risulteranno
 inaccessibili.  Perci�, anche se la saturazione dei bus non star�
 interferendo con le prestazioni SCSI, potrebbe avere un effetto
 negativo sulla performance interattiva. Ad esempio, se avete un disco
 4 M/sec SCSI sotto ISA, avrete perso l'80% della vostra banda, e in un
 sistema ISA/VESA sarebbe in grado solamente di bitblt a 6 M/sec. In
 molti casi, un simile impatto sui lavori di processo nel background
 sarebbe anch'esso sentito.

 Notate che avere pi� di 16 M di memoria non preclude l'uso di una
 scheda ISA busmastering SCSI. A differenza di numerosi sistemi
 operativi sbagliati, Linux eseguir� un buffer doppio quando si usi un
 DMA con un controller ISA e un trasferimento � destinato in fine per
 un'area sopra i 16 M. La performance su questi traferimenti soffre
 solamente del 1.5%, cio� non in maniera da essere notata.

 Infine la differenza di prezzo tra bus master offerti con le diverse
 interfacce bus � spesso minima.  Con tutto questo bene in mente,
 basandovi sulle vostre priorit� avrete delle preferenze tra i bus.



      Stabilit�, tempo di installazione critico,      EISA ISA VESA PCI
              politiche di restituzione povere

      Performance, e installazioni pi� per hobby      PCI EISA VESA ISA




 Come ho evidenziato prima, il bus mastering rispetto a altre modalit�
 di traferimeno avr� un impatto maggiore sulle performance globali del
 sistema, e dovrebbe essere considerato pi� importante delle tipologia
 del bus quando si acquista un controller SCSI.





 10.5.  Dispositivi multipli


 Se avete dispositivi multipli sul vostro bus SCSI, potreste voler
 vedere se lo adattatore/driver host che state prendendo in
 considerazione supporta pi� di un comando esterno alla volta. Ci� �
 quasi essenziale se state facendo andare un lettore di nastro, e molto
 desiderabile se state mischiando dispositivi a velocit� differenti,
 come un CD-ROM e un disco fisso. Se il driver Linux supporta solamente
 un comando esterno, potreste essere chiusi fuori dal vostro disco
 fisso mentre un nastro nel lettore si sta riavvolgendo o si sta
 avvicinando alla fine del nastro (forse per mezz'ora) - con questi due
 drive per dischi, il problema non sar� particolarmente visibile, anche
 se throughput si avvicinerebbe alla media di due velocit� di
 trasferimenti piuttosto che alla somma di due velocit� di
 trasferimento.


 10.6.  SCSI-I, SCSI-II, SCSI-III FAST e opzioni WIDE, ecc.


 Nel corso degli anni SCSI si � evoluta con nuove revisioni dello
 standard che hanno introdotto velocit� di trasferimento pi� elevate,
 metodi per aumentare il throughput, comandi standardizzati per nuovi
 dispositivi, e nuovi comandi per dispositivi precedentemente
 supportati.

 Di per s�  i livelli di revisione non significano nulla. A eccezione
 di aspetti minori come il fatto che SCSI-II non consente l'opzione di
 inizio di SCSI-I, SCSI � compatibile a ritroso, con nuove
 caratteristiche che vengono introdotte come opzioni e non
 obbligatorie.  Perci� la decisione di chiamare un adattatore SCSI,
 SCSI, SCSI-I, SCSI-II, oppure SCSI-III � quasi esclusivamente di
 natura commerciale.


 10.7.  Elenco delle caratteristiche dei driver


 Elenco delle caratteristiche dei driver( chip supportati sono elencati
 tra parentesi)

























 Driver          Modo di                 Comandi         limite          > 1
                 Trasferimento           Simultanei      SG
 Schede
                                         totale/LUN
 AM53C974        Busmastering DMA        12s/1s          255s            S
 aha152x         FIFO(8k) Polled         7s/1s           255s            N
     (AIC6260,
     AIC6360)
 aha1542         Busmastering DMA        8s/1s           16              S
 aha1740         Busmastering DMA        32s             16              N
 aha274x         Busmastering DMA        4s/1s           255s            S
 BusLogic        Busmastering DMA        192/31          128s, 8192h     S
 (valori per BT-948/958/958D, schede piu' vecchie supportano un numero
 minore di comandi)
 eata_dma        Busmastering DMA        64s-8192h/2-64  512s, 8192h     S
 fdomain         FIFO(8k) Polled         1s              64s             N
     (TMC1800,   tranne TMC18c30
     TMC18c30,   con 2k FIFO
     TMC18c50,
     TMC36c70)

 in2000*         FIFO(2k) Polled         1s              255s            N
 g_NCR5380       Pure Polled             16s/2s          255s            S
     (NCR5380,
     NCR53c80,
     NCR5381,
     NCR53c400)
 gsi8*           Slave DMA               16s/2s          255s
     (NCR5380)
 PAS16           Pure Polled             16s/2s          255s            S
     (NCR5380)   o Interlocked Polled
                 (non funziona su alcuni sistemi!)
 seagate         Interlocked Polled      1s/1s           255s            N
 wd7000          Busmastering DMA        16s/1s          16              S
 t128            Interlocked Polled      16s             255s            S
     (NCR5380)
 qlogic          Interlocked Polled      1s/1s           255s            N

 ultrastor       Busmastering DMA        16s/2s          32              S
 53c7,8xx        Busmastering DMA
     (NCR53c810,
      NCR53c815,
      NCR53c820,
      NCR53c825)
     rel5                                1s/1s           127s            N
     rel10                               8s/1s           127s            S



 Note:

 1. Driver segnalati con un '*' non sono inclusi nella distribuzione
    del kernel, e le immagini di boot binarie potrebbero non essere
    disponibili.

 2. I numeri con il suffisso 's' sono limiti arbitrari impostati nel
    software che potrebbero essere cambiati con un define al momento
    della compilazione.

 3. I limiti hardware sono indicati da un suffisso "h", e potrebbero
    essere diversi dai limiti software attualmente imposti dai driver
    Linux.

 4. Numeri senza suffisso potrebbero indicare limiti hard o soft.


 5. La release 5 del driver NCR53c810 � inclusa nei kernel 1.2.x e
    1.3.x; la release 10 � disponibile tramite FTP anonimo.

 6. Con l'eccezione della AM53C974, le schede busmastering DMA sono
    intelligenti; con il microcodice di esecuzione NCR per la memoria
    principale, il codice di esecuzione AIC7770 dalla on-chip RAM, e il
    resto usando un interfaccia di stile mailbox.


 10.8.  Confronto tra schede



 Scheda                  Driver          Bus     Prezzo  Note
 Adaptec AIC-6260        aha152x         ISA             chip, non scheda
 Adaptec AIC-6360        aha152x         VLB             chip, non scheda
     (Usato in molte
     schede multi IO SCSI
     VESA/ISA e in schede
     madri Zenon)
 Adaptec 1520            aha152x         ISA
 Adaptec 1522            aha152x         ISA     $80     1520 con FDC
 Adaptec 1510            aha152x         ISA             1520 senza BIOS,
                                                         non viene riconosciuta
                                                         automaticamente
 Adaptec 1540C           aha1542         ISA
 Adaptec 1542C           aha1542         ISA             1540C w/FDC
 Adaptec 1540CF          aha1542         ISA             FAST SCSI-II
 Adaptec 1542CF          aha1542         ISA     $200    1540CF w/FDC
 Adaptec 1640            aha1542         MCA

 Adaptec 1740            aha1740         EISA            non piu' prodotta
 Adaptec 1742            aha1740         EISA            non piu' prodotta,
                                                         1740 con FDC
 Adaptec 2740            aha274x         EISA
 Adaptec 2742            aha274x         EISA            con FDC
 Adaptec 2840            aha274x         VLB
 Adaptec 2842            aha274x         VLB             con FDCFDC
 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


 (vedi la sezione ``Adattatori di host BusLogic MultiMaster'' per altre
 descrizioni di schede 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 Single-ended SCSI-II
      PM2041UW           eata_dma        ISA     Ultra Wide Single-ended
      PM2042W            eata_dma        EISA    Wide Single-ended
      PM2042UW           eata_dma        EISA    Ultra Wide Single-ended
      PM2044W            eata_dma        PCI     Wide Single-ended
      PM2044UW           eata_dma        PCI     Ultra Wide Single-ended
      PM2142W            eata_dma        EISA    Wide Single-ended
      PM2142UW           eata_dma        EISA    Ultra Wide Single-ended
      PM2144W            eata_dma        PCI     Wide Single-ended
      PM2144UW           eata_dma        PCI     Ultra Wide Single-ended
      PM3021             eata_dma        ISA     multichannel
                                                 raid/simm sockets
      PM3122             eata_dma        EISA    multichannel/raid
      PM3222             eata_dma        EISA    multichannel
                                                 raid/simm sockets
      PM3224             eata_dma        PCI     multichannel
                                                 raid/simm sockets
      PM3334             eata_dma        PCI     Wide Ultra SCSI
                                                 multichannel
                                                 raid/simm sockets

 DTC 3290                aha1542         EISA    Anche se dovrebbe
                                                 funzionare, l'hardware
                                                 DTC non e' supportato
                                                 a causa della politica
                                                 di rilascio della
                                                 documentazione
 DTC 3130                53c7,8xx        PCI             '810
 DTC 3130B               53c7,8xx        PCI             '815
 DTC 3292                aha1542         EISA            3290 con FDC
 DTC 3292                aha1542         EISA            3290 con FDC
 Future Domain 1680      fdomain         ISA             FDC
 Future Domain 3260      fdomain         PCI

 NCR53c810 (schede 53c7,8xx              PCI     $60     chip, non scheda.
   di FIC, Chaintech,                    (scheda)        Le schede non hanno
   Nextor, Gigabyte, etc.                                BIOS, anche se alcune
   Schede madri con chip di                              schede madri non NCR
   AMI, ASUS, J-Bond ecc.                                hanno il BIOS SDMS
   Comune nei sistemi PCI di DEC
 NCR53c815 (             53c7,8xx        PCI     $100    NCR53c810 con
     Intel PCISCSIKIT,                                   bios
     NCR8150S, etc)
 NCR53c825       53c7,8xx                PCI     $120    Versione Wide del
                                                         NCR53c815. Notate
                                                         che il driver Linux
                                                         attuale non negozia
                                                         trasferimenti wide
 Pro Audio Spectrum 16   pas16           ISA             Scheda audio con SCSI
 Seagate ST01            seagate         ISA     $20     Il BIOS funziona solo
                                                         con alcuni driver
 Seagate ST02            seagate         ISA     $40     ST01 con FDC
 Sound Blaster 16 SCSI   aha152x         ISA             Scheda audio con SCSI
 Western Digital 7000    wd7000          ISA             con FDC
 Trantor T128            t128            ISA
 Trantor T128F           t128            ISA             T128 con FDC e
                                                         supporto per IRQ alto
 Trantor T130B           g_NCR5380       ISA
 Ultrastor 14F           ultrastor       ISA             con FDC
 Ultrastor 24F           ultrastor       EISA            con FDC
 Ultrastor 34F           ultrastor       VLB



 Note:

 1. Trantor � stato acquistato recentemente da Adaptec, e alcuni
    prodotti vengono venduti sotto il nome Adaptec

 2. Ultrastor ha recentemente fatto fallimento, perci� al momento non
    si trova il supporto tecnico

 3. Il prezzo per le schede busmastering NCR53c810 non � un errore di
    battitura, comprende il pacchetto driver standard ASPI/CAM per DOS,
    OS/2 e Windows (per un accesso a 32 bit), e altri driver sono
    disponibili per uno scaricamento gratuito.

    Alcune persone sono state fortunate con le seguenti compagnie:



      SW ([email protected]) (214) 907-0871 fax (214) 907-9339





 Fino al 23 Dic 1995, il loro prezzo era di 53$ sulle schede '810.

 4. Gli ultimi chip SCSI di Adaptec mostrano una sensibilit� inconsueta
    ai problemi di cablaggio e terminazione. Per questi motivi, non mi
    sento di raccomandare la Adaptec 154x C e gli aggiornamenti CF o la
    serie 2xxx.

    Notate che i problemi di affidabilit� non si applicano alle vecchie
    schede 154x B, 174x A o per quanto ne so alle schede base
    AIC-6360/AIC-6260  (1505, 1510, 1520 ecc).

    Inoltre la qualit� del loro supporto tecnico � diminuita
    sensibilmente, con lunghi ritardi sempre pi� frequenti, e con i
    loro addetti molto ignoranti (dicono che ci sono politiche di non
    divulgazione su certa letteratura quando in realt� non ce ne sono)
    e ostili (ad esempio si rifiutano di passare le domande a qualcuno
    pi� esperto di loro nel caso in cui non siano in grado di dare una
    risposta esauriente).

    Se gli utenti deiderano un buon trattamento dovrebbero tenere conto
    di questi aspetti. Comunque le Adaptec 152x/1510/1505 sono meglio
    di altre schede ISA di prezzo simile, e si possono fare degli
    ottimi affari con schede usate 154x revisione B e schede 1742 che
    secondo me superano i problemi di supporto.

 5. Tutte le schede DPT possono essere aggiornate con moduli cache e
    raid, la maggior parte delle schede sono anche disponibili in
    versioni Wide e/o Differential.

 6. Le varie schede NCR non si equivalgono completamente. Ad esempio,
    mentre la ASUS SC200 usa la terminazione attiva, molte altre schede
    NCR53c810 usano la terminazione passiva. La maggior parte delle
    schede '825 usano la terminazione attiva, ma alcune usano una ROM
    per BIOS e altre hanno una FLASH ROM. La maggior parte delle schede
    '825 ha un connettore esterno WIDE, un connettore interno WIDE, e
    connettori interni narrow, anche se alcuni (ad esempio il modello
    CSC, meno costoso) non hanno il connettore interno narrow.


 10.9.  Riassunto


 La maggior parte degli utenti ISA, EISA, VESA e PCI saranno
 probabilmente serviti meglio da una scheda BusLogic MultiMaster, a
 causa delle sue prestazioni, delle caratteristiche come ad esempio la
 terminazione attiva, e la compatibilit� Adaptec 1540. C'� un certo
 numero di modelli disponibili con intefacce local bus EISA, ISA, PCI,
 e VESA, single ended e differential, e bus SCSI di 8/16 bit. I pi�
 recenti modelli Ultra SCSI PCI, i BT-948/958/958D, includono anche una
 Flash ROM per facili aggiornamenti firmware, e anche una terminazione
 automatica intelligente.

 Persone che necessitano le migliori prestazioni IO possibili
 dovrebbero prendere in considerazione le schede di DPT, che sono le
 uniche che supportano RAID, caching e pi� di un canale SCSI.

 Persone con il sistema PCI dovrebbero prendere in considerazione le
 schede basate NCR53c8xx. Queste sono controller bus mastering SCSI, le
 '810 sono disponibili al prezzo di 53 $ cadauna (cio� pi� economiche
 delle Adaptec 1520). I test di C't magazine hanno decretato che tali
 schede sono pi� veloci sia di Adaptec 2940 che di BusLogic BT-946C
 (sotto DOS), e ottengono delle prestazioni ragionevoli sotto Linux
 (fino a 6 M/sec attraverso il filesystem). Gli svantaggi di queste
 schede a confronto delle BusLogic consistono nel fatto che non sono
 compatibili con Adaptec 1540, non tutte hanno la terminazione attiva,
 e avrete bisogno dell'ultima revisione del driver (standard in 1.3.5x,
 disponibile anche tramite FTP anonimo per 1.2.x) per poter sfruttare
 appieno l'hardware, e sono pi� soggette a problemi rispetto ad una
 scheda con un'interfaccia mailbox come ad esempio BusLogic o DPT.

 L� dove un funzionamento perfetto immediato � una necessit� assoluta
 una scheda BusLogic MultiMaster o DPT � probabilmente la scelta ottima
 dovuta alla complessit� e ai potenziali problemi delle schede con
 interfaccia non-mailbox come ad esempio le NCR53c8xx e Adaptec
 AIC7xxx.

 Le persone che desiderano uno SCSI non PCI ma hanno pochi soldi a
 disposizione saranno probabilmente pi� felici trovando una scheda
 Adaptec 154x revisione B usata o una 174x revisione A, oppure un clone
 Adaptec 1520 se vogliono hardware nuovo. Queste schede offrono
 prestazioni ragionevoli a un prezzo modesto.


 11.  Assegnazione dei numeri secondari


 A causa dei vincoli imposti dall'uso di Linux di un dev_t di 16 bit
 con soli 8 bit allocati al numero secondario, i numeri minori dei
 disci, nastri, CD-ROM e disposisitivi SCSI generici sono assegnati
 dinamicamente seguendo la seguente procedura:







 Per tutti gli adattatori host SCSI, da scsi0 a scsiN
     Per tutti gli ID SCSI su questo bus, da 0 a 7, eccetto per questo
     adattatore host ID.
         Per tutte le unit� logiche, da 0 tramite max_scsi_luns:
           - Provare la combinazione bus, target, LUN inviando un comando
             TEST UNIT READY. Se non c'� possibilit� che altre unit� siano
             qui, non provare altri LUN per questa combinazione bus + SCSI ID
           - Inviare un comando INQUIRY per determinare cosa � stato trovato
             incluso il tipo di dispositivo, il produttore, il modello, la
             revisione del firmware.
           - Passare i risultati di ci� a una funzione speciale di ricognizione
             per ciascun driver di alto livello presente (cio� dischi, nastri
             ecc). Attaccare questo dispositivo alla prossima unit� disponibile
             per ciascun driver che sia disponibile per gestirlo. Il device
             generico si attacca a ogni dispositivo.
           - Se si trattava di un SCSI-I, o di un dispositivo appartenente ad
             una lista di dispositivi noti per non gestire LUN multipli,
             non provare alcun altro LUN su questo bus + SCSI ID.
           - Se si tratta di un dispositivo noto per avere LUN multipli, allora
             viene forzata una scansione di tutto lo spettro Lun, scavalcando
             max_scsi_luns.




 Ci sono spesso problemi con questo approccio a causa del fatto che se
 possedete un sistema dove alcuni dispositivi sono presenti
 saltuariamente, allora i numeri secondari per un dato dispositivo
 dipenderanno da quali dispositivi erano presenti al momento del boot.
 Questo pu� far insorgere dei problemi, perch� gli script rc o il file
 /etc/fstab potrebbero contenere istruzioni per il montaggio di
 particolari partizioni che falliscono quando il disco appare con un
 numero secondario diverso.

 Questo problema non � ancora stato del tutto risolto. C'� un programma
 che pu� essere trovato su tsx-11 che crea una gerarchia /dev/scsi
 basata sui numeri host, id e lun. Questo sistema non � perfetto, ma
 aiuta a risolvere alcuni problemi.

 Una soluzione migliore verr� probabilmente fornita dalla pseudo
 directory /proc/scsi. Questo � attualmente un lavoro in corso, quindi
 al momento attuale non possiamo descrivere la forma della soluzione,
 ma al momento in cui scriviamo appare essere un'approccio promettente
 per la soluzione di alcune delle priorit�.


 12.  Nota sulla traduzione

 La traduzione originale di questo HOWTO � opera della Apogeo
 <http://www.apogeonline.com>, per il libro Linux HowTo (La bibbia di
 Linux) realizzato in collaborazione con il Pluto. L'Apogeo ha
 gentilmente concesso questa ed altre traduzioni ad ILDP per la sua
 diffusione elettronica.

 Conversione in SGML e correzione a cura di Samuele Maretti
 [email protected], cui vanno segnalati pure eventuali errori,
 incongruenze ecc.