This driver is for Compaq's SMART Array Controllers.

Supported Cards:
----------------

This driver is known to work with the following cards:

	* SA 5300
	* SA 5i 
	* SA 532
	* SA 5312
	* SA 641
	* SA 642
	* SA 6400
	* SA 6400 U320 Expansion Module
	* SA 6i
	* SA P600
	* SA P800
	* SA E400
	* SA P400i
	* SA E200
	* SA E200i
	* SA E500
	* SA P700m
	* SA P212
	* SA P410
	* SA P410i
	* SA P411
	* SA P812
	* SA P712m
	* SA P711m

Detecting drive failures:
-------------------------

To get the status of logical volumes and to detect physical drive
failures, you can use the cciss_vol_status program found here:
http://cciss.sourceforge.net/#cciss_utils

Device Naming:
--------------

If nodes are not already created in the /dev/cciss directory, run as root:

# cd /dev
# ./MAKEDEV cciss

You need some entries in /dev for the cciss device.  The MAKEDEV script
can make device nodes for you automatically.  Currently the device setup
is as follows:

Major numbers:
	104	cciss0	
	105	cciss1	
	106	cciss2
	105	cciss3
	108	cciss4
	109	cciss5
	110	cciss6
	111	cciss7

Minor numbers:
        b7 b6 b5 b4 b3 b2 b1 b0
        |----+----| |----+----|
             |           |
             |           +-------- Partition ID (0=wholedev, 1-15 partition)
             |
             +-------------------- Logical Volume number

The device naming scheme is:
/dev/cciss/c0d0			Controller 0, disk 0, whole device
/dev/cciss/c0d0p1		Controller 0, disk 0, partition 1
/dev/cciss/c0d0p2		Controller 0, disk 0, partition 2
/dev/cciss/c0d0p3		Controller 0, disk 0, partition 3

/dev/cciss/c1d1			Controller 1, disk 1, whole device
/dev/cciss/c1d1p1		Controller 1, disk 1, partition 1
/dev/cciss/c1d1p2		Controller 1, disk 1, partition 2
/dev/cciss/c1d1p3		Controller 1, disk 1, partition 3

CCISS simple mode support
-------------------------

The "cciss_simple_mode=1" boot parameter may be used to prevent the driver
from putting the controller into "performant" mode. The difference is that
with simple mode, each command completion requires an interrupt, while with
"performant mode" (the default, and ordinarily better performing) it is
possible to have multiple command completions indicated by a single
interrupt.

SCSI tape drive and medium changer support
------------------------------------------

SCSI sequential access devices and medium changer devices are supported and 
appropriate device nodes are automatically created.  (e.g.  
/dev/st0, /dev/st1, etc.  See the "st" man page for more details.) 
You must enable "SCSI tape drive support for Smart Array 5xxx" and 
"SCSI support" in your kernel configuration to be able to use SCSI
tape drives with your Smart Array 5xxx controller.

Additionally, note that the driver will engage the SCSI core at init
time if any tape drives or medium changers are detected.  The driver may
also be directed to dynamically engage the SCSI core via the /proc filesystem
entry which the "block" side of the driver creates as
/proc/driver/cciss/cciss* at runtime.  This is best done via a script.

For example:

	for x in /proc/driver/cciss/cciss[0-9]*
	do
		echo "engage scsi" > $x
	done

Once the SCSI core is engaged by the driver, it cannot be disengaged 
(except by unloading the driver, if it happens to be linked as a module.)

Note also that if no sequential access devices or medium changers are
detected, the SCSI core will not be engaged by the action of the above
script.

Hot plug support for SCSI tape drives
-------------------------------------

Hot plugging of SCSI tape drives is supported, with some caveats.
The cciss driver must be informed that changes to the SCSI bus
have been made.  This may be done via the /proc filesystem.
For example:

	echo "rescan" > /proc/scsi/cciss0/1

This causes the driver to query the adapter about changes to the
physical SCSI buses and/or fibre channel arbitrated loop and the
driver to make note of any new or removed sequential access devices
or medium changers.  The driver will output messages indicating what 
devices have been added or removed and the controller, bus, target and 
lun used to address the device.  It then notifies the SCSI mid layer
of these changes.

Note that the naming convention of the /proc filesystem entries 
contains a number in addition to the driver name.  (E.g. "cciss0" 
instead of just "cciss" which you might expect.)

Note: ONLY sequential access devices and medium changers are presented 
as SCSI devices to the SCSI mid layer by the cciss driver.  Specifically, 
physical SCSI disk drives are NOT presented to the SCSI mid layer.  The 
physical SCSI disk drives are controlled directly by the array controller 
hardware and it is important to prevent the kernel from attempting to directly
access these devices too, as if the array controller were merely a SCSI 
controller in the same way that we are allowing it to access SCSI tape drives.

SCSI error handling for tape drives and medium changers
-------------------------------------------------------

The linux SCSI mid layer provides an error handling protocol which
kicks into gear whenever a SCSI command fails to complete within a
certain amount of time (which can vary depending on the command).
The cciss driver participates in this protocol to some extent.  The
normal protocol is a four step process.  First the device is told
to abort the command.  If that doesn't work, the device is reset.
If that doesn't work, the SCSI bus is reset.  If that doesn't work
the host bus adapter is reset.  Because the cciss driver is a block
driver as well as a SCSI driver and only the tape drives and medium
changers are presented to the SCSI mid layer, and unlike more 
straightforward SCSI drivers, disk i/o continues through the block
side during the SCSI error recovery process, the cciss driver only
implements the first two of these actions, aborting the command, and
resetting the device.  Additionally, most tape drives will not oblige 
in aborting commands, and sometimes it appears they will not even 
obey a reset command, though in most circumstances they will.  In
the case that the command cannot be aborted and the device cannot be 
reset, the device will be set offline.

In the event the error handling code is triggered and a tape drive is
successfully reset or the tardy command is successfully aborted, the 
tape drive may still not allow i/o to continue until some command
is issued which positions the tape to a known position.  Typically you
must rewind the tape (by issuing "mt -f /dev/st0 rewind" for example)
before i/o can proceed again to a tape drive which was reset.

There is a cciss_tape_cmds module parameter which can be used to make cciss
allocate more commands for use by tape drives.  Ordinarily only a few commands
(6) are allocated for tape drives because tape drives are slow and
infrequently used and the primary purpose of Smart Array controllers is to
act as a RAID controller for disk drives, so the vast majority of commands
are allocated for disk devices.  However, if you have more than a few tape
drives attached to a smart array, the default number of commands may not be
enought (for example, if you have 8 tape drives, you could only rewind 6
at one time with the default number of commands.)  The cciss_tape_cmds module
parameter allows more commands (up to 16 more) to be allocated for use by
tape drives.  For example:

        insmod cciss.ko cciss_tape_cmds=16

Or, as a kernel boot parameter passed in via grub:  cciss.cciss_tape_cmds=8
