
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.

The "hpsa_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.

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
  /sys/class/scsi_host/host*/resettable
  /sys/class/scsi_host/host*/transport_mode

  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

  The transport_mode indicates whether the controller is in "performant"
  or "simple" mode.  This is controlled by the "hpsa_simple_mode" module
  parameter.

  The "resettable" read-only attribute indicates whether a particular
  controller is able to honor the "reset_devices" kernel parameter.  If the
  device is resettable, this file will contain a "1", otherwise, a "0".  This
  parameter is used by kdump, for example, to reset the controller at driver
  load time to eliminate any outstanding commands on the controller and get the
  controller into a known state so that the kdump initiated i/o will work right
  and not be disrupted in any way by stale commands or other stale state
  remaining on the controller from the previous kernel.  This attribute enables
  kexec tools to warn the user if they attempt to designate a device which is
  unable to honor the reset_devices kernel parameter as a dump device.

  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.

