Release Date    : Tue. Jun 17, 2012 17:00:00 PST 2012 -
			(emaild-id:megaraidlinux@lsi.com)
			Adam Radford/Kashyap Desai
Current Version : 00.00.06.18-rc1
Old Version     : 00.00.06.15-rc1
    1. Fix Copyright dates.
    2. Add throttlequeuedepth module parameter.
    3. Add resetwaittime module parameter.
    4. Move poll_aen_lock initializer.
-------------------------------------------------------------------------------
Release Date    : Mon. Mar 19, 2012 17:00:00 PST 2012 -
			(emaild-id:megaraidlinux@lsi.com)
			Adam Radford
Current Version : 00.00.06.15-rc1
Old Version     : 00.00.06.14-rc1
    1. Optimize HostMSIxVectors setting.
    2. Add fpRead/WriteCapable, fpRead/WriteAcrossStripe checks.
-------------------------------------------------------------------------------
Release Date    : Fri. Jan 6, 2012 17:00:00 PST 2010 -
			(emaild-id:megaraidlinux@lsi.com)
			Adam Radford
Current Version : 00.00.06.14-rc1
Old Version     : 00.00.06.12-rc1
    1. Fix reglockFlags for degraded raid5/6 for MR 9360/9380.
    2. Mask off flags in ioctl path to prevent memory scribble with older
       MegaCLI versions.
    3. Remove poll_mode_io module paramater, sysfs node, and associated code.
-------------------------------------------------------------------------------
Release Date    : Wed. Oct 5, 2011 17:00:00 PST 2010 -
			(emaild-id:megaraidlinux@lsi.com)
			Adam Radford
Current Version : 00.00.06.12-rc1
Old Version     : 00.00.05.40-rc1
    1. Continue booting immediately if FW in FAULT at driver load time.
    2. Increase default cmds per lun to 256.
    3. Fix mismatch in megasas_reset_fusion() mutex lock-unlock.
    4. Remove some un-necessary code.
    5. Clear state change interrupts for Fusion/Invader.
    6. Clear FUSION_IN_RESET before enabling interrupts.
    7. Add support for MegaRAID 9360/9380 12GB/s controllers.
    8. Add multiple MSI-X vector/multiple reply queue support.
    9. Add driver workaround for PERC5/1068 kdump kernel panic.
-------------------------------------------------------------------------------
Release Date    : Tue. Jul 26, 2011 17:00:00 PST 2010 -
			(emaild-id:megaraidlinux@lsi.com)
			Adam Radford
Current Version : 00.00.05.40-rc1
Old Version     : 00.00.05.38-rc1
    1. Fix FastPath I/O to work with degraded RAID 1.
    2. Add .change_queue_depth support.
-------------------------------------------------------------------------------
Release Date    : Wed. May 11, 2011 17:00:00 PST 2010 -
			(emaild-id:megaraidlinux@lsi.com)
			Adam Radford
Current Version : 00.00.05.38-rc1
Old Version     : 00.00.05.34-rc1
    1. Remove MSI-X black list, use MFI_REG_STATE.ready.msiEnable.
    2. Remove un-used function megasas_return_cmd_for_smid().
    3. Check MFI_REG_STATE.fault.resetAdapter in megasas_reset_fusion().
    4. Disable interrupts/free_irq() in megasas_shutdown().
    5. Fix bug where AENs could be lost in probe() and resume().
    6. Convert 6,10,12 byte CDB's to 16 byte CDB for large LBA's for FastPath
       IO.
    7. Add 1078 OCR support.
-------------------------------------------------------------------------------
Release Date    : Thu. Feb 24, 2011 17:00:00 PST 2010 -
			(emaild-id:megaraidlinux@lsi.com)
			Adam Radford
