Changes for 1.70:

Enhancement Request:
- SCGCQ00440706 LSIUTIL Utility modification for New Gen3 Product name labels and fixing for incorrect Gen3 SAS uEFI version reporting.
- SCGCQ00438328 lsiutil - add support for inband expander CLI
- SCGCQ00468538 NetApp functionality to limit LUN Scan
- SCGCQ00467946 LSIUTIL on SPARC support

Defects :
- SCGCQ00425049 LSIUTIL:  EFI BIOS Erase Hang
- SCGCQ00438322 lsiutil 1.69 does not report the correct Device ID information for Gen 3 adapters

-----------------------------------------------------------------------------

Changes for 1.69:

- Added Support for SAS3 Linux Drivers
- Fixed bug were OS names for drives > sdz were not displayed (on Linux)

-----------------------------------------------------------------------------

Changes for 1.68:

- Fix in option 16 output.  Added device type decode of STP target and added
  fix to make sure undecoded device types will print nothing in the 'type'
  field rather than the value from the last successfully decoded device.
- Added support for creating raid volumes on drives greater than 2TB
  Modified method docreatevolume2()
- Added support for creating raid volumes with 4k drives on MPI2 and MPI2.5
  controllers.  StripSize will be set to zero to let firmware calculate it.
- Modified source file copyright information

-----------------------------------------------------------------------------

Changes for 1.67:

- Updated to MPI2 2.00.XX header files (MPI2.5 rev B).  Includes support
  for identifying SAS3XXXX devices.  MPI2.5 support for DOS and EFI are not
  supported at this time.
- Added option 25 for Power Management settings to contain the MPI control
  message, get IOUnitPage7, and get/set SasIoUnitPage8.
- Added sub-option 60 (change RAID rate) to the RAID actions menu (option 21)
- Added option 71 to decode Flags and DeviceInfo for SASDevicePage0
  for each device attached to the adapter.
- Modified the Alta programming/display algorithm (Option 58, sub-option 1 & 2)
  to allow for 16 character serial number and part numbers (per the spec).
  Also added the global flag option to prompt for errors created by a 
  non-existent SAS Address in the parameter file. (use lsiutil -g to turn it on).
- Fixed SAS Address programming in option 44 to program a sequential address
  for each PHY (as opposed to only programming PHY[0]).
- Add support for the LSI SAS3 expander in the following areas:
    - Support for resetting the expander (main menu option 20 (diagnostic menu)
      -> option 98 (Reset Expander))
    - Support for firmware image signature checking to help validate a firmware
      download image matches the correct expander type (main menu option 20
      (diagnostic menu) -> option 20 (Expander firmware download))
    - Support for the SAS3 expander when specifying 'all' as the expander to
      update in the expander firmware download option (allows update of all
      expanders (of the same type) in a domain at once).
    - Support when doing a manufacturing image update via the expander firmware
      download option or when using the option to modify expander mfg image
      fields (main menu option 20 (diagnostic menu) -> option 27 (Change
      SAS2/SAS3 Expander Manufacturing Data Fields)).
- Added WarpDrive recognition
- Added support for new Windows XP driver name.
- Added option 72 to store SC information (MPI2.0-only)

-----------------------------------------------------------------------------

Changes for 1.66:

- Updated to MPI2 2.00.18 header files (MPI2 rev Q).  Includes support in
  option 67 and 100 for newly refined config pages as well as device ID
  recognition updates.
- Added the ability to decode the raw timestamps in option 35 (display HBA
  firmware logs) into a readable format.  The default behavior is unchanged
  from previous releases.  Invoke lsiutil with the '-g' flag to enable a
  prompt in option 35 for doing the decoding.
- Modified command line argument checking to return appropriate error codes
  (EINVAL, ENODEV) for incorrect parameters rather than success.
- Modified doIndentify() for SAS to upload the firmware from the backup region
  rather than active.  This allows for image verification after firmware
  download without first resetting adapter.
- For read/write tests replaced the NCR pattern with a random one.
- added some improvements to SCSI error handling, especially check conditions
  to be more generic and catch more errors.
- Updated option 20, sub-option 16 (Issue product-specific SAS IO Unit Control)
  to work with SAS GEN2 HBAS.
- For DOS/EFI, fixed the startup error message seen with recent SAS GEN2 HBA
  HBA firmware (mpt_receive_data failed, IOCStatus = 0020 (Invalid Action))
- Improved HBA detection under EFI for some platforms without PCI dual
  address cycle support.
- For option 65 (SAS UART Debug Console), changed the default buffer size to
  1MB (on Windows default is now calculated based on the MaxSGList driver
  registry parameter).  The user is no longer prompted for a buffer size to
  allocate by default.  To enable the prompt for buffer size invoke lsiutil
  with the '-g' flag.
- fixed an issue with displaying hidden RAID devices (in option 8 output)
  for inactive volumes
- In option 43 (Diagnostic Buffer actions), updated the ProductSpecific
  parameters (debug masks) in the Register option to support 64-bit values
  for MPI2.
