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

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 not engage the SCSI core at init 
time.  The driver must 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 because at driver init time, 
the SCSI core may not yet be initialized (because the driver is a block 
driver) and attempting to register it with the SCSI core in such a case 
would cause a hang.  This is best done via an initialization script 
(typically in /etc/init.d, but could vary depending on distribution). 
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.