Current Version : 00.00.05.34-rc1
Old Version     : 00.00.05.29-rc1
    1. Fix some failure gotos from megasas_probe_one(), etc.
    2. Add missing check_and_restore_queue_depth() call in
       complete_cmd_fusion().
    3. Enable MSI-X before calling megasas_init_fw().
    4. Call tasklet_schedule() even if outbound_intr_status == 0 for MFI based
       boards in MSI-X mode.
    5. Fix megasas_probe_one() to clear PCI_MSIX_FLAGS_ENABLE in msi control
       register in kdump kernel.
    6. Fix megasas_get_cmd() to only print "Command pool empty" if
       megasas_dbg_lvl is set.
    7. Fix megasas_build_dcdb_fusion() to not filter by TYPE_DISK.
    8. Fix megasas_build_dcdb_fusion() to use io_request->LUN[1] field.
    9. Add MR_EVT_CFG_CLEARED to megasas_aen_polling().
    10. Fix tasklet_init() in megasas_init_fw() to use instancet->tasklet.
    11. Fix fault state handling in megasas_transition_to_ready().
    12. Fix max_sectors setting for IEEE SGL's.
    13. Fix iMR OCR support to work correctly.
-------------------------------------------------------------------------------
Release Date    : Tues.  Dec 14, 2010 17:00:00 PST 2010 -
			(emaild-id:megaraidlinux@lsi.com)
			Adam Radford
Current Version : 00.00.05.29-rc1
Old Version     : 00.00.04.31-rc1
    1. Rename megaraid_sas.c to megaraid_sas_base.c.
    2. Update GPL headers.
    3. Add MSI-X support and 'msix_disable' module parameter.
    4. Use lowest memory bar (for SR-IOV VF support).
    5. Add struct megasas_instance_temlate changes, and change all code to use
       new instance entries:

       irqreturn_t (*service_isr )(int irq, void *devp);
       void (*tasklet)(unsigned long);
       u32 (*init_adapter)(struct megasas_instance *);
       u32 (*build_and_issue_cmd) (struct megasas_instance *,
       struct scsi_cmnd *);
       void (*issue_dcmd) (struct megasas_instance *instance,
                              struct megasas_cmd *cmd);

   6. Add code to support MegaRAID 9265/9285 controllers device id (0x5b).
-------------------------------------------------------------------------------
1 Release Date    : Thur.  May 03, 2010 09:12:45 PST 2009 -
			(emaild-id:megaraidlinux@lsi.com)
			Bo Yang

2 Current Version : 00.00.04.31-rc1
3 Older Version   : 00.00.04.17.1-rc1

1.	Add the Online Controller Reset (OCR) to the Driver.
	OCR is the new feature for megaraid_sas driver which
	will allow the fw to do the chip reset which will not
	affact the OS behavious.

	To add the OCR support, driver need to do:
		a). reset the controller chips -- Xscale and Gen2 which
		will change the function calls and add the reset function
		related to this two chips.

		b). during the reset, driver will store the pending cmds
		which not returned by FW to driver's pending queue.  Driver
		will re-issue those pending cmds again to FW after the OCR
		finished.

		c). In driver's timeout routine, driver will report to
		OS as reset. Also driver's queue routine will block the
		cmds until the OCR finished.

		d). in Driver's ISR routine, if driver get the FW state as
		state change, FW in Failure status and FW support online controller
		reset (OCR), driver will start to do the controller reset.

		e). In driver's IOCTL routine, the application cmds will wait for the
		OCR to finish, then issue the cmds to FW.

		f). Before driver kill adapter, driver will do last chance of
		OCR to see if driver can bring back the FW.

2.	Add the support update flag to the driver to tell LSI megaraid_sas
	application which driver will support the device update.  So application
	will not need to do the device update after application add/del the device
	from the system.
3.	In driver's timeout routine, driver will do three time reset if fw is in
	failed state.  Driver will kill adapter if can't bring back FW after the
	this three times reset.
4.	Add the input parameter max_sectors to 1MB support to our GEN2 controller.
	customer can use the input paramenter max_sectors to add 1MB support to GEN2
	controller.

1 Release Date    : Thur.  Oct 29, 2009 09:12:45 PST 2009 -
			(emaild-id:megaraidlinux@lsi.com)
			Bo Yang

2 Current Version : 00.00.04.17.1-rc1
3 Older Version   : 00.00.04.12

1.	Add the pad_0 in mfi frame structure to 0 to fix the
	context value larger than 32bit value issue.

2.	Add the logic drive list to the driver.  Driver will
	keep the logic drive list internal after driver load.