- In option 21, sub-option 1 (Show Volumes in the RAID actions menu) fixed
  interpretation of data scrub to properly indicate whether it is allowed
  rather than to mean that it is "in progress".
- Under Linux resolved the warnings to the system log indicating lsiutil
  'tainting' the system due to mmap() slowpath on kernels 2.6.27 and later.
- Fixed an issue with a SAS2308 HBA being reported as a SAS2208.
- For option 20, sub-option 30 (Inject media error in the Diagnostics menu),
  improved the error handling and added support for sending WRITE LONG(10)
  with WR_UNCOR set which will get translated to ATA WRITE UNCORRECTABLE EXT
  for SATA drives.
- Removed menu item 6 (Download SEEPROM) and menu item 7 (Upload SEEPROM) for
  SAS products since they were not applicable.  

-----------------------------------------------------------------------------

Changes for 1.65:

- For SAS2 HBAs, add support for target IDs greater than 255.  Also optimized
  option 8 (scan for devices) under Linux and Windows to only scan for devices
  in the range of targets the firmware indicates exists based on devhandles.
- Added a -8 command line argument to limit the number of LUNs scanned to 8
  instead of the default of 256.
- Fixed option 42 (Display OS device names) for both Linux and Solaris for
  SAS2 HBAs.
- Fixed option 42 (Display OS device names) under Linux when using kernels
  2.6.31 and later.
- Fixed option 42 (Display OS device names) for IR RAID Volumes under Linux.
- Fixed a display bug in the output of 'Show physical disks' (RAID Action menu
  item 2).  The devhandles for the disk paths should now be output correctly.
- Increased the chip reset delay under DOS and EFI to 50ms (up from 20ms).
- Changed the DOS/EFI driver to correctly use the default descriptor rather
  than SCSI IO descriptor for RAID passthrough requests.
- Fixed the NVDATA "wrong board" warning for SAS2 HBAs when downloading
  firmware.

-----------------------------------------------------------------------------

Changes for 1.64:

- Updated to MPI2 2.00.13 header files.  Includes support in option 67 and
  100 to print the newly defined config pages.  Also includes the 2208
  device ID recognition.
- Updated to MPI1 01.05.20 header files.  Minor changes only, this has no
  functional impact.
- Added a new expert main menu option 65 ("SAS UART Debug Console") which is
  available for SAS2 HBAs.  Running this option prompts the user for how
  large a buffer to reserve for command responses as well as whether they
  would like to log the output to a file.  After this, the user is given a
  '%' prompt to enter commands, mimic'ing the UART console.  The user can
  type 'exit' to return to the normal lsiutil menu.
  Standard '-a' scripting of this console feature is available as well.  For
  example, the following command line will start lsiutil using the second
  HBA port found, start the UART console, and execute the "iop show diag"
  and "exit" commands before quitting:
  # lsiutil -p 2 -a 65,,,"iop show diag","exit",0 
- Added a few improvements for working with LSI SAS2 expanders (Bobcat):
   o Recognize the buffer IDs for bobcat firmware images and manufacturing
     data so a warning is no longer printed when updating.
   o Enhanced the expander firmware download (diagnostic menu option 20) to
     distinguish between LSI SAS1 and SAS2 expanders if the 'all' option
     is used to update all expanders in the domain and there is a mix of SAS1
     and SAS2 expanders.  In this case, the user is given the option of which
     type of expander to perform the update on.  NOTE: that there is no
     support to differentiate between different platforms within the SAS1 or
     SAS2 space.  So, for example, if there is a mix of SAS1 expanders that
     require different firmware images, the 'all' option will provide no
     protection against putting the same firmware image in all the expanders.
   o When using expander firmware download (diagnostic menu option 20) to
     update the manufacturing image for an LSI SAS2 expander, lsiutil will
     fetch the current SAS address, Enclosure Logical ID, and Ethernet MAC
     Address from the expander as well as from the image file provided by the
     user and then for each field, prompt the user on whether they would like
     to use the value in the supplied manufacturing image (the default),
     preserve the existing value already in the expander, or override the value
     on the spot.
   o Added a new expert level menu option 27 under the diagnostic menu
     (option 20 from the main menu) called "Change SAS2 Expander Manufacturing
     Data Fields".  This option will retrieve the current manufacturing data
     from the selected LSI SAS2 expander and then display to the user the
     current SAS Address, Enclosure Logical ID, and Ethernet MAC Address and
     allow the user to enter new values for any of these fields.  The new 
     values are then written back to the expander, to take effect after the
     expander is reset.
- updated the chip recognition for all current LSI MPT chips/revisions.
- Fixed event reporting (option 43) for SAS1 HBAs under SPARC Solaris.
- updated the vi settings to reflect use of spaces rather than tabs.
- minor change to the max target calcuation to make it more accurate.
- For option 17 (show expander route tables) added a check for whether
  PHY_VACANT was returned and if so print a 'V' instead of a routing
  attribute since the actual routing attribute is not available.
