
HPSA - Hewlett Packard Smart Array driver
-----------------------------------------

This file describes the hpsa SCSI driver for HP Smart Array controllers.
The hpsa driver is intended to supplant the cciss driver for newer
Smart Array controllers.  The hpsa driver is a SCSI driver, while the
cciss driver is a "block" driver.  Actually cciss is both a block
driver (for logical drives) AND a SCSI driver (for tape drives). This
"split-brained" design of the cciss driver is a source of excess
complexity and eliminating that complexity is one of the reasons
for hpsa to exist.

Supported devices:
------------------

Smart Array P212
Smart Array P410
Smart Array P410i
Smart Array P411
Smart Array P812
Smart Array P712m
Smart Array P711m
StorageWorks P1210m

Additionally, older Smart Arrays may work with the hpsa driver if the kernel
boot parameter "hpsa_allow_any=1" is specified, however these are not tested
nor supported by HP with this driver.  For older Smart Arrays, the cciss
driver should still be used.

HPSA specific entries in /sys
-----------------------------

  In addition to the generic SCSI attributes available in /sys, hpsa supports
  the following attributes:

  HPSA specific host attributes:
  ------------------------------

  /sys/class/scsi_host/host*/rescan
  /sys/class/scsi_host/host*/firmware_revision

  the host "rescan" attribute is a write only attribute.  Writing to this
  attribute will cause the driver to scan for new, changed, or removed devices
  (e.g. hot-plugged tape drives, or newly configured or deleted logical drives,
  etc.) and notify the SCSI midlayer of any changes detected.  Normally this is
  triggered automatically by HP's Array Configuration Utility (either the GUI or
  command line variety) so for logical drive changes, the user should not
  normally have to use this.  It may be useful when hot plugging devices like
  tape drives, or entire storage boxes containing pre-configured logical drives.

  The "firmware_revision" attribute contains the firmware version of the Smart Array.
  For example:

	root@host:/sys/class/scsi_host/host4# cat firmware_revision
	7.14

  HPSA specific disk attributes:
  ------------------------------

  /sys/class/scsi_disk/c:b:t:l/device/unique_id
  /sys/class/scsi_disk/c:b:t:l/device/raid_level
  /sys/class/scsi_disk/c:b:t:l/device/lunid

  (where c:b:t:l are the controller, bus, target and lun of the device)

  For example:

	root@host:/sys/class/scsi_disk/4:0:0:0/device# cat unique_id
	600508B1001044395355323037570F77
	root@host:/sys/class/scsi_disk/4:0:0:0/device# cat lunid
	0x0000004000000000
	root@host:/sys/class/scsi_disk/4:0:0:0/device# cat raid_level
	RAID 0

HPSA specific ioctls:
---------------------

  For compatibility with applications written for the cciss driver, many, but
  not all of the ioctls supported by the cciss driver are also supported by the
  hpsa driver.  The data structures used by these are described in
  include/linux/cciss_ioctl.h

  CCISS_DEREGDISK
  CCISS_REGNEWDISK
  CCISS_REGNEWD

  The above three ioctls all do exactly the same thing, which is to cause the driver
  to rescan for new devices.  This does exactly the same thing as writing to the
  hpsa specific host "rescan" attribute.

  CCISS_GETPCIINFO

	Returns PCI domain, bus, device and function and "board ID" (PCI subsystem ID).

  CCISS_GETDRIVVER

	Returns driver version in three bytes encoded as:
		(major_version << 16) | (minor_version << 8) | (subminor_version)

  CCISS_PASSTHRU
  CCISS_BIG_PASSTHRU

	Allows "BMIC" and "CISS" commands to be passed through to the Smart Array.
	These are used extensively by the HP Array Configuration Utility, SNMP storage
	agents, etc.  See cciss_vol_status at http://cciss.sf.net for some examples.

