add directory ftp-archives
This commit is contained in:
948
ftp-archives/tsx-11.mit.edu/1993-12-07/docs/HOWTO/SCSI-HOWTO
Normal file
948
ftp-archives/tsx-11.mit.edu/1993-12-07/docs/HOWTO/SCSI-HOWTO
Normal file
@@ -0,0 +1,948 @@
|
||||
Newsgroups: comp.os.linux.announce,comp.os.linux.admin
|
||||
From: Drew Eckhardt <drew@kinglear.cs.Colorado.EDU>
|
||||
Subject: Linux SCSI HOWTO
|
||||
Keywords: Linux SCSI drive tape CD-ROM HOWTO
|
||||
Organization: University of Colorado at Boulder
|
||||
Approved: linux-announce@tc.cornell.edu (Matt Welsh)
|
||||
|
||||
Linux SCSI HOWTO by Drew Eckhardt (drew@cs.colorado.edu)
|
||||
last updated September 14, 1993
|
||||
|
||||
This HOWTO covers the Linux SCSI subsystem, as implemented in Linux
|
||||
kernel revision .99.13 and alpha code available as of September 19, 1993.
|
||||
|
||||
For additional information, you may wish to join the SCSI channel of the
|
||||
Linux activists list - mail to linux-activists-request@joker.cs.hut.fi
|
||||
with the line
|
||||
|
||||
X-MN-Admin: join SCSI
|
||||
|
||||
in the header.
|
||||
|
||||
I'm aware that this document isn't the most user-friendly, if
|
||||
you have constructive comments on how to rectify the situation
|
||||
you're free to mail me about it.
|
||||
|
||||
Table of contents
|
||||
Section 1 Common Problems
|
||||
|
||||
Section 2 Reporting Bugs
|
||||
|
||||
Section 3 Hosts
|
||||
Subsection A Supported and Unsupported Hardware
|
||||
Subsection B Common Problems
|
||||
Subsection C Adaptec 151x, 152x (ALFALFA diffs)
|
||||
Subsection D Adaptec 154x (Standard)
|
||||
Subsection E Adaptec 174x (Standard))
|
||||
Subsection F Allways IN2000 (ALPHA)
|
||||
Subsection G Future Domain 16x0 with TMC-1800 or
|
||||
TMC-18C50 chip (Standard)
|
||||
Subsection H Generic NCR5380 (ALFALFA diffs)
|
||||
Subsection I Seagate ST0x/Future Domain TMC-8xx/TMC-9xx
|
||||
(Standard)
|
||||
Subsection J Trantor T128/T128F/T228 (ALFALFA diffs)
|
||||
Subsection K Ultrastor 14f, 34f (Standard)
|
||||
Subsection L Ultrastor 14f, 24f, 34f (ALFALFA diffs)
|
||||
Subsection M Western Digital 7000 (Standard)
|
||||
|
||||
Section 4 Disks
|
||||
Subsection A Supported and Unsupported Hardware
|
||||
Subsection B Common Problems
|
||||
Subsection C Device Files
|
||||
Subsection D Disk Geometry
|
||||
Subsection E Partitioning
|
||||
|
||||
Section 5 CD ROMs
|
||||
Subsection A Supported and Unsupported Hardware
|
||||
Subsection B Common Problems
|
||||
Subsection C Device Files
|
||||
|
||||
Section 6 Tapes
|
||||
Subsection A Supported and Unsupported Hardware
|
||||
Subsection B Common Problems
|
||||
Subsection C Device Files
|
||||
|
||||
Section 7 Generic
|
||||
Subsection A Supported and Unsupported Hardware
|
||||
Subsection B Common Problems
|
||||
Subsection C Device Files
|
||||
|
||||
Section 1 : Common Problems
|
||||
1. A SCSI device shows up at all possible IDs
|
||||
|
||||
If this is the case, you've strapped the device at the same
|
||||
address as the controller (typically, 7, although some boards
|
||||
use other addresses). Please change the jumper settings.
|
||||
|
||||
2. You get sense errors when you know the devices are error free
|
||||
|
||||
Sometimes this is caused by bad cables or impropper termination.
|
||||
|
||||
Your SCSI bus must be terminated at both ends (using external
|
||||
terminators, or onboard terminators on the host adapter or
|
||||
devices) and not in the middle.
|
||||
|
||||
3. A kernel configured with networking does not work.
|
||||
|
||||
The auto-probe routines for many of the network drivers
|
||||
are not passive, and will interfere with operation with some
|
||||
of the SCSI drivers.
|
||||
|
||||
Section 2 : Reporting Bugs
|
||||
|
||||
The Linux SCSI developers don't necessarily maintain old revisions
|
||||
of the code due to space constraints. So, if you are not running the
|
||||
latest publically released Linux kernel (note that many of the Linux
|
||||
distributions, such as MCC, SLS, Yggdrasil, etc. often lag one or more
|
||||
revisions behind this) chances are we will be unable to solve your
|
||||
problem. So, before reporting a bug, please check to see if it exists
|
||||
with the latest publically available kernel.
|
||||
|
||||
If after upgrading, and reading this document thoroughly, you still
|
||||
believe that you have a bug, please mail a bug report to the SCSI channel
|
||||
of the mailing list where it will be seen by many of the people who've
|
||||
contributed to the Linux SCSI drivers.
|
||||
|
||||
In your bug report, please provide as much information as possible
|
||||
regarding your hardware configuration, and all of the messages that
|
||||
Linux prints when it boots. Your chances of getting the bug fixed increase
|
||||
exponentially with the amount of information provided.
|
||||
|
||||
The bottom line is that if we can't reproduce your bug, and you can't
|
||||
point at us what's broken, it won't get fixed.
|
||||
|
||||
Section 3 : Hosts
|
||||
|
||||
Subsection A : Supported and Unsupported Hardware
|
||||
Drivers in the distribution kernel :
|
||||
|
||||
Adaptec 154x (including clones from Bustek and DTC - DTC models that
|
||||
work are the 3290 and 3292), Adaptec 174x, Future Domain 850, 885, 950,
|
||||
and other boards in that series (but not the 880 board unless you make
|
||||
the appropriate patch), Future Domain 16x0 with TMC-1800 or TMC-18C50 chip,
|
||||
Seagate ST0x, Ultrastor 14F and 34F, and Western Digital 7000
|
||||
|
||||
Drivers included in ALFALFA diffs :
|
||||
Adaptec 1520, Ultrastor 14F, 24F, 34F, Trantor T128/T128F/T228
|
||||
|
||||
ALFALFA diffs are available from tsx-11.mit.edu:/pub/linux/ALPHA/scsi
|
||||
0.99.13.scsipatch.txt
|
||||
A bootable kernel incorporating the ALFALFA disks is
|
||||
0.99.13.scsipatch.zImage
|
||||
|
||||
Alpha drivers :
|
||||
Allways IN2000
|
||||
|
||||
Drivers that are being developed, but aren't publically available
|
||||
PAS-16 (based on my NCR5380 driver, works if booted with a CD in
|
||||
the drive but fails if none is there or there is a disk change)
|
||||
Richoch NCR5380 (based on my NCR5380 driver, works but gives low
|
||||
(ie 50K/sec) performance since DMA transfers are not used
|
||||
yet)
|
||||
NCR539x (The main motivation for this is that the R4000 based
|
||||
MIPS boards will be using a NCR53cf9x of some flavor. However,
|
||||
since the hardware isn't here yet, the driver is in no hurry)_
|
||||
|
||||
SCSI Hosts that would work with a little work :
|
||||
Trantor T130 - using the NCR5380 driver (different chip, 5380
|
||||
ASIC cell used)
|
||||
|
||||
SCSI Hosts that will not work :
|
||||
|
||||
Adaptec 2742, 2742T, non Adaptec compatable DTC boards (including the 3270
|
||||
and 3280), Mylex, all parallel->SCSI adapters, Rancho SCSI boards,
|
||||
Grass Roots SCSI boards.
|
||||
|
||||
If you want to run Linux on an unsupported piece of hardware, your
|
||||
options are to either write a driver yourself (Eric Youngdale and I are
|
||||
usually willing to answer technical questions concerning the Linux
|
||||
SCSI drivers) or to commision a driver.
|
||||
|
||||
Subsection B : Common Problems
|
||||
1. SCSI timeouts
|
||||
|
||||
Make sure interrupts are enabled correctly, and there are no
|
||||
IRQ, DMA, or address conflicts with other boards.
|
||||
|
||||
2. Boards using the BIOS to autoprobe are not detected (see the
|
||||
Autoprobe entry for your host adapter)
|
||||
|
||||
This fails if the BIOS is disabled (see the Autoprobe Override
|
||||
entry for your board to see if you can override it) or your
|
||||
boards "signature" doesn't match one of the known ones.
|
||||
|
||||
If the BIOS is installed, please use DOS and DEBUG to
|
||||
find a signature that will detect your board -
|
||||
|
||||
Ie, if your board lives at 0xc8000, under DOS do
|
||||
|
||||
debug
|
||||
d c800:0
|
||||
q
|
||||
|
||||
and send a message to the SCSI channel of the mailing list with
|
||||
the ASCII message, with the length and offset from the base
|
||||
address (ie, 0xc8000). Note that the EXACT text is required.
|
||||
|
||||
3. Boards using memory mapped IO do not work.
|
||||
|
||||
This is often caused when the memory mapped I/O ports
|
||||
are incorrectly cached. You should have the board's
|
||||
address space marked as uncachable in the XCMOS settings.
|
||||
|
||||
If this is not possible, you will have to disable cache
|
||||
entirely.
|
||||
|
||||
4. The bootable kernel for an ALPHA driver does not work,
|
||||
resulting in a "kernel panic : cannot mount root device"
|
||||
message, or it does not work with your Linux distribution.
|
||||
|
||||
You'll need to edit the binary image of the kernel (before
|
||||
or after writing it out to disk), and modify a few two byte
|
||||
fields (little endian) to gurantee that it will work on your
|
||||
system.
|
||||
|
||||
1. default swap device at offset 502, this should be set to 0
|
||||
|
||||
2. ram disk size at offset 504, this should be set to the size
|
||||
of the boot floppy in K - ie, 5.25" = 1200, 3.5" = 1440.
|
||||
|
||||
This means the bytes are
|
||||
|
||||
3.5" : 0xA0 0x05
|
||||
5.25" : 0xB0 0x04
|
||||
|
||||
3. root device offset at 508, this should be 0, ie the boot
|
||||
device.
|
||||
|
||||
dd or rawrite the file to a disk. Insert the disk in the
|
||||
first floppy drive, wait until it prompts you to insert
|
||||
the root disk, and insert the root floppy from your
|
||||
distribution.
|
||||
|
||||
5. Installing a device driver not bundled with the distribution kernel
|
||||
You need to start with the version of the kernel used by the
|
||||
driver author. This revision may be alluded to in the documentation
|
||||
included with the driver.
|
||||
|
||||
Various recent kernel revisions can be found at
|
||||
nic.funet.fi:/pub/OS/Linux/PEOPLE/Linus
|
||||
|
||||
as linux-version.tar.gz
|
||||
|
||||
They are also mirrored at tsx-11.mit.edu and various other sites.
|
||||
|
||||
cd to /usr/src.
|
||||
|
||||
Remove your old Linux sources, if you want to keep a backup copy
|
||||
of them
|
||||
|
||||
mv linux linux-old
|
||||
|
||||
or whatever.
|
||||
|
||||
Untar the archive
|
||||
|
||||
gunzip < linux-0.99.12.tar.gz | tar xvfp -
|
||||
|
||||
Apply the patches. The patches will be relative to some directory
|
||||
in the filesystem. By examining the output file lines in the patch
|
||||
file (grep for ^---), you can tell where this is - ie patches with
|
||||
these lines
|
||||
|
||||
--- ./kernel/blk_drv/scsi/Makefile
|
||||
|
||||
--- ./config.in Wed Sep 1 16:19:33 1993
|
||||
|
||||
|
||||
would have the files relative to /usr/src/linux.
|
||||
|
||||
Untar the driver sources at an appropriate place - you
|
||||
can do a
|
||||
|
||||
tar tfv patches.tar
|
||||
|
||||
or whatever to get a listing, and move files as necessary
|
||||
(The SCSI driver files should live in /usr/src/linux/kernel/blk_drv/
|
||||
scsi)
|
||||
|
||||
Either cd to the directory they are relative to and do a
|
||||
|
||||
patch -p0 < patch_file
|
||||
|
||||
or tell patch to "strip off" leading paths components. Ie,
|
||||
if the files started with
|
||||
|
||||
--- linux-new/kernel/blk_drv/scsi/Makefile
|
||||
|
||||
and you wanted to apply them while in /usr/src/linux, you
|
||||
could cd to /usr/src/linux and do a
|
||||
|
||||
patch -p1 < patches
|
||||
|
||||
to strip off the "linux-new" component.
|
||||
|
||||
After you have applied the patches, look for any patch rejects,
|
||||
which will be the name of the rejected file with a # suffix appended.
|
||||
|
||||
Ie
|
||||
|
||||
find /usr/src/linux/ -name "*#" -print
|
||||
|
||||
If any of these exist, look at them. In some cases, the
|
||||
differences will be in RCS identifiers and will be harmless,
|
||||
in other cases, you'll have to manually apply important
|
||||
parts. Documentation on diffs files and patch is beyond the
|
||||
scope of this document.
|
||||
|
||||
Next, cd to /usr/src/linux and do a
|
||||
|
||||
make config
|
||||
|
||||
to choose the options you want
|
||||
|
||||
If you are installing off of floppy disk, you'll also have to
|
||||
edit the Makefile to set the ROOT device to ramdisk.
|
||||
|
||||
do a make depend
|
||||
|
||||
followed by
|
||||
|
||||
make
|
||||
|
||||
You should end up with a file "zImage". Write this out to a floppy
|
||||
disk -
|
||||
|
||||
cat zImage > /dev/fd0
|
||||
|
||||
and use that to boot your system. When it comes up, it should prompt
|
||||
for the root floppy, use a1 from SLS or whatever and you'll be fine.
|
||||
|
||||
Subsection C : Adaptec 151x, 152x (ALFALFA diffs)
|
||||
ALFALFA diffs are available from tsx-11.mit.edu:/pub/linux/ALPHA/scsi
|
||||
0.99.13.scsipatch.txt
|
||||
A bootable kernel incorporating the ALFALFA disks is
|
||||
0.99.13.scsipatch.zImage
|
||||
|
||||
Supported Configurations :
|
||||
Addresses : 0xd8000, 0xdc000, 0xd0000, 0xd4000, 0xc8000, 0xcc000, 0xe0000,
|
||||
0xe4000.
|
||||
Ports : 0x140, 0x340
|
||||
IRQs : 9, 10, 11, 12
|
||||
DMA is not used
|
||||
IO : port mapped
|
||||
|
||||
Autoprobe : works with all supported configurations, requires installed BIOS
|
||||
|
||||
Autoprobe Override :
|
||||
Compile time :
|
||||
Define PORTBASE, IRQ, SCSI_ID, RECONNECT as appropriate, see Defines
|
||||
|
||||
LILO commandline : aha152x=<PORTBASE>,<IRQ>,<SCSI-ID>,<RECONNECT>
|
||||
|
||||
Defines :
|
||||
AUTOCONF : use configuration the controller reports (only 152x)
|
||||
IRQ : override interrupt channel (9,10,11 or 12) (default 11)
|
||||
SCSI_ID : override scsiid of AIC-6260 (0-7) (default 7)
|
||||
RECONNECT : override target dis-/reconnection/multiple
|
||||
outstanding command - set to non-zero to enable, zero to
|
||||
disable.
|
||||
DONT_SNARF : Don't register ports (pl12 and below)
|
||||
SKIP_BIOSTEST : Don't test for BIOS signature (AHA-1510 or disabled BIOS)
|
||||
PORTBASE : Force port base. Don't try to probe
|
||||
|
||||
Subsection D : Adaptec 154x
|
||||
Supported Configurations :
|
||||
Ports : 0x330 and 0x334
|
||||
IRQs : 9, 10, 11, 12, 14, 15
|
||||
DMA channels : 5, 6, 7
|
||||
IO : port mapped, bus master
|
||||
|
||||
Unsupported Configurations:
|
||||
The 'C' revision BIOS options to
|
||||
- Autoprobe
|
||||
- Support > 2 hard disks with the BIOS
|
||||
- Do extended mapping
|
||||
|
||||
Autoprobe : works with all supported configurations, does not
|
||||
require an installed BIOS.
|
||||
|
||||
Autoprobe override : none
|
||||
|
||||
Antiquity Problems, fix by upgrading :
|
||||
|
||||
1. Linux kernel revisions prior to .99.10 don't support the 'C'
|
||||
revision.
|
||||
|
||||
Common problems :
|
||||
|
||||
1. There are unexpected errors with a revision C board.
|
||||
Early examples of the 154xC boards have a high slew rate on
|
||||
one of the SCSI signals, which results in signal reflections
|
||||
when cables with the wrong impedance are used.
|
||||
|
||||
Try changing the cables, ESPECIALLY if you are using
|
||||
external cables.
|
||||
|
||||
2. There are error messages (ie, interrupt received, no mail) during
|
||||
initialization with the C revision boards.
|
||||
|
||||
These may result from the use of one of the unsupported BIOS
|
||||
options. Turn it off.
|
||||
|
||||
Subsection E : Adaptec 174x
|
||||
Supported Configurations :
|
||||
Slots : 1-8
|
||||
Ports : EISA board, not applicable
|
||||
IRQs : 9, 10, 11, 12, 14, 15
|
||||
DMA Channels : EISA board, not applicable
|
||||
IO : port mapped, bus master
|
||||
|
||||
Autoprobe : works with all supported configurations
|
||||
|
||||
Autoprobe override : none
|
||||
|
||||
Common Problems :
|
||||
1. If the Adaptec 1740 driver prints the message
|
||||
"aha1740: Board detected, but EBCNTRL = %x, so disabled it."
|
||||
|
||||
your board was disabled because it was not running in enhanced
|
||||
mode. Boards running in standard 1542 mode are not supported.
|
||||
|
||||
Subsection F : Allways IN2000
|
||||
ALPHA available via ftp tsx-11.mit.edu/pub/linux/ALPHA/SCSI/in2000
|
||||
driver is in2000.tar.z, bootable kernel zImage
|
||||
Ports : 0x100, 0x110, 0x200, 0x220
|
||||
IRQs : 10, 11, 14, 15
|
||||
DMA is not used
|
||||
IO : port mapped
|
||||
|
||||
Autoprobe : BIOS not required
|
||||
|
||||
Autoprobe override : none
|
||||
|
||||
Common Problems :
|
||||
|
||||
1. There are known problems in systems with IDE drives and with
|
||||
swapping.
|
||||
|
||||
Subsection G : Future Domain 16x0 with TMC-1800 or TMC-18C50 chip
|
||||
Supported Configurations :
|
||||
BIOSs : 2.0, 3.0, 3.2
|
||||
BIOS Addresses : 0xc8000, 0xca000, 0xce000, 0xde000
|
||||
Ports : 0x140, 0x150, 0x160, 0x170
|
||||
IRQs : 3, 5, 10, 11, 12, 14, 15
|
||||
DMA is not used
|
||||
IO : port mapped
|
||||
|
||||
Autoprobe : works with all supported configurations, requires
|
||||
installed BIOS
|
||||
|
||||
Autoprobe Override : none
|
||||
|
||||
Antiquity Problems, fix by upgrading :
|
||||
|
||||
1. Old versions do not support the TMC-18C50 chip, and will fail with
|
||||
newer boards.
|
||||
|
||||
2. Old versions will not have the most current BIOS signatures for
|
||||
autodetection.
|
||||
|
||||
Subsection H : Generic NCR5380 (ALFALFA diffs)
|
||||
ALFALFA diffs are available from tsx-11.mit.edu:/pub/linux/ALPHA/scsi
|
||||
0.99.13.scsipatch.txt
|
||||
A bootable kernel incorporating the ALFALFA disks is
|
||||
0.99.13.scsipatch.zImage
|
||||
|
||||
Supported and Unsupported Configurations :
|
||||
Ports : all
|
||||
IRQs : all
|
||||
DMA channels - DMA is not used
|
||||
IO : port mapped
|
||||
|
||||
Autoprobe : none
|
||||
|
||||
Autoprobe Override :
|
||||
Compile time : Define GENERIC_NCR5380_OVERRIDE to be an array of tupples
|
||||
with port, irq - ie
|
||||
#define GENERIC_NCR5380_OVERRIDE {{0x330, 5,}}
|
||||
|
||||
for a board at port 330, IRQ 5.
|
||||
|
||||
The symbolic IRQs IRQ_NONE and IRQ_AUTO may be used.
|
||||
|
||||
LILO command line : ncr5380=port,irq
|
||||
|
||||
255 may be used for no irq, 254 for irq autoprobe.
|
||||
|
||||
Notes : the generic driver doesn't support DMA yet, and pseudo-DMA
|
||||
isn't supported in the generic driver.
|
||||
|
||||
Subsection I : Seagate ST0x/Future Domain TMC-8xx/TMC-9xx
|
||||
Supported and Unsupported Configurations :
|
||||
Base addresses : 0xc8000, 0xca000, 0xcc000, 0xce000, 0xdc000, 0xde000
|
||||
IRQs : 3, 5
|
||||
DMA channels : DMA is not used
|
||||
IO : memory mapped
|
||||
|
||||
Autoprobe : probes for address only, IRQ is assumed to be 5,
|
||||
requires installed BIOS.
|
||||
|
||||
Autoprobe Override :
|
||||
Compile time : Define OVERRIDE to be the base address, CONTROLLER to
|
||||
FD or SEAGATE as appropriate, and IRQ to the IRQ.
|
||||
|
||||
LILO command line : st0x=address,irq or fd8xx=address,irq
|
||||
|
||||
Antiquity Problems, fix by upgrading :
|
||||
|
||||
1. Versions prior to the one in the Linux .99.12 kernel had a problem
|
||||
handshaking with some slow devices, where
|
||||
|
||||
This is what happens when you write data out to the bus
|
||||
|
||||
1. Write byte to data register, data register is asserted to bus
|
||||
2. time_remaining = 12us
|
||||
3. wait while time_remaining > 0 and REQ is not asserted
|
||||
4. if time_remaining > 0, assert ACK
|
||||
5. wait while time remaining > 0 and REQ is asserted
|
||||
6. deassert ACK
|
||||
|
||||
The problem was encountered in slow devices that do the command
|
||||
processing as they read the command, where the REQ/ACK handshake
|
||||
takes over 12us - REQ didn't go false when the driver expected it
|
||||
to, so the driver ended up sending multiple bytes of data for
|
||||
each REQ pulse.
|
||||
|
||||
2. With Linux .99.12, a bug was introduced when I fixed the arbitration
|
||||
code, resulting in failed selections on some systems. This was
|
||||
fixed in .99.13.
|
||||
|
||||
Common Problems :
|
||||
|
||||
1. There are command timeouts when Linux attempts to read the partition
|
||||
table or do other disk access.
|
||||
|
||||
The board ships with the defaults set up for MSDOS, ie interrupts
|
||||
are disabled. To jumper the board for interrupts, on the Seagate
|
||||
use jumper W3 (ST01) or JP3 (ST02) and short pins F-G to select
|
||||
IRQ 5.
|
||||
|
||||
2. The driver can't handle some devices, particularly cheap SCSI
|
||||
tapes and CDROMs.
|
||||
|
||||
The Seagate ties the SCSI bus REQ/ACK handshaking into the PC bus
|
||||
IO CHANNEL READY and (optionally) 0WS signals. Unfortunately, it
|
||||
doesn't tell you when the watchdog timer runs out, and you have
|
||||
no way of knowing for certain that REQ went low, and may end up
|
||||
seeing one REQ pulse as multiple REQ pulses.
|
||||
|
||||
Dealing with this means using a tight loop to look for REQ to
|
||||
go low, with a timeout incase you don't catch the transition due
|
||||
to an interrupt, etc. This results in a performance decrease, so it
|
||||
would be undesireable to apply this to all SCSI devices. Instead,
|
||||
it is selected on a per-device basis with the "borken" field for
|
||||
the given SCSI device in the scsi_devices array. If you run into
|
||||
problems, you should try adding your device to the list of
|
||||
devices for which borken is not reset to zero (currently,
|
||||
only the TENEX CDROM drives).
|
||||
|
||||
3. A future domain board (most notably the 880) doesn't work.
|
||||
|
||||
A few of the Future domain boards use the Seagate
|
||||
register mapping, and have the MSG and CD bits of the
|
||||
status register flipped.
|
||||
|
||||
You should edit seagate.h, swapping the definitions for
|
||||
STAT_MSG and STAT_CD, and recompile the kernel with
|
||||
CONTROLLER defined to SEAGATE and an appropriate
|
||||
IRQ and OVERRIDE specified.
|
||||
|
||||
Defines :
|
||||
|
||||
FAST or FAST32 will use blind transfers where possible
|
||||
|
||||
ARBITRATE will cause the host adapter to arbitrate for the
|
||||
bus for better SCSI-II compatability, rather than just
|
||||
waiting for BUS FREE and then doing its thing. Should
|
||||
let us do one command per Lun when I integrate my
|
||||
reorganization changes into the distribution sources.
|
||||
|
||||
SLOW_HANDSHAKE will allow compatability with broken devices that don't
|
||||
handshake fast enough (ie, some CD ROM's) for the Seagate
|
||||
code.
|
||||
|
||||
SLOW_RATE=x, x some number will let you specify a default
|
||||
transfer rate if handshaking isn't working correctly.
|
||||
|
||||
Subsection J : Trantor T128/T128F/T228 (ALFALFA diffs)
|
||||
ALFALFA diffs are available from tsx-11.mit.edu:/pub/linux/ALPHA/scsi
|
||||
0.99.13.scsipatch.txt
|
||||
A bootable kernel incorporating the ALFALFA disks is
|
||||
0.99.13.scsipatch.zImage
|
||||
|
||||
Supported and Unsupported Configurations :
|
||||
Base addresses : 0xcc000, 00xc8000, 0xdc000, 0xd8000
|
||||
IRQs : none, 3, 5, 7 (all boards)
|
||||
10, 12, 14, 15 (T128F only)
|
||||
DMA is not used.
|
||||
IO : memory mapped
|
||||
|
||||
Autoprobe : works for all supported configurations, requires
|
||||
installed BIOS.
|
||||
|
||||
Autoprobe Override :
|
||||
Compile time : Define T128_OVERRIDE to be an array of address, irq
|
||||
tupples. Ie
|
||||
|
||||
#define T128_OVERRIDE {{0xcc000, 5}}
|
||||
|
||||
for a board at address 0xcc000, IRQ 5.
|
||||
|
||||
The symbolic IRQs IRQ_NONE and IRQ_AUTO may be used.
|
||||
|
||||
LILO command line : t128=address,irq
|
||||
|
||||
-1 may be used for no irq, -2 for irq autoprobe.
|
||||
|
||||
Defines :
|
||||
AUTOSENSE - if defined, REQUEST SENSE will be performed automatically
|
||||
for commands that return with a CHECK CONDITION status.
|
||||
|
||||
PSEUDO_DMA - enables PSEUDO-DMA hardware, should give a 3-4X performance
|
||||
increase compared to polled I/O.
|
||||
|
||||
PARITY - enable parity checking. Not supported
|
||||
|
||||
SCSI2 - enable support for SCSI-II tagged queueing. Untested
|
||||
|
||||
|
||||
UNSAFE - leave interrupts enabled during pseudo-DMA transfers. You
|
||||
only really want to use this if you're having a problem with
|
||||
dropped characters during high speed communications, and even
|
||||
then, you're going to be better off twiddling with transfersize.
|
||||
|
||||
USLEEP - enable support for devices that don't disconnect. Untested.
|
||||
|
||||
Subsection K : Ultrastor 14f, 34f
|
||||
Supported and Unsupported Configurations :
|
||||
Ports : 0x130, 0x140, 0x210, 0x230, 0x240, 0x310, 0x330, 0x340
|
||||
IRQs : 10, 11, 14, 15
|
||||
DMA channels : 5, 6, 7
|
||||
IO : port mapped, bus master
|
||||
|
||||
Autoprobe : does not work for boards at port 0x310, BIOS not required.
|
||||
|
||||
Autoprobe override : compile time only, define PORT_OVERRIDE
|
||||
|
||||
Common Problems :
|
||||
1. The default address for the board, 0x310, is not supported by the
|
||||
autoprobe code, and may cause conflicts if networking is enabled.
|
||||
|
||||
Please use a different address.
|
||||
|
||||
2. The networking code probes at some of the addresses, and breaks
|
||||
the driver. Try a different address, or build a kernel without
|
||||
networking support.
|
||||
|
||||
Subsection L : Ultrastor 14f, 24f, 34f (ALFALFA diffs)
|
||||
ALFALFA diffs are available from tsx-11.mit.edu:/pub/linux/ALPHA/scsi
|
||||
0.99.13.scsipatch.txt
|
||||
A bootable kernel incorporating the ALFALFA disks is
|
||||
0.99.13.scsipatch.zImage
|
||||
|
||||
Ports : 0x130, 0x140, 0x210, 0x230, 0x240, 0x310, 0x330, 0x340
|
||||
IRQs : 10, 11, 14, 15
|
||||
DMA channels : 5, 6, 7
|
||||
IO : port mapped, bus master
|
||||
|
||||
Autoprobe : does not work for boards at port 0x310, BIOS not required.
|
||||
|
||||
Autoprobe override : compile time only, define PORT_OVERRIDE
|
||||
|
||||
Common Problems :
|
||||
1. The default address for the board, 0x310, is not supported by the
|
||||
autoprobe code, and may cause conflicts if networking is enabled.
|
||||
|
||||
Please use a different address.
|
||||
|
||||
Subsection L : Western Digital 7000
|
||||
Supported Configurations :
|
||||
BIOS Addresses : 0xce000
|
||||
Ports : 0x350
|
||||
IRQs : 15
|
||||
DMA Channels : 6
|
||||
IO : port mapped, bus master
|
||||
|
||||
Autoprobe : requires installed BIOS
|
||||
|
||||
Common Problems :
|
||||
|
||||
1. There are several revisisions of the chip and firmware. Supposedly,
|
||||
revision 3 boards do not work, revision 5 boards do,
|
||||
chips with no suffix do not work, chips with an 'A' suffix do.
|
||||
|
||||
Section 4 : Disks
|
||||
Subsection A : Supported and Unsupported Hardware
|
||||
|
||||
All direct access SCSI devices with a block size of 256, 512, or
|
||||
1024 bytes should work. Other block sizes will not work.
|
||||
|
||||
Removeable media devices, including Bernoulis, flopticals, and MO drives
|
||||
should work. Other sector sizes will not work.
|
||||
|
||||
Subsection B: Common Problems
|
||||
|
||||
1. When partitioning, you get a warning message about "cylinder > 1024"
|
||||
or you are unable to boot from a partition including a logical
|
||||
cylinder past logical cylinder 1024.
|
||||
|
||||
This is a BIOS limitation.
|
||||
|
||||
See Subsection D, Disk Geometry, for an explanation.
|
||||
|
||||
2. You are unable to partition /dev/hd*
|
||||
|
||||
/dev/hd* aren't SCSI devices, /dev/sd* are.
|
||||
|
||||
See Subsection C, Device files, and Subsection E, partitioning
|
||||
for the correct device names and partitioning procedure.
|
||||
|
||||
3. Removeable media devices are not recognized at boot time.
|
||||
|
||||
Try booting with a disk in the drive.
|
||||
|
||||
Subsection C : Device Files
|
||||
|
||||
SCSI disks use block device major 8, and there are no "raw" devices
|
||||
ala BSD.
|
||||
|
||||
16 minor numbers are allocated to each SCSI disk, with minor % 16 == 0
|
||||
being the whole disk, minors 1 <= minor % 16 <= 4 the four primary
|
||||
partitions, minors 5 <= minor & 16 <= 15 any extended partitions.
|
||||
|
||||
Due to constraints imposed by Linux's use of a sixteen bit dev_t with
|
||||
only eight bits allocated to the minor number, the SCSI disk minor
|
||||
numbers are assigned dynamically starting with the lowest SCSI HOST/ID/LUN.
|
||||
|
||||
Ie, a configuration may work out like this (with one host adapter)
|
||||
Device Target, Lun SCSI disk
|
||||
84M Seagate 0 0 /dev/sda
|
||||
SCSI->SMD bridge disk 0 3 0 /dev/sdb
|
||||
SCSI->SMD bridge disk 1 3 1 /dev/sdc
|
||||
Wangtek tape 4 0 none
|
||||
213M Maxtor 6 0 /dev/sdd
|
||||
|
||||
Etc.
|
||||
|
||||
The standard naming convention is
|
||||
|
||||
/dev/sd{letter} for the entire disk device (minor 0)
|
||||
/dev/sd{letter}{partition} for the partitions on that device (minor 0 - 15)
|
||||
|
||||
Ie
|
||||
|
||||
/dev/sda
|
||||
/dev/sda1
|
||||
/dev/sda2
|
||||
/dev/sdb
|
||||
|
||||
etc.
|
||||
|
||||
Subsection D: Disk Geometry
|
||||
|
||||
The problem with partitioning SCSI disks and Linux is that Linux talks
|
||||
directly to the SCSI interface. Each disk is viewed as the SCSI host
|
||||
sees it : N blocks, numbered from 0 to N-1, all error free. There is
|
||||
no portable way to get disk geometry. Conversly, DOS predates
|
||||
intelligent disks, and requires a head / cylinder / sector mapping.
|
||||
|
||||
If you don't care about using DOS, create a translation such that
|
||||
H * C * S / 2 < size of your drive in megabytes (where a megabyte is
|
||||
defined as 2^20 bytes).
|
||||
|
||||
Otherwise, you'll have to use the BIOS mapping. In some cases, this
|
||||
will mean reconfiguring the disk so that it is at SCSI ID 0, and
|
||||
disabling the second IDE drive (if you have one).
|
||||
|
||||
You can either use a program like NU, or you can use the following
|
||||
DEBUG code :
|
||||
|
||||
a 0100
|
||||
mov ah, 8
|
||||
int 3
|
||||
|
||||
g=0100
|
||||
d
|
||||
|
||||
|
||||
|
||||
The BIOS imposed limits on the mapped disk geometry are
|
||||
|
||||
1 <= # of heads <= 256
|
||||
1 <= # of cylinders <= 1024
|
||||
1 <= # of sectors <= 63
|
||||
|
||||
So, if you create a partition that includes logical cylinders at or
|
||||
past logical cylinder 1024, it will be inaccessable to the BIOS and
|
||||
you will be unable to boot kernels from it. Since Linux uses the
|
||||
relative sector and length fields in the partition table, and not
|
||||
the head, cylinder, sector tuples, it is not bound by this restriction
|
||||
and you will have no problems accessing the partition once Linux is
|
||||
booted.
|
||||
|
||||
You can partition your SCSI disks using the partitioning program
|
||||
of your choice, under DOS, OS/2, Linux or any other operating
|
||||
system supporting the standard partitioning scheme.
|
||||
|
||||
The correct way to run the Linux fdisk program is by specifying the
|
||||
device on the command line. Ie, to partition the first SCSI disk,
|
||||
|
||||
fdisk /dev/sda
|
||||
|
||||
If you don't explicitly specify the device, the partitioning program
|
||||
may default to /dev/hda, which isn't a SCSI disk.
|
||||
|
||||
In some cases, you will get a warning message about a partition ending
|
||||
past cylinder 1024, see Subsection D, Disk Geometry for an explanation.
|
||||
|
||||
Section 5 : CD ROMs
|
||||
|
||||
Subsection A: Supported and Unsupported Hardware
|
||||
|
||||
SCSI CDs with a block size of 512 or 2048 bytes should work. Other
|
||||
block sizes will not work.
|
||||
|
||||
Subsection B: Common Problems
|
||||
|
||||
1. The device is not recognized at boot time.
|
||||
Try booting with a CDROM in the drive.
|
||||
|
||||
2. You can't mount a CDROM
|
||||
The correct syntax to mount an ISO-9660 CDROM is
|
||||
|
||||
mount -t iso9660 /dev/sr0 /mount_point
|
||||
|
||||
Note that for this to work, you must have the kernel
|
||||
configured with support for SCSI, your host adapter,
|
||||
the SCSI CDROM driver, and the iso9660 filesystem.
|
||||
|
||||
|
||||
Subsection C: Device Files
|
||||
|
||||
SCSI CD ROMs use major 11.
|
||||
|
||||
Minors are allocated dynamically (See Section 4, Disks, Subsection C,
|
||||
Device Files for an example) with the first CDROM found being minor 0,
|
||||
the second minor 1, etc.
|
||||
|
||||
The standard naming convention is
|
||||
|
||||
/dev/sr{digit} ie
|
||||
|
||||
/dev/sr0
|
||||
/dev/sr1
|
||||
|
||||
etc.
|
||||
|
||||
Section 6 : Tapes
|
||||
Subsection A : Supported and Unsupported Hardware
|
||||
|
||||
Drives using both fixed and variable length blocks smaller than the
|
||||
the driver buffer length (set to 32K in the distribution sources) are
|
||||
supported.
|
||||
|
||||
Parameters (block size, buffering, density) are set with ioctls
|
||||
(usually with the mt program), and remain in effect after the
|
||||
device is closed and reopened.
|
||||
|
||||
Subsection B : Common Problems
|
||||
1. The tape drive is not recognized at boot time.
|
||||
|
||||
Try booting with a tape in the drive.
|
||||
|
||||
2. When reading a tape with multiple files, the first tar
|
||||
is successful, a second tar fails silently, and retrying
|
||||
the second tar is successful.
|
||||
|
||||
User level programs, such as tar, don't understand file marks.
|
||||
The first tar reads up until the end of the file. The second
|
||||
tar attempts to read at the file mark, gets nothing, but the
|
||||
tape spaces over the file mark. The third tar is successful
|
||||
since the tape is at the start of the next file.
|
||||
|
||||
Use mt on the no-rewind device to space forward to the next file.
|
||||
|
||||
3. Reading compressed archives fails at the end.
|
||||
|
||||
4. Decompressing programs cannot handle the zeros padding the
|
||||
last block of the file.
|
||||
|
||||
To prevent warnings and errors, wrap your compressed files
|
||||
in a .tar file - ie, rather than doing
|
||||
|
||||
tar cfvz /dev/nrst0 file.1 file.2 ...
|
||||
|
||||
do
|
||||
|
||||
tar cfvz tmp.tar.z file.1 file.2 ...
|
||||
|
||||
tar cf /dev/nrst0 tmp.tar.z
|
||||
|
||||
5. You can't read a tape made with another operating system or
|
||||
another operating system can't read a tape written in Linux.
|
||||
|
||||
Different systems often use different block sizes. On a
|
||||
tape device using a fixed blocksize, you will get errors
|
||||
when reading blocks written using a different block size.
|
||||
|
||||
Things that can help you to determine the correct block
|
||||
size include
|
||||
|
||||
- tar defaults to 20 512 byte blocks, ie blocksize = 10k
|
||||
- Linux prints the blocksize on bootup
|
||||
|
||||
Subsection C : Device Files
|
||||
|
||||
SCSI tapes use character device major 9.
|
||||
|
||||
Due to constraints imposed by Linux's use of a sixteen bit dev_t with
|
||||
only eight bits allocated to the minor number, the SCSI tape minor
|
||||
numbers are assigned dynamically starting with the lowest SCSI HOST/ID/LUN.
|
||||
|
||||
Rewinding devices are numbered from 0 - with /dev/st0 being c 9 0,
|
||||
/dev/rst1 c 9 1, etc. Non-rewinding devices have the high bit set -
|
||||
ie /dev/nrst0 is c 9 128.
|
||||
|
||||
The standard naming convention is
|
||||
/dev/nrst{digit} for non-rewinding devices
|
||||
/dev/rst{digit} for rewingind devices
|
||||
|
||||
Section 7 : Generic
|
||||
Subsection A : Supported Hardware
|
||||
|
||||
The Generic SCSI device driver provides an interface for sending
|
||||
SCSI commands to all SCSI devices - disks, tapes, CDROMs, media
|
||||
changer robots, etc.
|
||||
|
||||
Everything electrically compatable with your SCSI board should work.
|
||||
|
||||
Subsection B : Common Problems
|
||||
|
||||
Subsection C : Device Files
|
||||
|
||||
SCSI generic devices use character major 21. Due to constraints
|
||||
imposed by Linux's use of a 16 bit dev_t, minor numbers are dynamically
|
||||
assigned from 0, one per device, with
|
||||
|
||||
/dev/sg0
|
||||
|
||||
corresponding to the lowest numerical target/lun on the first
|
||||
SCSI board.
|
||||
|
||||
--
|
||||
Boycott USL/Novell for their absurd anti-BSDI lawsuit. | Drew Eckhardt,
|
||||
Condemn Colorado for Amendment Two. | Professional Linux
|
||||
Use Linux, the fast, flexible, and free 386 unix | Consultant
|
||||
Will administer Unix for food | drew@cs.Colorado.EDU
|
||||
|
||||
Reference in New Issue
Block a user