**************************************************************************
** History
**
**   REV#         DATE             NAME         DESCRIPTION
** 1.00.00.00    3/31/2004       Erich Chen     First release
** 1.10.00.04    7/28/2004       Erich Chen     modify for ioctl
** 1.10.00.06    8/28/2004       Erich Chen     modify for 2.6.x
** 1.10.00.08    9/28/2004       Erich Chen     modify for x86_64
** 1.10.00.10   10/10/2004       Erich Chen     bug fix for SMP & ioctl
** 1.20.00.00   11/29/2004       Erich Chen     bug fix with arcmsr_bus_reset when PHY error
** 1.20.00.02   12/09/2004       Erich Chen     bug fix with over 2T bytes RAID Volume
** 1.20.00.04    1/09/2005       Erich Chen     fits for Debian linux kernel version 2.2.xx
** 1.20.00.05    2/20/2005       Erich Chen     cleanly as look like a Linux driver at 2.6.x
**                                              thanks for peoples kindness comment
**						Kornel Wieliczek
**						Christoph Hellwig
**						Adrian Bunk
**						Andrew Morton
**						Christoph Hellwig
**						James Bottomley
**						Arjan van de Ven
** 1.20.00.06    3/12/2005       Erich Chen     fix with arcmsr_pci_unmap_dma "unsigned long" cast,
**						modify PCCB POOL allocated by "dma_alloc_coherent"
**						(Kornel Wieliczek's comment)
** 1.20.00.07    3/23/2005       Erich Chen     bug fix with arcmsr_scsi_host_template_init
**						occur segmentation fault,
**						if RAID adapter does not on PCI slot
**						and modprobe/rmmod this driver twice.
**						bug fix enormous stack usage (Adrian Bunk's comment)
** 1.20.00.08    6/23/2005       Erich Chen     bug fix with abort command,
**						in case of heavy loading when sata cable
**						working on low quality connection
** 1.20.00.09    9/12/2005       Erich Chen     bug fix with abort command handling, firmware version check
**						and firmware update notify for hardware bug fix
** 1.20.00.10    9/23/2005       Erich Chen     enhance sysfs function for change driver's max tag Q number.
**						add DMA_64BIT_MASK for backward compatible with all 2.6.x
**						add some useful message for abort command
**						add ioctl code 'ARCMSR_IOCTL_FLUSH_ADAPTER_CACHE'
**						customer can send this command for sync raid volume data
** 1.20.00.11    9/29/2005       Erich Chen     by comment of Arjan van de Ven fix incorrect msleep redefine
**						cast off sizeof(dma_addr_t) condition for 64bit pci_set_dma_mask
** 1.20.00.12    9/30/2005       Erich Chen     bug fix with 64bit platform's ccbs using if over 4G system memory
**						change 64bit pci_set_consistent_dma_mask into 32bit
**						increcct adapter count if adapter initialize fail.
**						miss edit at arcmsr_build_ccb....
**						psge += sizeof(struct _SG64ENTRY *) =>
**						psge += sizeof(struct _SG64ENTRY)
**						64 bits sg entry would be incorrectly calculated
**						thanks Kornel Wieliczek give me kindly notify
**						and detail description
** 1.20.00.13   11/15/2005       Erich Chen     scheduling pending ccb with FIFO
**						change the architecture of arcmsr command queue list
**						for linux standard list
**						enable usage of pci message signal interrupt
**						follow Randy.Danlup kindness suggestion cleanup this code
** 1.20.00.14   05/02/2007	 Erich Chen & Nick Cheng
**						1.implement PCI-Express error recovery function and AER capability
**						2.implement the selection of ARCMSR_MAX_XFER_SECTORS_B=4096
**				 		if firmware version is newer than 1.42
**						3.modify arcmsr_iop_reset to improve the ability
**						4.modify the ISR, arcmsr_interrupt routine,to prevent the
**						inconsistency with sg_mod driver if application	directly calls
**						the arcmsr driver w/o passing through scsi mid layer
**						specially thanks to Yanmin Zhang's openhanded help about AER
** 1.20.00.15   08/30/2007	 Erich Chen & Nick Cheng
**						1. support ARC1200/1201/1202 SATA RAID adapter, which is named
**						ACB_ADAPTER_TYPE_B
**						2. modify the arcmsr_pci_slot_reset function
**						3. modify the arcmsr_pci_ers_disconnect_forepart function
**						4. modify the arcmsr_pci_ers_need_reset_forepart function
** 1.20.00.15   09/27/2007	 Erich Chen & Nick Cheng
**						1. add arcmsr_enable_eoi_mode() on adapter Type B
** 						2. add readl(reg->iop2drv_doorbell_reg) in arcmsr_handle_hbb_isr()
**						in case of the doorbell interrupt clearance is cached
** 1.20.00.15   10/01/2007	 Erich Chen & Nick Cheng
**						1. modify acb->devstate[i][j]
**						as ARECA_RAID_GOOD instead of
**						ARECA_RAID_GONE in arcmsr_alloc_ccb_pool
** 1.20.00.15   11/06/2007       Erich Chen & Nick Cheng
**						1. add conditional declaration for
** 						arcmsr_pci_error_detected() and
**						arcmsr_pci_slot_reset
** 1.20.00.15	11/23/2007       Erich Chen & Nick Cheng
**						1.check if the sg list member number
**						exceeds arcmsr default limit in arcmsr_build_ccb()
**						2.change the returned value type of arcmsr_build_ccb()
**						from "void" to "int"
**						3.add the conditional check if arcmsr_build_ccb()
**						returns FAILED
** 1.20.00.15	12/04/2007	 Erich Chen & Nick Cheng
**						1. modify arcmsr_drain_donequeue() to ignore unknown
**						command and let kernel process command timeout.
**						This could handle IO request violating max. segments
**						while Linux XFS over DM-CRYPT.
**						Thanks to Milan Broz's comments <mbroz@redhat.com>
** 1.20.00.15	12/24/2007	 Erich Chen & Nick Cheng
**						1.fix the portability problems
**						2.fix type B where we should _not_ iounmap() acb->pmu;
**						it's not ioremapped.
**						3.add return -ENOMEM if ioremap() fails
**						4.transfer IS_SG64_ADDR w/ cpu_to_le32()
**						in arcmsr_build_ccb
**						5. modify acb->devstate[i][j] as ARECA_RAID_GONE instead of
**						ARECA_RAID_GOOD in arcmsr_alloc_ccb_pool()
**						6.fix arcmsr_cdb->Context as (unsigned long)arcmsr_cdb
**						7.add the checking state of
**						(outbound_intstatus & ARCMSR_MU_OUTBOUND_HANDLE_INT) == 0
**						in arcmsr_handle_hba_isr
**						8.replace pci_alloc_consistent()/pci_free_consistent() with kmalloc()/kfree() in arcmsr_iop_message_xfer()
**						9. fix the release of dma memory for type B in arcmsr_free_ccb_pool()
**						10.fix the arcmsr_polling_hbb_ccbdone()
** 1.20.00.15	02/27/2008	Erich Chen & Nick Cheng
**						1.arcmsr_iop_message_xfer() is called from atomic context under the
**						queuecommand scsi_host_template handler. James Bottomley pointed out
**						that the current GFP_KERNEL|GFP_DMA flags are wrong: firstly we are in
**						atomic context, secondly this memory is not used for DMA.
**						Also removed some unneeded casts. Thanks to Daniel Drake <dsd@gentoo.org>
**************************************************************************
