home *** CD-ROM | disk | FTP | other *** search
/ PC World 1999 August / PCWorld_1999-08_cd.bin / doc / HOWTO / unmaintained / SCSI-HOWTO < prev    next >
Text File  |  1998-03-15  |  147KB  |  3,723 lines

  1.   The Linux SCSI HOWTO
  2.   Drew Eckhardt,<drew@PoohSticks.ORG> (transformed to linuxdoc-sgml for¡
  3.   mat by Dieter Faulbaum), <faulbaum@bii.bessy.de>
  4.   v2.30, 30 August 1996
  5.  
  6.   1.  Introduction
  7.  
  8.   This documentation is free documentation; you can redistribute it
  9.   and/or modify it under the terms of the GNU General Public License as
  10.   published by the Free Software Foundation; either version 2 of the
  11.   License, or (at your option) any later version.
  12.  
  13.   This documentation is distributed in the hope that it will be useful,
  14.   but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  16.   General Public License for more details.
  17.  
  18.   You should have received a copy of the GNU General Public License
  19.   along with this documentation; if not, write to the Free Software
  20.   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  21.  
  22.   That said, I'd appreciate it if people would ask me
  23.   <drew@PoohSticks.ORG> if there's a newer version available before they
  24.   publish it.  When people publish outdated versions, I get questions
  25.   from users that are answered in newer versions, and it reflects poorly
  26.   on the publisher.  I'd also prefer that all references to free
  27.   distribution sites, and possibly competing distributions/products be
  28.   left intact.
  29.  
  30.   IMPORTANT :
  31.  
  32.   BUG REPORTS OR OTHER REQUESTS FOR HELP WHICH FAIL TO FOLLOW THE
  33.   PROCEDURES OUTLINED IN THE ``REPORTING BUGS'' SECTION WILL BE IGNORED.
  34.  
  35.   This HOWTO covers the Linux SCSI subsystem, as implemented in Linux
  36.   kernel revision 1.2.10 and newer alpha code.  Earlier revisions of the
  37.   SCSI code are _unsupported_, and may differ significantly in terms of
  38.   the drivers implemented, performance, and options available.
  39.  
  40.   For additional information, you may wish to join the linux-scsi
  41.   mailing list by mailing majordomo@vger.rutgers.edu with the line
  42.  
  43.        subscribe linux-scsi
  44.  
  45.   in the text.  You can unsubscribe by sending mail to the same address
  46.   and including
  47.  
  48.        unsubscribe linux-scsi
  49.  
  50.   in the text.
  51.  
  52.   Once you're subscribed, you can send mail to the list at
  53.  
  54.   linux-scsi@vger.rutgers.edu
  55.  
  56.   I'm aware that this document isn't the most user-friendly, and that
  57.   there may be inaccuracies and oversights.  If you have constructive
  58.   comments on how to rectify the situation you're free to mail me about
  59.   it.
  60.  
  61.   2.  Common Problems
  62.  
  63.   This section lists some of the common problems that people have.  If
  64.   there is not anything here that answers your questions, you should
  65.   also consult the sections for your host adapter and the devices in
  66.   that are giving you problems.
  67.  
  68.   2.1.  General Flakiness
  69.  
  70.   If you experience random errors, the most likely causes are cabling
  71.   and termination problems.
  72.  
  73.   Some products, such as those built around the newer NCR chips, feature
  74.   digital filtering and active signal negation, and aren't very
  75.   sensitive to cabling problems.
  76.  
  77.   Others, such as the Adaptec 154xC, 154xCF, and 274x, are _extremely_
  78.   sensitive and may fail with cables that work with other systems.
  79.  
  80.   I reiterate : some host adapters are _extremely_ sensitive to cabling
  81.   and termination problems and therefore, cabling and termination should
  82.   be the first things checked when there are problems.
  83.  
  84.   To minimize your problems, you should use cables which
  85.  
  86.   1. Claim SCSI-II compliance
  87.  
  88.   2. Have a characteristic impedance of 132 ohms
  89.  
  90.   3. All come from the same source to avoid impedance mismatches
  91.  
  92.   4. Come from a reputable vendor such as Amphenol
  93.  
  94.   Termination power should be provided by _all_ devices on the SCSI bus,
  95.   through a diode to prevent current backflow, so that sufficient power
  96.   is available at the ends of the cable where it is needed.  To prevent
  97.   damage if the bus is shorted, TERMPWR should be driven through a fuse
  98.   or other current limiting device.
  99.  
  100.   If multiple devices, external cables, or FAST SCSI 2 are used, active
  101.   or forced perfect termination should be used on both ends of the SCSI
  102.   bus.
  103.  
  104.   See the Comp.Periphs.Scsi FAQ (available on tsx-11 in
  105.   pub/linux/ALPHA/scsi) for more information about active termination.
  106.  
  107.   2.2.  The kernel command line
  108.  
  109.   Other parts of the documentation refer to a "kernel command line".
  110.  
  111.   The kernel command line is a set of options you may specify from
  112.   either the LILO : prompt after an image name, or in the append field
  113.   in your LILO configuration file (LILO .14 and newer use
  114.   /etc/lilo.conf, older versions use /etc/lilo/config).
  115.  
  116.   Boot your system with LILO, and hit one of the alt, control, or shift
  117.   keys when it first comes up to get a prompt.  LILO should respond with
  118.  
  119.        :
  120.  
  121.   At this prompt, you can select a kernel image to boot, or list them
  122.   with ?.  Ie
  123.  
  124.        :?
  125.  
  126.        ramdisk floppy harddisk
  127.  
  128.   To boot that kernel with the command line options you have selected,
  129.   simply enter the name followed by a white space delimited list of
  130.   options, terminating with a return.
  131.  
  132.   Options take the form of
  133.  
  134.        variable=valuelist
  135.  
  136.   Where valuelist may be a single value or comma delimited list of
  137.   values with no whitespace.  With the exception of root device,
  138.   individual values are numbers, and may be specified in either decimal
  139.   or hexadecimal.
  140.  
  141.   Ie, to boot linux with an Adaptec 1520 clone not recognized at bootup,
  142.   you might type
  143.  
  144.        :floppy aha152x=0x340,11,7,1
  145.  
  146.   If you don't care to type all of this at boot time, it is also
  147.   possible to use the LILO configuration file "append" option with LILO
  148.   .13 and newer.
  149.  
  150.   Ie,
  151.  
  152.        append="aha152x=0x340,11,7,1"
  153.  
  154.   2.3.  A SCSI device shows up at all possible IDs
  155.  
  156.   If this is the case, you have strapped the device at the same address
  157.   as the controller (typically 7, although some boards use other
  158.   addresses, with 6 being used by some Future Domain boards).
  159.  
  160.   Please change the jumper settings.
  161.  
  162.   2.4.  A SCSI device shows up at all possible LUNs
  163.  
  164.   The device has buggy firmware.
  165.  
  166.   As an interim solution, you should try using the kernel command line
  167.   option
  168.  
  169.        max_scsi_luns=1
  170.  
  171.   If that works, there is a list of buggy devices in the kernel sources
  172.   in drivers/scsi/scsi.c in the variable blacklist.  Add your device to
  173.   this list and mail the patch to Linus Torvalds
  174.   <Linus.Torvalds@cs.Helsinki.FI>.
  175.  
  176.   2.5.  You get sense errors when you know the devices are error free
  177.  
  178.   Sometimes this is caused by bad cables or improper termination.
  179.  
  180.   See section ``General Flakiness''
  181.  
  182.   2.6.  A kernel configured with networking does not work
  183.  
  184.   The auto-probe routines for many of the network drivers are not
  185.   passive, and will interfere with operation with some of the SCSI
  186.   drivers.
  187.  
  188.   2.7.  Device detected, but unable to access
  189.  
  190.   A SCSI device is detected by the kernel, but you are unable to access
  191.   it - ie mkfs /dev/sdc, tar xvf /dev/rst2, etc fails.
  192.  
  193.   You don't have a special file in /dev for the device.
  194.  
  195.   Unix devices are identified as either block or character (block
  196.   devices go through the buffer cache, character devices do not)
  197.   devices, a major number (ie which driver is used - block major 8
  198.   corresponds to SCSI disks) and a minor number (ie which unit is being
  199.   accessed through a given driver - ie character major 4, minor 0 is the
  200.   first virtual console, minor 1 the next, etc).  However, accessing
  201.   devices through this separate namespace would break the unix/Linux
  202.   metaphor of "everything is a file," so character and block device
  203.   special files are created under /dev.  This lets you access the raw
  204.   third SCSI disk device as /dev/sdc, the first serial port as
  205.   /dev/ttyS0, etc.
  206.  
  207.   The preferred method for creating a file is using the MAKEDEV script -
  208.   cd /dev
  209.  
  210.   and run MAKEDEV (as root) for the devices you want to create - ie
  211.  
  212.         ./MAKEDEV sdc
  213.  
  214.   wildcards "should" work - ie
  215.  
  216.         ./MAKEDEV sd\*
  217.  
  218.   "should" create entries for all SCSI disk devices (doing this should
  219.   create /dev/sda through /dev/sdp, with fifteen partition entries for
  220.   each)
  221.  
  222.         ./MAKEDEV sdc\*
  223.  
  224.   "should" create entries for /dev/sdc and all fifteen permissible
  225.   partitions on /dev/sdc, etc.
  226.  
  227.   I say "should" because this is the standard unix behavior - the
  228.   MAKEDEV script in your installation may not conform to this behavior,
  229.   or may have restricted the number of devices it will create.
  230.  
  231.   If MAKEDEV won't do the right magic for you, you'll have to create the
  232.   device entries by hand with the mknod command.
  233.  
  234.   The block/character type, major, and minor numbers are specified for
  235.   the various SCSI devices in section ``Device Files'' in the
  236.   appropriate section.
  237.  
  238.   Take those numbers, and use (as root)
  239.  
  240.        mknod /dev/device b|c major minor
  241.  
  242.   ie -
  243.  
  244.        mknod /dev/sdc b 8 32
  245.        mknod /dev/rst0 c 9 0
  246.  
  247.   2.8.  SCSI System Lockups
  248.  
  249.   This could be one of a number of things.  Also see the section for
  250.   your specific host adapter for possible further solutions.
  251.  
  252.   There are cases where the lockups seem to occur when multiple devices
  253.   are in use at the same time.  In this case, you can try contacting the
  254.   manufacturer of the devices and see if firmware upgrades are available
  255.   which would correct the problem.  If possible, try a different scsi
  256.   cable, or try on another system.  This can also be caused by bad
  257.   blocks on disks, or by bad handling of DMA by the motherboard (for
  258.   host adapters that do DMA).  There are probably many other possible
  259.   conditions that could lead to this type of event.
  260.  
  261.   Sometimes these problems occur when there are multiple devices in use
  262.   on the bus at the same time.  In this case, if your host adapter
  263.   driver supports more than one outstanding command on the bus at one
  264.   time, try reducing this to 1 and see if this helps. If you have tape
  265.   drives or slow cdrom drives on the bus, this might not be a practical
  266.   solution.
  267.  
  268.   2.9.  Configuring and building the kernel
  269.  
  270.   Unused SCSI drivers eat up valuable memory, aggravating memory
  271.   shortage problems on small systems because kernel memory is unpagable.
  272.  
  273.   So, you will want to build a kernel tuned for your system, with only
  274.   the drivers you need installed.
  275.  
  276.        cd to /usr/src/linux
  277.  
  278.   If you are using a root device other than the current one, or
  279.   something other than 80x25 VGA, and you are writing a boot floppy, you
  280.   should edit the makefile, and make sure the
  281.  
  282.        ROOT_DEV =
  283.  
  284.   and
  285.  
  286.        SVGA_MODE =
  287.  
  288.   lines are the way you want them.
  289.  
  290.   If you've installed any patches, you may wish to guarantee that all
  291.   files are rebuilt.  If this is the case, you should type
  292.  
  293.        make mrproper
  294.  
  295.   Irregardless of weather you ran make mrproper, type
  296.  
  297.        make config
  298.  
  299.   and answer the configuration questions.  Then run
  300.  
  301.        make depend
  302.  
  303.   and finally
  304.  
  305.        make
  306.  
  307.   Once the build completes, you may wish to update the lilo
  308.   configuration, or write a boot floppy.  A boot floppy may be made by
  309.   running
  310.  
  311.        make zdisk
  312.  
  313.   2.10.  LUNS other than 0 don't work
  314.  
  315.   Many SCSI devices are horrendously broken, lock the SCSI bus up solid,
  316.   and do other bad things when you attempt to talk to them at a logical
  317.   unit someplace other than zero.
  318.  
  319.   So, by default recent versions of the Linux kernel will not probe luns
  320.   other than 0.  To work around this, you need to the max_scsi_luns
  321.   command line option, or recompile the kernel with the
  322.   CONFIG_SCSI_MULTI_LUN option.
  323.  
  324.   Usually, you'll put
  325.  
  326.        max_scsi_luns=8
  327.  
  328.   on your LILO command line.
  329.  
  330.   If your multi-LUN devices still aren't detected correctly after trying
  331.   one of these fixes (as the case will be with many old SCSI->MFM, RLL,
  332.   ESDI, SMD, and similar bridge boards),  you'll be thwarted by this
  333.   piece of code
  334.  
  335.        /* Some scsi-1 peripherals do not handle lun != 0.
  336.           I am assuming that scsi-2 peripherals do better */
  337.        if((scsi_result[2] & 0x07) == 1 &&
  338.           (scsi_result[3] & 0x0f) == 0) break;
  339.  
  340.   in scan_scsis() in drivers/scsi/scsi.c.  Delete this code, and you
  341.   should be fine.
  342.  
  343.   3.  Reporting Bugs
  344.  
  345.   The Linux SCSI developers don't necessarily maintain old revisions of
  346.   the code due to space constraints.  So, if you are not running the
  347.   latest publically released Linux kernel (note that many of the Linux
  348.   distributions, such as MCC, SLS, Yggdrasil, etc. often lag one or even
  349.   twenty patches behind this) chances are we will be unable to solve
  350.   your problem.  So, before reporting a bug, please check to see if it
  351.   exists with the latest publically available kernel.
  352.  
  353.   If after upgrading, and reading this document thoroughly, you still
  354.   believe that you have a bug, please mail a bug report to the SCSI
  355.   channel of the mailing list where it will be seen by many of the
  356.   people who've contributed to the Linux SCSI drivers.
  357.  
  358.   In your bug report, please provide as much information as possible
  359.   regarding your hardware configuration, the exact text of
  360.  
  361.   all of the messages that Linux prints when it boots, when the error
  362.   condition occurs, and where in the source code the error is.  Use the
  363.   procedures outlined in ``Capturing messages'' and ``Locating the
  364.   source of a panic()''.
  365.  
  366.   Failure to provide the maximum possible amount of information may
  367.   result in misdiagnosis of your problem, or developers deciding that
  368.   there are other more interesting problems to fix.
  369.  
  370.   The bottom line is that if we can't reproduce your bug, and you can't
  371.   point at us what's broken, it won't get fixed.
  372.  
  373.   3.1.  Capturing messages
  374.  
  375.   If you are not running a kernel message logging system :
  376.  
  377.   Insure that the /proc filesystem is mounted.
  378.  
  379.        grep proc /etc/mtab
  380.  
  381.   If the /proc filesystem is not mounted, mount it
  382.  
  383.        mkdir /proc
  384.        chmod 755 /proc
  385.        mount -t proc /proc /proc
  386.  
  387.   Copy the kernel revision and messages into a log file
  388.  
  389.        cat /proc/version > /tmp/log
  390.        cat /proc/kmsg >> /tmp/log
  391.  
  392.   Type CNTRL-C after a second or two.
  393.  
  394.   If you are running some logger, you'll have to poke through the
  395.   appropriate log files (/etc/syslog.conf should be of some use in
  396.   locating them), or use dmesg.
  397.  
  398.   If Linux is not yet bootstrapped, format a floppy diskette under DOS.
  399.   Note that if you have a distribution which mounts the root diskette
  400.   off of floppy rather than RAM drive, you'll have to format a diskette
  401.   readable in the drive not being used to mount root or use their
  402.   ramdisk boot option.
  403.  
  404.   Boot Linux off your distribution boot floppy, preferably in single
  405.   user mode using a RAM disk as root.
  406.  
  407.        mkdir /tmp/dos
  408.  
  409.   Insert the diskette in a drive not being used to mount root, and mount
  410.   it.  Ie
  411.  
  412.        mount -t msdos /dev/fd0 /tmp/dos
  413.  
  414.   or
  415.  
  416.        mount -t msdos /dev/fd1 /tmp/dos
  417.  
  418.   Copy your log to it
  419.  
  420.        cp /tmp/log /tmp/dos/log
  421.  
  422.   Unmount the DOS floppy
  423.  
  424.        umount /tmp/dos
  425.  
  426.   And shutdown Linux
  427.  
  428.        shutdown
  429.  
  430.   Reboot into DOS, and using your favorite communications software
  431.   include the log file in your trouble mail.
  432.  
  433.   3.2.  Locating the source of a panic()
  434.  
  435.   Like other unices, when a fatal error is encountered, Linux calls the
  436.   kernel panic() function.  Unlike other unices, Linux doesn't dump core
  437.   to the swap or dump device and reboot automatically.  Instead, a
  438.   useful summary of state information is printed for the user to
  439.   manually copy down.  Ie :
  440.  
  441.        Unable to handle kernel NULL pointer dereference at virtual address c0000004
  442.        current->tss,cr3 = 00101000, %cr3 = 00101000
  443.        *pde = 00102027
  444.        *pte = 00000027
  445.        Oops: 0000
  446.        EIP:    0010:0019c905
  447.        EFLAGS: 00010002
  448.        eax: 0000000a   ebx: 001cd0e8   ecx: 00000006   edx: 000003d5
  449.        esi: 001cd0a8   edi: 00000000   ebp: 00000000   esp: 001a18c0
  450.        ds: 0018   es: 0018   fs: 002b   gs: 002b   ss: 0018
  451.        Process swapper (pid: 0, process nr: 0, stackpage=001a09c8)
  452.        Stack: 0019c5c6 00000000 0019c5b2 00000000 0019c5a5 001cd0a8 00000002 00000000
  453.               001cd0e8 001cd0a8 00000000 001cdb38 001cdb00 00000000 001ce284 0019d001
  454.               001cd004 0000e800 fbfff000 0019d051 001cd0a8 00000000 001a29f4 00800000
  455.        Call Trace: 0019c5c6 0019c5b2 0018c5a5 0019d001 0019d051 00111508 00111502
  456.                    0011e800 0011154d 00110f63 0010e2b3 0010ef55 0010ddb7
  457.        Code: 8b 57 04 52 68 d2 c5 19 00 e8 cd a0 f7 ff 83 c4 20 8b 4f 04
  458.        Aiee, killing interrupt handler
  459.        kfree of non-kmalloced memory: 001a29c0, next= 00000000, order=0
  460.        task[0] (swapper) killed: unable to recover
  461.        Kernel panic: Trying to free up swapper memory space
  462.        In swapper task - not syncing
  463.  
  464.   Take the hexadecimal number on the EIP: line, in this case 19c905, and
  465.   search through /usr/src/linux/zSystem.map for the highest number not
  466.   larger than that address.  Ie,
  467.  
  468.        0019a000 T _fix_pointers
  469.        0019c700 t _intr_scsi
  470.        0019d000 t _NCR53c7x0_intr
  471.  
  472.   That tells you what function its in.  Recompile the source file which
  473.   defines that function file with debugging enabled, or the whole kernel
  474.   if you prefer by editing /usr/src/linux/Makefile and adding a "-g" to
  475.   the CFLAGS definition.
  476.        #
  477.        # standard CFLAGS
  478.        #
  479.  
  480.   Ie,
  481.  
  482.        CFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -pipe
  483.  
  484.   becomes
  485.  
  486.        CFLAGS = -g -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -pipe
  487.  
  488.   Rebuild the kernel, incrementally or by doing a
  489.  
  490.        make clean
  491.        make
  492.  
  493.   Make the kernel bootable by creating an entry in your /etc/lilo.conf
  494.   for it
  495.  
  496.        image = /usr/src/linux/zImage
  497.        label = experimental
  498.  
  499.   and re-running LILO as root, or by creating a boot floppy
  500.  
  501.        make zImage
  502.  
  503.   Reboot and record the new EIP for the error.
  504.  
  505.   If you have script installed, you may want to start it, as it will log
  506.   your debugging session to the typescript file.
  507.  
  508.   Now, run
  509.  
  510.        gdb /usr/src/linux/tools/zSystem
  511.  
  512.   and enter
  513.  
  514.        info line *<your EIP>
  515.  
  516.   Ie,
  517.  
  518.        info line *0x19c905
  519.  
  520.   To which GDB will respond something like
  521.  
  522.        (gdb) info line *0x19c905
  523.        Line 2855 of "53c7,8xx.c" starts at address 0x19c905 <intr_scsi+641&>
  524.           and ends at 0x19c913 <intr_scsi+655>.
  525.  
  526.   Record this information.  Then, enter
  527.  
  528.        list <line number>
  529.  
  530.   Ie,
  531.  
  532.        (gdb) list 2855
  533.        2850    /*      printk("scsi%d : target %d lun %d unexpected disconnect\n",
  534.        2851                host->host_no, cmd->cmd->target, cmd->cmd->lun); */
  535.        2852            printk("host : 0x%x\n", (unsigned) host);
  536.        2853            printk("host->host_no : %d\n", host->host_no);
  537.        2854            printk("cmd : 0x%x\n", (unsigned) cmd);
  538.        2855            printk("cmd->cmd : 0x%x\n", (unsigned) cmd->cmd);
  539.        2856            printk("cmd->cmd->target : %d\n", cmd->cmd->target);
  540.        2857            if (cmd) {;
  541.        2858                abnormal_finished(cmd, DID_ERROR << 16);
  542.        2859            }
  543.        2860            hostdata->dsp = hostdata->script + hostdata->E_schedule /
  544.        2861                sizeof(long);
  545.        2862            hostdata->dsp_changed = 1;
  546.        2863        /* SCSI PARITY error */
  547.        2864        }
  548.        2865
  549.        2866        if (sstat0_sist0 & SSTAT0_PAR) {
  550.        2867            fatal = 1;
  551.        2868            if (cmd && cmd->cmd) {
  552.        2869                printk("scsi%d : target %d lun %d parity error.\n",
  553.  
  554.   Obviously, quit will take you out of GDB.
  555.  
  556.   Record this information too, as it will provide a context in case the
  557.   developers' kernels differ from yours.
  558.  
  559.   4.  Modules
  560.  
  561.   This section gives specific details regarding the support for loadable
  562.   kernel modules and how it relates to SCSI.
  563.  
  564.   4.1.  General Information
  565.  
  566.   Loadable modules are a means by which the user or system administrator
  567.   can load files into the kernel's memory in such a way that the
  568.   kernel's capabilities are expanded.  The most common usages of modules
  569.   are for drivers to support hardware, or to load filesytems.
  570.  
  571.   There are several advantages of modules for SCSI.  One is that a
  572.   system administrator trying to maintain a large number of machines can
  573.   use a single kernel image for all of the machines, and then load
  574.   kernel modules to support hardware that is only present on some
  575.   machines.
  576.  
  577.   It is also possible for someone trying to create a distribution to use
  578.   a script on the bootable floppy to query for which modules to be
  579.   loaded.  This saves memory that would otherwise be wasted on unused
  580.   drivers, and it would also reduce the possibility that a probe for a
  581.   non-existent card would screw up some other card on the system.
  582.  
  583.   Modules also work out nicely on laptops, which tend to have less
  584.   memory than desktop machines, and people tend to want to keep the
  585.   kernel image as small as possible and load modules as required.  Also,
  586.   modules makes supporting PCMCIA SCSI cards on laptops somewhat easier,
  587.   since you can load and unload the driver as the card is
  588.   inserted/removed. [Note: currently the qlogic and 152x drivers support
  589.   PCMCIA].
  590.  
  591.   Finally, there is the advantage that kernel developers can more easily
  592.   debug and test their drivers, since testing a new driver does not
  593.   require rebooting the machine (provided of course that the machine has
  594.   not completely crashed as a result of some bug in the driver).
  595.  
  596.   Although modules are very nice, there is one limitation.  If your root
  597.   disk partition is on a scsi device, you will not be able to use
  598.   modularized versions of scsi code required to access the disk.  This
  599.   is because the system must be able to mount the root partition before
  600.   it can load any modules from disk.  There are people thinking about
  601.   ways of fixing the loader and the kernel so that the kernel can self-
  602.   load modules prior to attempting to mount the root filesystem, so at
  603.   some point in the future this limitation may be lifted.
  604.  
  605.   4.2.  Module support in the 1.2.N kernel
  606.  
  607.   In the 1.2.N series of kernels, there is partial support for SCSI
  608.   kernel modules.  While none of the high level drivers (such as disk,
  609.   tape, etc) can be used as modules, most of the low level drivers (i.e.
  610.   1542, 1522) can be loaded and unloaded as required.  Each time you
  611.   load a low-level driver, the driver first searches for cards that can
  612.   be driven.  Next, the bus is scanned for each card that is found, and
  613.   then the internal data structures are set up so as to make it possible
  614.   to actually use the devices attached to the cards that the driver is
  615.   managing.
  616.  
  617.   When you are through with a low-level driver, you can unload it.  You
  618.   should keep in mind that usage counts are maintained based upon
  619.   mounted filesystems, open files, etc, so that if you are still using a
  620.   device that the driver is managing, the rmmod utility will tell you
  621.   that the device is still busy and refuse to unload the driver.  When
  622.   the driver is unloaded, all of the associated data structures are also
  623.   freed so that the system state should be back to where it was before
  624.   the module was loaded.  This means that the driver could be reloaded
  625.   at a later time if required.
  626.  
  627.   4.3.  Module support in the 1.3.N kernel
  628.  
  629.   In the 1.3 series of kernels, the scsi code is completely modularized.
  630.   This means that you can start with a kernel that has no scsi support
  631.   whatsoever, and start loading modules and you will eventually end up
  632.   with complete support.
  633.  
  634.   If you wish, you can compile some parts of the SCSI code into the
  635.   kernel and then load other parts later - it is all up to you how much
  636.   gets loaded at runtime and how much is linked directly into the
  637.   kernel.
  638.  
  639.   If you are starting with a kernel that has no support whatsoever for
  640.   SCSI, then the first thing you will need to do is to load the scsi
  641.   core into the kernel - this is in a module called "scsi_mod".  You
  642.   will not be able to load any other scsi modules until you have this
  643.   loaded into kernel memory.  Since this does not contain any low-level
  644.   drivers, the act of loading this module will not scan any busses, nor
  645.   will it activate any drivers for scsi disks, tapes, etc.  If you
  646.   answered 'Y' to the CONFIG_SCSI question when you built your kernel,
  647.   you will not need to load this module.
  648.  
  649.   At this point you can add modules in more or less any order to achieve
  650.   the desired functionality.  Usage counts are interlocks are used to
  651.   prevent unloading of any component which might still be in use, and
  652.   you will get a message from rmmod if a module is still busy.
  653.  
  654.   The high level drivers are in modules named "sd_mod", "sr_mod", "st",
  655.   and "sg", for disk, cdrom, tape, and scsi generics support
  656.   respectively.  When you load a high level driver, the device list for
  657.   all attached hosts is examined for devices which the high level driver
  658.   can drive, and these are automatically activated.
  659.  
  660.   The use of modules with low level drivers were described in the
  661.   section of the ``modules under 1.2 kernels''.  When a low-level driver
  662.   is loaded, the bus is scanned, and each device is examined by each of
  663.   the high level drivers to see if they recognize it as something that
  664.   they can drive - anything recognized is automatically attached and
  665.   activated.
  666.  
  667.   5.  Hosts
  668.  
  669.   This section gives specific information about the various host
  670.   adapters that are supported in some way or another under linux.
  671.  
  672.   5.1.  Supported and Unsupported Hardware
  673.  
  674.   Drivers in the distribution kernel :
  675.  
  676.   Adaptec 152x, Adaptec 154x (DTC 329x boards usually work, but are
  677.   unsupported), Adaptec 174x, Adaptec 274x/284x (294x support requires a
  678.   newer version of the driver), BusLogic MultiMaster Host Adapters,
  679.   EATA-DMA and EATA-PIO protocol compilant boards (DPT PM2001, PM2011,
  680.   PM2012A, PM2012B, PM2021, PM2022, PM2024, PM2122, PM2124, PM2322,
  681.   PM2041, PM2042, PM2044, PM2142, PM2144, PM2322, PM3021, PM3122,
  682.   PM3222, PM3224, PM3334 some boards from NEC, AT&T, SNI, AST, Olivetti,
  683.   and Alphatronix), Future Domain 850, 885, 950, and other boards in
  684.   that series (but not the 840, 841, 880, and 881 boards unless you make
  685.   the appropriate patch), Future Domain 16x0 with TMC-1800, TMC-18C30,
  686.   or TMC-18C50 chips, NCR53c8xx,PAS16 SCSI ports, Seagate ST0x, Trantor
  687.   T128/T130/T228 boards, Ultrastor 14F, 24F, and 34F, and Western
  688.   Digital 7000.
  689.  
  690.   MCA :
  691.  
  692.   MCA boards which are compatible with a supported board (ie, Adaptec
  693.   1640 and BusLogic 640) will work.
  694.  
  695.   Alpha drivers :
  696.  
  697.   Many ALPHA drivers are available at
  698.  
  699.        ftp://tsx-11.mit.edu/pub/linux/ALPHA/scsi
  700.  
  701.   Drivers which will work with modifications
  702.  
  703.   NCR53c8x0/7x0:
  704.  
  705.        A NCR53c8xx driver has been developed, but currently will not work
  706.        with NCR53c700, NCR53c700-66, NCR53c710, and NCR53c720 chips.  A list
  707.        of changes needed to make each of these chips work follows, as well
  708.        as a summary of the complexity.
  709.  
  710.        NCR53c720 (trivial) - detection changes, initialization changes, change
  711.            fixup code to translate '810 register addresses to
  712.            '7xx mapping.
  713.  
  714.        NCR53c710 (trivial) - detection changes, initialization changes,
  715.            of assembler, change fixup code to translate '810 register
  716.            addresses to '7xx mapping, change interrupt handlers to treat
  717.            IID interrupt from INTFLY instruction to emulate it.
  718.  
  719.        NCR53c700, NCR53c700-66 (very messy) - detection changes,
  720.            initialization changes, modification of NCR code to not use DSA,
  721.            modification of Linux code to handle context switches.
  722.  
  723.   SCSI hosts that will not work :
  724.  
  725.   All parallel->SCSI adapters, Rancho SCSI boards, and Grass Roots SCSI
  726.   boards.  BusLogic FlashPoint boards, such as the BT-930/932/950, are
  727.   currently unsupported.
  728.  
  729.   SCSI hosts that will NEVER work :
  730.  
  731.   Non Adaptec compatible, non NCR53c8xx DTC boards (including the 3270
  732.   and 3280).
  733.  
  734.   CMD SCSI boards.
  735.  
  736.   Acquiring programming information requires a non-disclosure agreement
  737.   with DTC/CMD.  This means that it would be impossible to distribute a
  738.   Linux driver if one were written, since complying with the NDA would
  739.   mean distributing no source, in violation of the GPL, and complying
  740.   with the GPL would mean distributing source, in violation of the NDA.
  741.  
  742.   If you want to run Linux on some other unsupported piece of hardware,
  743.   your options are to either write a driver yourself (Eric Youngdale and
  744.   I are usually willing to answer technical questions concerning the
  745.   Linux SCSI drivers) or to commission a driver (Normal consulting rates
  746.   mean that this will not be a viable option for personal use).
  747.  
  748.   5.1.1.  Multiple host adapters
  749.  
  750.   With some host adapters (see ``Buyers' Guide : Feature Comparison''),
  751.   you can use multiple host adapters of the same type in the same
  752.   system.  With multiple adapters of the same type in the same system,
  753.   generally the one at the lowest address will be scsi0, the one at the
  754.   next address scsi1, etc.
  755.  
  756.   In all cases, it is possible to use multiple host adapters of
  757.   different types, provided that none of their addresses conflict.  SCSI
  758.   controllers are scanned in the order specified in the
  759.   builtin_scsi_hosts[] array in drivers/scsi/hosts.c, with the order
  760.   currently being
  761.  
  762.        BusLogic, Ultrastor 14/34F, Ultrastor 14F,, Adaptec
  763.        151x/152x, Adaptec 154x, Adaptec 174x, AIC7XXX, AM53C974,
  764.        Future Domain 16x0, Always IN2000, Generic NCR5380, QLOGIC,
  765.        PAS16, Seagate, Trantor T128/T130, NCR53c8xx, EATA-DMA,
  766.        WD7000, debugging driver.
  767.  
  768.   In most cases (ie, you aren't trying to use both BusLogic and Adaptec
  769.   drivers), this can be changed to suit your needs (ie, keeping the same
  770.   devices when new SCSI devices are added to the system on a new
  771.   controller) by moving the individual entries.
  772.  
  773.   5.2.  Common Problems
  774.  
  775.   5.2.1.  SCSI timeouts
  776.  
  777.   Make sure interrupts are enabled correctly, and there are no IRQ, DMA,
  778.   or address conflicts with other boards.
  779.  
  780.   5.2.2.  Failure of autoprobe routines on boards that rely on BIOS for
  781.   autoprobe.
  782.  
  783.   If your SCSI adapter is one of the following :
  784.  
  785.        Adaptec 152x, Adaptec 151x, Adaptec AIC-6260, Adaptec
  786.        AIC-6360, Future Domain 1680, Future Domain TMC-950, Future
  787.        Domain TMC-8xx, Trantor T128, Trantor T128F, Trantor T228F,
  788.        Seagate ST01, Seagate ST02, or a Western Digital 7000
  789.  
  790.   and it is not detected on bootup, ie you get a
  791.  
  792.        scsi : 0 hosts
  793.  
  794.   message or a
  795.  
  796.        scsi%d : type
  797.  
  798.   message is not printed for each supported SCSI adapter installed in
  799.   the system, you may have a problem with the autoprobe routine not
  800.   knowing about your board.
  801.  
  802.   Autodetection will fail for drivers using the BIOS for autodetection
  803.   if the BIOS is disabled.  Double check that your BIOS is enabled, and
  804.   not conflicting with any other peripherial BIOSes.
  805.  
  806.   Autodetection will also fail if the board's "signature" and/or BIOS
  807.   address don't match known ones.
  808.  
  809.   If the BIOS is installed, please use DOS and DEBUG to find a signature
  810.   that will detect your board -
  811.  
  812.   Ie, if your board lives at 0xc8000, under DOS do
  813.  
  814.        debug
  815.        d c800:0
  816.        q
  817.  
  818.   and send a message to the SCSI channel of the mailing list with the
  819.   ASCII message, with the length and offset from the base address (ie,
  820.   0xc8000).  Note that the EXACT text is required, and you should
  821.   provide both the hex and ASCII portions of the text.
  822.  
  823.   If no BIOS is installed, and you are using an Adaptec 152x, Trantor
  824.   T128, or Seagate driver, you can use command line or compile time
  825.   overrides to force detection.
  826.  
  827.   Please consult the appropriate subsection for your SCSI board as well
  828.   as section ``General Flakiness''.
  829.  
  830.   5.2.3.  Failure of boards using memory mapped I/O
  831.  
  832.   (This include the Trantor T128 and Seagate boards, but not the
  833.   Adaptec, Generic NCR5380, PAS16, and Ultrastor drivers)
  834.  
  835.   This is often caused when the memory mapped I/O ports are incorrectly
  836.   cached.  You should have the board's address space marked as
  837.   uncachable in the XCMOS settings.
  838.  
  839.   If this is not possible, you will have to disable cache entirely.
  840.  
  841.   If you have manually specified the address of the board, remember that
  842.   Linux needs the actual address of the board, and not the 16 byte
  843.   segment the documentation may refer to.
  844.   Ie, 0xc8000 would be correct, 0xc800 would not work and could cause
  845.   memory corruption.
  846.  
  847.   5.2.4.  kernel panic : cannot mount root device" when booting an ALPHA
  848.   driver boot floppy
  849.  
  850.   You'll need to edit the binary image of the kernel (before or after
  851.   writing it out to disk), and modify a few two byte fields (little
  852.   endian) to guarantee that it will work on your system.
  853.  
  854.   1. default swap device at offset 502, this should be set to 0x00 0x00
  855.  
  856.   2. ram disk size at offset 504, this should be set to the size of the
  857.      boot floppy in K - ie, 5.25" = 1200, 3.5" = 1440.
  858.  
  859.        This means the bytes are
  860.  
  861.        3.5" : 0xA0 0x05
  862.        5.25" : 0xB0 0x04
  863.  
  864.   3. root device offset at 508, this should be 0x00 0x00, ie the boot
  865.      device.
  866.  
  867.   dd or rawrite the file to a disk.  Insert the disk in the first floppy
  868.   drive, wait until it prompts you to insert the root disk, and insert
  869.   the root floppy from your distribution.
  870.  
  871.   5.2.5.  Installing a device driver not included with the distribution
  872.   kernel
  873.  
  874.   You need to start with the version of the kernel used by the driver
  875.   author.  This revision may be alluded to in the documentation included
  876.   with the driver.
  877.  
  878.   Various recent kernel revisions can be found at
  879.  
  880.        nic.funet.fi:/pub/OS/Linux/PEOPLE/Linus
  881.  
  882.   as linux-version.tar.gz
  883.  
  884.   They are also mirrored at tsx-11.mit.edu and various other sites.
  885.  
  886.        cd to /usr/src.
  887.  
  888.   Remove your old Linux sources, if you want to keep a backup copy of
  889.   them
  890.  
  891.        mv linux linux-old
  892.  
  893.   Untar the archive
  894.  
  895.        gunzip < linux-0.99.12.tar.gz | tar xvfp -
  896.  
  897.   Apply the patches.  The patches will be relative to some directory in
  898.   the filesystem.  By examining the output file lines in the patch file
  899.   (grep for ^---), you can tell where this is - ie patches with these
  900.   lines
  901.  
  902.        --- ./kernel/blk_drv/scsi/Makefile
  903.  
  904.        --- ./config.in Wed Sep  1 16:19:33 1993
  905.  
  906.   would have the files relative to /usr/src/linux.
  907.  
  908.   Untar the driver sources at an appropriate place - you can type
  909.  
  910.        tar tfv patches.tar
  911.  
  912.   to get a listing, and move files as necessary (The SCSI driver files
  913.   should live in /usr/src/linux/kernel/drivers/scsi)
  914.  
  915.   Either cd to the directory they are relative to and type
  916.  
  917.        patch -p0 < patch_file
  918.  
  919.   or tell patch to strip off leading path components.  Ie, if the files
  920.   started with
  921.  
  922.        --- linux-new/kernel/blk_drv/scsi/Makefile
  923.  
  924.   and you wanted to apply them while in /usr/src/linux, you could cd to
  925.   /usr/src/linux and type
  926.  
  927.   patch -p1 < patches
  928.  
  929.   to strip off the "linux-new" component.
  930.  
  931.   After you have applied the patches, look for any patch rejects, which
  932.   will be the name of the rejected file with a # suffix appended.
  933.  
  934.        find /usr/src/linux/ -name "*#" -print
  935.  
  936.   If any of these exist, look at them.  In some cases, the differences
  937.   will be in RCS identifiers and will be harmless, in other cases,
  938.   you'll have to manually apply important parts.  Documentation on diff
  939.   files and patch is beyond the scope of this document.
  940.  
  941.   See also ``Configuring and building the kernel''.
  942.  
  943.   5.2.6.  Installing a driver that has no patches
  944.  
  945.   In some cases, a driver author may not offer patches with the .c and
  946.   .h files which comprise his driver, or the patches may be against an
  947.   older revision of the kernel and not go in cleanly.
  948.  
  949.   1. Copy the .c and .h files into /usr/src/linux/drivers/scsi
  950.  
  951.   2. Add the configuration option
  952.  
  953.      Edit /usr/src/linux/config.in, and add a line in the
  954.  
  955.        *
  956.        * SCSI low-level drivers
  957.        *
  958.  
  959.   section, add a boolean configuration variable for your driver.  Ie,
  960.  
  961.        bool 'Always IN2000 SCSI support' CONFIG_SCSI_IN2000 y
  962.  
  963.   3. Add the makefile entries
  964.  
  965.      Edit /usr/src/linux/drivers/scsi/Makefile, and add an entry like
  966.  
  967.   ifdef CONFIG_SCSI_IN2000
  968.   SCSI_OBS := $(SCSI_OBJS) in2000.o
  969.   SCSI_SRCS := $(SCSI_SRCS) in2000.c
  970.   endif
  971.  
  972.   before the
  973.  
  974.        scsi.a: $(SCSI_OBJS)
  975.  
  976.   line in the makefile, where the .c file is the .c file you copied in,
  977.   and the .o file is the basename of the .c file with a .o suffixed.
  978.  
  979.   4. Add the entry points
  980.  
  981.      Edit /usr/src/linux/drivers/scsi/hosts.c, and add a #include for
  982.      the header file, conditional on the CONFIG_SCSI preprocessor define
  983.      you added to the configuration file.  Ie, after
  984.  
  985.        #ifdef CONFIG_SCSI_GENERIC_NCR5380
  986.        #include "g_NCR5380.h"
  987.        #endif
  988.  
  989.   you might add
  990.  
  991.        #ifdef CONFIG_SCSI_IN2000
  992.        #include "in2000.h"
  993.        #endif
  994.  
  995.   You will also need to add the Scsi_Host_Template entry into the
  996.   scsi_hosts[] array.  Take a look into the .h file, and you should find
  997.   a #define that looks something like this :
  998.  
  999.        #define IN2000 {"Always IN2000", in2000_detect, \
  1000.            in2000_info, in2000_command,    \
  1001.            in2000_queuecommand,            \
  1002.            in2000_abort,                   \
  1003.            in2000_reset,                   \
  1004.            NULL,                           \
  1005.            in2000_biosparam,               \
  1006.            1, 7, IN2000_SG, 1, 0, 0}
  1007.  
  1008.   the name of the preprocessor define, and add it into the scsi_hosts[]
  1009.   array, conditional on definition of the preprocessor symbol you used
  1010.   in the configuration file.
  1011.  
  1012.   Ie, after
  1013.  
  1014.        #ifdef CONFIG_SCSI_GENERIC_NCR5380
  1015.                GENERIC_NCR5380,
  1016.        #endif
  1017.  
  1018.   you might add
  1019.  
  1020.        #ifdef CONFIG_SCSI_IN2000
  1021.                IN2000,
  1022.        #endif
  1023.  
  1024.   See also ``Configuring and building the kernel''.
  1025.  
  1026.   5.2.7.  Failure of a PCI board in a Compaq System
  1027.  
  1028.   A number of Compaq systems map the 32-bit BIOS extensions used to
  1029.   probe for PCI devices into memory which is inaccessible to the Linux
  1030.   kernel due to the memory layout.  If Linux is unable to detect a
  1031.   supported PCI SCSI board, and the kernel tells you something like
  1032.  
  1033.        pcibios_init: entry in high memory, unable to access
  1034.  
  1035.   Grab
  1036.  
  1037.        ftp://ftp.compaq.com/pub/softpaq/Software-Solutions/sp0921.zip
  1038.  
  1039.   which is a self-extracting archive of a program which will relocate
  1040.   the BIOS32 code.
  1041.  
  1042.   5.2.8.  A SCSI system with PCI boards hangs after the %d Hosts message
  1043.  
  1044.   Some PCI systems have broken BIOSes which disable interrupts and fail
  1045.   to reenable them before returning control to the caller.  The
  1046.   following patch fixes this
  1047.  
  1048.        --- bios32.c.orig       Mon Nov 13 22:35:31 1995
  1049.        +++ bios32.c    Thu Jan 18 00:15:09 1996
  1050.        @@ -56,6 +56,7 @@
  1051.         #include <linux/pci.h>
  1052.  
  1053.         #include <asm/segment.h>
  1054.        +#include <asm/system.h>
  1055.  
  1056.         #define PCIBIOS_PCI_FUNCTION_ID        0xb1XX
  1057.         #define PCIBIOS_PCI_BIOS_PRESENT       0xb101
  1058.        @@ -125,7 +126,9 @@
  1059.                unsigned long address;          /* %ebx */
  1060.                unsigned long length;           /* %ecx */
  1061.                unsigned long entry;            /* %edx */
  1062.        +       unsigned long flags;
  1063.  
  1064.        +       save_flags(flags);
  1065.                __asm__("lcall (%%edi)"
  1066.                        : "=a" (return_code),
  1067.                          "=b" (address),
  1068.        @@ -134,6 +137,7 @@
  1069.                        : "0" (service),
  1070.                          "1" (0),
  1071.                          "D" (&bios32_indirect));
  1072.        +       restore_flags(flags);
  1073.  
  1074.                switch (return_code) {
  1075.                        case 0:
  1076.        @@ -161,11 +165,13 @@
  1077.                unsigned char present_status;
  1078.                unsigned char major_revision;
  1079.                unsigned char minor_revision;
  1080.        +       unsigned long flags;
  1081.                int pack;
  1082.  
  1083.                if ((pcibios_entry = bios32_service(PCI_SERVICE))) {
  1084.                        pci_indirect.address = pcibios_entry;
  1085.  
  1086.        +               save_flags(flags);
  1087.                        __asm__("lcall (%%edi)\n\t"
  1088.                                "jc 1f\n\t"
  1089.                                "xor %%ah, %%ah\n"
  1090.        @@ -176,6 +182,7 @@
  1091.                                : "1" (PCIBIOS_PCI_BIOS_PRESENT),
  1092.                                  "D" (&pci_indirect)
  1093.                                : "bx", "cx");
  1094.        +               restore_flags(flags);
  1095.  
  1096.                        present_status = (pack >> 16) & 0xff;
  1097.                        major_revision = (pack >> 8) & 0xff;
  1098.        @@ -210,7 +217,9 @@
  1099.         {
  1100.                unsigned long bx;
  1101.                unsigned long ret;
  1102.        +       unsigned long flags;
  1103.  
  1104.        +       save_flags(flags);
  1105.                __asm__ ("lcall (%%edi)\n\t"
  1106.                        "jc 1f\n\t"
  1107.                        "xor %%ah, %%ah\n"
  1108.        @@ -221,6 +230,7 @@
  1109.                          "c" (class_code),
  1110.                          "S" ((int) index),
  1111.                          "D" (&pci_indirect));
  1112.        +       restore_flags(flags);
  1113.                *bus = (bx >> 8) & 0xff;
  1114.           *device_fn = bx & 0xff;
  1115.           return (int) (ret & 0xff00) >> 8;
  1116.   @@ -232,7 +242,9 @@
  1117.    {
  1118.           unsigned short bx;
  1119.           unsigned short ret;
  1120.   +       unsigned long flags;
  1121.  
  1122.   +       save_flags(flags);
  1123.           __asm__("lcall (%%edi)\n\t"
  1124.                   "jc 1f\n\t"
  1125.                   "xor %%ah, %%ah\n"
  1126.   @@ -244,6 +256,7 @@
  1127.                     "d" (vendor),
  1128.                     "S" ((int) index),
  1129.                     "D" (&pci_indirect));
  1130.   +       restore_flags(flags);
  1131.           *bus = (bx >> 8) & 0xff;
  1132.           *device_fn = bx & 0xff;
  1133.           return (int) (ret & 0xff00) >> 8;
  1134.   @@ -254,7 +267,9 @@
  1135.    {
  1136.           unsigned long ret;
  1137.           unsigned long bx = (bus << 8) | device_fn;
  1138.   +       unsigned long flags;
  1139.  
  1140.   +       save_flags (flags);
  1141.           __asm__("lcall (%%esi)\n\t"
  1142.                   "jc 1f\n\t"
  1143.                   "xor %%ah, %%ah\n"
  1144.   @@ -273,7 +288,9 @@
  1145.    {
  1146.           unsigned long ret;
  1147.           unsigned long bx = (bus << 8) | device_fn;
  1148.   +       unsigned long flags;
  1149.  
  1150.   +       save_flags(flags);
  1151.           __asm__("lcall (%%esi)\n\t"
  1152.                   "jc 1f\n\t"
  1153.                   "xor %%ah, %%ah\n"
  1154.   @@ -292,7 +309,9 @@
  1155.    {
  1156.           unsigned long ret;
  1157.           unsigned long bx = (bus << 8) | device_fn;
  1158.   +       unsigned long flags;
  1159.  
  1160.   +       save_flags(flags);
  1161.           __asm__("lcall (%%esi)\n\t"
  1162.                   "jc 1f\n\t"
  1163.                   "xor %%ah, %%ah\n"
  1164.   @@ -303,6 +322,7 @@
  1165.                     "b" (bx),
  1166.                     "D" ((long) where),
  1167.                     "S" (&pci_indirect));
  1168.   +       restore_flags(flags);
  1169.           return (int) (ret & 0xff00) >> 8;
  1170.    }
  1171.  
  1172.   @@ -311,7 +331,9 @@
  1173.    {
  1174.           unsigned long ret;
  1175.           unsigned long bx = (bus << 8) | device_fn;
  1176.   +       unsigned long flags;
  1177.  
  1178.   +       save_flags(flags);
  1179.           __asm__("lcall (%%esi)\n\t"
  1180.                   "jc 1f\n\t"
  1181.                   "xor %%ah, %%ah\n"
  1182.   @@ -322,6 +344,7 @@
  1183.                     "b" (bx),
  1184.                     "D" ((long) where),
  1185.                     "S" (&pci_indirect));
  1186.   +       restore_flags(flags);
  1187.           return (int) (ret & 0xff00) >> 8;
  1188.    }
  1189.  
  1190.   @@ -330,7 +353,9 @@
  1191.    {
  1192.           unsigned long ret;
  1193.           unsigned long bx = (bus << 8) | device_fn;
  1194.   +       unsigned long flags;
  1195.  
  1196.   +       save_flags(flags);
  1197.           __asm__("lcall (%%esi)\n\t"
  1198.                   "jc 1f\n\t"
  1199.                   "xor %%ah, %%ah\n"
  1200.   @@ -341,6 +366,7 @@
  1201.                     "b" (bx),
  1202.                     "D" ((long) where),
  1203.                     "S" (&pci_indirect));
  1204.   +       restore_flags(flags);
  1205.           return (int) (ret & 0xff00) >> 8;
  1206.    }
  1207.  
  1208.   @@ -349,7 +375,9 @@
  1209.    {
  1210.           unsigned long ret;
  1211.           unsigned long bx = (bus << 8) | device_fn;
  1212.   +       unsigned long flags;
  1213.  
  1214.   +       save_flags(flags);
  1215.           __asm__("lcall (%%esi)\n\t"
  1216.                   "jc 1f\n\t"
  1217.                   "xor %%ah, %%ah\n"
  1218.   @@ -360,6 +388,7 @@
  1219.                     "b" (bx),
  1220.                     "D" ((long) where),
  1221.                     "S" (&pci_indirect));
  1222.   +       restore_flags(flags);
  1223.           return (int) (ret & 0xff00) >> 8;
  1224.    }
  1225.  
  1226.   5.3.  Adaptec 152x, 151x, 1505, 282x, Sound Blaster 16 SCSI, SCSI Pro,
  1227.   Gigabyte, and other AIC 6260/6360 based products (Standard)
  1228.  
  1229.   Supported Configurations :
  1230.  
  1231.        BIOS addresses : 0xd8000, 0xdc000, 0xd0000, 0xd4000, 0xc8000, 0xcc000, 0xe0000,
  1232.                         0xe4000.
  1233.        Ports          : 0x140, 0x340
  1234.        IRQs           : 9, 10, 11, 12
  1235.        DMA            : not used
  1236.        IO             : port mapped
  1237.  
  1238.   Autoprobe :
  1239.  
  1240.        Works with many boards with an installed BIOS.  All
  1241.        other boards, including the Adaptec 1510, and Sound Blaster16 SCSI
  1242.        must use a kernel command line or compile time override.
  1243.  
  1244.   Autoprobe Override :
  1245.  
  1246.   Compile time :
  1247.  
  1248.        Define PORTBASE, IRQ, SCSI_ID, RECONNECT, PARITY as appropriate, see Defines
  1249.  
  1250.   kernel command line :
  1251.  
  1252.        aha152x=<PORTBASE>[,<IRQ>[,<SCSI-ID>[,<RECONNECT>[,<PARITY>]]]]
  1253.  
  1254.   SCSI-ID is the SCSI ID of the HOST adapter, not of any devices you
  1255.   have installed on it.  Usually, this should be 7.
  1256.  
  1257.   To force detection at 0x340, IRQ 11, at SCSI-ID 7, allowing
  1258.   disconnect/reconnect, you would use the following command line option
  1259.   :
  1260.  
  1261.        aha152x=0x340,11,7,1
  1262.  
  1263.   Antiquity Problems, fix by upgrading :
  1264.  
  1265.   1. The driver fails with VLB boards.  There was a timing problem in
  1266.      kernels older than revision 1.0.5.
  1267.  
  1268.   Defines :
  1269.  
  1270.        AUTOCONF       : use configuration the controller reports (only 152x)
  1271.        IRQ            : override interrupt channel (9,10,11 or 12) (default 11)
  1272.        SCSI_ID        : override SCSI ID of AIC-6260 (0-7) (default 7)
  1273.        RECONNECT      : override target disconnect/reselect (set to non-zero to
  1274.                         allow, zero to disable)
  1275.        DONT_SNARF     : Don't register ports (pl12 and below)
  1276.        SKIP_BIOSTEST  : Don't test for BIOS signature (AHA-1510 or disabled BIOS)
  1277.        PORTBASE       : Force port base. Don't try to probe
  1278.  
  1279.   5.4.  Adaptec 154x, AMI FastDisk VLB, DTC 329x (Standard)
  1280.  
  1281.   Supported Configurations :
  1282.  
  1283.        Ports          : 0x330 and 0x334
  1284.        IRQs           : 9, 10, 11, 12, 14, 15
  1285.        DMA channels   : 5, 6, 7
  1286.        IO             : port mapped, bus master
  1287.  
  1288.   Autoprobe :
  1289.  
  1290.        will detect boards at 0x330 and 0x334 only.
  1291.  
  1292.   Autoprobe override :
  1293.  
  1294.        aha1542=<PORTBASE>[,<BUSON>,<BUSOFF>[,<DMASPEED>]]
  1295.  
  1296.   Notes:
  1297.  
  1298.   1. BusLogic makes a series of boards that are software compatible with
  1299.      the Adaptec 1542, and these come in ISA, VLB, EISA, and PCI
  1300.      flavors.
  1301.  
  1302.   2. No-suffix boards, and early 'A' suffix boards do not support
  1303.      scatter/gather, and thus don't work.  However, they can be made to
  1304.      work for some definition of the word works if AHA1542_SCATTER is
  1305.      changed to 0 in drivers/scsi/aha1542.h.
  1306.  
  1307.   Antiquity Problems, fix by upgrading :
  1308.  
  1309.   1. Linux kernel revisions prior to .99.10 don't support the 'C'
  1310.      revision.
  1311.  
  1312.   2. Linux kernel revisions prior to .99.14k don't support the 'C'
  1313.      revision options for
  1314.  
  1315.   ╖  BIOS support for the extended mapping for disks > 1G
  1316.  
  1317.   ╖  BIOS support for > 2 drives
  1318.  
  1319.   ╖  BIOS support for autoscanning the SCSI bus
  1320.  
  1321.   3. Linux kernel revisions prior to .99.15e don't support the 'C' with
  1322.      the BIOS support for > 2 drives turned on and the BIOS support for
  1323.      the extended mapping for disks > 1G turned off.
  1324.  
  1325.   4. Linux kernel revisions prior to .99.14u don't support the 'CF'
  1326.      revisions of the board.
  1327.  
  1328.   5. Linux kernel revisions prior to 1.0.5 have a race condition when
  1329.      multiple devices are accessed at the same time.
  1330.  
  1331.   Common problems :
  1332.  
  1333.   1. There are unexpected errors with a 154xC or 154xCF board,
  1334.  
  1335.      Early examples of the 154xC boards have a high slew rate on one of
  1336.      the SCSI signals, which results in signal reflections when cables
  1337.      with the wrong impedance are used.
  1338.  
  1339.      Newer boards aren't much better, and also suffer from extreme
  1340.      cabling and termination sensitivity.
  1341.  
  1342.      See also Common Problems ``#2'' and ``#3'' and ``Common Problems'',
  1343.      ``General Flakiness''.
  1344.  
  1345.   2. There are unexpected errors with a 154xC or 154x with both internal
  1346.      and external devices connected.
  1347.  
  1348.      This is probably a termination problem.  In order to use the
  1349.      software option to disable host adapter termination, you must turn
  1350.      switch 1 off.
  1351.  
  1352.      See also Common Problems ``#1'' and ``#3'' and ``Common Problems'',
  1353.      ``General Flakiness''.
  1354.  
  1355.   3. The SCSI subsystem locks up completely.
  1356.  
  1357.      There are cases where the lockups seem to occur when multiple
  1358.      devices are in use at the same time.  In this case, you can try
  1359.      contacting the manufacturer of the devices and see if firmware
  1360.      upgrades are available which would correct the problem.  As a last
  1361.      resort, you can go into aha1542.h and change AHA1542_MAILBOX to 1.
  1362.      This will effectively limit you to one outstanding command on the
  1363.      scsi bus at one time, and may help the situation.  If you have tape
  1364.      drives or slow cdrom drives on the bus, this might not be a
  1365.      practical solution.
  1366.  
  1367.      See also Common Problems ``#1'' and ``#2'' and ``Common Problems'',
  1368.      ``Common Problems : SCSI System Lockups''.
  1369.  
  1370.   4. An "Interrupt received, but no mail" message is printed on bootup
  1371.      and your SCSI devices are not detected.
  1372.  
  1373.      Disable the BIOS options to support the extended mapping for disks
  1374.      > 1G, support for > 2 drives, and for autoscanning the bus.  Or,
  1375.      upgrade to Linux .99.14k or newer.
  1376.  
  1377.   5. If infinite timeout errors occur on 'C' revision boards, you may
  1378.      need to go into the Adaptec setup program and enable synchronous
  1379.      negotiation.
  1380.  
  1381.   6. Linux 1.2.x gives the message
  1382.  
  1383.      Unable to determine Adaptec DMA priority.  Disabling board.
  1384.  
  1385.      This is due to a conflict on some systems with the obsolete
  1386.      BusLogic driver.  Either rebuild your kernel without it, or give
  1387.      the BusLogic driver a command line option telling it to look
  1388.      somewhere other than where your controller is configured.  Ie, if
  1389.      you have an Adaptec board at port 0x334, and nothing at 0x330, use
  1390.      a command line option like
  1391.  
  1392.        buslogic=0x330
  1393.  
  1394.   7. The system locks up with simultaneous access to multiple devices on
  1395.      a 1542C or 1540C and disconnection enabled
  1396.  
  1397.      Some Adaptec firmware revisions have bugs.  Upgrading to BIOS v2.11
  1398.      purportedly fixes these problems.
  1399.  
  1400.   5.5.  Adaptec 174x
  1401.  
  1402.   Supported Configurations :
  1403.  
  1404.        Slots          : 1-8
  1405.        Ports          : EISA board, not applicable
  1406.        IRQs           : 9, 10, 11, 12, 14, 15
  1407.        DMA Channels   : EISA board, not applicable
  1408.        IO             : port mapped, bus master
  1409.  
  1410.   Autoprobe :
  1411.  
  1412.        works with all supported configurations
  1413.  
  1414.   Autoprobe override :
  1415.  
  1416.        none
  1417.  
  1418.   Note:
  1419.  
  1420.   1. This board has been discontinued by Adaptec.
  1421.  
  1422.   Common Problems :
  1423.  
  1424.   1. If the Adaptec 1740 driver prints the message "aha1740: Board
  1425.      detected, but EBCNTRL = %x, so disabled it."
  1426.  
  1427.      your board was disabled because it was not running in enhanced
  1428.      mode.  Boards running in standard 1542 mode are not supported.
  1429.   5.6.  Adaptec 274x, 284x (Standard) 294x (ALPHA)
  1430.  
  1431.   A newer version which also supports the Adaptec 294x boards is
  1432.   available at
  1433.  
  1434.        ftp://ftp.ims.com/pub/Linux/aic7xxx
  1435.  
  1436.   Supported Configurations :
  1437.  
  1438.                         274x           284x            294x
  1439.        EISA Slots     : 1-12           N/A             N/A
  1440.        Ports          : N/A            ALL             ALL
  1441.        IRQs           : ALL            ALL             ALL
  1442.        DMA Channels   : N/A            ALL             N/A
  1443.  
  1444.        IO             : port mapped, bus master
  1445.  
  1446.   Autoprobe Override :
  1447.  
  1448.   kernel command line :
  1449.  
  1450.        aha274x=extended
  1451.        (to force extended mapping)
  1452.  
  1453.   Notes:
  1454.  
  1455.   1. BIOS MUST be enabled
  1456.  
  1457.   2. The B channel on 2742AT boards is ignored.
  1458.  
  1459.   3. CONFIG_PCI must be set if you are using a PCI board.
  1460.  
  1461.   5.7.  Always IN2000 (Standard)
  1462.  
  1463.   Supported Configurations :
  1464.  
  1465.        Ports          : 0x100, 0x110, 0x200, 0x220
  1466.        IRQs           : 10, 11, 14, 15
  1467.        DMA            : not used
  1468.        IO             : port mapped
  1469.  
  1470.   Autoprobe :
  1471.  
  1472.        BIOS not required
  1473.  
  1474.   Autoprobe override :
  1475.  
  1476.        none
  1477.  
  1478.   Common Problems :
  1479.  
  1480.   1. There are known problems in systems with IDE drives and with
  1481.      swapping.
  1482.  
  1483.   5.8.  BusLogic MultiMaster Host Adapters
  1484.  
  1485.   (this section Copyright 1995 by Leonard N. Zubkoff
  1486.   <lnz@dandelion.com>) (see README.BusLogic for more complete BusLogic
  1487.   driver documentation)
  1488.  
  1489.                     BusLogic MultiMaster SCSI Driver for Linux
  1490.  
  1491.                          Version 1.2.2 for Linux 1.2.13
  1492.                          Version 1.3.2 for Linux 1.3.88
  1493.  
  1494.                    ftp://ftp.dandelion.com/BusLogic-1.2.2.tar.gz
  1495.                    ftp://ftp.dandelion.com/BusLogic-1.3.2.tar.gz
  1496.  
  1497.                                    16 April 1996
  1498.  
  1499.                                  Leonard N. Zubkoff
  1500.                                  Dandelion Digital
  1501.                                  lnz@dandelion.com
  1502.  
  1503.   BusLogic, Inc. designs and manufactures a variety of high performance SCSI host
  1504.   adapters which share a common programming interface across a diverse collection
  1505.   of bus architectures by virtue of their MultiMaster ASIC technology.  This
  1506.   driver supports all present BusLogic MultiMaster Host Adapters, and should
  1507.   support any future MultiMaster designs with little or no modification.  Host
  1508.   adapters based on the new FlashPoint architecture are not supported by this
  1509.   driver; consult the README.FlashPoint file for information about a program to
  1510.   upgrade Linux users from the unsupported FlashPoint LT to the supported BT-948.
  1511.  
  1512.   My primary goals in writing this completely new BusLogic driver for Linux are
  1513.   to achieve the full performance that BusLogic SCSI Host Adapters and modern
  1514.   SCSI peripherals are capable of, and to provide a highly robust driver that can
  1515.   be depended upon for high performance mission critical applications.  All of
  1516.   the major performance and error recovery features can be configured from the
  1517.   Linux kernel command line, allowing individual installations to tune driver
  1518.   performance and error recovery to their particular needs.
  1519.  
  1520.   BusLogic has been an excellent company to work with and I highly recommend
  1521.   their products to the Linux community.  In November 1995, I was offered the
  1522.   opportunity to become a beta test site for their latest MultiMaster product,
  1523.   the BT-948 PCI Ultra SCSI Host Adapter, and then again for the BT-958 PCI Wide
  1524.   Ultra SCSI Host Adapter in January 1996.  This was mutually beneficial since
  1525.   BusLogic received a degree and kind of testing that their own testing group
  1526.   cannot readily achieve, and the Linux community has available high performance
  1527.   host adapters that have been well tested with Linux even before being brought
  1528.   to market.  This relationship has also given me the opportunity to interact
  1529.   directly with their technical staff, to understand more about the internal
  1530.   workings of their products, and in turn to educate them about the needs and
  1531.   potential of the Linux community.  Their interest and support is greatly
  1532.   appreciated.
  1533.  
  1534.   Unlike some other vendors, if you contact BusLogic Technical Support with a
  1535.   problem and are running Linux, they will not tell you that your use of their
  1536.   products is unsupported.  Their latest product marketing literature even states
  1537.   "BusLogic SCSI host adapters are compatible with all major operating systems
  1538.   including: ... Linux ...".
  1539.  
  1540.   BusLogic, Inc. is located at 4151 Burton Drive, Santa Clara, California, 95054,
  1541.   USA and can be reached by Voice at 408/492-9090 or by FAX at 408/492-1542.
  1542.   BusLogic maintains a World Wide Web site at http://www.buslogic.com, an
  1543.   anonymous FTP site at ftp.buslogic.com, and a BBS at 408/492-1984.  BusLogic
  1544.   Technical Support can be reached by electronic mail at techsup@buslogic.com, by
  1545.   Voice at 408/654-0760, or by FAX at 408/492-1542.  Contact information for
  1546.   offices in Europe and Japan is available on the Web site.
  1547.  
  1548.                               SUPPORTED HOST ADAPTERS
  1549.  
  1550.   The following list comprises the supported BusLogic SCSI Host Adapters as of
  1551.   the date of this document.  It is recommended that anyone purchasing a BusLogic
  1552.   Host Adapter not in the following table contact the author beforehand to verify
  1553.   that it is or will be supported.
  1554.  
  1555.   "W" Series Host Adapters:
  1556.  
  1557.   BT-948      PCI     Ultra Fast Single-ended SCSI-2
  1558.   BT-958      PCI     Ultra Wide Single-ended SCSI-2
  1559.   BT-958D     PCI     Ultra Wide Differential SCSI-2
  1560.  
  1561.   "C" Series Host Adapters:
  1562.  
  1563.   BT-946C     PCI     Fast Single-ended SCSI-2
  1564.   BT-956C     PCI     Fast Wide Single-ended SCSI-2
  1565.   BT-956CD    PCI     Fast Wide Differential SCSI-2
  1566.   BT-445C     VLB     Fast Single-ended SCSI-2
  1567.   BT-747C     EISA    Fast Single-ended SCSI-2
  1568.   BT-757C     EISA    Fast Wide Single-ended SCSI-2
  1569.   BT-757CD    EISA    Fast Wide Differential SCSI-2
  1570.   BT-545C     ISA     Fast Single-ended SCSI-2
  1571.   BT-540CF    ISA     Fast Single-ended SCSI-2
  1572.  
  1573.   "S" Series Host Adapters:
  1574.  
  1575.   BT-445S     VLB     Fast Single-ended SCSI-2
  1576.   BT-747S     EISA    Fast Single-ended SCSI-2
  1577.   BT-747D     EISA    Fast Differential SCSI-2
  1578.   BT-757S     EISA    Fast Wide Single-ended SCSI-2
  1579.   BT-757D     EISA    Fast Wide Differential SCSI-2
  1580.   BT-545S     ISA     Fast Single-ended SCSI-2
  1581.   BT-542D     ISA     Fast Differential SCSI-2
  1582.   BT-742A     EISA    Single-ended SCSI-2 (742A revision H)
  1583.   BT-542B     ISA     Single-ended SCSI-2 (542B revision H)
  1584.  
  1585.   "A" Series Host Adapters:
  1586.  
  1587.   BT-742A     EISA    Single-ended SCSI-2 (742A revisions A - G)
  1588.   BT-542B     ISA     Single-ended SCSI-2 (542B revisions A - G)
  1589.  
  1590.   AMI FastDisk Host Adapters that are true BusLogic clones are supported by this
  1591.   driver.
  1592.  
  1593.                         BT-948/958/958D INSTALLATION NOTES
  1594.  
  1595.   The BT-948/958/958D PCI Ultra SCSI Host Adapters have some features which may
  1596.   require attention in some circumstances when installing Linux.
  1597.  
  1598.   o PCI I/O Port Assignments
  1599.  
  1600.     When configured to factory default settings, the BT-948/958/958D will only
  1601.     recognize the PCI I/O port assignments made by the motherboard's PCI BIOS.
  1602.     The BT-948/958/958D will not respond to any of the ISA compatible I/O ports
  1603.     that previous BusLogic SCSI Host Adapters respond to.  This driver supports
  1604.     the PCI I/O port assignments, so this is the preferred configuration.
  1605.     However, if the obsolete BusLogic driver must be used for any reason, such as
  1606.     a Linux distribution that does not yet use this driver in its boot kernel,
  1607.     BusLogic has provided an AutoSCSI configuration option to enable a legacy ISA
  1608.     compatible I/O port.
  1609.  
  1610.     To enable this backward compatibility option, invoke the AutoSCSI utility via
  1611.     Ctrl-B at system startup and select "Adapter Configuration", "View/Modify
  1612.     Configuration", and then change the "ISA Compatible Port" setting from
  1613.     "Disable" to "Primary" or "Alternate".  Once this driver has been installed,
  1614.     the "ISA Compatible Port" option should be set back to "Disable" to avoid
  1615.     possible future I/O port conflicts.  The older BT-946C/956C/956CD also have
  1616.     this configuration option, but the factory default setting is "Primary".
  1617.  
  1618.   o PCI Slot Scanning Order
  1619.  
  1620.     In systems with multiple BusLogic PCI Host Adapters, the order in which the
  1621.     PCI slots are scanned may appear reversed with the BT-948/958/958D as
  1622.     compared to the BT-946C/956C/956CD.  For booting from a SCSI disk to work
  1623.     correctly, it is necessary that the host adapter's BIOS and the kernel agree
  1624.     on which disk is the boot device, which requires that they recognize the PCI
  1625.     host adapters in the same order.  The motherboard's PCI BIOS provides a
  1626.     standard way of enumerating the PCI host adapters, which is used by the Linux
  1627.     kernel.  Some PCI BIOS implementations enumerate the PCI slots in order of
  1628.     increasing bus number and device number, while others do so in the opposite
  1629.     direction.
  1630.  
  1631.     Unfortunately, Microsoft decided that Windows 95 would always enumerate the
  1632.     PCI slots in order of increasing bus number and device number regardless of
  1633.     the PCI BIOS enumeration, and requires that their scheme be supported by the
  1634.     host adapter's BIOS to receive Windows 95 certification.  Therefore, the
  1635.     factory default settings of the BT-948/958/958D enumerate the host adapters
  1636.     by increasing bus number and device number.  To disable this feature, invoke
  1637.     the AutoSCSI utility via Ctrl-B at system startup and select "Adapter
  1638.     Configuration", "View/Modify Configuration", press Ctrl-F10, and then change
  1639.     the "Use Bus And Device # For PCI Scanning Seq." option to OFF.
  1640.  
  1641.     This driver will interrogate the setting of the PCI Scanning Sequence option
  1642.     so as to recognize the host adapters in the same order as they are enumerated
  1643.     by the host adapter's BIOS.
  1644.  
  1645.                         BUSLOGIC ANNOUNCEMENTS MAILING LIST
  1646.  
  1647.   The BusLogic Announcements Mailing List provides a forum for informing Linux
  1648.   users of new driver releases and other announcements regarding Linux support
  1649.   for BusLogic SCSI Host Adapters.  To join the mailing list, send a message to
  1650.   "BusLogic-announce-request@dandelion.com" with the line "subscribe" in the
  1651.   message body.
  1652.  
  1653.   5.9.  BusLogic FlashPoint Host Adapters
  1654.  
  1655.   (this section Copyright 1995 by Leonard N. Zubkoff
  1656.   <lnz@dandelion.com>)
  1657.  
  1658.   There are no Linux drivers for the FlashPoint LT/DL/LW (BT-930/932/950)
  1659.   available and it is not clear when or if there will be any.  The FlashPoint
  1660.   boards have a different architecture from the MultiMaster boards and have no
  1661.   onboard CPU, only a SCSI sequencer engine.  They are positioned as a desktop
  1662.   workstation product, and are not particularly well suited for a high
  1663.   performance multitasking operating system like Linux.
  1664.  
  1665.   The MultiMaster BT-948/958 have an onboard CPU and the mailbox programming
  1666.   interface allows for parallelism and pipelining between the host operating
  1667.   system and the host adapter, whereas the FlashPoint boards require frequent
  1668.   host CPU intervention.  As interrupt latencies rise in a loaded multitasking
  1669.   system, the BT-948/958 should maintain excellent performance whereas the
  1670.   FlashPoint's performance will likely drop quite rapidly.  Furthermore, the
  1671.   firmware on the BT-948/958 contains the low level knowledge for proper
  1672.   interaction with the SCSI bus, whereas with a sequencer engine the Linux driver
  1673.   must contain some or all of this information, and it often takes quite a long
  1674.   time to get all the kinks worked out.  Given the relatively small difference in
  1675.   the street price of these products, the BT-948 or BT-958 is clearly the better
  1676.   choice for Linux.
  1677.  
  1678.   <begin quotation>
  1679.  
  1680.                                    ANNOUNCEMENT
  1681.                     BusLogic FlashPoint/BT-948 Upgrade Program
  1682.                                   1 February 1996
  1683.  
  1684.   Ever since its introduction last October, the BusLogic FlashPoint LT has
  1685.   been problematic for members of the Linux community, in that no Linux
  1686.   drivers have been available for this new Ultra SCSI product.  Despite it's
  1687.   officially being positioned as a desktop workstation product, and not being
  1688.   particularly well suited for a high performance multitasking operating
  1689.   system like Linux, the FlashPoint LT has been touted by computer system
  1690.   vendors as the latest thing, and has been sold even on many of their high
  1691.   end systems, to the exclusion of the older MultiMaster products.  This has
  1692.   caused grief for many people who inadvertently purchased a system expecting
  1693.   that all BusLogic SCSI Host Adapters were supported by Linux, only to
  1694.   discover that the FlashPoint was not supported and would not be for quite
  1695.   some time, if ever.
  1696.  
  1697.   After this problem was identified, BusLogic contacted its major OEM
  1698.   customers to make sure the BT-946C/956C MultiMaster cards would still be
  1699.   made available, and that Linux users who mistakenly ordered systems with
  1700.   the FlashPoint would be able to upgrade to the BT-946C.  While this helped
  1701.   many purchasers of new systems, it was only a partial solution to the
  1702.   overall problem of FlashPoint support for Linux users.  It did nothing to
  1703.   assist the people who initially purchased a FlashPoint for a supported
  1704.   operating system and then later decided to run Linux, or those who had
  1705.   ended up with a FlashPoint LT, believing it was supported, and were unable
  1706.   to return it.
  1707.  
  1708.   In the middle of December, I asked to meet with BusLogic's senior
  1709.   management to discuss the issues related to Linux and free software support
  1710.   for the FlashPoint.  Rumors of varying accuracy had been circulating
  1711.   publicly about BusLogic's attitude toward the Linux community, and I felt
  1712.   it was best that these issues be addressed directly.  I sent an email
  1713.   message after 11pm one evening, and the meeting took place the next
  1714.   afternoon.  Unfortunately, corporate wheels sometimes grind slowly,
  1715.   especially when a company is being acquired, and so it's taken until now
  1716.   before the details were completely determined and a public statement could
  1717.   be made.
  1718.  
  1719.   BusLogic is not prepared at this time to release the information necessary
  1720.   for third parties to write drivers for the FlashPoint.  The only existing
  1721.   FlashPoint drivers have been written directly by BusLogic Engineering, and
  1722.   there is no FlashPoint documentation sufficiently detailed to allow outside
  1723.   developers to write a driver without substantial assistance.  While there
  1724.   are people at BusLogic who would rather not release the details of the
  1725.   FlashPoint architecture at all, that debate has not yet been settled either
  1726.   way.  In any event, even if documentation were available today it would
  1727.   take quite a while for a usable driver to be written, especially since I'm
  1728.   not convinced that the effort required would be worthwhile.
  1729.  
  1730.   However, BusLogic does remain committed to providing a high performance
  1731.   SCSI solution for the Linux community, and does not want to see anyone left
  1732.   unable to run Linux because they have a Flashpoint LT.  Therefore, BusLogic
  1733.   has put in place a direct upgrade program to allow any Linux user worldwide
  1734.   to trade in their FlashPoint LT for the new BT-948 MultiMaster PCI Ultra
  1735.   SCSI Host Adapter.  The BT-948 is the Ultra SCSI successor to the BT-946C
  1736.   and has all the best features of both the BT-946C and FlashPoint LT,
  1737.   including smart termination and a flash PROM for easy firmware updates, and
  1738.   is of course compatible with the present Linux driver.  The price for this
  1739.   upgrade has been set at US $45, and the upgrade program will be
  1740.   administered through BusLogic Technical Support, which can be reached by
  1741.   electronic mail at techsup@BusLogic.com, by Voice at +1 408 654-0760, or by
  1742.   FAX at +1 408 492-1542.
  1743.  
  1744.   I was a beta test site for the BT-948 and versions 1.2.1 and 1.3.1 of my
  1745.   BusLogic driver already include latent support for the BT-948.  Additional
  1746.   cosmetic support for the Ultra SCSI MultiMaster cards will be added in a
  1747.   subsequent release.  As a result of this cooperative testing process,
  1748.   several firmware bugs were found and corrected (make sure you have firmware
  1749.   version 5.05R or later).  My heavily loaded Linux test system provided an
  1750.   ideal environment for testing error recovery processes that are much more
  1751.   rarely exercised in production systems, but are crucial to overall system
  1752.   stability.  It was especially convenient being able to work directly with
  1753.   their firmware engineer in demonstrating the problems under control of the
  1754.   firmware debugging environment; things sure have come a long way since the
  1755.   last time I worked on firmware for an embedded system.  I am presently
  1756.   working on some performance testing and expect to have some data to report
  1757.   in the not too distant future.
  1758.  
  1759.   BusLogic asked me to send this announcement since a large percentage of the
  1760.   questions regarding support for the FlashPoint have either been sent to me
  1761.   directly via email, or have appeared in the Linux newsgroups in which I
  1762.   participate.  To summarize, BusLogic is offering Linux users an upgrade
  1763.   from the unsupported FlashPoint LT (BT-930) to the supported BT-948 for US
  1764.   $45.  Contact BusLogic Technical Support at techsup@BusLogic.com or +1 408
  1765.   654-0760 to take advantage of their offer.
  1766.  
  1767.                   Leonard N. Zubkoff
  1768.                   lnz@dandelion.com
  1769.  
  1770.   <end quotation>
  1771.  
  1772.   5.10.  EATA: DPT SmartCache, SmartCache Plus, SmartCache III, Smart¡
  1773.   Cache IV and SmartRAID (Standard)
  1774.  
  1775.   Supported boards: all, that support the EATA-DMA protocol.
  1776.  
  1777.   Among them are:
  1778.  
  1779.   DPT Smartcache (Plus) family:
  1780.   PM2011      ISA     Fast Single-ended SCSI-2
  1781.   PM2012B     EISA    Fast Single-ended SCSI-2
  1782.  
  1783.   DPT Smartcache III family:
  1784.   PM2021      ISA     Fast Single-ended SCSI-2
  1785.   PM2021W     ISA     Wide Single-ended SCSI-2
  1786.   PM2022      EISA    Fast Single-ended SCSI-2
  1787.   PM2022W     EISA    Wide Single-ended SCSI-2
  1788.   PM2024      PCI     Fast Single-ended SCSI-2
  1789.   PM2024W     PCI     Wide Single-ended SCSI-2
  1790.   PM2122      EISA    Fast Single-ended SCSI-2
  1791.   PM2122W     EISA    Wide Single-ended SCSI-2
  1792.   PM2124      PCI     Fast Single-ended SCSI-2
  1793.   PM2124W     PCI     Wide Single-ended SCSI-2
  1794.   PM2322      EISA    Fast Single-ended SCSI-2
  1795.   PM2322W     EISA    Wide Single-ended SCSI-2
  1796.  
  1797.   DPT Smartcache VI family:
  1798.   PM2041W     ISA     Wide Single-ended SCSI-2
  1799.   PM2041UW    ISA     Ultra Wide Single-ended SCSI-2
  1800.   PM2042W     EISA    Wide Single-ended SCSI-2
  1801.   PM2042UW    EISA    Ultra Wide Single-ended SCSI-2
  1802.   PM2044W     PCI     Wide Single-ended SCSI-2
  1803.   PM2044UW    PCI     Ultra Wide Single-ended SCSI-2
  1804.   PM2142W     EISA    Wide Single-ended SCSI-2
  1805.   PM2142UW    EISA    Ultra Wide Single-ended SCSI-2
  1806.   PM2144W     PCI     Wide Single-ended SCSI-2
  1807.   PM2144UW    PCI     Ultra Wide Single-ended SCSI-2
  1808.   PM2322W     EISA    Wide Single-ended SCSI-2
  1809.   PM2322UW    EISA    Ultra Wide Single-ended SCSI-2
  1810.  
  1811.   DPT SmartRAID family:
  1812.   PM3021      ISA     Fast Single-ended SCSI-2
  1813.   PM3021W     ISA     Wide Single-ended SCSI-2
  1814.   PM3122      EISA    Fast Single-ended SCSI-2
  1815.   PM3122W     EISA    Wide Single-ended SCSI-2
  1816.   PM3222      EISA    Fast Single-ended SCSI-2
  1817.   PM3222W     EISA    Wide Single-ended SCSI-2
  1818.   PM3224      PCI     Fast Single-ended SCSI-2
  1819.   PM3224W     PCI     Wide Single-ended SCSI-2
  1820.   PM3334W     PCI     Wide Single-ended SCSI-2
  1821.   PM3334UW    PCI     Ultra Wide Single-ended SCSI-2
  1822.  
  1823.   also the differential versions of the above controllers.
  1824.  
  1825.   and some controllers from:
  1826.  
  1827.   NEC, AT&T, SNI, AST, Olivetti, Alphatronix.
  1828.  
  1829.   Supported Configurations :
  1830.  
  1831.        Slots          : ALL
  1832.        Ports          : ALL
  1833.        IRQs           : ALL level & edge triggered
  1834.        DMA Channels   : ISA ALL, EISA/PCI not applicable
  1835.        IO             : port mapped, bus master
  1836.        SCSI Channels  : ALL
  1837.  
  1838.   Autoprobe :
  1839.  
  1840.        works with all supported configurations
  1841.  
  1842.   The latest version of the EATA-DMA driver is available on:
  1843.  
  1844.        ftp.i-Connect.Net:/pub/Local/EATA/
  1845.  
  1846.   Mailinglist: The EATA Mailing List provides a forum to Linux users of
  1847.   the EATA-DMA and EATA-PIO driver for discussions and announcements of
  1848.   new releases and other announcements.  To join the mailing list, send
  1849.   a message to "linux-eata-request@i-connect.net" with the line
  1850.   "subscribe" in the message body.
  1851.  
  1852.   /proc/scsi support: To get advanced command statistics, do the
  1853.   following: echo "eata_dma latency" >/proc/scsi/eata_dma/<driver_no>
  1854.   and to switch it off again: echo "eata_dma nolatency"
  1855.   >/proc/scsi/eata_dma/<driver_no>
  1856.  
  1857.   Common Problems :
  1858.  
  1859.   1. Slackware doesn't find the controller.
  1860.  
  1861.      Solution: Use one of the ascsi* bootdisks.
  1862.  
  1863.   2. The IDE driver can detect the ST-506 interface of the EATA board in
  1864.      old kernels (<v1.3).
  1865.  
  1866.      a. This will look like similar to one of the following 2 examples:
  1867.  
  1868.           hd.c: ST-506 interface disk with more than 16 heads detected,
  1869.             probably due to non-standard sector translation.  Giving up.
  1870.             (disk %d: cyl=%d, sect=63, head=64)
  1871.  
  1872.           hdc: probing with STATUS instead of ALTSTATUS
  1873.           hdc: MP0242 A, 0MB w/128KB Cache, CHS=0/0/0
  1874.           hdc: cannot handle disk with 0 physical heads
  1875.           hdd: probing with STATUS instead of ALTSTATUS
  1876.           hdd: MP0242 A, 0MB w/128KB Cache, CHS=0/0/0
  1877.           hdd: cannot handle disk with 0 physical heads
  1878.  
  1879.      If the IDE driver gets into trouble because of this, ie. you can't
  1880.      access your (real) IDE hardware, change the IO Port and/or the IRQ
  1881.      of the EATA board.
  1882.  
  1883.      b. If the IDE driver finds hardware it can handle ie. harddisks
  1884.         with a capacity <=504MB, it will allocate the IO Port and IRQ,
  1885.         so that the eata driver can't utilize them. In this case also
  1886.         change IO Port and IRQ (!= 14,15).
  1887.  
  1888.   3. Some old SK2011 boards have a broken firmware. Please contact DPT's
  1889.      customer support for an update.
  1890.  
  1891.   Notes:
  1892.  
  1893.   1. CONFIG_PCI must be set if you are using a PCI board.
  1894.  
  1895.   5.11.  Future Domain 16x0 with TMC-1800, TMC-18C30, TMC-18C50, or
  1896.   TMC-36C70 chip
  1897.  
  1898.   Supported Configurations :
  1899.  
  1900.        BIOSs          : 2.0, 3.0, 3.2, 3.4, 3.5
  1901.        BIOS Addresses : 0xc8000, 0xca000, 0xce000, 0xde000
  1902.        Ports          : 0x140, 0x150, 0x160, 0x170
  1903.        IRQs           : 3, 5, 10, 11, 12, 14, 15
  1904.        DMA            : not used
  1905.        IO             : port mapped
  1906.  
  1907.   Autoprobe :
  1908.  
  1909.        works with all supported configurations, requires installed BIOS
  1910.  
  1911.   Autoprobe Override :
  1912.  
  1913.        none
  1914.  
  1915.   Antiquity Problems, fix by upgrading :
  1916.  
  1917.   1. Old versions do not support the TMC-18C50 chip, and will fail with
  1918.      newer boards.
  1919.  
  1920.   2. Old versions will not have the most current BIOS signatures for
  1921.      autodetection.
  1922.  
  1923.   3. Versions prior to the one included in Linux 1.0.9 and 1.1.6 don't
  1924.      support the new SCSI chip or 3.4 BIOS.
  1925.  
  1926.   Notes :
  1927.  
  1928.   1. The Future Domain BIOS often scans for SCSI-devices from highest ID
  1929.      to 0, in reverse order of other SCSI BIOSes.  sda will be the last
  1930.      "drive letter" (ie, D: rather than C:).  You may also need to use a
  1931.      a disktab override for LILO.
  1932.  
  1933.   5.12.  Generic NCR5380 / T130B (Standard)
  1934.  
  1935.   Supported and Unsupported Configurations :
  1936.  
  1937.        Ports          : all
  1938.        IRQs           : all
  1939.        DMA channels   : DMA is not used
  1940.        IO             : port mapped
  1941.  
  1942.   Autoprobe :
  1943.  
  1944.        none
  1945.  
  1946.   Autoprobe Override :
  1947.  
  1948.        Compile time : Define GENERIC_NCR5380_OVERRIDE to be an array of tuples
  1949.        with port, irq, dma, board type - ie
  1950.        #define GENERIC_NCR5380_OVERRIDE {{0x330, 5, DMA_NONE, BOARD_NCR5380}}
  1951.  
  1952.        for a NCR5380 board at port 330, IRQ 5.
  1953.  
  1954.        #define GENERIC_NCR5380_OVERRIDE {{0x350, 5, DMA_NONE, BOARD_NCR53C400}}
  1955.  
  1956.        for a T130B at port 0x350.
  1957.  
  1958.        Older versions of the code eliminate the BOARD_* entry.
  1959.  
  1960.        The symbolic IRQs IRQ_NONE and IRQ_AUTO may be used.
  1961.  
  1962.   kernel command line :
  1963.  
  1964.        ncr5380=port,irq
  1965.        ncr5380=port,irq,dma
  1966.        ncr53c400=port,irq
  1967.  
  1968.        255 may be used for no irq, 254 for irq autoprobe.
  1969.  
  1970.   Common Problems :
  1971.  
  1972.   1. Using the T130B board with the old (pre public release 6) generic
  1973.      NCR5380 driver which doesn't support the ncr53c400 command line
  1974.      option.
  1975.  
  1976.      The NCR5380 compatible registers are offset eight from the base
  1977.      address.  So, if your address is 0x350, use
  1978.  
  1979.        ncr5380=0x358,254
  1980.  
  1981.   on the kernel command line.
  1982.  
  1983.   Antiquity problems, fix by upgrading :
  1984.  
  1985.   1. The kernel locks up during disk access with T130B or other
  1986.      NCR53c400 boards.
  1987.  
  1988.      Pre-public release 6 versions of the Generic NCR5380 driver didn't
  1989.      support interrupts on these boards.  Upgrade.
  1990.  
  1991.   Notes :
  1992.  
  1993.   1. the generic driver doesn't support DMA yet, and pseudo-DMA isn't
  1994.      supported in the generic driver.
  1995.  
  1996.   5.13.  NCR53c8xx (Standard)
  1997.  
  1998.   Supported and Unsupported Configurations :
  1999.  
  2000.        Base addresses : ALL
  2001.        IRQs           : ALL
  2002.        DMA channels   : PCI, not applicable
  2003.        IO             : port mapped, busmastering
  2004.  
  2005.   Autoprobe :
  2006.  
  2007.        requires PCI BIOS, uses PCI BIOS routines to
  2008.        search for devices and read configuration space
  2009.  
  2010.   The driver uses the pre-programmed values in some registers for
  2011.   initialization, so a BIOS must be installed.
  2012.  
  2013.   Antiquity Problems, fix by upgrading :
  2014.  
  2015.   1. Older versions of Linux had a problem with swapping See``Disks :
  2016.      System Hangs When Swapping''
  2017.  
  2018.   2. Older versions of Linux didn't recognize '815 and '825 boards.
  2019.  
  2020.   3. Distribution kernels include release 4 or 5 of the driver, which
  2021.      does not support useful things like disconnect/reconnect (the most
  2022.      noticeable effect of this being attempts to retension/rewind/file
  2023.      space a tape lock you out of all SCSI devices), multiple host
  2024.      adapters, and BIOSless operation.
  2025.  
  2026.      The latest release of the driver is available at
  2027.  
  2028.        ftp://tsx-11.mit.edu/pub/linux/ALPHA/scsi/ncr53c810
  2029.  
  2030.   Currently, this is a 1.2.10 and newer patch, although the next release
  2031.   will be 1.3.x exclusively.  These patches are NOT entirely clean due
  2032.   to some ELF and other patches which were in the baseline revision of
  2033.   my source tree, and if you can't manually correct the (four) problems
  2034.   you should get, you shouldn't use them.  Note that only the newest
  2035.   patch is needed; these are not incremental.
  2036.  
  2037.   If you wish to run the newer NCR driver with a 1.3.x kernel before
  2038.   then, Harald Evensen <Harald.Evensen@pvv.unit.no> has adapted the
  2039.   patches for 1.3.x
  2040.  
  2041.        ftp://ftp.pvv.unit.no/pub/Linux/ALPHA/ncr
  2042.  
  2043.   These patches should be clean.
  2044.  
  2045.   Please see all of the READMEs in these directories.  You should also
  2046.   join the NCR mailing list if you are interested in running the ALPHA
  2047.   code, since interim bug fixes and announcements of the next release
  2048.   are posted to this list.
  2049.  
  2050.   To subscribe, send mail to majordomo@colorado.edu with
  2051.  
  2052.        subscribe ncr53c810
  2053.  
  2054.   in the text.  You can unsubscribe by sending mail to the same address
  2055.   and including
  2056.  
  2057.        unsubscribe ncr53c810
  2058.  
  2059.   in the text.
  2060.  
  2061.   Common Problems :
  2062.  
  2063.   1. Many people have encountered problems where the chip worked fine
  2064.      under DOS, but failed under Linux with a timeout on test 1 due to a
  2065.      lost interrupt.
  2066.  
  2067.      This is often due to a mismatch between the IRQ hardware jumper for
  2068.      a slot or mainboard device and the value set in the CMOS setup.
  2069.      DOUBLE CHECK
  2070.  
  2071.   ╖  The IRQ you are using is used only by your onboard NCR chip, or the
  2072.      slot an NCR board is installed in
  2073.  
  2074.   ╖  Any main board jumpers selecting the IRQ for the onboard chip or
  2075.      slot match your CMOS setup.a
  2076.  
  2077.   ╖  Some PCI mainboards have an "auto" assignment feature, which will
  2078.      not work.
  2079.  
  2080.      It may also be due to PCI INTB, INTC, or INTD being selected on a
  2081.      PCI board in a system which only supports PCI INTA.  If you are
  2082.      using an NCR board which has jumpers to select between PCI
  2083.      interrupt lines, make sure you are using INTA.
  2084.  
  2085.      Finally, PCI should be using level-sensitive rather than edge
  2086.      triggered interrupts.  Check that your board is jumpered for level-
  2087.      sensitive, and if that fails try edge-triggered because your system
  2088.      may be broken.
  2089.  
  2090.      This problem is especially common with Viglen some Viglen
  2091.      motherboards, where the mainboard IRQ jumper settings are NOT as
  2092.      documented in the manual.  I've been told that what claims to be
  2093.      IRQ5 is really IRQ9, your mileage will vary.
  2094.  
  2095.   2. Lockups / other problems occur when using an S3 928, or Tseng
  2096.      ET4000W32 PCI video board.
  2097.  
  2098.      There are hardware bugs in at least some revisions of these chips.
  2099.      Don't use them.
  2100.  
  2101.   3. You get a message on boot up indicating that the I/O mapping was
  2102.      disabled because base address 0 bits 0..1 indicated a non I/O
  2103.      mapping
  2104.  
  2105.      This is due to a BIOS bug in some machines which results in dword
  2106.      reads of configuration registers returning the high and low 16 bit
  2107.      words swapped.
  2108.  
  2109.   4. Some systems have problems if PCI write posting, or CPU-> PCI
  2110.      buffering are enabled.  If you have problems, disable these
  2111.      options.
  2112.  
  2113.   5. Some systems with the NCR SDMS software in an onboard BIOS
  2114.  
  2115.      ROM and in the system BIOS are unable to boot DOS.  Disabling the
  2116.      image in one place should rectify this problem.
  2117.  
  2118.   6. If you encounter the message
  2119.  
  2120.        "scsi%d: IRQ0 not free, detaching"
  2121.  
  2122.   or
  2123.  
  2124.        "scsi%d: IRQ255 not free, detaching"
  2125.  
  2126.   The NCR chip had all 0 or 1 bits stored in the PCI configuration reg¡
  2127.   ister.  Either you have configuration problems (see ``Common Problem
  2128.   1''), or you have a defective mainboard BIOS.
  2129.  
  2130.   As a work around, you could edit drivers/scsi/ncr53c7,8xx.c, and
  2131.   change pci_init() so that you have
  2132.  
  2133.        irq = my_irq;
  2134.  
  2135.   before
  2136.  
  2137.        return normal_init (tpnt, board, chip, (int) base,
  2138.            (int) io_port, (int) irq, DMA_NONE, 1, bus, device_fn,
  2139.            options);
  2140.  
  2141.   7. Some systems have hideous, broken, BIOS chips.  Don't make any bug
  2142.      reports until you've made sure you have the newest ROM from your
  2143.      vendor.
  2144.  
  2145.   8. The command line overrides ncr53c810=xxx, etc. don't work.
  2146.  
  2147.      In stock kernels, this is because their entry points are not
  2148.      included in init/main.c, which is quite intentional :
  2149.  
  2150.      The driver makes no attempt to avoid autoprobing for a board where
  2151.      a command line override was used, so if an override is used where
  2152.      the board actually showed up to the PCI configuration routines,
  2153.      you'll have big problems.
  2154.  
  2155.      The only reason you would need an  override would be if the PCI
  2156.      hardware + BIOS were broken, in which case certain error recovery
  2157.      routines wouldn't work, rendering the override less than useful.
  2158.  
  2159.      Finally, nearly all of people who _think_ they need a command line
  2160.      override do because they get configuration or other error messages
  2161.      from the driver.  If the driver says you have a configuration
  2162.      problem, you have a broken system or a configuration problem and no
  2163.      override is going to fix this.
  2164.  
  2165.      If some one has gone and added the appropriate entry points to
  2166.      init/main.c for command line overrides, they are totally
  2167.      unsupported and may not work.
  2168.  
  2169.   9. Certain NCR boards (most notably Nexstor) which don't use an NCR
  2170.      BIOS get timeouts.  Some of these ROMs handle synchronous and
  2171.      transfers, negotiate for sync. transfers on power up, and leave the
  2172.      drives in an unknown state.  When the distribution Linux NCR driver
  2173.      attempts to talk with them, it gets timeouts and cannot recover
  2174.      because it won't do a bus reset or renegotiate.
  2175.  
  2176.      If you run into this problem, you can either disable synchronous
  2177.      transfers in the board's setup program, or upgrade to a newer ALPHA
  2178.      release of the NCR driver which will do synchronous negotiation.
  2179.  
  2180.   10.
  2181.      Tyan S1365 '825 boards have problems with timeouts, especially when
  2182.      disconnects are enabled.  Some of these boards have the
  2183.      documentation regarding the termination enable jumper reversed - so
  2184.      that termination is off when you need it, and on when it shouldn't
  2185.      be.
  2186.  
  2187.      Try reversing the position of the jumper.
  2188.  
  2189.   Notes:
  2190.  
  2191.   1. CONFIG_PCI must be set
  2192.  
  2193.   5.14.  Seagate ST0x/Future Domain TMC-8xx/TMC-9xx (Standard)
  2194.  
  2195.   Supported and Unsupported Configurations :
  2196.  
  2197.        Base addresses : 0xc8000, 0xca000, 0xcc000, 0xce000, 0xdc000, 0xde000
  2198.        IRQs           : 3, 5
  2199.        DMA channels   : DMA is not used
  2200.        IO             : memory mapped
  2201.  
  2202.   Autoprobe :
  2203.  
  2204.        probes for address only, IRQ is assumed to be 5, requires installed BIOS.
  2205.  
  2206.   Autoprobe Override :
  2207.  
  2208.   Compile time :
  2209.  
  2210.        Define OVERRIDE to be the base address, CONTROLLER to
  2211.        FD or SEAGATE as appropriate, and IRQ to the IRQ.
  2212.  
  2213.   kernel command line :
  2214.  
  2215.        st0x=address,irq or tmc8xx=address,irq (only works for .99.13b and newer)
  2216.  
  2217.   Antiquity Problems, fix by upgrading :
  2218.  
  2219.   1. Versions prior to the one in the Linux .99.12 kernel had a problem
  2220.      handshaking with some slow devices, where
  2221.  
  2222.      This is what happens when you write data out to the bus
  2223.  
  2224.      a. Write byte to data register, data register is asserted to bus
  2225.  
  2226.      b. time_remaining = 12us
  2227.  
  2228.      c. wait while time_remaining > 0 and REQ is not asserted
  2229.  
  2230.      d. if time_remaining > 0, assert ACK
  2231.  
  2232.      e. wait while time remaining > 0  and REQ is asserted
  2233.  
  2234.      f. deassert ACK
  2235.  
  2236.      The problem was encountered in slow devices that do the command
  2237.      processing as they read the command, where the REQ/ACK handshake
  2238.      takes over 12us - REQ didn't go false when the driver expected it
  2239.      to, so the driver ended up sending multiple bytes of data for each
  2240.      REQ pulse.
  2241.  
  2242.   2. With Linux .99.12, a bug was introduced when I fixed the
  2243.      arbitration code, resulting in failed selections on some systems.
  2244.      This was fixed in .99.13.
  2245.  
  2246.   Common Problems :
  2247.  
  2248.   1. There are command timeouts when Linux attempts to read the
  2249.      partition table or do other disk access.
  2250.  
  2251.      The board ships with the defaults set up for MSDOS, ie interrupts
  2252.      are disabled.  To jumper the board for interrupts, on the Seagate
  2253.      use jumper W3 (ST01) or JP3 (ST02) and short pins F-G to select IRQ
  2254.      5.
  2255.  
  2256.   2. The driver can't handle some devices, particularly cheap SCSI tapes
  2257.      and CDROMs.
  2258.  
  2259.      The Seagate ties the SCSI bus REQ/ACK handshaking into the PC bus
  2260.      IO CHANNEL READY and (optionally) 0WS signals.  Unfortunately, it
  2261.      doesn't tell you when the watchdog timer runs out, and you have no
  2262.      way of knowing for certain that REQ went low, and may end up seeing
  2263.      one REQ pulse as multiple REQ pulses.
  2264.  
  2265.      Dealing with this means using a tight loop to look for REQ to go
  2266.      low, with a timeout incase you don't catch the transition due to an
  2267.      interrupt, etc.  This results in a performance decrease, so it
  2268.      would be undesirable to apply this to all SCSI devices.  Instead,
  2269.      it is selected on a per-device basis with the "broken" field for
  2270.      the given SCSI device in the scsi_devices array.  If you run into
  2271.      problems, you should try adding your device to the list of devices
  2272.      for which broken is not reset to zero (currently, only the TENEX
  2273.      CDROM drives).
  2274.  
  2275.   3. A future domain board (specific examples include the 840, 841, 880,
  2276.      and 881) doesn't work.
  2277.  
  2278.      A few of the Future domain boards use the Seagate register mapping,
  2279.      and have the MSG and CD bits of the status register flipped.
  2280.  
  2281.      You should edit seagate.h, swapping the definitions for STAT_MSG
  2282.      and STAT_CD, and recompile the kernel with CONTROLLER defined to
  2283.      SEAGATE and an appropriate IRQ and OVERRIDE specified.
  2284.  
  2285.   4. When attempting to fdisk your drive, you get error messages
  2286.      indicating that the HDIO_REQ or HDIO_GETGEO ioctl failed, or
  2287.  
  2288.      You must set heads sectors and cylinders.
  2289.      You can do this from the extra functions menu.
  2290.  
  2291.   See ``Disks Partitioning''
  2292.  
  2293.   5. After manually specifying the drive geometry, subsequent attempts
  2294.      to read the partition table result in partition boundary not on a
  2295.      cylinder boundary, physical and logical boundaries don't match,
  2296.      etc. error messages.
  2297.  
  2298.      See ``Disks Partitioning''
  2299.  
  2300.   6. Some systems which worked prior to .99.13 fail with newer versions
  2301.      of Linux.  Older versions of Linux assigned the CONTROL and DATA
  2302.      registers in an order different than that outlined in the Seagate
  2303.      documentation, which broke on some systems.  Newer versions make
  2304.      the assignment in the correct way, but this breaks other systems.
  2305.  
  2306.   The code in seagate.c looks like this now :
  2307.  
  2308.        cli();
  2309.        DATA = (unsigned char) ((1 << target) | (controller_type == SEAGATE ? 0x80 : 0x40));
  2310.        CONTROL = BASE_CMD | CMD_DRVR_ENABLE | CMD_SEL |
  2311.                    (reselect ? CMD_ATTN : 0);
  2312.        sti();
  2313.  
  2314.   Changing this to
  2315.  
  2316.        cli();
  2317.        CONTROL = BASE_CMD | CMD_DRVR_ENABLE | CMD_SEL |
  2318.                    (reselect ? CMD_ATTN : 0);
  2319.        DATA = (unsigned char) ((1 << target) | (controller_type == SEAGATE ? 0x80 : 0x40));
  2320.        sti();
  2321.  
  2322.   may fix your problem.
  2323.  
  2324.   Defines :
  2325.  
  2326.   FAST or FAST32 will use blind transfers where possible
  2327.  
  2328.   ARBITRATE will cause the host adapter to arbitrate for the
  2329.           bus for better SCSI-II compatibility, rather than just
  2330.           waiting for BUS FREE and then doing its thing.  Should
  2331.           let us do one command per Lun when I integrate my
  2332.           reorganization changes into the distribution sources.
  2333.  
  2334.   SLOW_HANDSHAKE will allow compatibility with broken devices that don't
  2335.           handshake fast enough (ie, some CD ROM's) for the Seagate
  2336.           code.
  2337.  
  2338.   SLOW_RATE=x, x some number will let you specify a default
  2339.           transfer rate if handshaking isn't working correctly.
  2340.  
  2341.   5.15.  PAS16 SCSI (Standard)
  2342.  
  2343.   Supported and Unsupported Configurations :
  2344.  
  2345.        Ports          : 0x388, 0x384, 0x38x, 0x288
  2346.        IRQs           : 10, 12, 14, 15
  2347.             IMPORTANT : IRQ MUST be different from the IRQ used for the sound
  2348.                         portion of the board.
  2349.        DMA            : is not used for the SCSI portion of the board
  2350.        IO             : port mapped
  2351.  
  2352.   Autoprobe :
  2353.  
  2354.        does not require BIOS
  2355.  
  2356.   Autoprobe Override :
  2357.  
  2358.        Compile time : Define PAS16_OVERRIDE to be an array of port, irq
  2359.        tuples.  Ie
  2360.  
  2361.        #define PAS16_OVERRIDE {{0x388, 10}}
  2362.  
  2363.        for a board at port 0x388, IRQ 10.
  2364.  
  2365.   kernel command line :
  2366.  
  2367.        pas16=port,irq
  2368.  
  2369.   Defines :
  2370.  
  2371.        AUTOSENSE - if defined, REQUEST SENSE will be performed automatically
  2372.        for commands that return with a CHECK CONDITION status.
  2373.  
  2374.        PSEUDO_DMA - enables PSEUDO-DMA hardware, should give a 3-4X performance
  2375.        increase compared to polled I/O.
  2376.  
  2377.        PARITY - enable parity checking.  Not supported
  2378.  
  2379.        SCSI2 - enable support for SCSI-II tagged queuing.  Untested
  2380.  
  2381.        UNSAFE - leave interrupts enabled during pseudo-DMA transfers.  You
  2382.                 only really want to use this if you're having a problem with
  2383.                 dropped characters during high speed communications, and even
  2384.                 then, you're going to be better off twiddling with transfersize.
  2385.  
  2386.        USLEEP - enable support for devices that don't disconnect.  Untested.
  2387.  
  2388.   Common problems :
  2389.  
  2390.   1. Command timeouts, aborts, etc.
  2391.  
  2392.      You should install the NCR5380 patches that I posted to the net
  2393.      some time ago, which should be integrated into some future alpha
  2394.      release.  These patches fix a race condition in earlier NCR5380
  2395.      driver cores, as well as fixing support for multiple devices on
  2396.      NCR5380 based boards.
  2397.  
  2398.      If that fails, you should disable the PSEUDO_DMA option by changing
  2399.      the #define PSEUDO_DMA line in drivers/scsi/pas16.c to #undef
  2400.      PSEUDO_DMA.
  2401.  
  2402.      Note that the later should be considered a last resort, because
  2403.      there will be a severe performance degradation.
  2404.  
  2405.   5.16.  Trantor T128/T128F/T228 (Standard)
  2406.  
  2407.   Supported and Unsupported Configurations :
  2408.  
  2409.        Base addresses :  0xcc000, 00xc8000, 0xdc000, 0xd8000
  2410.        IRQs           : none, 3, 5, 7 (all boards)
  2411.                         10, 12, 14, 15 (T128F only)
  2412.        DMA            : not used.
  2413.        IO             : memory mapped
  2414.  
  2415.   Autoprobe :
  2416.  
  2417.   works for all supported configurations, requires installed BIOS.
  2418.  
  2419.   Autoprobe Override :
  2420.  
  2421.        Compile time : Define T128_OVERRIDE to be an array of address, irq
  2422.        tuples.  Ie
  2423.  
  2424.        #define T128_OVERRIDE {{0xcc000, 5}}
  2425.  
  2426.        for a board at address 0xcc000, IRQ 5.
  2427.  
  2428.        The symbolic IRQs IRQ_NONE and IRQ_AUTO may be used.
  2429.  
  2430.   kernel command line :
  2431.  
  2432.        t128=address,irq
  2433.        -1 may be used for no irq, -2 for irq autoprobe.
  2434.  
  2435.   Defines :
  2436.  
  2437.        AUTOSENSE - if defined, REQUEST SENSE will be performed automatically
  2438.        for commands that return with a CHECK CONDITION status.
  2439.  
  2440.        PSEUDO_DMA - enables PSEUDO-DMA hardware, should give a 3-4X performance
  2441.        increase compared to polled I/O.
  2442.  
  2443.        PARITY - enable parity checking.  Not supported
  2444.  
  2445.        SCSI2 - enable support for SCSI-II tagged queuing.  Untested
  2446.  
  2447.        UNSAFE - leave interrupts enabled during pseudo-DMA transfers.  You
  2448.                 only really want to use this if you're having a problem with
  2449.                 dropped characters during high speed communications, and even
  2450.                 then, you're going to be better off twiddling with transfersize.
  2451.  
  2452.        USLEEP - enable support for devices that don't disconnect.  Untested.
  2453.  
  2454.   Common Problems :
  2455.  
  2456.   1. Command timeouts, aborts, etc.
  2457.  
  2458.      You should install the NCR5380 patches that I posted to the net
  2459.      some time ago, which should be integrated into some future alpha
  2460.      release.  These patches fix a race condition in earlier NCR5380
  2461.      driver cores, as well as fixing support for multiple devices on
  2462.      NCR5380 based boards.
  2463.  
  2464.      If that fails, you should disable the PSEUDO_DMA option by changing
  2465.      the #define PSEUDO_DMA line in drivers/scsi/pas16.c to #undef
  2466.      PSEUDO_DMA.
  2467.  
  2468.      Note that the later should be considered a last resort, because
  2469.      there will be a severe performance degradation.
  2470.  
  2471.   5.17.  Ultrastor 14f (ISA), 24f (EISA), 34f (VLB) (Standard)
  2472.  
  2473.   Supported Configurations :
  2474.  
  2475.        Ports          : 0x130, 0x140, 0x210, 0x230, 0x240, 0x310, 0x330, 0x340
  2476.        IRQs           : 10, 11, 14, 15
  2477.        DMA channels   : 5, 6, 7
  2478.        IO             : port mapped, bus master
  2479.  
  2480.   Autoprobe :
  2481.  
  2482.        does not work for boards at port 0x310, BIOS not required.
  2483.  
  2484.   Autoprobe override :
  2485.  
  2486.        compile time only, define PORT_OVERRIDE
  2487.  
  2488.   Common Problems :
  2489.  
  2490.   1. The address 0x310 is not supported by the autoprobe code, and may
  2491.      cause conflicts if networking is enabled.
  2492.  
  2493.      Please use a different address.
  2494.  
  2495.   2. Using an Ultrastor at address 0x330 may cause the system to hang
  2496.      when the sound drivers are autoprobing.
  2497.  
  2498.      Please use a different address.
  2499.  
  2500.   3. Various other drivers do unsafe probes at various addresses, if you
  2501.      are having problems with detection or the system is hanging at boot
  2502.      time, please try a different address.
  2503.  
  2504.      0x340 is recommended as an address that is known to work.
  2505.  
  2506.   4. Linux detects no SCSI devices, but detects your SCSI hard disk on
  2507.      an Ultrastor SCSI board as a normal hard disk, and the hard disk
  2508.      driver refuses to support it.  Note that when this occurs, you will
  2509.      probably also get a message
  2510.  
  2511.      hd.c: ST-506 interface disk with more than 16 heads detected,
  2512.      probably due to non-standard sector translation.  Giving up.  (disk
  2513.      %d: cyl=%d, sect=63, head=64)
  2514.  
  2515.      If this is the case, you are running the Ultrastor board in WD1003
  2516.      emulation mode.  You have
  2517.  
  2518.      a. Switch the Ultrastor into native mode.  This is the recommended
  2519.         action, since the SCSI driver can be significantly faster than
  2520.         the IDE driver, especially with the clustered read/write patches
  2521.         installed.  Some users have sustained in excess of 2M/sec
  2522.         through the file system using these patches.
  2523.  
  2524.         Note that this will be necessary if you wish to use any non-
  2525.         hard disk, or more than two hard disk devices on the Ultrastor.
  2526.  
  2527.      b. Use the kernel command line switch
  2528.  
  2529.           hd=cylinders,heads,sectors
  2530.  
  2531.      to override the default setting to bootstrap yourself, keeping num¡
  2532.      ber of cylinders <= 2048, number of heads <= 16, and number of sec¡
  2533.      tors <= 255 such that cylinders * heads * sectors is the same for
  2534.      both mappings.
  2535.  
  2536.      You'll also have to manually specify the disk geometry when running
  2537.      fdisk under Linux.  Failure to do so will result in incorrect par¡
  2538.      tition entries being written, which will work correctly with Linux
  2539.      but fail under MSDOS which looks at the cylinder/head/sector
  2540.      entries in the table.
  2541.  
  2542.      Once Linux is up, you can avoid the inconvenience of having to boot
  2543.      by hand by recompiling the kernel with an appropriately defined
  2544.      HD_TYPE macro in include/linux/config.h.
  2545.  
  2546.   5.18.  Western Digital 7000 (Standard)
  2547.  
  2548.   Supported Configurations :
  2549.  
  2550.        BIOS Addresses : 0xce000
  2551.        Ports          : 0x350
  2552.        IRQs           : 15
  2553.        DMA Channels   : 6
  2554.        IO             : port mapped, bus master
  2555.  
  2556.   Autoprobe :
  2557.  
  2558.        requires installed BIOS
  2559.  
  2560.   Common Problems :
  2561.  
  2562.   1. There are several revisions of the chip and firmware.  Supposedly,
  2563.      revision 3 boards do not work, revision 5 boards do, chips with no
  2564.      suffix do not work, chips with an 'A' suffix do.
  2565.  
  2566.   2. The board supports a few BIOS addresses which aren't on the list of
  2567.      supported addresses.  If you run into this situation, please use
  2568.      one of the supported addresses and submit a bug report as outlined
  2569.      in ``Bug Reports''.
  2570.  
  2571.   5.19.  AM53/79C974 (ALPHA)
  2572.  
  2573.        ftp://tsx-11.mit.edu/pub/linux/ALPHA/scsi/AM53C974-0.3.tar.gz
  2574.  
  2575.   Supported Configurations :
  2576.  
  2577.        Ports          : all
  2578.        IRQs           : all
  2579.        DMA Channels   : 6
  2580.        IO             : port mapped, bus master (unintelligent)
  2581.  
  2582.   5.20.  qlogic (Standard)
  2583.  
  2584.   Hey Drew, where is this section (I (D.F.) saw it only in the toc ;-)?
  2585.  
  2586.   6.  Disks
  2587.  
  2588.   This section gives information that is specific to disk drives.
  2589.  
  2590.   6.1.  Supported and Unsupported Hardware
  2591.  
  2592.   All direct access SCSI devices with a block size of 256, 512, or 1024
  2593.   bytes should work.  Other block sizes will not work (Note that this
  2594.   can often be fixed by changing the block and/or sector sizes using the
  2595.   MODE SELECT SCSI command)
  2596.  
  2597.   Sector size refers to the number of data bytes allocated per sector on
  2598.   a device, ie CDROMs use a 2048 byte sector size.
  2599.  
  2600.   Block size refers to the size of the logical blocks used to interface
  2601.   with the device.  Although this is usually identical to sector size,
  2602.   some devices map multiple smaller physical sectors (ie, 256 bytes in
  2603.   the case of 55M Syquest drives) to larger logical blocks or vice versa
  2604.   (ie, 512 byte blocks on SUN compatible CDROM drives).
  2605.  
  2606.   Removable media devices, including Bernoulis, flopticals, MO drives,
  2607.   and Syquests.
  2608.  
  2609.   In theory, drives up to a terabyte in size should work.  There is
  2610.   definitely no problem with tiny 9G drives.
  2611.  
  2612.   6.2.  Common Problems
  2613.  
  2614.   6.2.1.  Cylinder > 1024 message
  2615.  
  2616.   When partitioning, you get a warning message about "cylinder > 1024"
  2617.   or you are unable to boot from a partition including a logical
  2618.   cylinder past logical cylinder 1024.
  2619.  
  2620.   This is a BIOS limitation.
  2621.  
  2622.   See Disk ``Geometry'' and ``Partitioning'' for an explanation.
  2623.  
  2624.   6.2.2.  You are unable to partition "/dev/hd*"
  2625.  
  2626.   /dev/hd* aren't SCSI devices, /dev/sd* are.
  2627.  
  2628.   See ``Device Files'' and Disk ``Geometry'' and ``Partitioning'' for
  2629.   the correct device names and partitioning procedure.
  2630.  
  2631.   6.2.3.  Unable to eject media from a removable media drive
  2632.  
  2633.   Linux attempts to lock the drive door when a piece of media is mounted
  2634.   to prevent filesystem corruption due to an inadvertent media change.
  2635.  
  2636.   Please unmount your disks before ejecting them.
  2637.  
  2638.   6.2.4.  Unable to boot using LILO from a SCSI disk
  2639.  
  2640.   In some cases, the SCSI driver and BIOS will disagree over the correct
  2641.   BIOS mapping to use, and will result in LILO hanging after 'LI' at
  2642.   boot time and/or other problems.
  2643.  
  2644.   To workaround this, you'll have to determine your BIOS geometry
  2645.   mapping used under DOS, and make an entry for your disk in
  2646.   /etc/lilo/disktab.
  2647.  
  2648.   Alternatively, you may be able to use the "linear" configuration jfile
  2649.   option.
  2650.  
  2651.   6.2.5.  Fdisk responds with
  2652.  
  2653.        You must set heads sectors and cylinders.
  2654.        You can do this from the extra functions menu.
  2655.  
  2656.   and disk geometry is not 'remembered' when fdisk is rerun.
  2657.  
  2658.   See ``Partitioning''
  2659.  
  2660.   6.2.6.  Only one drive is detected on a bridge board with multiple
  2661.   drives connected.
  2662.  
  2663.   Linux won't search LUNs past zero on SCSI devices which predate ANSI
  2664.   SCSI revision 1.  If you wish devices on alternate LUNs to be
  2665.   recognized, you will have to modify drivers/scsi/scsi.c:scan_scsis().
  2666.  
  2667.   6.2.7.  System hangs when swapping
  2668.  
  2669.   We think this has been fixed, try upgrading to 1.1.38.
  2670.  
  2671.   6.2.8.  Connor CFP1060S disks get corrupted
  2672.  
  2673.   This is due to a microcode bug in the read-ahead and caching code.
  2674.  
  2675.   >From Soenke Behrens of Conner tech. support :
  2676.  
  2677.   During the past few weeks, we got several calls from customers stating
  2678.   that they had severe problems with Conner CFP1060x 1GB SCSI drives
  2679.   using the Linux operating system. Symptoms were corrupt filesystems
  2680.   (damaged inodes) reported by e2fsck on each system boot and similar
  2681.   errors.
  2682.  
  2683.   There is now a fix available for customers with a CFP1060x (microcode
  2684.   revisions 9WA1.62/1.66/1.68) and Linux. To apply the upgrade, you
  2685.   will need a DOS boot disk and ASPI drivers that can access the hard
  2686.   drive. The upgrade downloads new queuing and lookahead code into the
  2687.   non-volatile SCSI RAM of the drive.
  2688.  
  2689.   If you are experiencing problems with a disk that has microcode
  2690.   revision 9WA1.60, you will have to contact your nearest Conner service
  2691.   centre to get the disk upgraded. The microcode revision can be found
  2692.   on the label of the drive and on the underside of the drive on a label
  2693.   on one of the ICs.
  2694.  
  2695.   If you are confident that you can perform the upgrade yourself, please
  2696.   contact Conner Technical Support and have your microcode revision
  2697.   ready. Conner Technical Support Europe can be reached on +44-1294-315333,
  2698.   Conner Technical Support in the USA can be reached on 1-800-4CONNER.
  2699.  
  2700.   Regards
  2701.   Soenke Behrens
  2702.   European Technical Support
  2703.  
  2704.   6.3.  Device Files
  2705.  
  2706.   SCSI disks use block device major 8, and there are no "raw" devices
  2707.   ala BSD.
  2708.  
  2709.   16 minor numbers are allocated to each SCSI disk, with minor % 16 == 0
  2710.   being the whole disk, minors  1 <= (minor % 16) <= 4 the four primary
  2711.   partitions, minors 5 <= (minor % 16) <= 15 any extended partitions.
  2712.  
  2713.   Ie, a configuration may work out like this (with one host adapter)
  2714.  
  2715.   Device                  Target, Lun     SCSI disk
  2716.   84M Seagate             0       0       /dev/sda
  2717.   SCSI->SMD bridge disk 0 3       0       /dev/sdb
  2718.   SCSI->SMD bridge disk 1 3       1       /dev/sdc
  2719.   Wangtek tape            4       0       none
  2720.   213M Maxtor             6       0       /dev/sdd
  2721.  
  2722.   Etc.
  2723.  
  2724.   The standard naming convention is
  2725.  
  2726.   /dev/sd{letter} for the entire disk device ((minor % 16) == 0)
  2727.   /dev/sd{letter}{partition} for the partitions on that device (1 <=
  2728.   (minor % 16) <= 15)
  2729.  
  2730.   Ie
  2731.  
  2732.   /dev/sda        block device major 8 minor 0
  2733.   /dev/sda1       block device major 8 minor 1
  2734.   /dev/sda2       block device major 8 minor 2
  2735.   /dev/sdb        block device major 8 minor 16
  2736.  
  2737.   etc.
  2738.  
  2739.   6.4.  Partitioning
  2740.  
  2741.   You can partition your SCSI disks using the partitioning program of
  2742.   your choice, under DOS, OS/2, Linux or any other operating system
  2743.   supporting the standard partitioning scheme.
  2744.  
  2745.   The correct way to run the Linux fdisk program is by specifying the
  2746.   device on the command line. Ie, to partition the first SCSI disk,
  2747.  
  2748.        fdisk /dev/sda
  2749.  
  2750.   If you don't explicitly specify the device, the partitioning program
  2751.   may default to /dev/hda, which isn't a SCSI disk.
  2752.  
  2753.   In some cases, fdisk will respond with
  2754.  
  2755.        You must set heads sectors and cylinders.
  2756.        You can do this from the extra functions menu.
  2757.  
  2758.        Command (m for help):
  2759.  
  2760.   and/or give a message to the effect that the HDIO_REQ or HDIO_GETGEO
  2761.   ioctl failed.  In these cases, you must manually specify the disk
  2762.   geometry as outlined in ``Disk Geometry'' when running fdisk, and also
  2763.   in /etc/disktab if you wish to boot kernels off that disk with LILO.
  2764.  
  2765.   If you have manually specified the disk geometry, subsequent attempts
  2766.   to run fdisk will give the same error message.  This is normal, since
  2767.   PCs don't store the disk geometry information in the partition table.
  2768.   In and of itself, will cause _NO PROBLEMS_, and you will have no
  2769.   problems accessing partitions you created on the drive with Linux.
  2770.   Some vendors' poor installation code will choke on this, in which case
  2771.   you should contact your vendor and insist that they fix the code.
  2772.  
  2773.   In some cases, you will get a warning message about a partition ending
  2774.   past cylinder 1024.  If you create one of these partitions, you will
  2775.   be unable to boot Linux kernels off of that partition using LILO.
  2776.   Note, however, that this restriction does not preclude the creation of
  2777.   a root partition partially or entirely above the 1024 cylinder mark,
  2778.   since it is possible to create a small /boot partition below the 1024
  2779.   cylinder mark or to boot kernels off existing partitions.
  2780.  
  2781.   6.5.  Disk Geometry
  2782.  
  2783.   Under Linux, each disk is viewed as the SCSI host adapter sees it : N
  2784.   blocks, numbered from 0 to N-1, all error free, where as DOS/BIOS
  2785.   predate intelligent disks and apply an arbitrary head / cylinder /
  2786.   sector mapping to this linear addressing.
  2787.  
  2788.   This can pose a problem when you partition the drives under Linux,
  2789.   since there is no portable way to get DOS/BIOS's idea of the mapped
  2790.   geometry.  In most cases, a HDIO_GETGEO ioctl() can be implemented to
  2791.   return this mapping.  Unfortunately, when the vendor (ie Seagate) has
  2792.   chosen a perverse, non-standard, and undocumented mapping, this is not
  2793.   possible and geometry must be manually specified
  2794.  
  2795.   If manual specification of the is required, you have one of several
  2796.   options :
  2797.  
  2798.   1. If you don't care about using DOS, or booting kernels from the
  2799.      drive with LILO, create a translation such that heads * cylinders *
  2800.      sectors * 512 < size of your drive in bytes (a megabyte is defined
  2801.      as 2^20 bytes).
  2802.  
  2803.      1 <= heads <= 256
  2804.      1 <= cylinders <= 1024
  2805.      1 <= sectors <= 63
  2806.  
  2807.   2. Use the BIOS mapping.  In some cases, this will mean reconfiguring
  2808.      the disk so that it is at SCSI ID 0, and disabling the second IDE
  2809.      drive (if you have one).
  2810.  
  2811.   You can either use a program like NU, or you can use the following
  2812.   program :
  2813.  
  2814.   begin 664 dparam.com
  2815.   MBAZ``##_B+^!`+N!`(H'0SP@=/D\,'5:@#]X=`6`/UAU4(!_`3AU2H!_`P!U
  2816.   M1(I7`H#J,(#Z`7<Y@,*`M`C-$PCD=3-14HC()#\PY.@R`.@J`%J(\/[`,.3H
  2817.   M)0#H'0!8AL2Q!M+L0.@7`+K"`;0)S2'#NIP!ZR"ZQ0'K&[K5`>L6N]T!,=*Y
  2818.   M"@#W\8#",$N(%PG`=>^)VK0)S2'#=7-A9V4Z(&1P87)A;2`P>#@P#0H@("!O
  2819.   L<B`@9'!A<F%M(#!X.#$-"B1);G9A;&ED(&1R:79E#0HD("`D```````D``!O
  2820.   `
  2821.   end
  2822.  
  2823.   When run it prints the sectors, heads, and cylinders of the drive
  2824.   whose BIOS address was specified on the command line (0x80 is the
  2825.   first disk, 0x81 the second).
  2826.  
  2827.   Ie, dparam 0x80
  2828.  
  2829.   60      17      1007
  2830.  
  2831.   Would mean that C: had 60 sectors, 17 heads, and 1007 cylinders.
  2832.  
  2833.   7.  CD ROMs
  2834.  
  2835.   This section gives information that is specific to cdrom drives.
  2836.  
  2837.   7.1.  Supported and Unsupported Hardware
  2838.  
  2839.   SCSI CDs with a block size of 512 or 2048 bytes should work.  Other
  2840.   block sizes will not work.
  2841.  
  2842.   7.2.  Common Problems
  2843.  
  2844.   7.2.1.  Unable to mount cdrom
  2845.  
  2846.   The correct syntax to mount an ISO-9660 CDROM is
  2847.  
  2848.        mount -t iso9660 /dev/sr0 /mount_point -o ro
  2849.  
  2850.   Note that for this to work, you must have the kernel configured with
  2851.   support for SCSI, your host adapter, the SCSI CDROM driver, and the
  2852.   iso9660 filesystem.
  2853.  
  2854.   Note that as of Linux 1.1.32, read-only devices such as CDROMs CANNOT
  2855.   be mounted with the default read/write options.
  2856.  
  2857.   7.2.2.  Unable to eject cdrom
  2858.  
  2859.   Linux attempts to lock the drive door when a piece of media is mounted
  2860.   to prevent filesystem corruption due to an inadvertent media change.
  2861.   7.2.3.  Unable to play audio
  2862.  
  2863.   The programs Workman or xcdplayer will do this for you.
  2864.  
  2865.   7.2.4.  Workman or Xcdplayer do not work
  2866.  
  2867.   The functions to control audio functions are part of the SCSI-II
  2868.   command set, so any drive that is not SCSI-II will probably not work
  2869.   here.  Also, many SCSI-I and some SCSI-II CDROM drives use a
  2870.   proprietary command set for accessing audio functions instead of the
  2871.   SCSI-II command set.  For NEC drives, there is a version of xcdplayer
  2872.   specially adapted to use this command set floating around - try
  2873.   looking on tsx-11.mit.edu in pub/linux/BETA/cdrom.
  2874.  
  2875.   These programs may work with some of the non-SCSI cdrom drives if the
  2876.   driver implements the same ioctls as the scsi drivers.
  2877.  
  2878.   7.2.5.  Additional drives on CD ROM changers do not work
  2879.  
  2880.   Most CD changers assign each disc to a logical unit.  Insure that you
  2881.   have special files made for each platter (see ``Device Files'') and
  2882.   see ``LUNS other than 0 don't work''.
  2883.  
  2884.   7.3.  Device Files
  2885.  
  2886.   SCSI CD ROMs use major 11.
  2887.  
  2888.   Minors are allocated dynamically (See ``Disks'', ``Device Files'' for
  2889.   an example) with the first CDROM found being minor 0, the second minor
  2890.   1, etc.
  2891.  
  2892.   The standard naming convention is
  2893.  
  2894.   /dev/sr{digit}, although some distributions have used /dev/scd{digit},
  2895.   with examples being
  2896.  
  2897.   /dev/sr0        /dev/scd0
  2898.   /dev/sr1        /dev/scd1
  2899.  
  2900.   8.  Tapes
  2901.  
  2902.   This section gives information that is specific to scsi tape drives.
  2903.  
  2904.   8.1.  Supported and Unsupported Hardware
  2905.  
  2906.   Drives using both fixed and variable length blocks smaller than the
  2907.   the driver buffer length (set to 32K in the distribution sources) are
  2908.   supported.
  2909.  
  2910.   Parameters (block size, buffering, density) are set with ioctls
  2911.   (usually with the mt program), and remain in effect after the device
  2912.   is closed and reopened.
  2913.   Virtually all drives should work, including :
  2914.  
  2915.   ╖  Archive Viper QIC drives, including the 150M and 525M models
  2916.  
  2917.   ╖  Exabyte 8mm drives
  2918.  
  2919.   ╖  Wangtek 5150S drives
  2920.  
  2921.   ╖  Wangdat DAT drives
  2922.  
  2923.   8.2.  Common Problems
  2924.  
  2925.   8.2.1.  Tape drive not recognized at boot time
  2926.  
  2927.   Try booting with a tape in the drive.
  2928.  
  2929.   8.2.2.  Tapes with multiple files cannot be read properly
  2930.  
  2931.   When reading a tape with multiple files, the first tar is successful,
  2932.   a second tar fails silently, and retrying the second tar is
  2933.   successful.
  2934.  
  2935.   User level programs, such as tar, don't understand file marks.  The
  2936.   first tar reads up until the end of the file.  The second tar attempts
  2937.   to read at the file mark, gets nothing, but the tape spaces over the
  2938.   file mark.  The third tar is successful since the tape is at the start
  2939.   of the next file.
  2940.  
  2941.   Use mt on the no-rewind device to space forward to the next file.
  2942.  
  2943.   8.2.3.  Decompression fails
  2944.  
  2945.   Decompressing programs cannot handle the zeros padding the last block
  2946.   of the file.
  2947.  
  2948.   To prevent warnings and errors, wrap your compressed files in a .tar
  2949.   file - ie, rather than doing
  2950.  
  2951.        tar cfvz /dev/nrst0 file.1 file.2 ...
  2952.  
  2953.   do
  2954.  
  2955.        tar cfvz tmp.tar.z file.1 file.2 ...
  2956.  
  2957.        tar cf /dev/nrst0 tmp.tar.z
  2958.  
  2959.   8.2.4.  Problems taking tapes to/from other systems
  2960.  
  2961.   You can't read a tape made with another operating system or another
  2962.   operating system can't read a tape written in Linux.
  2963.  
  2964.   Different systems often use different block sizes.  On a tape device
  2965.   using a fixed blocksize, you will get errors when reading blocks
  2966.   written using a different block size.
  2967.  
  2968.   To read these tapes, you must set the blocksize of the tape driver to
  2969.   match the blocksize used when the tape was written, or to variable.
  2970.  
  2971.   NOTE : this is the hardware block size, not the blocking factor used
  2972.   with tar, dump, etc.
  2973.  
  2974.   You can do this with the mt command -
  2975.  
  2976.        mt setblk <size>
  2977.  
  2978.   or
  2979.  
  2980.        mt setblk 0
  2981.  
  2982.   to get variable block length support.
  2983.  
  2984.   Note that these mt flags are NOT supported under the GNU version of mt
  2985.   which is included with some Linux distributions.  Instead, you must
  2986.   use the BSD derived Linux SCSI mt command.  Source should be available
  2987.   from
  2988.  
  2989.        tsx-11.mit.edu:/pub/linux/ALPHA/scsi
  2990.  
  2991.   Also note that by default, ST_BUFFER_BLOCKS (defined in
  2992.   /usr/src/linux/drivers/scsi/st_options.h in newer kernels, st.c in
  2993.   older kernels) is set to allow for a 32K maximum buffer size; you'll
  2994.   need to edit the source to use larger blocks.
  2995.  
  2996.   8.2.5.  No such device" error message
  2997.  
  2998.   All attempts to access the tape result in a
  2999.  
  3000.   "No such device"
  3001.  
  3002.   or similar error message.  Check the type of your tape device - it
  3003.   MUST be a character device with major and minor numbers matching those
  3004.   specified in ``Device Files''.
  3005.  
  3006.   8.2.6.  Tape reads at a given density work, writes fail
  3007.  
  3008.   Many tape drives support reading at lower densities for compatibility
  3009.   with older hardware, but will not write at those same densities.
  3010.  
  3011.   This is especially the case with QIC drives, which will read old 60M
  3012.   tapes but only write new 120, 150, 250, and 525M formats.
  3013.  
  3014.   8.2.7.  Repositioning the tape locks out access to all SCSI devices
  3015.  
  3016.   This is most common with SCSI drivers which only support one
  3017.   outstanding command at a time (see ``Multiple devices'' for an
  3018.   explanation, and ``Driver feature comparison'' to see which drivers
  3019.   suffer from this limitation), although there may be a few tape drives
  3020.   out there which refuse to disconnect.
  3021.  
  3022.   In either case, you can work around the problem by editing
  3023.   drivers/scsi/st.c and adding a
  3024.  
  3025.        #define ST_NOWAIT
  3026.  
  3027.   at the top and rebuilding the kernel.
  3028.  
  3029.   Note that this will defer error condition reporting until the next
  3030.   SCSI command is executed.  For this reason, you may want to do
  3031.   something like a
  3032.  
  3033.        mt status
  3034.  
  3035.   after a mt file positioning command so you don't overwrite tape files
  3036.   if the positioning command failed.
  3037.  
  3038.   You may also wish to consider changing to a better-supported SCSI
  3039.   board or newer tape drive if you need to use this workaround and are
  3040.   writing multiple files to tapes.
  3041.  
  3042.   8.3.  Device Files
  3043.  
  3044.   SCSI tapes use character device major 9.
  3045.  
  3046.   Due to constraints imposed by Linux's use of a sixteen bit dev_t with
  3047.   only eight bits allocated to the minor number, the SCSI tape minor
  3048.   numbers are assigned dynamically starting with the lowest SCSI
  3049.   HOST/ID/LUN.
  3050.  
  3051.   Rewinding devices are numbered from 0 - with the first SCSI tape,
  3052.   /dev/rst0 being c 9 0, the second /dev/rst1 c 9 1, etc.  Non-rewinding
  3053.   devices have the high bit set in the minor number, ie /dev/nrst0 is c
  3054.   9 128.
  3055.  
  3056.   The standard naming convention is
  3057.  
  3058.   /dev/nst{digit}         for non-rewinding devices
  3059.   /dev/st{digit}          for rewinding devices
  3060.  
  3061.   9.  Generic
  3062.  
  3063.   This information gives information that is specific to the generic
  3064.   scsi driver.
  3065.  
  3066.   9.1.  Supported Hardware
  3067.  
  3068.   The Generic SCSI device driver provides an interface for sending SCSI
  3069.   commands to all SCSI devices - disks, tapes, CDROMs, media changer
  3070.   robots, etc.
  3071.  
  3072.   Everything electrically compatible with your SCSI board should work.
  3073.  
  3074.   9.2.  Common Problems
  3075.  
  3076.   None :-).
  3077.  
  3078.   9.3.  Device Files
  3079.  
  3080.   SCSI generic devices use character major 21.  Due to constraints
  3081.   imposed by Linux's use of a 16 bit dev_t, minor numbers are
  3082.   dynamically assigned from 0, one per device, with
  3083.  
  3084.   /dev/sg0
  3085.  
  3086.   corresponding to the lowest numerical target/lun on the first SCSI
  3087.   board.
  3088.  
  3089.   10.  Buyers' Guide
  3090.  
  3091.   A frequent question is:
  3092.  
  3093.   "Linux supports quite a number of different boards, so which scsi host
  3094.   adapter should I get."
  3095.  
  3096.   The answer depends upon how much performance you expect or need,
  3097.   motherboard, and the scsi peripherals that you plan on attaching to
  3098.   your machine.
  3099.  
  3100.   10.1.  Transfer types
  3101.  
  3102.   The biggest factor affecting performance (in terms of throughput and
  3103.   interactive response time during SCSI I/O) is the transfer type used.
  3104.   The table below lists the various transfer types, the effects they
  3105.   have on performance, and some recommendations as to their use.
  3106.  
  3107.      Transfer type
  3108.         Description / Performance / Recommendations
  3109.  
  3110.      Pure Polled
  3111.         A pure polled I/O board will use the CPU to handle all of the
  3112.         SCSI processing, including the REQ/ACK handshaking.
  3113.  
  3114.         Even a fast CPU will be slower handling the REQ/ACK handshake
  3115.         sequence than a simple finite state machine, resulting in peak
  3116.         transfer rates of about 150K/sec on a fast machine, perhaps
  3117.         60K/sec on a slow machine (through the filesystem).
  3118.  
  3119.         The driver also must sit in a tight loop as long as the SCSI bus
  3120.         is busy, resulting in near 100% CPU utilization and extremely
  3121.         poor responsiveness during SCSI I/O.  Slow CDROMs which don't
  3122.         disconnect/reconnect will kill interactive performance with
  3123.         these boards.
  3124.  
  3125.         Not recommended.
  3126.  
  3127.      Interlocked Polled
  3128.         Boards using interlocked polled I/O are essentially the same as
  3129.         pure polled I/O boards, only the SCSI REQ/ACK handshaking
  3130.         signals are interlocked with the PC bus handshaking signals.
  3131.         All SCSI processing beyond the handshaking is handled by the
  3132.         CPU.
  3133.  
  3134.         Peak transfer rates of 500-600K/sec through the filesystem are
  3135.         possible on these boards.
  3136.  
  3137.         As with pure polled I/O boards, the driver must sit in a tight
  3138.         loop as long as the SCSI bus is busy, resulting in CPU
  3139.         utilization dependent on the transfer rates of the devices, and
  3140.         when they disconnect/reconnect.  CPU utilization may vary
  3141.         between 25% for single speed CDs which handle
  3142.         disconnect/reconnect properly to 100% for faster drives or
  3143.         broken CD ROMs which fail to disconnect/reconnect.
  3144.  
  3145.         On my 486-66, with a T128, I use 90% of my CPU time to sustain a
  3146.         throughput of 547K/sec on a drive with a headrate of 1080K/sec
  3147.         with a T128 board.
  3148.  
  3149.         Sometimes acceptable for slow tapes and CDROMs when low cost is
  3150.         essential.
  3151.  
  3152.      FIFO Polled
  3153.         Boards using FIFO polled I/O put a small (typically 8K) buffer
  3154.         between the CPU and the SCSI bus, and often implement some
  3155.         amount of intelligence.  The net effect is that the CPU is only
  3156.         tied up when it is transferring data at top speed to the FIFO
  3157.         and when it's handling the rest of the interrupt processing for
  3158.         FIFO empty conditions, disconnect/reconnect, etc.
  3159.  
  3160.         Peak transfer rates should be sufficient to handle most SCSI
  3161.         devices, and have been measured at up to 4M/sec using raw SCSI
  3162.         commands to read 64K blocks on a fast Seagate Baracuda with an
  3163.         Adaptec 1520.
  3164.  
  3165.         CPU utilization is dependent on the transfer rates of the
  3166.         devices, with faster devices generating more interrupts per unit
  3167.         time which require more CPU processing time.   Although CPU
  3168.         usage may be high (perhaps 75%) with fast devices, the system
  3169.         usually remains usable.  These boards will provide excellent
  3170.         interactive performance with broken devices which don't
  3171.         disconnect/reconnect (typically cheap CDROM drives)
  3172.  
  3173.         Recommended for persons on a budget.
  3174.  
  3175.      Slave DMA
  3176.         Drivers for boards using slave DMA program the PC's DMA
  3177.         controller for a channel when they do a data transfer, and
  3178.         return control to the CPU.
  3179.  
  3180.         Peak transfer rates are usually handicapped by the poor DMA
  3181.         controller used on PCs, with one such 8-bit board having
  3182.         problems going faster than 140-150K/sec with one mainboard.
  3183.  
  3184.         CPU utilization is very reasonable, slightly less than what is
  3185.         seen with FIFO polled I/O boards.  These boards are very
  3186.         tolerant of broken devices which don't disconnect/reconnect
  3187.         (typically cheap CSG limitDROM drives).
  3188.  
  3189.         Acceptable for slow CDROM drives, tapes, etc.
  3190.  
  3191.      Busmastering DMA
  3192.         These boards are intelligent.  Drivers for these boards throw a
  3193.         SCSI command, the destination target and lun, and where the data
  3194.         should end up in a structure, and tell the board "Hey, I have a
  3195.         command for you."  The driver returns control to various running
  3196.         programs, and eventually the SCSI board gets back and says that
  3197.         it's done.
  3198.  
  3199.         Since the intelligence is in the host adapter firmware and not
  3200.         the driver, drivers for these boards typically support more
  3201.         features - synchronous transfers, tagged queuing, etc.
  3202.  
  3203.         With the clustered read/write patches, peak transfer rates
  3204.         through the file system approach 100% of head rate writing, 75%
  3205.         reading.
  3206.  
  3207.         CPU utilization is minimal, irregardless of I/O load, with a
  3208.         measured 5% CPU usage while accessing a double speed CDROM on an
  3209.         Adaptec 1540 and 20% while sustaining a 1.2M/sec transfer rate
  3210.         on a SCSI disk.
  3211.  
  3212.         Recommended in all cases where money is not extremely tight, the
  3213.         main board is not broken (some broken main boards do not work
  3214.         with bus masters), and applications where time to data is more
  3215.         important than throughput are not being run (bus master overhead
  3216.         may hit 3-4ms per command).
  3217.  
  3218.   10.2.  Scatter/gather
  3219.  
  3220.   The second most important driver/hardware feature with respect to
  3221.   performance is support for scatter/gather I/O.  The overhead of
  3222.   executing a SCSI command is significant - on the order of
  3223.   milliseconds. Intelligent bus masters like the Adaptec 1540 may take
  3224.   3-4ms to process a SCSI command before the target even sees it.  On
  3225.   unbuffered devices, this overhead is always enough to slip a
  3226.   revolution, resulting in a transfer rate of about 60K/sec (assuming a
  3227.   3600RPM drive) per block transfered at a time.  So, to maximize
  3228.   performance, it is necessary to minimize the number of SCSI commands
  3229.   needed to transfer a given amount of data by transferring more data
  3230.   per command.  Due to the design of the Linux buffer cache, contiguous
  3231.   disk blocks are not contiguous in memory. With the clustered
  3232.   read/write patches, 4K worth of buffers are contiguous.  So, the
  3233.   maximum amount of data which can be transfered per SCSI command is
  3234.   going to be 1K * # of scatter/gather regions without the clustered
  3235.   read/write patches, 4K * # of regions with.  Experimentally, we've
  3236.   determined that 64K is a reasonable amount to transfer with a single
  3237.   SCSI command - meaning 64 scatter/gather buffers with clustered
  3238.   read/write patches, 16 without.  With the change from 16K to 64K
  3239.   transfers, we saw an improvement from 50% of headrate, through the
  3240.   filesystem, reading and writing, to 75% and 100% respectively using an
  3241.   Adaptec 1540 series board.
  3242.  
  3243.   10.3.  Mailbox vs. non-mailbox
  3244.  
  3245.   A number of intelligent host adapters, such as the Ultrastor, WD7000,
  3246.   Adaptec 1540, 1740, and BusLogic boards have used a mailbox-metaphor
  3247.   interface, where SCSI commands are executed by putting a SCSI command
  3248.   structure in a fixed memory location (mailbox), signaling the board
  3249.   (ie, raising the outgoing mail flag), and waiting for a return
  3250.   (incoming mail).  With this high level programming interface, users
  3251.   can often upgrade to a newer board revision to take advantage of new
  3252.   features, such as FAST + WIDE SCSI, without software changes.  Drivers
  3253.   tend to be simpler to implement, may implement a larger feature set,
  3254.   and may be more stable.
  3255.  
  3256.   Other intelligent host adapters, such as the NCR53c7/8xx family, and
  3257.   Adaptec AIC-7770/7870 chips (including the 274x, 284x, and 2940
  3258.   boards) use a lower level programming interface.  This may prove
  3259.   faster since processing can be shifted between the board's processor
  3260.   and faster host CPU, allow better flexibility in implementing certain
  3261.   features (ie, target mode for arbitrary devices), and these boards can
  3262.   be built for less money (In some cases, this is passed on to the
  3263.   consumer (ie, most NCR boards)).  On the down side, drivers tend to be
  3264.   more complex (read : there is more potential for bugs), and must be
  3265.   modified to take advantage of the features present on newer chips.
  3266.  
  3267.   10.4.  Bus types
  3268.  
  3269.   Bus type is the next thing to consider, with choices including ISA,
  3270.   EISA, VESA, and PCI.  Marketing types often spout of absurd bandwidth
  3271.   numbers based on burst transfer rates and fiction, which isn't very
  3272.   useful.  Instead, I've chosen to state "real-world" numbers based on
  3273.   measured performance with various peripherals.
  3274.  
  3275.      Bus
  3276.         Bandwidth, description,
  3277.  
  3278.      ISA
  3279.         Bandwidth is slightly better than 5M/sec for  busmastering
  3280.         devices.  With an ISA bus, arbitration for busmasters is
  3281.         performed by the venerable 8237 third party DMA controller,
  3282.         resulting in relatively high bus acquisition times.  Interrupt
  3283.         drivers are tri-state and edge triggered, meaning interrupts
  3284.         cannot be shared. Generally, ISA is unbuffered, meaning the
  3285.         host/memory bus is tied up whenever a transfer is occuring. No
  3286.         mechanism is provided to prevent bus-hogging.
  3287.  
  3288.      VESA
  3289.         Bandwidth is about 30M/sec.  Some VESA systems run the bus out
  3290.         of spec, rendering them incompatible with some boards, so this
  3291.         should be taken into consideration before purchasing hardware
  3292.         without a return guarantee.  Generally, VESA is unbuffered,
  3293.         meaning meaning the host/memory bus is tied up whenever a
  3294.         transfer is occuring.
  3295.  
  3296.      EISA
  3297.         Bandwidth is about 30M/sec, with busmastering operations
  3298.         generally being faster than VESA.  Some EISA systems buffer the
  3299.         bus, allowing burst transfers to the faster host/memory bus and
  3300.         minimizing impact on CPU performance.  EISA interrupt drivers
  3301.         may be either tri-state edge-triggered or open collector level-
  3302.         active, allowing interrupt sharing with drivers that support it.
  3303.         Since EISA allocates a separate address space for each board, it
  3304.         is usually less prone to resource conflicts than ISA or VESA.
  3305.  
  3306.      PCI
  3307.         Bandwidth is about 60M/sec.  Most PCI systems implement write
  3308.         posting buffers on the host bridge, allowing speed mismatches on
  3309.         either side to have a minimum impact on bus/CPU performance.
  3310.         PCI interrupt drivers are open collector level-active, allowing
  3311.         interrupt sharing with drivers that support it. Mechanisms are
  3312.         provided to prevent bus hogging, and for both master and slave
  3313.         to suspend a bus-mastering operation.
  3314.  
  3315.         Since PCI provides a plug-n-play mechanism with writeable
  3316.         configuration registers on every board, in a separate address
  3317.         space, a properly implemented PCI system is plug-and play.
  3318.  
  3319.         PCI is extremely strict as to trace length, loading, mechanical
  3320.         specifications, etc. and ultimately should be more reliable than
  3321.         VESA or ISA.
  3322.  
  3323.         In summary, PCI is the best PC bus, although it does have its
  3324.         dark side.  PCI is still in its infancy, and although most
  3325.         manufacturers have ironed out the problems, there is still stock
  3326.         of older, buggy PCI hardware and broken main BIOSes.  For this
  3327.         reason, I _strongly_ recommend a return guarantee on the
  3328.         hardware.  While the latest PCI mainboards are truly plug-and-
  3329.         play, older PCI boards may require the user to set options with
  3330.         both jumpers and in software (ie, interrupt assignments).
  3331.         Although many users have resolved their PCI problems, it has
  3332.         taken time and for this reason I cannot recommend a PCI purchase
  3333.         if having the system operational is extremely time critical.
  3334.  
  3335.   For many slower SCSI devices, such as disks with head rates around
  3336.   2M/sec or less, CDROMs, and tapes, there will be little difference in
  3337.   throughputs with the different PC bus interfaces.  For faster
  3338.   contemporary SCSI drives (Typical high end multi-gigabyte drives have
  3339.   a head rate of 4-5M/sec, and at least one company is currently ALPHA
  3340.   testing a parallel head unit with a 14M/sec head rate), throughput
  3341.   will often be significantly better with controllers on faster busses,
  3342.   with one user noting a 2.5 fold performance improvement when going
  3343.   from an Adaptec 1542 ISA board to a NCR53c810 PCI board.
  3344.  
  3345.   With the exception of situations where PCI write-posting or a similar
  3346.   write-buffering mechanism is being used, when one of the busses in
  3347.   your system is busy, all of the busses will be unaccessible.  So,
  3348.   although bus saturation may not be interfering with SCSI performance,
  3349.   it may have a negative effect on interactive performance.  Ie, if you
  3350.   have a 4M/sec SCSI disk under ISA, you'll have lost 80% of your
  3351.   bandwidth, and in an ISA/VESA system would only be able to bitblt at
  3352.   6M/sec.  In most cases, a similar impact on processing jobs in the
  3353.   background would also be felt.
  3354.  
  3355.   Note that having over 16M of memory does not preclude using an ISA
  3356.   busmastering SCSI board.  Unlike various broken operating systems,
  3357.   Linux will double buffer when using a DMA with an ISA controller and a
  3358.   transfer is ultimately destined for an area above 16M.  Performance on
  3359.   these transfers only suffers by about 1.5%, ie not noticeably.
  3360.  
  3361.   Finally, the price difference between bus masters offered with the
  3362.   different bus interfaces is often minimal.
  3363.  
  3364.   With all that in mind, based on your priorities you will have certain
  3365.   bus preferences
  3366.  
  3367.        Stability, time critical installations,         EISA ISA VESA PCI
  3368.                    and poor return policies
  3369.        Performance, and typical hobbiest               PCI EISA VESA ISA
  3370.                    installations
  3371.  
  3372.   As I pointed out earlier, bus mastering versus other transfer modes is
  3373.   going to have a bigger impact on total system performance, and should
  3374.   be considered more important than bus type when purchasing a SCSI
  3375.   controller.
  3376.  
  3377.   10.5.  Multiple devices
  3378.  
  3379.   If will you have multiple devices on your SCSI bus, you may want to
  3380.   see whether the host adapter/driver that you are considering supports
  3381.   more than one outstanding command at one time.  This is almost
  3382.   essential if you'll be running a tape drive, and very desirable if you
  3383.   are mixing devices of different speeds, like a CD ROM and a disk
  3384.   drive.  If the linux driver only supports one outstanding command, you
  3385.   may be locked out of your disk drive while a tape in the tape drive is
  3386.   rewinding or seeking to end of media (perhaps for half an hour).  With
  3387.   two disk drives, the problem will not be as noticeable, although
  3388.   throughput would approach the average of the two transfer rates rather
  3389.   than the sum of the two transfer rates.
  3390.  
  3391.   10.6.  SCSI-I, SCSI-II, SCSI-III FAST and WIDE options, etc.
  3392.  
  3393.   Over the years, SCSI has evolved, with new revisions of the standard
  3394.   introducing higher transfer rates, methods to increase throughput,
  3395.   standardized commands for new devices, and new commands for previously
  3396.   supported devices.
  3397.  
  3398.   In and of themselves, the revision levels don't really mean anything.
  3399.   Excepting minor things like SCSI-II not allowing the single initiator
  3400.   option of SCSI-I, SCSI is backwards compatible, with new features
  3401.   being introduced as options and not mandatory.  So, the decision to
  3402.   call a SCSI adapter SCSI, SCSI-II, or SCSI-III is almost entirely a
  3403.   marketing one.
  3404.  
  3405.   10.7.  Driver feature comparison
  3406.  
  3407.   Driver feature comparison (supported chips are listed in parenthesis)
  3408.  
  3409.   Driver                                  Simultaneous    SG              > 1
  3410.                   Transfer mode           Commands        limit           Boards
  3411.                                           total/LUN
  3412.   AM53C974        Busmastering DMA        12s/1s          255s            Y
  3413.   aha152x         FIFO(8k) Polled         7s/1s           255s            N
  3414.       (AIC6260,
  3415.       AIC6360)
  3416.   aha1542         Busmastering DMA        8s/1s           16              Y
  3417.   aha1740         Busmastering DMA        32s             16              N
  3418.   aha274x         Busmastering DMA        4s/1s           255s            Y
  3419.   BusLogic        Busmastering DMA        192/31          128s, 8192h     Y
  3420.   (values are for BT-948/958/958D, older boards support fewer commands)
  3421.   eata_dma        Busmastering DMA        64s-8192h/2-64  512s, 8192h     Y
  3422.   fdomain         FIFO(8k) Polled         1s              64s             N
  3423.       (TMC1800,   except TMC18c30
  3424.       TMC18c30,   with 2k FIFO
  3425.       TMC18c50,
  3426.       TMC36c70)
  3427.  
  3428.   in2000*         FIFO(2k) Polled         1s              255s            N
  3429.   g_NCR5380       Pure Polled             16s/2s          255s            Y
  3430.       (NCR5380,
  3431.       NCR53c80,
  3432.       NCR5381,
  3433.       NCR53c400)
  3434.   gsi8*           Slave DMA               16s/2s          255s
  3435.       (NCR5380)
  3436.   PAS16           Pure Polled             16s/2s          255s            Y
  3437.       (NCR5380)   or Interlocked Polled
  3438.                   (fails on some systems!)
  3439.   seagate         Interlocked Polled      1s/1s           255s            N
  3440.   wd7000          Busmastering DMA        16s/1s          16              Y
  3441.   t128            Interlocked Polled      16s             255s            Y
  3442.       (NCR5380)
  3443.   qlogic          Interlocked Polled      1s/1s           255s            N
  3444.   ultrastor       Busmastering DMA        16s/2s          32              Y
  3445.   53c7,8xx        Busmastering DMA
  3446.       (NCR53c810,
  3447.        NCR53c815,
  3448.        NCR53c820,
  3449.        NCR53c825)
  3450.       rel5                                1s/1s           127s            N
  3451.       rel10                               8s/1s           127s            Y
  3452.  
  3453.   Notes :
  3454.  
  3455.   1. drivers flagged with an '*' are not included with the distribution
  3456.      kernel, and binary boot images may be unavailable.
  3457.  
  3458.   2. numbers suffixed with an 's' are arbitrary limits set in software
  3459.      which may be changed with a compile time define.
  3460.  
  3461.   3. hardware limits are indicated by an 'h' suffix, and may differ from
  3462.      the software limits currently imposed by the Linux drivers.
  3463.  
  3464.   4. unsuffixed numbers may indicate either hard or soft limits.
  3465.  
  3466.   5. rel5 of the NCR53c810 driver is included in the stock 1.2.x and
  3467.      1.3.x kernels; rel10 is available via anonymous FTP.
  3468.  
  3469.   6. With the exception of the AM53C974, the busmastering DMA boards are
  3470.      intelligent; with the NCR executing microcode from main memory, the
  3471.      AIC7770 executing microcode from on-chip RAM, and the rest using a
  3472.      mailbox-style interface.
  3473.  
  3474.   10.8.  Board comparison
  3475.  
  3476.   Board                   Driver          Bus     Price   Notes
  3477.   Adaptec AIC-6260        aha152x         ISA             chip, not board
  3478.   Adaptec AIC-6360        aha152x         VLB             chip, not board
  3479.       (Used in most
  3480.       VESA/ISA multi-IO
  3481.       boards with SCSI,
  3482.       Zenon mainboards)
  3483.   Adaptec 1520            aha152x         ISA
  3484.   Adaptec 1522            aha152x         ISA     $80     1520 w/FDC
  3485.   Adaptec 1510            aha152x         ISA             1520 w/out boot ROM,
  3486.                                                           won't autoprobe.
  3487.   Adaptec 1540C           aha1542         ISA
  3488.   Adaptec 1542C           aha1542         ISA             1540C w/FDC
  3489.   Adaptec 1540CF          aha1542         ISA             FAST SCSI-II
  3490.   Adaptec 1542CF          aha1542         ISA     $200    1540CF w/FDC
  3491.   Adaptec 1640            aha1542         MCA
  3492.  
  3493.   Adaptec 1740            aha1740         EISA            discontinued
  3494.   Adaptec 1742            aha1740         EISA            discontinued, 1740
  3495.                                                           w/FDC
  3496.   Adaptec 2740            aha274x         EISA
  3497.   Adaptec 2742            aha274x         EISA            w/FDC
  3498.   Adaptec 2840            aha274x         VLB
  3499.   Adaptec 2842            aha274x         VLB             w/FDC
  3500.   Adaptec 2940            aha274x         PCI
  3501.   Always IN2000           in2000          ISA
  3502.   BusLogic BT-948         BusLogic        PCI     $180    Ultra SCSI
  3503.   BusLogic BT-958         BusLogic        PCI     $230    Wide Ultra SCSI
  3504.  
  3505.   (see the section ``BusLogic MultiMaster Host Adapters'' for additional
  3506.   BusLogic board descriptions)
  3507.  
  3508.   DPT     PM2011          eata_dma        ISA             FAST SCSI-II
  3509.           PM2012A         eata_dma        EISA            FAST SCSI-II
  3510.           PM2012B         eata_dma        EISA            FAST SCSI-II
  3511.           PM2021          eata_dma        ISA             FAST SCSI-II
  3512.           PM2022          eata_dma        EISA            FAST SCSI-II
  3513.           PM2024          eata_dma        PCI             FAST SCSI-II
  3514.           PM2122          eata_dma        EISA            FAST SCSI-II
  3515.           PM2322          eata_dma        EISA            FAST SCSI-II
  3516.           PM2124          eata_dma        PCI             FAST SCSI-II
  3517.           PM2124          eata_dma        PCI             FAST SCSI-II
  3518.           PM2124          eata_dma        PCI             FAST SCSI-II
  3519.           PM2124          eata_dma        PCI             FAST SCSI-II
  3520.           PM2124          eata_dma        PCI             FAST SCSI-II
  3521.           PM2124          eata_dma        PCI             FAST SCSI-II
  3522.           PM2041W         eata_dma        ISA             Wide Single-ended
  3523.                                                           SCSI-II
  3524.           PM2041UW        eata_dma        ISA             Ultra Wide Single-ended
  3525.           PM2042W         eata_dma        EISA            Wide Single-ended
  3526.           PM2042UW        eata_dma        EISA            Ultra Wide Single-ended
  3527.           PM2044W         eata_dma        PCI             Wide Single-ended
  3528.           PM2044UW        eata_dma        PCI             Ultra Wide Single-ended
  3529.           PM2142W         eata_dma        EISA            Wide Single-ended
  3530.           PM2142UW        eata_dma        EISA            Ultra Wide Single-ended
  3531.           PM2144W         eata_dma        PCI             Wide Single-ended
  3532.           PM2144UW        eata_dma        PCI             Ultra Wide Single-ended
  3533.           PM3021          eata_dma        ISA             multichannel
  3534.                                                           raid/simm sockets
  3535.           PM3122          eata_dma        EISA            multichannel/raid
  3536.           PM3222          eata_dma        EISA            multichannel
  3537.                                                           raid/simm sockets
  3538.           PM3224          eata_dma        PCI             multichannel
  3539.                                                           raid/simm sockets
  3540.           PM3334          eata_dma        PCI             Wide Ultra SCSI
  3541.                                                           multichannel
  3542.                                                           raid/simm sockets
  3543.  
  3544.   DTC 3290                aha1542         EISA            Although it should work,
  3545.                                                           due to documentation
  3546.                                                           release polcies, DTC
  3547.                                                           hardware is unsupported
  3548.   DTC 3130                53c7,8xx        PCI             '810
  3549.   DTC 3130B               53c7,8xx        PCI             '815
  3550.   DTC 3292                aha1542         EISA            3290 w/FDC
  3551.   DTC 3292                aha1542         EISA            3290 w/FDC
  3552.   Future Domain 1680      fdomain         ISA             FDC
  3553.   Future Domain 3260      fdomain         PCI
  3554.   NCR53c810 (boards sold 53c7,8xx         PCI     $60     chip, not board. Boards
  3555.       by FIC, Chaintech,                          (board) don't include
  3556.       Nextor, Gigabyte, etc.                              BIOS, although most
  3557.       Mainboards with chip by                             non-NCR equipped main
  3558.       AMI, ASUS, J-Bond,                                  boards have the SDMS
  3559.       etc. Common in DEC                                  BIOS
  3560.       PCI systems)
  3561.   NCR53c815 (            53c7,8xx         PCI     $100    NCR53c810 plus
  3562.       Intel PCISCSIKIT,                                   bios
  3563.       NCR8150S, etc)
  3564.   NCR53c825              53c7,8xx         PCI     $120    Wide variant of
  3565.                                                           NCR53c815.  Note that
  3566.                                                           the current Linux
  3567.                                                           driver does not
  3568.                                                           negotiate for wide
  3569.                                                           transfers.
  3570.   Pro Audio Spectrum 16   pas16           ISA             Sound board w/SCSI
  3571.   Seagate ST01            seagate         ISA     $20     BIOS only works with
  3572.                                                           some drives
  3573.   Seagate ST02            seagate         ISA     $40     ST01 w/FDC
  3574.   Sound Blaster 16 SCSI   aha152x         ISA             Sound board w/SCSI
  3575.   Western Digital 7000    wd7000          ISA             w/FDC
  3576.   Trantor T128            t128            ISA
  3577.   Trantor T128F           t128            ISA             T128 w/FDC and
  3578.                                                           support for high IRQs
  3579.   Trantor T130B           g_NCR5380       ISA
  3580.   Ultrastor 14F           ultrastor       ISA             w/FDC
  3581.   Ultrastor 24F           ultrastor       EISA            w/FDC
  3582.   Ultrastor 34F           ultrastor       VLB
  3583.  
  3584.   Notes :
  3585.  
  3586.   1. Trantor was recently purchased by Adaptec, and some products are
  3587.      being sold under the Adaptec name.
  3588.  
  3589.   2. Ultrastor recently filed for Chapter 11 Bankruptcy, so technical
  3590.      support is non-existent at this time.
  3591.  
  3592.   3. The price for the busmastering NCR53c810 boards is not a typo,
  3593.      includes the standard ASPI/CAM driver package for DOS, OS/2 and
  3594.      Windows (32 bit access), and other drivers are available for free
  3595.      download.
  3596.  
  3597.      Some people have had luck with the following companies :
  3598.  
  3599.        SW (swt@netcom.com) (214) 907-0871 fax (214) 907-9339
  3600.  
  3601.   As of 23 Dec 1995, their price was $53 on '810 boards.
  3602.  
  3603.   4. Adaptec's recent SCSI chips show an unusual sensitivity to cabling
  3604.      and termination problems. For this reason, I cannot recommend the
  3605.      Adaptec 154x C and CF revisions or the 2xxx series.
  3606.  
  3607.      Note that the reliability problems do not apply to the older 154x B
  3608.      revision boards, 174x A revision boards, or to my knowledge
  3609.      AIC-6360/AIC-6260 based boards (1505, 1510, 1520, etc).
  3610.  
  3611.      Also, the quality of their technical support has slipped markedly,
  3612.      with long delays becoming more common, and their employees being
  3613.      ignorant (suggesting there were non-disclosure policies affecting
  3614.      certain literature when there were none), and hostile (ie, refusing
  3615.      to pass questions on to some one else when they couldn't answer
  3616.      them).
  3617.  
  3618.      If users desire handholding, or wish to make a political statement,
  3619.      they should take this point into consideration.  Otherwise, the
  3620.      Adaptec 152x/1510/1505 are nicer than the other ISA boards in the
  3621.      same price range, and there are some excellent deals on used and
  3622.      surplus 154x B revision boards and 1742 boards which IMHO outweigh
  3623.      the support problems.
  3624.  
  3625.   5. All DPT boards can be upgraded with cache and raid modules, most of
  3626.      the boards are also available in Wide and/or Differential versions.
  3627.  
  3628.   6. The various NCR boards are not entirely equivalent.  Ie, while the
  3629.      ASUS SC200 uses active termination, many other NCR53c810 boards use
  3630.      passive termination.  Most '825 boards use active termination, but
  3631.      some use a ROM for BIOS and others have a FLASH ROM.  Most '825
  3632.      boards have a WIDE external connector, WIDE internal connector, and
  3633.      narrow internal connector, although a few (ie, CSC's less expensive
  3634.      model) lack the narrow internal connector.
  3635.  
  3636.   10.9.  Summary
  3637.  
  3638.   Most ISA, EISA, VESA, and PCI users will probably be served best by a
  3639.   BusLogic MultiMaster board, due to its performance, features such as
  3640.   active termination, and Adaptec 1540 compatibility.  There are a
  3641.   number of models available with EISA, ISA, PCI, and VESA local bus
  3642.   interfaces, in single ended and differential, and 8/16 bit SCSI bus
  3643.   widths.  The most recent Ultra SCSI PCI models, the BT-948/958/958D,
  3644.   also include Flash ROM for easy firmware updates, as well as automatic
  3645.   "smart" termination.
  3646.  
  3647.   People with the need for the highest possible IO performance at their
  3648.   fingertips should consider the boards from DPT, which are the only
  3649.   ones that support RAID, caching and more than one SCSI channel.
  3650.  
  3651.   People with PCI systems should consider NCR53c8xx based boards.  These
  3652.   are bus mastering SCSI controllers, '810s are available quantity one
  3653.   for $53 (ie, cheaper than the Adaptec 1520).  C't magazine benchmarked
  3654.   the boards as faster than both the Adaptec 2940 and BusLogic BT-946C
  3655.   (under DOS), and they get reasonable performance under Linux (up to
  3656.   6M/sec through the file system ). The disadvantages of these boards
  3657.   versus the BusLogics are that they aren't Adaptec 1540 compatible, may
  3658.   or may not come with active termination, you'll need the latest driver
  3659.   revision (standard in 1.3.5x, also available via anonymous FTP for
  3660.   1.2.x) to make full use of the hardware, and are more likely to have
  3661.   problems than with a mailbox interface board like a BusLogic or DPT.
  3662.  
  3663.   Where everything working right on the first try is imperative, a
  3664.   BusLogic MultiMaster or DPT board is probably optimal due to the
  3665.   complexity and potential for problems in non-mailbox interface boards
  3666.   like the NCR53c8xx and Adaptec AIC7xxx .
  3667.  
  3668.   People wanting non-PCI SCSI on a limited budget will probably be
  3669.   happiest finding a surplus or used Adaptec 154x B revision or 174x A
  3670.   revision, or an Adaptec 1520 clone of some sort (about $80) if they
  3671.   want new hardware.  These boards offer reasonable throughput and
  3672.   interactive performance at a modest price.
  3673.  
  3674.   11.  Assignment of minor numbers
  3675.  
  3676.   Due to constraints imposed by Linux's use of a sixteen bit dev_t with
  3677.   only eight bits allocated to the minor number, SCSI disk, tape, CDROM,
  3678.   and generic minor numbers are assigned dynamically.  according to the
  3679.   following procedure :
  3680.  
  3681.   For all SCSI host adapters, from scsi0 through scsiN
  3682.       For all SCSI IDs on this bus, from 0 through 7, except for
  3683.         this host adapter's ID
  3684.           For all logical units, from 0 through max_scsi_luns
  3685.             - Probe the bus, target, and LUN combination by
  3686.               issuing a TEST UNIT READY command.  If we don't
  3687.               think a unit was here, don't probe any more LUNs
  3688.               on this bus + SCSI ID.
  3689.             - Send an INQUIRY command to determine what we've
  3690.               found; including the device type, vendor, model,
  3691.               firmware revision, etc.
  3692.             - Pass the results of this to a special recognition
  3693.               function for each high level driver present (i.e. disk,
  3694.               tape, etc).  Attach this device to the next available
  3695.               unit for any drivers that are willing to drive this.
  3696.               The generic device will attach to all devices.
  3697.             - If it was SCSI-I, or in a list of devices known
  3698.               not to handle multiple LUNs, don't probe any more
  3699.               LUNs on this bus + SCSI ID.
  3700.             - If it is a device known to have multiple LUNs, then
  3701.               a scan of the full LUN spectrum is forced, overriding
  3702.               max_scsi_luns.
  3703.  
  3704.   There are frequently problems with this approach because if you have a
  3705.   system where some devices are only present some of the time, then the
  3706.   minor numbers for a given device will depend upon which devices were
  3707.   present at boot time.  This can present problem, because rc scripts or
  3708.   the file /etc/fstab might contain instructions for mounting specific
  3709.   partitions which fails when the disk appears with a different minor
  3710.   number.
  3711.  
  3712.   This problem has not yet been fully solved.  There is a program which
  3713.   can be found on tsx-11 that creates a /dev/scsi hierarchy based upon
  3714.   host number, id and lun.  This is a bit clumsy, but it would help to
  3715.   alleviate some of the problems.
  3716.  
  3717.   A better solution will probably come out of the /proc/scsi pseudo
  3718.   directory.  This is currently a work in progress, so at present we
  3719.   cannot say exactly the form of the solution, but at the time of this
  3720.   writing this appears to be a promising approach for resolving some of
  3721.   these issues.
  3722.  
  3723.