forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
204 lines
6.8 KiB
204 lines
6.8 KiB
.. SPDX-License-Identifier: GPL-2.0 |
|
.. include:: <isonum.txt> |
|
|
|
===================================================== |
|
Adaptec AHA-1520/1522 SCSI driver for Linux (aha152x) |
|
===================================================== |
|
|
|
Copyright |copy| 1993-1999 Jürgen Fischer <[email protected]> |
|
|
|
TC1550 patches by Luuk van Dijk ([email protected]) |
|
|
|
|
|
In Revision 2 the driver was modified a lot (especially the |
|
bottom-half handler complete()). |
|
|
|
The driver is much cleaner now, has support for the new |
|
error handling code in 2.3, produced less cpu load (much |
|
less polling loops), has slightly higher throughput (at |
|
least on my ancient test box; a i486/33Mhz/20MB). |
|
|
|
|
|
Configuration Arguments |
|
======================= |
|
|
|
============ ======================================== ====================== |
|
IOPORT base io address (0x340/0x140) |
|
IRQ interrupt level (9-12; default 11) |
|
SCSI_ID scsi id of controller (0-7; default 7) |
|
RECONNECT allow targets to disconnect from the bus (0/1; default 1 [on]) |
|
PARITY enable parity checking (0/1; default 1 [on]) |
|
SYNCHRONOUS enable synchronous transfers (0/1; default 1 [on]) |
|
DELAY: bus reset delay (default 100) |
|
EXT_TRANS: enable extended translation (0/1: default 0 [off]) |
|
(see NOTES) |
|
============ ======================================== ====================== |
|
|
|
Compile Time Configuration |
|
========================== |
|
|
|
(go into AHA152X in drivers/scsi/Makefile): |
|
|
|
- DAUTOCONF |
|
use configuration the controller reports (AHA-152x only) |
|
|
|
- DSKIP_BIOSTEST |
|
Don't test for BIOS signature (AHA-1510 or disabled BIOS) |
|
|
|
- DSETUP0="{ IOPORT, IRQ, SCSI_ID, RECONNECT, PARITY, SYNCHRONOUS, DELAY, EXT_TRANS }" |
|
override for the first controller |
|
|
|
- DSETUP1="{ IOPORT, IRQ, SCSI_ID, RECONNECT, PARITY, SYNCHRONOUS, DELAY, EXT_TRANS }" |
|
override for the second controller |
|
|
|
- DAHA152X_DEBUG |
|
enable debugging output |
|
|
|
- DAHA152X_STAT |
|
enable some statistics |
|
|
|
|
|
LILO Command Line Options |
|
========================= |
|
|
|
:: |
|
|
|
aha152x=<IOPORT>[,<IRQ>[,<SCSI-ID>[,<RECONNECT>[,<PARITY>[,<SYNCHRONOUS>[,<DELAY> [,<EXT_TRANS]]]]]]] |
|
|
|
The normal configuration can be overridden by specifying a command line. |
|
When you do this, the BIOS test is skipped. Entered values have to be |
|
valid (known). Don't use values that aren't supported under normal |
|
operation. If you think that you need other values: contact me. |
|
For two controllers use the aha152x statement twice. |
|
|
|
|
|
Symbols for Module Configuration |
|
================================ |
|
|
|
Choose from 2 alternatives: |
|
|
|
1. specify everything (old):: |
|
|
|
aha152x=IOPORT,IRQ,SCSI_ID,RECONNECT,PARITY,SYNCHRONOUS,DELAY,EXT_TRANS |
|
|
|
configuration override for first controller |
|
|
|
:: |
|
|
|
aha152x1=IOPORT,IRQ,SCSI_ID,RECONNECT,PARITY,SYNCHRONOUS,DELAY,EXT_TRANS |
|
|
|
configuration override for second controller |
|
|
|
2. specify only what you need to (irq or io is required; new) |
|
|
|
io=IOPORT0[,IOPORT1] |
|
IOPORT for first and second controller |
|
|
|
irq=IRQ0[,IRQ1] |
|
IRQ for first and second controller |
|
|
|
scsiid=SCSIID0[,SCSIID1] |
|
SCSIID for first and second controller |
|
|
|
reconnect=RECONNECT0[,RECONNECT1] |
|
allow targets to disconnect for first and second controller |
|
|
|
parity=PAR0[PAR1] |
|
use parity for first and second controller |
|
|
|
sync=SYNCHRONOUS0[,SYNCHRONOUS1] |
|
enable synchronous transfers for first and second controller |
|
|
|
delay=DELAY0[,DELAY1] |
|
reset DELAY for first and second controller |
|
|
|
exttrans=EXTTRANS0[,EXTTRANS1] |
|
enable extended translation for first and second controller |
|
|
|
|
|
If you use both alternatives the first will be taken. |
|
|
|
|
|
Notes on EXT_TRANS |
|
================== |
|
|
|
SCSI uses block numbers to address blocks/sectors on a device. |
|
The BIOS uses a cylinder/head/sector addressing scheme (C/H/S) |
|
scheme instead. DOS expects a BIOS or driver that understands this |
|
C/H/S addressing. |
|
|
|
The number of cylinders/heads/sectors is called geometry and is required |
|
as base for requests in C/H/S addressing. SCSI only knows about the |
|
total capacity of disks in blocks (sectors). |
|
|
|
Therefore the SCSI BIOS/DOS driver has to calculate a logical/virtual |
|
geometry just to be able to support that addressing scheme. The geometry |
|
returned by the SCSI BIOS is a pure calculation and has nothing to |
|
do with the real/physical geometry of the disk (which is usually |
|
irrelevant anyway). |
|
|
|
Basically this has no impact at all on Linux, because it also uses block |
|
instead of C/H/S addressing. Unfortunately C/H/S addressing is also used |
|
in the partition table and therefore every operating system has to know |
|
the right geometry to be able to interpret it. |
|
|
|
Moreover there are certain limitations to the C/H/S addressing scheme, |
|
namely the address space is limited to up to 255 heads, up to 63 sectors |
|
and a maximum of 1023 cylinders. |
|
|
|
The AHA-1522 BIOS calculates the geometry by fixing the number of heads |
|
to 64, the number of sectors to 32 and by calculating the number of |
|
cylinders by dividing the capacity reported by the disk by 64*32 (1 MB). |
|
This is considered to be the default translation. |
|
|
|
With respect to the limit of 1023 cylinders using C/H/S you can only |
|
address the first GB of your disk in the partition table. Therefore |
|
BIOSes of some newer controllers based on the AIC-6260/6360 support |
|
extended translation. This means that the BIOS uses 255 for heads, |
|
63 for sectors and then divides the capacity of the disk by 255*63 |
|
(about 8 MB), as soon it sees a disk greater than 1 GB. That results |
|
in a maximum of about 8 GB addressable diskspace in the partition table |
|
(but there are already bigger disks out there today). |
|
|
|
To make it even more complicated the translation mode might/might |
|
not be configurable in certain BIOS setups. |
|
|
|
This driver does some more or less failsafe guessing to get the |
|
geometry right in most cases: |
|
|
|
- for disks<1GB: use default translation (C/32/64) |
|
|
|
- for disks>1GB: |
|
|
|
- take current geometry from the partition table |
|
(using scsicam_bios_param and accept only 'valid' geometries, |
|
ie. either (C/32/64) or (C/63/255)). This can be extended translation |
|
even if it's not enabled in the driver. |
|
|
|
- if that fails, take extended translation if enabled by override, |
|
kernel or module parameter, otherwise take default translation and |
|
ask the user for verification. This might on not yet partitioned |
|
disks. |
|
|
|
|
|
References Used |
|
=============== |
|
|
|
"AIC-6260 SCSI Chip Specification", Adaptec Corporation. |
|
|
|
"SCSI COMPUTER SYSTEM INTERFACE - 2 (SCSI-2)", X3T9.2/86-109 rev. 10h |
|
|
|
"Writing a SCSI device driver for Linux", Rik Faith ([email protected]) |
|
|
|
"Kernel Hacker's Guide", Michael K. Johnson ([email protected]) |
|
|
|
"Adaptec 1520/1522 User's Guide", Adaptec Corporation. |
|
|
|
Michael K. Johnson ([email protected]) |
|
|
|
Drew Eckhardt ([email protected]) |
|
|
|
Eric Youngdale ([email protected]) |
|
|
|
special thanks to Eric Youngdale for the free(!) supplying the |
|
documentation on the chip.
|
|
|