3.	driver fixed the device update issue after get the AEN
	PD delete/ADD, LD add/delete from FW.

1 Release Date    : Tues.  July 28, 2009 10:12:45 PST 2009 -
			(emaild-id:megaraidlinux@lsi.com)
			Bo Yang

2 Current Version : 00.00.04.12
3 Older Version   : 00.00.04.10

1.	Change the AEN sys PD update from scsi_scan to
	scsi_add_device and scsi_remove_device.
2.	Takeoff the debug print-out in aen_polling routine.

1 Release Date    : Thur.  July 02, 2009 10:12:45 PST 2009 -
			(emaild-id:megaraidlinux@lsi.com)
			Bo Yang

2 Current Version : 00.00.04.10
3 Older Version   : 00.00.04.08

1.	Add the 3 mins timeout during the controller initialize.
2.	Add the fix for 64bit sense date errors.

1 Release Date    : Tues. May 05, 2009 10:12:45 PST 2009 -
			(emaild-id:megaraidlinux@lsi.com)
			Bo Yang

2 Current Version : 00.00.04.08
3 Older Version   : 00.00.04.06

1.	Add the fix of pending in FW after deleted the logic drives.
2.	Add the fix of deallocating memory after get pdlist.

1 Release Date    : Tues. March 26, 2009 10:12:45 PST 2009 -
			(emaild-id:megaraidlinux@lsi.com)
			Bo Yang

2 Current Version : 00.00.04.06
3 Older Version   : 00.00.04.04

1.	Add the fix of the driver cmd empty fix of the driver cmd empty.
2.	Add the fix of the driver MSM AEN CMD cause the system slow.

1 Release Date    : Tues. March 03, 2009 10:12:45 PST 2009 -
			(emaild-id:megaraidlinux@lsi.com)
			Bo Yang

2 Current Version : 00.00.04.04
3 Older Version   : 00.00.04.01

1.	Add the Tape drive fix to the driver: If the command is for
	the tape device, set the pthru timeout to the os layer timeout value.

2.	Add Poll_wait mechanism to Gen-2 Linux driv.
		In the aen handler, driver needs to wakeup poll handler similar to
		the way it raises SIGIO.

3.	Add new controller new SAS2 support to the driver.

4.	Report the unconfigured PD (system PD) to OS.

5.	Add the IEEE SGL support to the driver

6.	Reasign the Application cmds to SAS2 controller

1 Release Date    : Thur.July. 24 11:41:51 PST 2008 -
                       (emaild-id:megaraidlinux@lsi.com)
                       Sumant Patro
                       Bo Yang

2 Current Version : 00.00.04.01
3 Older Version   : 00.00.03.22

1. Add the new controller (0078, 0079) support to the driver
       Those controllers are LSI's next generatation(gen2) SAS controllers.

1 Release Date    : Mon.June. 23 10:12:45 PST 2008 -
                       (emaild-id:megaraidlinux@lsi.com)
                       Sumant Patro
                       Bo Yang

2 Current Version : 00.00.03.22
3 Older Version   : 00.00.03.20

1. Add shutdown DCMD cmd to the shutdown routine to make FW shutdown proper.
2. Unexpected interrupt occurs in HWR Linux driver, add the dumy readl pci flush will fix this issue.

1 Release Date    : Mon. March 10 11:02:31 PDT 2008 -
			(emaild-id:megaraidlinux@lsi.com)
			Sumant Patro
			Bo Yang

2 Current Version : 00.00.03.20-RC1
3 Older Version   : 00.00.03.16

1. Rollback the sense info implementation
	Sense buffer ptr data type in the ioctl path is reverted back
	to u32 * as in previous versions of driver.

2. Fixed the driver frame count.
	When Driver sent wrong frame count to firmware.  As this
	particular command is sent to drive, FW is seeing continuous
	chip resets and so the command will timeout.

3. Add the new controller(1078DE) support to the driver
	and Increase the max_wait to 60 from 10 in the controller
	operational status.  With this max_wait increase, driver will
	make sure the FW will 	finish the pending cmd for KDUMP case.

1 Release Date    : Thur. Nov. 07 16:30:43 PST 2007 -
			(emaild-id:megaraidlinux@lsi.com)
			Sumant Patro
			Bo Yang

