Tue Sep  2 12:14:04 CDT 2008
	Added fan, temperature and power supply status
	reporting (thanks to Christian Hofstaedtler)
Tue Sep 19 14:55:25 CDT 2006
	Autoconfiscated cciss_vol_status
Tue Mar  6 14:44:14 EST 2007
	Added support for more than 16 logical drives.
	Added -x option for exhaustive search
Mon Nov  2 04:56:55 CST 2009
	Added support for hpsa driver
	Added support for hpahcisr driver

	Added support for new controllers:
		Smart Array P700m
		Smart Array P212
		Smart Array P410
		Smart Array P410i
		Smart Array P411
		Smart Array P812

	Cache some serial numbers to cut down on redundant i/o
	  when rummaging around trying to figure out what's what.

	Assume 16 possible storage boxes for SAS based controllers

Wed Nov 18 10:18:22 MST 2009
	* Fixed bug that if a logical drive had an active spare, and thus was
	  "ok", the exit code was still zero, so it acted as though nothing
	  were wrong, even though the failed drive needed replacing to get back
	  to original good status with spares.
	* Fixed bug in spare status messages.  One message was left out, and so
	  some of the others were wrong, being off-by-one.
	* Bumped version up to 1.06

2010/05/20 07:12:06
	* Change weird "uint" to normal "unsigned int" Thanks to Frank Bergmann for this patch.
	* Fix strnlen that should have been a strlen.  Thanks to Frank Bergmann for noticing this.

2010/10/11 09:41:23
	* get rid of typedefs

2010/10/13 07:02:37
	* cosmetic whitespace fixes

Date: 2010/10/13 07:40:06
	* Do not treat hpsa and hpahcisr as if they were MSA1000, but instead treat
	  as cciss devices.  This means, use the CCISS_PASSTHRU ioctl, not SG_IO
	  (the drivers for the MSA1000 are qlogic or emulex, and do not have the
	  CCISS_PASSTHRU ioctl, and so must use SG_IO.  The difference in power between
	  the SG_IO and CCISS_PASSTHRU is mainly that the CCISS_PASSTHRU allows specifying
	  the 8-byte LUNID, and thus can aim commands at any attached device, whereas
	  SG_IO is aimed by means of which device node you open.  However, there
	  are devices (e.g. external controllers, MSA20, etc.) which do not have any
	  exposed device nodes and so are unreachable by SG_IO.  By treating hpsa and
	  hpahcisr as cciss, we get access to those devices.

	* Factor out msa1000_status()

	* Cleaned up -Wall warnings.

	* Factor out device type sanity checking code into cciss_device_type_is_correct(),
	  and get rid of the ugly goto for hpsa and hpahcisr cases.

	* Factor out cciss_logical_drive_status()

	* Rename the final parameter of cciss_logical_drive_status from 'i' to more
	  sensible 'volume_number'

	* Make all functions static

2010/10/14 09:36:32
	* Zero out controller_lun_list at the beginning init_cciss_to_bmic and num_controllers.
	  init_cciss_to_bmic is called once per controller on the command line to find external
	  controllers, and should be zeroed out each time.

2010/11/05 08:44:13
	* Provided local cciss_ioctl.h and cciss_defs.h to aid distros which
	  come with a broken variant of cciss_ioctl.h, and added instructions in
	  INSTALL which explain how to use these fixed headers.
	* Added note about aclocal-1.10, and corrected note about how to deal with
	  broken cciss_ioctl.h header files.
	* Clarified that configure failing to #define __user is not the only reason
          that cciss_ioctl.h might not compile.
	* Added linux_alternate_makefile.mk to allow sidestepping autoconf problems.

2010/11/19 14:54:44
	* Now reports physical drive serial numbers, firmware revision, connector, box and bay information.
	* Factor out find_bus_target() function
	* Factor out format_phys_drive_location()
	* Report S.M.A.R.T. predictive failures

Changes since 1.07:

2010/12/02 09:35:54
	* Added examples to man page of S.M.A.R.T predictive failure reporting.
	* make it compile on freebsd
	* Fix a file descriptor leak

Changes since 1.08:

2010/12/03 08:23:26
	* Remove unused bogus variable declarations at the end of a function
	  that didn't compile on older gcc versions. (Thanks to Simon Matter)
	* Print error information if sense bus parameters encounters a target
	  status.
	* Remove bogus incorrect initialization of controller_lun_list (it's
	  done later down in the code correctly.)
	* Make it compile with no warnings after "configure CFLAGS=-Wall"

Changes since 1.09:
	* Clean up uninitialized variables detected by valgrind.
	* Added some new smart array controllers to the list of known
	  controllers
	* Replace the too specific is_hpsa() and is_hpahcisr() functions with
	  a more generic is_smart_array().  This was preventing -u option from
	  working with the hpsa driver.
	* Remove inquiry_vendor_model_matches() function which is now no
	  longer used.
	* Added -W and -Wall flags to gcc in linux_alternate_makefile.mk
	  and fixed up all the warnings that those found.
	* Add -V (verbose) option which prints out extra information
	  about the controller (board ID, running firmware revision,
	  ROM firmware revision,  and number of logical drives).
	* Make the --verbose option print out more information about the
	  controllers and physical drives.  For each controller, the board ID,
	  number of logical drives, currently running firmware revision and ROM
	  firmware revision are printed.  For each physical drive, the location,
	  vendor, model, serial number, and firmware revision are printed.
	* Added .gitignore and cvsignore files
	* regenerated configure, aclocal.m4, and Makefile.in on RHEL6u2.
	* Made -p shortcut for --persnickety actualy work.

Changes since 1.10

	* Added support for new controllers
	* Now can report status of nonvolatile cache
	* Misc. code cleanup and refactoring
	* Do not spin up sleeping spare drives.  This is done by using
	  "extended" CISS_REPORT_LUNS to obtain the device type instead of
	  sending inquiries to every device returned by standard
	  CISS_REPORT_LUNS to get the device type.

Changes since 1.11

	* Fixed Gen8 controller names
	* Added support for Gen9 controllers
	* Fixed some compilation warnings
	* Print out Total Cache memory and Cache Ratio

Changes since 1.12

	* Correct some logic, use bitwise instead of logical ands
