| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | This driver is for Compaq's SMART Array Controllers. | 
 | 2 |  | 
 | 3 | Supported Cards: | 
 | 4 | ---------------- | 
 | 5 |  | 
 | 6 | This driver is known to work with the following cards: | 
 | 7 |  | 
 | 8 | 	* SA 5300 | 
 | 9 | 	* SA 5i  | 
 | 10 | 	* SA 532 | 
 | 11 | 	* SA 5312 | 
 | 12 | 	* SA 641 | 
 | 13 | 	* SA 642 | 
 | 14 | 	* SA 6400 | 
 | 15 | 	* SA 6400 U320 Expansion Module | 
 | 16 | 	* SA 6i | 
 | 17 | 	* SA P600 | 
 | 18 | 	* SA P800 | 
 | 19 | 	* SA E400 | 
| Mike Miller | 9dc7a86 | 2005-09-13 01:25:19 -0700 | [diff] [blame] | 20 | 	* SA P400i | 
 | 21 | 	* SA E200 | 
 | 22 | 	* SA E200i | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 23 |  | 
 | 24 | If nodes are not already created in the /dev/cciss directory, run as root: | 
 | 25 |  | 
 | 26 | # cd /dev | 
 | 27 | # ./MAKEDEV cciss | 
 | 28 |  | 
 | 29 | Device Naming: | 
 | 30 | -------------- | 
 | 31 |  | 
 | 32 | You need some entries in /dev for the cciss device.  The MAKEDEV script | 
 | 33 | can make device nodes for you automatically.  Currently the device setup | 
 | 34 | is as follows: | 
 | 35 |  | 
 | 36 | Major numbers: | 
 | 37 | 	104	cciss0	 | 
 | 38 | 	105	cciss1	 | 
 | 39 | 	106	cciss2 | 
 | 40 | 	105	cciss3 | 
 | 41 | 	108	cciss4 | 
 | 42 | 	109	cciss5 | 
 | 43 | 	110	cciss6 | 
 | 44 | 	111	cciss7 | 
 | 45 |  | 
 | 46 | Minor numbers: | 
 | 47 |         b7 b6 b5 b4 b3 b2 b1 b0 | 
 | 48 |         |----+----| |----+----| | 
 | 49 |              |           | | 
 | 50 |              |           +-------- Partition ID (0=wholedev, 1-15 partition) | 
 | 51 |              | | 
 | 52 |              +-------------------- Logical Volume number | 
 | 53 |  | 
 | 54 | The device naming scheme is: | 
 | 55 | /dev/cciss/c0d0			Controller 0, disk 0, whole device | 
 | 56 | /dev/cciss/c0d0p1		Controller 0, disk 0, partition 1 | 
 | 57 | /dev/cciss/c0d0p2		Controller 0, disk 0, partition 2 | 
 | 58 | /dev/cciss/c0d0p3		Controller 0, disk 0, partition 3 | 
 | 59 |  | 
 | 60 | /dev/cciss/c1d1			Controller 1, disk 1, whole device | 
 | 61 | /dev/cciss/c1d1p1		Controller 1, disk 1, partition 1 | 
 | 62 | /dev/cciss/c1d1p2		Controller 1, disk 1, partition 2 | 
 | 63 | /dev/cciss/c1d1p3		Controller 1, disk 1, partition 3 | 
 | 64 |  | 
 | 65 | SCSI tape drive and medium changer support | 
 | 66 | ------------------------------------------ | 
 | 67 |  | 
 | 68 | SCSI sequential access devices and medium changer devices are supported and  | 
 | 69 | appropriate device nodes are automatically created.  (e.g.   | 
 | 70 | /dev/st0, /dev/st1, etc.  See the "st" man page for more details.)  | 
 | 71 | You must enable "SCSI tape drive support for Smart Array 5xxx" and  | 
 | 72 | "SCSI support" in your kernel configuration to be able to use SCSI | 
 | 73 | tape drives with your Smart Array 5xxx controller. | 
 | 74 |  | 
 | 75 | Additionally, note that the driver will not engage the SCSI core at init  | 
 | 76 | time.  The driver must be directed to dynamically engage the SCSI core via  | 
 | 77 | the /proc filesystem entry which the "block" side of the driver creates as  | 
 | 78 | /proc/driver/cciss/cciss* at runtime.  This is because at driver init time,  | 
 | 79 | the SCSI core may not yet be initialized (because the driver is a block  | 
 | 80 | driver) and attempting to register it with the SCSI core in such a case  | 
 | 81 | would cause a hang.  This is best done via an initialization script  | 
 | 82 | (typically in /etc/init.d, but could vary depending on distibution).  | 
 | 83 | For example: | 
 | 84 |  | 
 | 85 | 	for x in /proc/driver/cciss/cciss[0-9]* | 
 | 86 | 	do | 
 | 87 | 		echo "engage scsi" > $x | 
 | 88 | 	done | 
 | 89 |  | 
 | 90 | Once the SCSI core is engaged by the driver, it cannot be disengaged  | 
 | 91 | (except by unloading the driver, if it happens to be linked as a module.) | 
 | 92 |  | 
 | 93 | Note also that if no sequential access devices or medium changers are | 
 | 94 | detected, the SCSI core will not be engaged by the action of the above | 
 | 95 | script. | 
 | 96 |  | 
 | 97 | Hot plug support for SCSI tape drives | 
 | 98 | ------------------------------------- | 
 | 99 |  | 
 | 100 | Hot plugging of SCSI tape drives is supported, with some caveats. | 
 | 101 | The cciss driver must be informed that changes to the SCSI bus | 
 | 102 | have been made, in addition to and prior to informing the SCSI  | 
 | 103 | mid layer.  This may be done via the /proc filesystem.  For example: | 
 | 104 |  | 
 | 105 | 	echo "rescan" > /proc/scsi/cciss0/1 | 
 | 106 |  | 
 | 107 | This causes the adapter to query the adapter about changes to the  | 
 | 108 | physical SCSI buses and/or fibre channel arbitrated loop and the  | 
 | 109 | driver to make note of any new or removed sequential access devices | 
 | 110 | or medium changers.  The driver will output messages indicating what  | 
 | 111 | devices have been added or removed and the controller, bus, target and  | 
 | 112 | lun used to address the device.  Once this is done, the SCSI mid layer  | 
 | 113 | can be informed of changes to the virtual SCSI bus which the driver  | 
 | 114 | presents to it in the usual way. For example:  | 
 | 115 |  | 
 | 116 | 	echo scsi add-single-device 3 2 1 0 > /proc/scsi/scsi | 
 | 117 |   | 
 | 118 | to add a device on controller 3, bus 2, target 1, lun 0.   Note that | 
 | 119 | the driver makes an effort to preserve the devices positions | 
 | 120 | in the virtual SCSI bus, so if you are only moving tape drives  | 
 | 121 | around on the same adapter and not adding or removing tape drives  | 
 | 122 | from the adapter, informing the SCSI mid layer may not be necessary. | 
 | 123 |  | 
 | 124 | Note that the naming convention of the /proc filesystem entries  | 
 | 125 | contains a number in addition to the driver name.  (E.g. "cciss0"  | 
 | 126 | instead of just "cciss" which you might expect.) | 
 | 127 |  | 
 | 128 | Note: ONLY sequential access devices and medium changers are presented  | 
 | 129 | as SCSI devices to the SCSI mid layer by the cciss driver.  Specifically,  | 
 | 130 | physical SCSI disk drives are NOT presented to the SCSI mid layer.  The  | 
 | 131 | physical SCSI disk drives are controlled directly by the array controller  | 
 | 132 | hardware and it is important to prevent the kernel from attempting to directly | 
 | 133 | access these devices too, as if the array controller were merely a SCSI  | 
 | 134 | controller in the same way that we are allowing it to access SCSI tape drives. | 
 | 135 |  | 