2 Current Version : 00.00.03.16
3 Older Version   : 00.00.03.15

1. Increased MFI_POLL_TIMEOUT_SECS to 60 seconds from 10. FW may take
	a max of 60 seconds to respond to the INIT cmd.

1 Release Date    : Fri. Sep. 07 16:30:43 PST 2007 -
			(emaild-id:megaraidlinux@lsi.com)
			Sumant Patro
			Bo Yang

2 Current Version : 00.00.03.15
3 Older Version   : 00.00.03.14

1. Added module parameter "poll_mode_io" to support for "polling"
	(reduced interrupt operation).  In this mode, IO completion
	interrupts are delayed. At the end of initiating IOs, the
	driver schedules for cmd completion if there are pending cmds
	to be completed.  A timer-based interrupt has also been added
	to prevent IO completion processing from being delayed
	indefinitely in the case that no new IOs are initiated.

1 Release Date    : Fri. Sep. 07 16:30:43 PST 2007 -
			(emaild-id:megaraidlinux@lsi.com)
			Sumant Patro
			Bo Yang

2 Current Version : 00.00.03.14
3 Older Version   : 00.00.03.13

1. Setting the max_sectors_per_req based on max SGL supported by the
	FW. Prior versions calculated this value from controller info
	(max_sectors_1, max_sectors_2). For certain controllers/FW,
	this was resulting in a value greater than max SGL supported
	by the FW. Issue was first reported by users running LUKS+XFS
	with megaraid_sas.  Thanks to RB for providing the logs and
	duplication steps that helped to get to the root cause of the
	issue.  2. Increased MFI_POLL_TIMEOUT_SECS to 60 seconds from
	10. FW may take a max of 60 seconds to respond to the INIT
	cmd.

1 Release Date    : Fri. June. 15 16:30:43 PST 2007 -
			(emaild-id:megaraidlinux@lsi.com)
			Sumant Patro
			Bo Yang

2 Current Version : 00.00.03.13
3 Older Version   : 00.00.03.12

1. Added the megasas_reset_timer routine to intercept cmd timeout and throttle io.

On Fri, 2007-03-16 at 16:44 -0600, James Bottomley wrote:
It looks like megaraid_sas at least needs this to throttle its commands
> as they begin to time out.  The code keeps the existing transport
> template use of eh_timed_out (and allows the transport to override the
> host if they both have this callback).
>
> James

1 Release Date    : Sat May. 12 16:30:43 PST 2007 -
			(emaild-id:megaraidlinux@lsi.com)
			Sumant Patro
			Bo Yang

2 Current Version : 00.00.03.12
3 Older Version   : 00.00.03.11

1.  When MegaSAS driver receives reset call from OS, driver waits in reset
routine for max 3 minutes for all pending command completion. Now driver will
call completion routine every 5 seconds from the reset routine instead of
waiting for depending on cmd completion from isr path.

1 Release Date    : Mon Apr. 30 10:25:52 PST 2007 -
			(emaild-id:megaraidlinux@lsi.com)
			Sumant Patro
			Bo Yang

2 Current Version : 00.00.03.11
3 Older Version   : 00.00.03.09

	1. Memory Manager for IOCTL removed for 2.6 kernels.
	   pci_alloc_consistent replaced by dma_alloc_coherent. With this
	   change there is no need of memory manager in the driver code

	On Wed, 2007-02-07 at 13:30 -0800, Andrew Morton wrote:
	> I suspect all this horror is due to stupidity in the DMA API.
	>
	> pci_alloc_consistent() just goes and assumes GFP_ATOMIC, whereas
	> the caller (megasas_mgmt_fw_ioctl) would have been perfectly happy
	> to use GFP_KERNEL.
	>
	> I bet this fixes it

	It does, but the DMA API was expanded to cope with this exact case, so
	use dma_alloc_coherent() directly in the megaraid code instead.  The dev
	is just &pci_dev->dev.

	James <James.Bottomley@SteelEye.com>

	3. SYNCHRONIZE_CACHE is not supported by FW and thus blocked by driver.
	4. Hibernation support added
	5. Performing diskdump while running IO in RHEL 4 was failing. Fixed.

