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 E300

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

# cd /dev
# ./MAKEDEV cciss

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

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 distibution). 
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, in addition to and prior to informing the SCSI 
mid layer.  This may be done via the /proc filesystem.  For example:

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

This causes the adapter 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.  Once this is done, the SCSI mid layer 
can be informed of changes to the virtual SCSI bus which the driver 
presents to it in the usual way. For example: 

	echo scsi add-single-device 3 2 1 0 > /proc/scsi/scsi
 
to add a device on controller 3, bus 2, target 1, lun 0.   Note that
the driver makes an effort to preserve the devices positions
in the virtual SCSI bus, so if you are only moving tape drives 
around on the same adapter and not adding or removing tape drives 
from the adapter, informing the SCSI mid layer may not be necessary.

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.

