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