************************************************************************** 
 | 
** 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> 
 | 
************************************************************************** 
 |