1 Release Date    : Fri Feb. 09 14:36:28 PST 2007 -
			(emaild-id:megaraidlinux@lsi.com)
			Sumant Patro
			Bo Yang

2 Current Version : 00.00.03.09
3 Older Version   : 00.00.03.08

i.	Under heavy IO mid-layer prints "DRIVER_TIMEOUT" errors

	The driver now waits for 10 seconds to elapse instead of 5 (as in
	previous release) to resume IO.

1 Release Date    : Mon Feb. 05 11:35:24 PST 2007 -
			(emaild-id:megaraidlinux@lsi.com)
			Sumant Patro
			Bo Yang
2 Current Version : 00.00.03.08
3 Older Version   : 00.00.03.07

i.	Under heavy IO mid-layer prints "DRIVER_TIMEOUT" errors

	Fix:	The driver is now throttling IO.
	Checks added in megasas_queue_command to know if FW is able to
	process commands within timeout period. If number of retries
	is 2 or greater,the driver stops sending cmd to FW temporarily. IO is
	resumed if pending cmd count reduces to 16 or 5 seconds has elapsed
	from the time cmds were last sent to FW.

ii.	FW enables WCE bit in Mode Sense cmd for drives that are configured
	as WriteBack. The OS may send "SYNCHRONIZE_CACHE" cmd when Logical
	Disks are exposed with WCE=1. User is advised to enable Write Back
	mode only when the controller has battery backup. At this time
	Synhronize cache is not supported by the FW. Driver will short-cycle
	the cmd and return success without sending down to FW.

1 Release Date    : Sun Jan. 14 11:21:32 PDT 2007 -
		 Sumant Patro <Sumant.Patro@lsil.com>/Bo Yang
2 Current Version : 00.00.03.07
3 Older Version   : 00.00.03.06

i.	bios_param entry added in scsi_host_template that returns disk geometry
	information.

1 Release Date    : Fri Oct 20 11:21:32 PDT 2006 - Sumant Patro <Sumant.Patro@lsil.com>/Bo Yang
2 Current Version : 00.00.03.06
3 Older Version   : 00.00.03.05

1. Added new memory management module to support the IOCTL memory allocation. For IOCTL we try to allocate from the memory pool created during driver initialization. If mem pool is empty then we allocate at run time.
2. Added check in megasas_queue_command and dpc/isr routine to see if we have already declared adapter dead
   (hw_crit_error=1). If hw_crit_error==1, now we donot accept any processing of pending cmds/accept any cmd from OS

1 Release Date    : Mon Oct 02 11:21:32 PDT 2006 - Sumant Patro <Sumant.Patro@lsil.com>
2 Current Version : 00.00.03.05
3 Older Version   : 00.00.03.04

i.	PCI_DEVICE macro used

	Convert the pci_device_id-table of the megaraid_sas-driver to the PCI_DEVICE-macro, to safe some lines.

		- Henrik Kretzschmar <henne@nachtwindheim.de>
ii.	All compiler warnings removed
iii.	megasas_ctrl_info struct reverted to 3.02 release
iv.	Default value of megasas_dbg_lvl set to 0
v.	Removing in megasas_exit the sysfs entry created for megasas_dbg_lvl
vi.	In megasas_teardown_frame_pool(), cmd->frame was passed instead of
	cmd->sense to pci_pool_free. Fixed. Bug was pointed out by
	Eric Sesterhenn

1 Release Date    : Wed Sep 13 14:22:51 PDT 2006 - Sumant Patro <Sumant.Patro@lsil.com>
2 Current Version : 00.00.03.04
3 Older Version   : 00.00.03.03

i.	Added Reboot notify
ii.	Reduced by 1 max cmds sent to FW from Driver to make the reply_q_sz same
	as Max Cmds FW can support

1 Release Date    : Tue Aug 22 16:33:14 PDT 2006 - Sumant Patro <Sumant.Patro@lsil.com>
2 Current Version : 00.00.03.03
3 Older Version   : 00.00.03.02

i.	Send stop adapter to FW & Dump pending FW cmds before declaring adapter dead.
	New varible added to set dbg level.