| mike.miller@hp.com | 3da8b71 | 2005-11-04 12:30:37 -0600 | [diff] [blame] | 136 | SCSI error handling for tape drives and medium changers | 
 | 137 | ------------------------------------------------------- | 
 | 138 |  | 
 | 139 | The linux SCSI mid layer provides an error handling protocol which | 
 | 140 | kicks into gear whenever a SCSI command fails to complete within a | 
 | 141 | certain amount of time (which can vary depending on the command). | 
 | 142 | The cciss driver participates in this protocol to some extent.  The | 
 | 143 | normal protocol is a four step process.  First the device is told | 
 | 144 | to abort the command.  If that doesn't work, the device is reset. | 
 | 145 | If that doesn't work, the SCSI bus is reset.  If that doesn't work | 
 | 146 | the host bus adapter is reset.  Because the cciss driver is a block | 
 | 147 | driver as well as a SCSI driver and only the tape drives and medium | 
 | 148 | changers are presented to the SCSI mid layer, and unlike more  | 
 | 149 | straightforward SCSI drivers, disk i/o continues through the block | 
 | 150 | side during the SCSI error recovery process, the cciss driver only | 
 | 151 | implements the first two of these actions, aborting the command, and | 
 | 152 | resetting the device.  Additionally, most tape drives will not oblige  | 
 | 153 | in aborting commands, and sometimes it appears they will not even  | 
 | 154 | obey a reset coommand, though in most circumstances they will.  In | 
 | 155 | the case that the command cannot be aborted and the device cannot be  | 
 | 156 | reset, the device will be set offline. | 
 | 157 |  | 
 | 158 | In the event the error handling code is triggered and a tape drive is | 
 | 159 | successfully reset or the tardy command is successfully aborted, the  | 
 | 160 | tape drive may still not allow i/o to continue until some command | 
 | 161 | is issued which positions the tape to a known position.  Typically you | 
 | 162 | must rewind the tape (by issuing "mt -f /dev/st0 rewind" for example) | 
 | 163 | before i/o can proceed again to a tape drive which was reset. | 
 | 164 |  |