- For option 67/100 (Dump all port state) added a check for config pages
  returning more than 255 DWORDs.  For such config pages, truncate the output
  and print a message indicating that the output was truncated.
- miscellaneous formatting and minor display bug fixes
- changed the DOS/EFI MPT driver to register as a BIOS rather than HOST
  driver for SAS2 HBAs.  This causes the HBA firmware to handle device
  registration and events without help from the driver.  This change allows
  for things like RAID volume re-sync to restart after a drive hotplug.

-----------------------------------------------------------------------------

Changes for 1.63:

- All tabs in the source code have been changed to spaces.  For this release
  only, *_tabified.c variants of the source code are provided which include
  all of the changes since 1.62 except for the tab->space conversion.
- Moved the Solaris binaries to a single directory.  lsiutil.sparc is the
  SPARC binary and lsiutil.i386 is the X86 binary.
- updated MPI headers to 2.00.11.
- Added support for the magic number change in the SAS gen2 Linux driver.
  This means that version mpt2sas-01.255.01.00 or later is required to
  work with this release of lsiutil.
- Fixed display current events (option 40) for gen2 SAS HBAs.
- Added new menu option 58 (SAS only) for Alta diagnostics.
- Added support for the lsi_gen2 Windows XP driver.
- Added support for the mpt_sas Solaris gen2 SAS driver.
- Added support in the expander firmware download option to accept 'all' as
  a valid value when prompted for the expander to operate on.  This will
  cause the image to be sent and verified for all expanders in the list.
- Added support in the expander firmware download option to poll for interim
  completion statuses when download microcode used as well as include
  the additional status if the update fails.
- Added two new expert mode options to the diagnostics menu,
  'Display expander log entries' (option 25), and 'Clear (erase) expander
  log entries' (option 26).  Currently only gen1 (Yeti) expanders are supported.
- For all SMP requests, now setting 'Allocated Response Length' to 0xFF.
- Added support for the 'Show Volumes' and 'Get Volume State' options for SAS
  gen2 IR to display inactive volume reason.
- Fixed a bug when printing Incompatible and Offline Reasons for gen2 SAS IR
  phys disks.
- Made changes to routines that use RaidConfigPage0.  Fixes segmentation fault
  when activating a foreign volume with gen2 SAS HBAs.
- Added a retry mechanism when config page requests return MPI_IOCSTATUS_BUSY.
- Fixed a bug in displaying log entries (option 35) in which one DWORD was
  not being displayed.
- In diagnostic menu option 2 (WriteBuffer/ReadBuffer/Compare Test) added
  support for all the same patterns that the Write/Read/Compare test (option 4)
  supports and added expected/actual printing when miscompares found.
- Fix handling of devices with T10 DIF (EEDP) enabled.
- In doIdentify, don't use the "actual image length" returned by the SCSI
  firmware since it is not trustworthy.
- In doDisplayLoggedInDevices, if the port device is not returned when reading
  device pages, use the port page to provide the missing information.
- When displaying OS device names under Linux, add use of O_NONBLOCK to the
  opens() to avoids hanging in some situations.
- For option 56 (Read/write expander memory), added support for the x12
  expander via support for the ring format LSI SMP.
-----------------------------------------------------------------------------

Changes for 1.62:

- Updated to use MPI2 header files 2.0.0.10.  This means the minimum
  requirements for using this version of lsiutil with gen2 SAS HBAs is
  firmware version 00.250.16.00, Windows driver 2.00.00.17 and Linux driver
  00.255.05.00.
- Added support for diagnostic trace buffers (option 43) for gen2 SAS HBAs.
- Fixed a bug with displaying log entries (option 35) for gen2 SAS HBAs.
- Added three new RAID actions (option 21) for gen2 HBAs.  Volume consistency
  check, Stop volume consistency check, and Online Capacity Expansion.  These
  are RAID Action menu options 34, 35, and 36 respectively.
- Added support for in-band resetting of bobcat (gen2 SAS) expanders (menu
  option 20, sub-option 98).
- For gen2 IR changed coerced size to come from firmware.
- For gen2 changed port->maxTargets to be based on MaxDevhandle+MaxVolumes
  rather than MaxTargets.
- Fixed a bug with processing VPD files under EFI.  The sscanf() routine in
  helper.c was missing support for %c.

-----------------------------------------------------------------------------

Changes for 1.61:

- Update the data structures for bus/target to devhandle mapping to use 32-bit
  target and bus IDs.  This affects SAS gen2 driver interaction.  This release
  requires at least version 2.0.0.16 of the LSI_SAS2 Windows driver and version
  00.00.02.19 of the Linux mpt2sas driver.
- Increase timeout for task management requests from 30 to 60 seconds
- Fix a bug that could lead to attempting to double close the log file and
  cause a call to free() to fail.
- Fix option 18 for SAS gen2 HBAS (changing the wwn).
- Fix link speed detection for SAS gen2.
- Fixed bug for SAS gen2 that could cause lsiutil to send requests with a
  devhandle of 0xffff.

