Previous Next Contents

4. Boot Arguments for SCSI Peripherals.

This section contains the descriptions of the boot args that are used for passing information about the installed SCSI host adapters, and SCSI devices.

4.1 Arguments for Mid-level Drivers

The mid level drivers handle things like disks, CD-ROMs and tapes without getting into host adapter specifics.

Maximum Probed LUNs (`max_scsi_luns=')

Each SCSI device can have a number of `sub-devices' contained within itself. The most common example is one of the new SCSI CD-ROMs that handle more than one disk at a time. Each CD is addressed as a `Logical Unit Number' (LUN) of that particular device. But most devices, such as hard disks, tape drives and such are only one device, and will be assigned to LUN zero.

The problem arises with single LUN devices with bad firmware. Some poorly designed SCSI devices (old and unfortunately new) can not handle being probed for LUNs not equal to zero. They will respond by locking up, and possibly taking the whole SCSI bus down with them.

Newer kernels have the configuration option that allows you to set the maximum number of probed LUNs. The default is to only probe LUN zero, to avoid the problem described above.

To specify the number of probed LUNs at boot, one enters `max_scsi_luns=n' as a boot arg, where n is a number between one and eight. To avoid problems as described above, one would use n=1 to avoid upsetting such broken devices

Parameters for the SCSI Tape Driver (`st=')

Some boot time configuration of the SCSI tape driver can be achieved by using the following:


        st=buf_size[,write_threshold[,max_bufs]]

The first two numbers are specified in units of kB. The default buf_size is 32kB, and the maximum size that can be specified is a ridiculous 16384kB. The write_threshold is the value at which the buffer is committed to tape, with a default value of 30kB. The maximum number of buffers varies with the number of drives detected, and has a default of two. An example usage would be:


        st=32,30,2

Full details can be found in the README.st file that is in the scsi directory of the kernel source tree.

4.2 Arguments for SCSI Host Adapters

General notation for this section:

iobase -- the first I/O port that the SCSI host occupies. These are specified in hexidecimal notation, and usually lie in the range from 0x200 to 0x3ff.

irq -- the hardware interrupt that the card is configured to use. Valid values will be dependent on the card in question, but will usually be 5, 7, 9, 10, 11, 12, and 15. The other values are usually used for common peripherals like IDE hard disks, floppies, serial ports, etc.

dma -- the DMA (Direct Memory Access) channel that the card uses. Typically only applies to bus-mastering cards. PCI and VLB cards are native bus-masters, and do not require and ISA DMA channel.

scsi-id -- the ID that the host adapter uses to identify itself on the SCSI bus. Only some host adapters allow you to change this value, as most have it permanently specified internally. The usual default value is seven, but the Seagate and Future Domain TMC-950 boards use six.

parity -- whether the SCSI host adapter expects the attached devices to supply a parity value with all information exchanges. Specifying a one indicates parity checking is enabled, and a zero disables parity checking. Again, not all adapters will support selection of parity behaviour as a boot argument.

Adaptec aha151x, aha152x, aic6260, aic6360, SB16-SCSI (`aha152x=')

The aha numbers refer to cards and the aic numbers refer to the actual SCSI chip on these type of cards, including the Soundblaster-16 SCSI.

The probe code for these SCSI hosts looks for an installed BIOS, and if none is present, the probe will not find your card. Then you will have to use a boot argument of the form:


         aha152x=iobase[,irq[,scsi-id[,reconnect[,parity]]]]

Note that if the driver was compiled with debugging enabled, a sixth value can be specified to set the debug level.

All the parameters are as described at the top of this section, and the reconnect value will allow device disconnect/reconnect if a non-zero value is used. An example usage is as follows:


        aha152x=0x340,11,7,1

Note that the parameters must be specified in order, meaning that if you want to specify a parity setting, then you will have to specify an iobase, irq, scsi-id and reconnect value as well.

Adaptec aha154x (`aha1542=')

These are the aha154x series cards. The aha1542 series cards have an i82077 floppy controller onboard, while the aha1540 series cards do not. These are busmastering cards, and have parameters to set the ``fairness'' that is used to share the bus with other devices. The boot argument looks like the following.


        aha1542=iobase[,buson,busoff[,dmaspeed]]

Valid iobase values are usually one of: 0x130, 0x134, 0x230, 0x234, 0x330, 0x334. Clone cards may permit other values.

The buson, busoff values refer to the number of microseconds that the card dominates the ISA bus. The defaults are 11us on, and 4us off, so that other cards (such as an ISA LANCE Ethernet card) have a chance to get access to the ISA bus.

The dmaspeed value refers to the rate (in MB/s) at which the DMA (Direct Memory Access) transfers proceed at. The default is 5MB/s. Newer revision cards allow you to select this value as part of the soft-configuration, older cards use jumpers. You can use values up to 10MB/s assuming that your motherboard is capable of handling it. Experiment with caution if using values over 5MB/s.

Adaptec aha274x, aha284x, aic7xxx (`aic7xxx=')

These boards can accept an argument of the form:


        aic7xxx=extended,no_reset

The extended value, if non-zero, indicates that extended translation for large disks is enabled. The no_reset value, if non-zero, tells the driver not to reset the SCSI bus when setting up the host adaptor at boot.

AdvanSys SCSI Host Adaptors (`advansys=')

The AdvanSys driver can accept up to four i/o addresses that will be probed for an AdvanSys SCSI card. Note that these values (if used) do not effect EISA or PCI probing in any way. They are only used for probing ISA and VLB cards. In addition, if the driver has been compiled with debugging enabled, the level of debugging output can be set by adding an 0xdeb[0-f] parameter. The 0-f allows setting the level of the debugging messages to any of 16 levels of verbosity.

Always IN2000 Host Adaptor (`in2000=')

Unlike other SCSI host boot arguments, the IN2000 driver uses ASCII string prefixes for most of its integer arguments. Here is a list of the supported arguments:

ioport:addr -- Where addr is IO address of a (usually ROM-less) card.

noreset -- No optional args. Prevents SCSI bus reset at boot time.

nosync:x -- x is a bitmask where the 1st 7 bits correspond with the 7 possible SCSI devices (bit 0 for device #0, etc). Set a bit to PREVENT sync negotiation on that device. The driver default is sync DISABLED on all devices.

period:ns -- ns is the minimum # of nanoseconds in a SCSI data transfer period. Default is 500; acceptable values are 250 to 1000.

disconnect:x -- x = 0 to never allow disconnects, 2 to always allow them. x = 1 does 'adaptive' disconnects, which is the default and generally the best choice.

debug:x If `DEBUGGING_ON' is defined, x is a bitmask that causes various types of debug output to printed - see the DB_xxx defines in in2000.h

proc:x -- If `PROC_INTERFACE' is defined, x is a bitmask that determines how the /proc interface works and what it does - see the PR_xxx defines in in2000.h

Some example usages are listed below:


        in2000=ioport:0x220,noreset
        in2000=period:250,disconnect:2,nosync:0x03
        in2000=debug:0x1e
        in2000=proc:3

AMD AM53C974 based hardware (`AM53C974=')

Unlike other drivers, this one does not use boot parameters to communicate i/o, IRQ or DMA channels. (Since the AM53C974 is a PCI device, there shouldn't be a need to do so.) Instead, the parameters are used to communicate the transfer modes and rates that are to be used between the host and the target device. This is best described with an example:


        AM53C974=7,2,8,15

This would be interpreted as follows: `For communication between the controller with SCSI-ID 7 and the device with SCSI-ID 2, a transfer rate of 8MHz in synchronous mode with max. 15 bytes offset should be negotiated.' More details can be found in the file linux/drivers/scsi/README.AM53C974

BusLogic SCSI Hosts with v1.2 kernels (`buslogic=')

In older kernels, the buslogic driver accepts only one parameter, that being the I/O base. It expects that to be one of the following valid values: 0x130, 0x134, 0x230, 0x234, 0x330, 0x334.

BusLogic SCSI Hosts with v2.x kernels (`BusLogic=')

With v2.x kernels, the BusLogic driver accepts many parameters. (Note the case in the above; upper case B and L!!!). The following detailed description is taken directly from Leonard N. Zubkoff's driver as included in the v2.0 kernel.

For the BusLogic driver, a Kernel command line entry comprises the driver identifier "BusLogic=" optionally followed by a comma-separated sequence of integers and then optionally followed by a comma-separated sequence of strings. Each command line entry applies to one BusLogic Host Adapter. Multiple command line entries may be used in systems which contain multiple BusLogic Host Adapters.

The first integer specified is the I/O Address at which the Host Adapter is located. If unspecified, it defaults to 0 which means to apply this entry to the first BusLogic Host Adapter found during the default probe sequence. If any I/O Address parameters are provided on the command line, then the default probe sequence is omitted.

The second integer specified is the Tagged Queue Depth to use for Target Devices that support Tagged Queuing. The Queue Depth is the number of SCSI commands that are allowed to be concurrently presented for execution. If unspecified, it defaults to 0 which means to use a value determined automatically based on the Host Adapter's Total Queue Depth and the number, type, speed, and capabilities of the detected Target Devices. For Host Adapters that require ISA Bounce Buffers, the Tagged Queue Depth is automatically set to BusLogic_TaggedQueueDepth_BB to avoid excessive preallocation of DMA Bounce Buffer memory. Target Devices that do not support Tagged Queuing use a Queue Depth of BusLogic_UntaggedQueueDepth.

The third integer specified is the Bus Settle Time in seconds. This is the amount of time to wait between a Host Adapter Hard Reset which initiates a SCSI Bus Reset and issuing any SCSI Commands. If unspecified, it defaults to 0 which means to use the value of BusLogic_DefaultBusSettleTime.

The fourth integer specified is the Local Options. If unspecified, it defaults to 0. Note that Local Options are only applied to a specific Host Adapter.

The fifth integer specified is the Global Options. If unspecified, it defaults to 0. Note that Global Options are applied across all Host Adapters.

The string options are used to provide control over Tagged Queuing, Error Recovery, and Host Adapter Probing.

The Tagged Queuing specification begins with "TQ:" and allows for explicitly specifying whether Tagged Queuing is permitted on Target Devices that support it. The following specification options are available:

TQ:Default -- Tagged Queuing will be permitted based on the firmware version of the BusLogic Host Adapter and based on whether the Tagged Queue Depth value allows queuing multiple commands.

TQ:Enable -- Tagged Queuing will be enabled for all Target Devices on this Host Adapter overriding any limitation that would otherwise be imposed based on the Host Adapter firmware version.

TQ:Disable -- Tagged Queuing will be disabled for all Target Devices on this Host Adapter.

TQ:<Per-Target-Spec> -- Tagged Queuing will be controlled individually for each Target Device. <Per-Target-Spec> is a sequence of "Y", "N", and "X" characters. "Y" enabled Tagged Queuing, "N" disables Tagged Queuing, and "X" accepts the default based on the firmware version. The first character refers to Target Device 0, the second to Target Device 1, and so on; if the sequence of "Y", "N", and "X" characters does not cover all the Target Devices, unspecified characters are assumed to be "X".

Note that explicitly requesting Tagged Queuing may lead to problems; this facility is provided primarily to allow disabling Tagged Queuing on Target Devices that do not implement it correctly.

The Error Recovery Strategy specification begins with "ER:" and allows for explicitly specifying the Error Recovery action to be performed when ResetCommand is called due to a SCSI Command failing to complete successfully. The following specification options are available:

ER:Default -- Error Recovery will select between the Hard Reset and Bus Device Reset options based on the recommendation of the SCSI Subsystem.

ER:HardReset -- Error Recovery will initiate a Host Adapter Hard Reset which also causes a SCSI Bus Reset.

ER:BusDeviceReset -- Error Recovery will send a Bus Device Reset message to the individual Target Device causing the error. If Error Recovery is again initiated for this Target Device and no SCSI Command to this Target Device has completed successfully since the Bus Device Reset message was sent, then a Hard Reset will be attempted.

ER:None -- Error Recovery will be suppressed. This option should only be selected if a SCSI Bus Reset or Bus Device Reset will cause the Target Device to fail completely and unrecoverably.

ER:<Per-Target-Spec> -- Error Recovery will be controlled individually for each Target Device. <Per-Target-Spec> is a sequence of "D", "H", "B", and "N" characters. "D" selects Default, "H" selects Hard Reset, "B" selects Bus Device Reset, and "N" selects None. The first character refers to Target Device 0, the second to Target Device 1, and so on; if the sequence of "D", "H", "B", and "N" characters does not cover all the possible Target Devices, unspecified characters are assumed to be "D".

The Host Adapter Probing specification comprises the following strings:

NoProbe -- No probing of any kind is to be performed, and hence no BusLogic Host Adapters will be detected.

NoProbeISA -- No probing of the standard ISA I/O Addresses will be done, and hence only PCI Host Adapters will be detected.

NoSortPCI -- PCI Host Adapters will be enumerated in the order provided by the PCI BIOS, ignoring any setting of the AutoSCSI "Use Bus And Device # For PCI Scanning Seq." option.

EATA SCSI Cards (`eata=')

As of late v2.0 kernels, the EATA drivers will accept a boot argument to specify the i/o base(s) to be probed. It is of the form:


        eata=iobase1[,iobase2][,iobase3]...[,iobaseN]

The driver will probe the addresses in the order that they are listed.

Future Domain TMC-8xx, TMC-950 (`tmc8xx=')

The probe code for these SCSI hosts looks for an installed BIOS, and if none is present, the probe will not find your card. Or, if the signature string of your BIOS is not recognized then it will also not be found. In either case, you will then have to use a boot argument of the form:


        tmc8xx=mem_base,irq

The mem_base value is the value of the memory mapped I/O region that the card uses. This will usually be one of the following values: 0xc8000, 0xca000, 0xcc000, 0xce000, 0xdc000, 0xde000.

Future Domain TMC-16xx, TMC-3260, AHA-2920 (`fdomain=')

The driver detects these cards according to a list of known BIOS ROM signatures. For a full list of known BIOS revisions, please see linux/drivers/scsi/fdomain.c as it has a lot of information at the top of that file. If your BIOS is not known to the driver, you can use an override of the form:


        fdomain=iobase,irq[,scsi_id]

IOMEGA Parallel Port / ZIP drive (`ppa=')

This driver is for the IOMEGA Parallel Port SCSI adapter which is embedded into the IOMEGA ZIP drives. It may also work with the original IOMEGA PPA3 device. The boot argument for this driver is of the form:


        ppa=iobase,speed_high,speed_low,nybble

with all but iobase being optionally specified values. If you wish to alter any of the three optional parameters, you are advised to read linux/drivers/scsi/README.ppa for details of what they control.

NCR5380 based controllers (`ncr5380=')

Depending on your board, the 5380 can be either i/o mapped or memory mapped. (An address below 0x400 usually implies i/o mapping, but PCI and EISA hardware use i/o addresses above 0x3ff.) In either case, you specify the address, the IRQ value and the DMA channel value. An example for an i/o mapped card would be: ncr5380=0x350,5,3. If the card doesn't use interrupts, then an IRQ value of 255 (0xff) will disable interrupts. An IRQ value of 254 means to autoprobe. More details can be found in the file linux/drivers/scsi/README.g_NCR5380

NCR53c400 based controllers (`ncr53c400=')

The generic 53c400 support is done with the same driver as the generic 5380 support mentioned above. The boot argument is identical to the above with the exception that no DMA channel is used by the 53c400.

NCR53c406a based controllers (`ncr53c406a=')

This driver uses a boot argument of the form:


        ncr53c406a=PORTBASE,IRQ,FASTPIO

where the IRQ and FASTPIO parameters are optional. An interrupt value of zero disables the use of interrupts. Using a value of one for the FASTPIO parameter enables the use of insl and outsl instructions instead of the single-byte inb and outb instructions. The driver can also use DMA as a compile-time option.

Pro Audio Spectrum (`pas16=')

The PAS16 uses a NCR5380 SCSI chip, and newer models support jumper-less configuration. The boot argument is of the form:


        pas16=iobase,irq

The only difference is that you can specify an IRQ value of 255, which will tell the driver to work without using interrupts, albeit at a performance loss. The iobase is usually 0x388.

Seagate ST-0x (`st0x=')

The probe code for these SCSI hosts looks for an installed BIOS, and if none is present, the probe will not find your card. Or, if the signature string of your BIOS is not recognized then it will also not be found. In either case, you will then have to use a boot argument of the form:


        st0x=mem_base,irq

The mem_base value is the value of the memory mapped I/O region that the card uses. This will usually be one of the following values: 0xc8000, 0xca000, 0xcc000, 0xce000, 0xdc000, 0xde000.

Trantor T128 (`t128=')

These cards are also based on the NCR5380 chip, and accept the following options:


        t128=mem_base,irq

The valid values for mem_base are as follows: 0xcc000, 0xc8000, 0xdc000, 0xd8000.

Ultrastor SCSI cards (`u14-34f=')

Note that there appears to be two independent drivers for this card, namely CONFIG_SCSI_U14_34F that uses u14-34f.c and CONFIG_SCSI_ULTRASTOR that uses ultrastor.c. It is the u14-34f one that (as of late v2.0 kernels) accepts a boot argument of the form:


        u14-34f=iobase1[,iobase2][,iobase3]...[,iobaseN]

The driver will probe the addresses in the order that they are listed.

Western Digital WD7000 cards (`wd7000=')

The driver probe for the wd7000 looks for a known BIOS ROM string and knows about a few standard configuration settings. If it doesn't come up with the correct values for your card, or you have an unrecognized BIOS version, you can use a boot argument of the form:


        wd7000=irq,dma,iobase

4.3 SCSI Host Adapters that don't Accept Boot Args

At present, the following SCSI cards do not make use of any boot-time parameters. In some cases, you can hard-wire values by directly editing the driver itself, if required.

        Adaptec aha1740 (EISA probing),
        NCR53c7xx,8xx (PCI, both drivers)
        Qlogic Fast (0x230, 0x330)
        Qlogic ISP (PCI)


Previous Next Contents