ii.	Disable interrupt made as fn pointer as they are different for 1068 / 1078
iii.	Frame count optimization. Main frame can contain 2 SGE for 64 bit SGLs and
	3 SGE for 32 bit SGL
iv.	Tasklet added for cmd completion
v.	If FW in operational state before firing INIT, now we send RESET Flag to FW instead of just READY. This is used to do soft reset.
vi.	megasas_ctrl_prop structure updated (based on FW struct)
vii.	Added print : FW now in Ready State during initialization

1 Release Date    : Sun Aug 06 22:49:52 PDT 2006 - Sumant Patro <Sumant.Patro@lsil.com>
2 Current Version : 00.00.03.02
3 Older Version   : 00.00.03.01

i.	Added FW tranistion state for Hotplug scenario

1 Release Date    : Sun May 14 22:49:52 PDT 2006 - Sumant Patro <Sumant.Patro@lsil.com>
2 Current Version : 00.00.03.01
3 Older Version   : 00.00.02.04

i.	Added support for ZCR controller.

		New device id 0x413 added.

ii.	Bug fix : Disable controller interrupt before firing INIT cmd to FW.

		Interrupt is enabled after required initialization is over.
		This is done to ensure that driver is ready to handle interrupts when
		it is generated by the controller.

		-Sumant Patro <Sumant.Patro@lsil.com>

1 Release Date    : Wed Feb 03 14:31:44 PST 2006 - Sumant Patro <Sumant.Patro@lsil.com>
2 Current Version : 00.00.02.04
3 Older Version   : 00.00.02.04 

i.	Remove superflous instance_lock

	gets rid of the otherwise superflous instance_lock and avoids an unsave 
	unsynchronized access in the error handler.

		- Christoph Hellwig <hch@lst.de>


1 Release Date    : Wed Feb 03 14:31:44 PST 2006 - Sumant Patro <Sumant.Patro@lsil.com>
2 Current Version : 00.00.02.04
3 Older Version   : 00.00.02.04 

i.	Support for 1078 type (ppc IOP) controller, device id : 0x60 added.
	During initialization, depending on the device id, the template members 
	are initialized with function pointers specific to the ppc or 
	xscale controllers.  

		-Sumant Patro <Sumant.Patro@lsil.com>
		
1 Release Date    : Fri Feb 03 14:16:25 PST 2006 - Sumant Patro 
							<Sumant.Patro@lsil.com>
2 Current Version : 00.00.02.04
3 Older Version   : 00.00.02.02 
i.	Register 16 byte CDB capability with scsi midlayer 

	"This patch properly registers the 16 byte command length capability of the 
	megaraid_sas controlled hardware with the scsi midlayer. All megaraid_sas 
	hardware supports 16 byte CDB's."

		-Joshua Giles <joshua_giles@dell.com> 

1 Release Date    : Mon Jan 23 14:09:01 PST 2006 - Sumant Patro <Sumant.Patro@lsil.com>
2 Current Version : 00.00.02.02
3 Older Version   : 00.00.02.01 

i.	New template defined to represent each family of controllers (identified by processor used). 
	The template will have defintions that will be initialised to appropritae values for a specific family of controllers. The template definition has four function pointers. During driver initialisation the function pointers will be set based on the controller family type. This change is done to support new controllers that has different processors and thus different register set.

		-Sumant Patro <Sumant.Patro@lsil.com>

1 Release Date    : Mon Dec 19 14:36:26 PST 2005 - Sumant Patro <Sumant.Patro@lsil.com>
2 Current Version : 00.00.02.00-rc4 
3 Older Version   : 00.00.02.01 

i.	Code reorganized to remove code duplication in megasas_build_cmd. 

	"There's a lot of duplicate code megasas_build_cmd.  Move that out of the different codepathes and merge the reminder of megasas_build_cmd into megasas_queue_command"

		- Christoph Hellwig <hch@lst.de>

ii.	Defined MEGASAS_IOC_FIRMWARE32 for code paths that handles 32 bit applications in 64 bit systems.

	"MEGASAS_IOC_FIRMWARE can't be redefined if CONFIG_COMPAT is set, we need to define a MEGASAS_IOC_FIRMWARE32 define so native binaries continue to work"

		- Christoph Hellwig <hch@lst.de>