-----------------------------------------------------------------------------

Changes for 1.60:

- fix bug in doDeleteVolume2 for setting the volume dev handle in the RAID
  action request.
- Add option to use default settings on volume creation.
- Changed default stripe size to 128K
- fixed a build error that occurred if REGISTER_ACCESS was set to 0 at
  compile time.

-----------------------------------------------------------------------------

Changes for 1.59:

- Add code that determines BIOS/FCode compatibility for first MPI 2.0 chips.
- Add "Dump PCI config space".
- Modify code that allows changing SAS persistent entries, to handle changing
  a set of mappings from one EnclosureId to another EnclosureId.
- Enhance display of expander routing tables to accommodate the SAS 2.0
  committee changing the opcode for REPORT EXPANDER ROUTE TABLE LIST from
  17h to 22h.
- After displaying diagnostic pages, don't ask about making changes except for
  page numbers that are known to be writable.
- Make modifications to the RAID volume creation code to take drive minimums
  from config pages, rather than hard-coding them.  Also, allow selecting a
  stripe size for any volume type except for mirrored (RAID1) volumes.
- Add ability to send QUERY TASK and ABORT TASK to the "Reset target" routine;
  this is not the ideal place to put them, but it's the best of the current
  alternatives.  No allowance is made for specifying the identity of the task
  to be queried or aborted; the intent is that these will be used merely to
  verify that such requests can be issued (not that they'll be successful).
- Add some missing config pages to "Dump all port state".
- After resetting the chip (DOS/EFI), wait 20 milliseconds before making any
  chip accesses, per the MPT specification.

-----------------------------------------------------------------------------

Changes for 1.58:

- Add option 66, "Show SAS discovery errors".
- Fix bug introduced in 1.57 that broke option 13 for SAS.
- Fix bug introduced in 1.56 that made diagnostic buffer actions appear to
  fail for Windows, when in fact they had actually succeeded.
- Fix options 8, 13, 16, 18, 33, 35, 44, 68, 80, and 81, to accommodate
  differences between MPI 1.x and MPI 2.0 (the new link speed of 6.0 Gbps
  being the most prominent one).
- Modify expander firmware download to allow boot records (BufferID 10) to
  be headerless.  If a header is needed (mode 2), but is not present, add it.
  If a header is not needed (mode 6), but is present, remove it.  Also fix
  verification code to be more robust.
- Fix MPI 2.0 bug that caused duplicate devices to be shown on Windows during
  a device scan.

-----------------------------------------------------------------------------

Changes for 1.57:

- Implement RAID actions for MPI 2.0, and implement "Delete hot spare".
- Add Linux support for MPI 2.0.
- Modify NVDATA concatenation code for latest MPI 2.0 firmware changes.
- When downloading expander firmware, if mode is 2, use Write Buffer, but if
  mode is 6 or 7, use SES Download Microcode.  Before downloading, verify the
  image for Buffer IDs 0, 2, and 10.
- For SAS, add "Force full discovery".
- Add "Identify FLASH device".
- Fix more endian problems, by adding code that allows the compiler to detect
  them automatically.
- Skip verification after firmware download when the special bridge firmware
  (1.18.99) is being used.
- Fix the multi-path detection code (used when creating volumes), which was
  reading enclosure pages incorrectly.
- Fix the code that handles metadata size, to use ManufacturingPage4 instead
  of IOCPage6 (the former can be modified, while the latter cannot).
- After reading diagnostic pages, allow the data to be modified and the page
  written back.

-----------------------------------------------------------------------------

Changes for 1.56:

- Implement -k flag to suppress the "select a device" mechanism for many
  diagnostic functions, and instead allow directly entering bus and target
  numbers.
- Fix the -h (help) display, which got broken when paging was implemented.
- Add some routines to help debug expanders (read/write expander memory,
  read/write expander ISTWI devices, expander firmware download, expander
  reset).
- Implement all of the diagnostic buffer actions for Solaris (a new driver is
  required).  Also, when any diagnostic buffer action fails, display detailed
  information if it's available.
- Don't try to verify a firmware download for SAS if only a bootloader image
  is active; the required "firmware upload" support is not implemented.
- Fix endian issues in various places.
- Fix the code that was trying to detect multi-pathed disks when creating RAID
  volumes; it was not correctly determining whether two enclosures were in fact
  the same enclosure.
- In the "Log Sense" and "Diagnostic Page" tests, make the buffer larger, and
  check for the device returning more data than requested.
- When working with RAID physical disks, consistently use the physical disk
  count that is in IOCPage3, vs. the one in IOCPage2.
- Add path information to the display of RAID physical disks, whenever there
  is more than one path.
- Enhance "Scan for devices" to also show (hidden) RAID physical disks.
- Fix the Solaris code that determines device names, to handle SCSI Enclosure
  Services (SES) devices, and to handle SAS disks with long GUID-based names.
- For "Send SMP request", if the handle entered is 0, prompt for SAS WWID and
  physical port to be entered manually.
- Fix bug in "Send SCSI CDB" that caused loss of detailed failure information
  (including SCSI status and, if there was a Check Condition, any sense data).
- More MPI 2.0 work:  add a real list of supported devices, fix the expander
  routing table display code, fix the SATA Clear Affiliation code, fix SCSI I/O
  reply handling to correctly obtain sense data.
- Fix a bug in the EFI implementation of scanf():  %n did not work correctly.

-----------------------------------------------------------------------------

Changes for 1.55:

- Extend paged output in menus to cover all output in all circumstances.
- Make the maximum number of devices shown in menus compile-time configurable,
  with the default remaining at 99.
- Add the ability to turn off MPT register access at compile time, since this
  causes crashes on some Linux standalone platforms.
- Accommodate more differences between MPI 1.5 and MPI 2.0 (in SCSI I/O replies
  and event handling).  Also, for MPI 2.0, use the BTDH IOCTL to get the driver
  mapping between bus/target and device handle.
- When the -g flag is used, ask if the fwdiagtool header should be added when
  doing diagnostic buffer reads.
- Have options 15, 17, and 20 automatically bring the port online under DOS and
  EFI.
- Expand the PCI information printed to include the segment number.
- Add verification after firmware downloads (read the image back, and compare
  with what was written).
- When creating RAID volumes, correctly enforce rules about mixing SAS and
  SATA drives, and SSD and non-SSD drives.  Also, use the metadata size that
  is specified in IOC Page 6.
- Fix code that implements setting the volume name (string length check was
  wrong, and volume addressing was wrong).
- When deleting a the last volume, delete any hot spares that remain; otherwise
  those physical disks are left stranded.
- For Solaris, use an IOCTL to get the driver name and version.  Use that same
  IOCTL to get PCI information; only if that fails should the "reg" property be
  used to get PCI information.
- When dumping config pages, dump SAS Expander Page 1 correctly (there is one
  page per expander phy), and fix its name (it was called "SASDevicePage1"!).
- Implement the new changes for MPI 2.0 NVDATA concatenation.  Add IOC Page 8,
  BIOS Page 4, and Driver Mapping Page 0.
- Add MPI 2.0 support to the DOS/EFI driver.
- Add "Read Buffer (for firmware upload)" to allow reading back device or
  expander firmware and saving into a file.

-----------------------------------------------------------------------------

Changes for 1.54:

- Fix concatenation bug that caused invalid SAS firmware files to be generated
- Catch error if no file name is entered for option 15, suboption 8
- Add ability to issue product-specific SAS IO Unit Control and Diag Data
  Upload requests
- When modifying SAS IO Unit settings, if "all phys" is selected, the default
  should be to preserve existing settings per phy, rather than overwrite with
  new settings
- Handle self-configuring expanders when displaying expander route tables
- When setting a volume name, use the new RAID action
- Change the display of PCI location information to include the segment number
- Allow SMP requests and responses to be up to 1024 bytes (per the SAS spec)
- Fix problem where the maximum target allowed is less than expected, so some
  targets can be missed in a scan
- Add preliminary parsing of MPI 2.0 NVDATA

-----------------------------------------------------------------------------

Changes for 1.53:

- Add initial support for MPI 2.0
- Add -q switch, to query files for version information
- Add -g switch, to guarantee asking of questions that otherwise would be
  suppressed (such as the bus number, when there's only one bus); this makes
  it easier to script lsiutil from Perl
- Rework the way that ports are found under Solaris, to eliminate what are
  sometimes lengthy delays waiting for prtconf to run -- the new code uses
  the devinfo library to directly walk the device tree
- Fix memory leaks when using the -j switch (ports not selected were not
  being closed), and when using options 18 or 44
- Add "Set SAS phy offline/online"
- Add ability to save persistent mappings to a file, then later restore them
- Add "Diagnostic Page Test", which reads any SCSI diagnostic pages
- Add code to enable or disable the read or write caches in SCSI devices
- Fix incomplete implementation of "Force firmware to fault (with C0FFEE)"
- Add verification of internal FCode checksum
- Add verification of PCIR image length
- Extend "Inject/Repair media error" test so that it works for SATA devices
- When downloading drive firmware, set default mode to 5 for SATA devices
- Fix bug in "Show physical disks" that assumed physdisk numbers were dense
- Detect multi-pathed disks when creating RAID volumes, and suppress their
  inclusion in the device list
- Add code to allow binary files to be written when dumping chip locations
  (the -g switch must be used for force the question)
- Fix an endian bug when dumping chip locations below 0x10000000
- Modified SAS phy/link reset code to ask for a device handle, so that remote
  phys or links (i.e., on expanders) can be reset
- For DOS/EFI, avoid issuing Port Enable if possible, since that request can
  take a long time to complete
- Change method of checking for "context reply" after SCSI request passthrough
  under Windows, from looking for a specific MsgContext value, to looking for
  the reply's MsgLength being zero
- Add retries under Linux if an IOCTL fails with EAGAIN
- Increase size of DOS/EFI scratch buffer to 1 MB (from 64 KB) to accommodate
  large drive firmware downloads
- When exiting on DOS/EFI, don't reset a port that was not brought online

-----------------------------------------------------------------------------

Changes for 1.52:

- Make changes required to allow an EBC version for EFI
- Make changes required to allow native 64-bit IA64 and AMD64 versions
  for Windows
- Modify Linux workarounds for IOC_INIT (needed to write Manufacturing
  config pages)
- For Solaris, modify findPorts() to first use "prtconf -D", and then as
  a fallback, use /etc/path_to_inst, so that working ports can be more
  accurately identified
- Fix several big-endian bugs in the RAID-related options
- Don't print a stripe size for IM volumes (it's not valid like it is for
  IME and IS volumes)
- Add support for a few new FC Management toolbox functions
- Rewrite getOsDeviceName() for Solaris, so that FCA devices are handled
  as well as SCSA devices
- Fix an off-by-one message when complaining about incorrect VPD end tags
- Enhance SAS NVDATA parser to handle version 2D
- Support NPIV for FC by adding a -v switch (to identify which virtual
  port to masquerade as)

-----------------------------------------------------------------------------

Changes for 1.51:

- Add date/time stamp when logging to lsiutil.log
- Add "SEP (SCSI Enclosure Processor) Test"
- Add "FC management tools"
- Add "Force firmware to fault (with C0FFEE)" for SAS
- Add "Report LUNs Test"
- Fix dumping of memory regions to work with FC919/FC929
- Increase chunk size for firmware download/upload, for DOS only
- Allow Sun's mpt driver to work (for Solaris)
- Fix endian bugs in firmware download when checking for 1MB/2MB issues
- Dump enclosure pages when displaying attached devices for SAS
- Add checks for maximum physical disks in a volume
- When creating a volume, allow user to specify "no initial sync"
- Display FC WWNs and SAS WWID as part of -i (aka option 68)
- Add FC949E A2, 53C1030T A2, SAS1064E B3, SAS1068E B3, and 1078 C2 chips

-----------------------------------------------------------------------------

Changes for 1.50:

- Rearrange some source files to allow easier building on Windows
  and Solaris
- Add ability to set individual bits, bytes, words, when modifying config
  pages (e.g., when prompted for a value, type "bit3=1", or "bits7:4=2",
  or "byte2=17")
- Add "Show expander routing tables"
- Add "Disable/Enable drive firmware update mode" to RAID actions
- Add "Display Log entries" and "Clear (erase) Log entries"
- Add "Upload FLASH section"
- Add "Display version information"
- Add "Display/Program chip VPD information"
- Add back deleting of persistent entries for SAS, and add "Change
  Bus/Target of a existing mapping"
- Add code to firmware download that handles the SAS phase 8 to phase 8
  bridge firmware image (version 1.18.99)
- When erasing the BIOS, fill with FF rather than 00 to match the FLASH
  erase pattern
- Add ability to control booting under EFI for "Change FC Port settings"
- Modify "Change WWID" code to allow for variable-sized config page
- Under DOS or EFI, after any RAID action, sleep for 5 seconds to allow
  drive metadata to be updated (if necessary)
- Use the Memory Move toolbox tool to allow "Dump chip memory regions" to
  be able to dump tightly-couple memory for SAS and FC
- Beef up the display of SAS control settings in "Dump all port state"
- Display IOCLogInfo value for any RAID action request that fails
- Enhance concatenation to handle NVDATA versions 25, 28, 29, and 2B
- Properly return Check Condition Sense Data under DOS and EFI
- Switch DOS code to use memory space instead of I/O space, whenever
  possible

-----------------------------------------------------------------------------

Changes for 1.49:

- Fix build issues with latest SLES10/RHEL5 drivers
- Add -j <type> to allow selecting just FC, SCSI or SAS ports
- Add doWaitForResync (RAID action)
- Add doRemoveSasDevice
- Fix -b and -r to obey -p, -0, and -1
- Fix port and driver naming under Windows StorPort drivers
- Add 1 MB to 2 MB migration code for SAS (phase 9), DOS and EFI only
- Fix doCreateVolume to obey volume member limits
- Remove all tabs from output, replace with spaces
- Add parsing of NVDATA version 28

-----------------------------------------------------------------------------

Changes for 1.48:

- Add -w, -ww, and -www flags to capture debug output
- Add -x flag to concatenate SAS firmware and NVDATA files
- Switch from using PortType as a selector, to ProductIdType
- For DOS and EFI, make sure port is ready for each new option
- For ports stuck in reset, don't prompt for a firmware file unless and
  until the port is selected
- For EFI, do a firmware upload to handle FWDLB cases (no FLASH)
- Add paged menu mode
- Move "Beacon on/off" to be FC-specific
- Add "Erase non-volatile adapter storage"
- Add "Diagnostic Buffer actions"
- Add "Program manufacturing information" for FC and SAS
- Add "Set personal WWNN/WWPN" for FC
- Add "Send SCSI CDB"
- Remove most persistence actions for SAS, as they no longer are supported
  by firmware
- Add "Inject/Repair media error"
- Add "Set/Clear write protect"
- When downloading SAS firmware, make sure the attached NVDATA is correct
  for the port's board type
- Fix SAS firmware validity checking to correctly detect wrong chip type
  and wrong chip revision
- Allow setting/clearing Native Command Queue Disable and SATA Write Cache
  Disable for SAS
- Allow "Read/Write/Verify Logical Blocks" to touch individual volume
  members, just like "Inject/Repair media error"
- Fix incorrect ordering of LBA High/Middle/Low parts in "Send SATA
  request"
- Add dumping of VPD data (Manufacturing Page 1), if non-zero, to board
  info display
- Fix incorrect defaulting of FC's HostSCSIID (15 is no longer correct)
- Fix EFI code to truncate files properly
- Fix EFI code to use I/O space properly, if required (1030/1030T)
- Fix DOS code to not enable chip interrupts (caused a hang while exiting
  on some platforms)

-----------------------------------------------------------------------------

Changes for 1.47:

- Add support for EFI
- Add a workaround for older Linux mptbase drivers (fix IOC_INIT failing)
- Add doWriteLogicalBlocks and doVerifyLogicalBlocks
- Add generic SATA passthrough
- Allow -b (showBoardInfo) in combination with any other arguments
- Increase range of Initiator Device Timeout value, by using the
  supported scale factor (x16) if necessary
- Allow setting the Device Missing Report Delay and Device Missing
  I/O Delay values
- Fix a bug in configuring wide ports
- Add support for RAID Volumes of size > 2 TB
- Add missing config pages to doPortStateDump (-d)

-----------------------------------------------------------------------------

Changes for 1.46:

- Add -0 and -1 options, to skip IOC numbers 0 and 1, for certain
  operations (so, lsiutil -1 99 would only reset each chip once)
- Enhance display to show IOC number (same as PCI function number)
- Check to see if the firmware is in Operational state before trying the
  first MPT command, to avoid causing a chip reset if the firmware is in
  Fault state (if so, option 99 will perform a chip reset, if desired)
- Fix code that obtains MPT register addresses for Linux (was broken for
  some systems with 2.6 kernels)
- Fix code that displays operating system device names for Linux (was
  displaying incorrect names for some SAS and FC devices whose SCSI
  bus/target numbers were not equal to their MPT bus/target numbers)
- Move code that enables MPT register access inside the loops for options
  51 and 52, so that access continues to work even if the chip is reset
- Add display of IOCFactsReply and PortFactsReply to port state that is
  dumped by -d, and only display FC Port Page 3 pages that are valid

-----------------------------------------------------------------------------

Changes for 1.45:

- Fixed get2bytes/get3bytes/get4bytes macros to properly truncate
- Fixed formats for 64-bit integers when printed (Windows is different)
- Added doDriveFirmwareDownload
- Added doDisplaySfpPages
- Added doDefaultPhyRegsSettings
- Extended event displaying to Linux and Solaris
- Added some control over port configuration in doSasIoUnitSettings
- Reworked getOsDeviceName slightly for Linux and Solaris
- Fixed bug in doPortStateSummary which reversed Yes and No for
  SSP Initiator Enabled and SSP Target Enabled displays
- Added support for FC949E A1
- Fixed Linux version of doMptCommand to correctly gather Sense Data

-----------------------------------------------------------------------------

Changes for 1.44:

- Upgrade to 1.05.13 MPI headers
- Add doReadLogicalBlocks and doDisplayOsDeviceNames
- Add EEDP support
- Add an optional duration to the monitor frequency (-m f,d)
- Add "reset port" option to all submenus too
- Don't send quiesce/unquiesce RAID actions to SAS IR (not supported)
- Don't coerce RAID volume size if it's small (less than 1 GB)
- Add SAS1068E B1 as a known device

-----------------------------------------------------------------------------

Changes for 1.43:

- Add Clear ACA (option 24)
- Fix a Linux buffer overrun that caused only the first port to be
  discovered for some architectures
- Fix ManufacturingPage2 checksum offset for FC949E
- Guard against divide-by-zero when displaying volume resync percent
- Prevent a target from being chosen twice when creating a volume
- Add the flag that deletes PhysDisks when deleting a Volume
- Fix a DOS bug (internal buffer corruption) by rearranging the order
  of operations when starting a new command -- bring the chip online
  first, before loading the scratch buffers
- Correctly set RequestDataLength to NOT include the CRC bytes, when
  sending hand-built SMP Passthrough commands
- Add a hardware workaround for the FC949E to the Firmware Download Boot
  code for DOS
- Fix Adapter Reset for SAS1078 (DOS only)

-----------------------------------------------------------------------------

Changes for 1.42:

- Add Log Sense Test
- Add SATA SMART Read Test
- Add Create Hot Spare
- Add Send SMP Request
- Add support for the 1078
- Change number of LUNs probed to 64 for FC and SAS (leave SCSI alone)
- In doFcPortSettings, preserve original HardALPA setting if user quits
- Fix endian issue when creating volumes (default settings were incorrect
  for SPARC and PowerPC)
- Fix typo in doPhysDiskSettings that used the wrong Action value
- Ignore IOC Page 3 in doShowNonDefaultSettings
- Ignore LOG pages in doRestoreDefaultSettings
- Fix DOS MPT driver to not poll the Doorbell while DMA is active

-----------------------------------------------------------------------------

Changes for 1.41:

- Fix build errors on some Linux systems
- Filter out bad "what" strings (any of the first 4 characters are bogus)
- Fix missing 50/51/52/53 from main menu on Linux systems
- Add checking for 1064 A3 SAS firmware images
- Use current config page data if non-volatile data is invalid
- Add "Read Default Write NVRAM" to "Test configuration page actions"
- Resolve SAS firmware hang by not reading LOG page types
- Remove IO Unit Page 3 from "Restore default settings"

-----------------------------------------------------------------------------

Changes for 1.40:

- Added MPT and chip register access for Linux
- Added doShowNonDefaultSettings and doRestoreDefaultSettings
- Fixed commands to consistently check for errors
- Added check for overflow of volume size when creating a volume
- Fixed "free" calls in doDisplayCurrentEvents
- Added retries around Windows IOCTL calls, to handle BUSY status
- Added warning message if any Linux IOCTL call is rejected
- Added speed/width negotiation to DOS driver for SCSI
- Added a watchdog timer routine to DOS driver to catch faults
- Fixed firmware download boot for 929X in DOS driver

-----------------------------------------------------------------------------

Changes for 1.39:

- Add DOS support
- Add 949E support
- Add MPT register access and chip register access
- Move diag_targets[99] from stack storage to global storage
- Add Read Block Limits (like Read Capacity but for tapes)
- Initialize memory after allocation, always
- When menu options are picked from -a, don't print the menu itself
- When showing current firmware version, print both hex and decimal
- Fix bug in displaying phy error counters that nearly always hid errors
- Allow 2-member IS volumes (previously, 2-member volumes were always IM)
- Zero errno (the last error that occurred) prior to each syscall
- Fixed bug that made "lsiutil -e" (or "lsiutil -u") just exit

-----------------------------------------------------------------------------

Changes for 1.38:

- Update to latest header files, 1.05.10
- Display chip rev as well as chip name
- Add Display Phy Counters and Clear Phy Counters
- Make display of firmware version be accurate, always
- Add Trigger Analyzer with Echo

-----------------------------------------------------------------------------

Changes for 1.37:

- Fixed all mallocs that did not have frees
- Added Read Capacity and Mode Page tests
- Added -n (companion to -y) to answer questions automatically
- In Identify, print current running firmware version as well as FLASH
  versions
- If mptscsih is not loaded, quit (from Scan for Devices) early
- Increase metadata size for SAS IR volumes

-----------------------------------------------------------------------------

Changes for 1.36:

- Simplify menus using "expert mode", which is enabled with -e on the
  command line, or by typing "e" at any menu prompt
- Add display of transfer statistics for FC (-m, for "monitor")
- Allow -h to print help even if no ports found
- Fix firmware download and config page reads for old versions of MPT (1.00)
- Allow easier erasing of BIOS/FCode images
- Add an explicit error message for Linux if a SCSI I/O fails due to the
  mptscsih driver not being loaded

-----------------------------------------------------------------------------

Changes for 1.35:

- Check for new Windows split-driver names (lsi_fc, lsi_scsi, lsi_sas)
- Display all "what" strings that are found
- Add SATA Clear Affiliation test
- Add ability to monitor current events (Linux only so far)

-----------------------------------------------------------------------------

Changes for 1.34:

- Add -b option, which gets board info (from manufacturing config pages)
- Add SATA Identify Drive test
- Fix bug in -p where ranges didn't quite work right
- Add routine to get the length of a variable config page, and use it
- Add warning for trying to use an old FC929X firmware image on an FC929XL
- When setting FC devices persistent, set SCAN_ID and SCAN_LUNS flags too
- Add display of what phys are connected to what, in Display Attached Devices
- Remove all knowledge of EEDP for now

-----------------------------------------------------------------------------

Changes for 1.33:

- On Linux, try "modprobe mptctl" and "mknod /dev/mptctl c 10 220" if
  IOCTLs don't work
- Fix bug when manually setting SAS persistence
- Add additional checking to distinguish 929X from 929XL

-----------------------------------------------------------------------------

Changes for 1.32:

- Added coercion of disk size when making an IR volume

-----------------------------------------------------------------------------

Changes for 1.31:

- Added -a to allow arguments to be entered on the command line
- Added Beacon on/off
- Detected Sun FCode for 1030 (and hopefully for 1064 too)
- Fixed bug when manually entering more than one SAS persistent address
- Fixed bug when underrun occurs but some data is transferred (NOT an error!)

