aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/message/fusion
diff options
context:
space:
mode:
authorJonathan Herman <hermanjl@cs.unc.edu>2013-01-17 16:15:55 -0500
committerJonathan Herman <hermanjl@cs.unc.edu>2013-01-17 16:15:55 -0500
commit8dea78da5cee153b8af9c07a2745f6c55057fe12 (patch)
treea8f4d49d63b1ecc92f2fddceba0655b2472c5bd9 /drivers/message/fusion
parent406089d01562f1e2bf9f089fd7637009ebaad589 (diff)
Patched in Tegra support.
Diffstat (limited to 'drivers/message/fusion')
-rw-r--r--drivers/message/fusion/lsi/mpi_cnfg.h1
-rw-r--r--drivers/message/fusion/lsi/mpi_ioc.h2
-rw-r--r--drivers/message/fusion/mptbase.c130
-rw-r--r--drivers/message/fusion/mptbase.h73
-rw-r--r--drivers/message/fusion/mptctl.c4
-rw-r--r--drivers/message/fusion/mptfc.c7
-rw-r--r--drivers/message/fusion/mptlan.h1
-rw-r--r--drivers/message/fusion/mptsas.c53
-rw-r--r--drivers/message/fusion/mptscsih.c19
-rw-r--r--drivers/message/fusion/mptscsih.h1
-rw-r--r--drivers/message/fusion/mptspi.c2
11 files changed, 75 insertions, 218 deletions
diff --git a/drivers/message/fusion/lsi/mpi_cnfg.h b/drivers/message/fusion/lsi/mpi_cnfg.h
index d9bcfba6b04..22027e7946f 100644
--- a/drivers/message/fusion/lsi/mpi_cnfg.h
+++ b/drivers/message/fusion/lsi/mpi_cnfg.h
@@ -583,7 +583,6 @@ typedef struct _MSG_CONFIG_REPLY
583#define MPI_MANUFACTPAGE_DEVID_SAS1066E (0x005A) 583#define MPI_MANUFACTPAGE_DEVID_SAS1066E (0x005A)
584#define MPI_MANUFACTPAGE_DEVID_SAS1068 (0x0054) 584#define MPI_MANUFACTPAGE_DEVID_SAS1068 (0x0054)
585#define MPI_MANUFACTPAGE_DEVID_SAS1068E (0x0058) 585#define MPI_MANUFACTPAGE_DEVID_SAS1068E (0x0058)
586#define MPI_MANUFACTPAGE_DEVID_SAS1068_820XELP (0x0059)
587#define MPI_MANUFACTPAGE_DEVID_SAS1078 (0x0062) 586#define MPI_MANUFACTPAGE_DEVID_SAS1078 (0x0062)
588 587
589 588
diff --git a/drivers/message/fusion/lsi/mpi_ioc.h b/drivers/message/fusion/lsi/mpi_ioc.h
index 19fb21b8f0c..fd6222882a0 100644
--- a/drivers/message/fusion/lsi/mpi_ioc.h
+++ b/drivers/message/fusion/lsi/mpi_ioc.h
@@ -857,7 +857,7 @@ typedef struct _EVENT_DATA_SAS_DISCOVERY
857#define MPI_EVENT_SAS_DSCVRY_PHY_BITS_MASK (0xFFFF0000) 857#define MPI_EVENT_SAS_DSCVRY_PHY_BITS_MASK (0xFFFF0000)
858#define MPI_EVENT_SAS_DSCVRY_PHY_BITS_SHIFT (16) 858#define MPI_EVENT_SAS_DSCVRY_PHY_BITS_SHIFT (16)
859 859
860/* SAS Discovery Error Event data */ 860/* SAS Discovery Errror Event data */
861 861
862typedef struct _EVENT_DATA_DISCOVERY_ERROR 862typedef struct _EVENT_DATA_DISCOVERY_ERROR
863{ 863{
diff --git a/drivers/message/fusion/mptbase.c b/drivers/message/fusion/mptbase.c
index fb69baa06ca..7956a10f948 100644
--- a/drivers/message/fusion/mptbase.c
+++ b/drivers/message/fusion/mptbase.c
@@ -63,8 +63,6 @@
63#ifdef CONFIG_MTRR 63#ifdef CONFIG_MTRR
64#include <asm/mtrr.h> 64#include <asm/mtrr.h>
65#endif 65#endif
66#include <linux/kthread.h>
67#include <scsi/scsi_host.h>
68 66
69#include "mptbase.h" 67#include "mptbase.h"
70#include "lsi/mpi_log_fc.h" 68#include "lsi/mpi_log_fc.h"
@@ -115,8 +113,7 @@ module_param(mpt_fwfault_debug, int, 0600);
115MODULE_PARM_DESC(mpt_fwfault_debug, 113MODULE_PARM_DESC(mpt_fwfault_debug,
116 "Enable detection of Firmware fault and halt Firmware on fault - (default=0)"); 114 "Enable detection of Firmware fault and halt Firmware on fault - (default=0)");
117 115
118static char MptCallbacksName[MPT_MAX_PROTOCOL_DRIVERS] 116static char MptCallbacksName[MPT_MAX_PROTOCOL_DRIVERS][50];
119 [MPT_MAX_CALLBACKNAME_LEN+1];
120 117
121#ifdef MFCNT 118#ifdef MFCNT
122static int mfcounter = 0; 119static int mfcounter = 0;
@@ -326,32 +323,6 @@ mpt_is_discovery_complete(MPT_ADAPTER *ioc)
326 return rc; 323 return rc;
327} 324}
328 325
329
330/**
331 * mpt_remove_dead_ioc_func - kthread context to remove dead ioc
332 * @arg: input argument, used to derive ioc
333 *
334 * Return 0 if controller is removed from pci subsystem.
335 * Return -1 for other case.
336 */
337static int mpt_remove_dead_ioc_func(void *arg)
338{
339 MPT_ADAPTER *ioc = (MPT_ADAPTER *)arg;
340 struct pci_dev *pdev;
341
342 if ((ioc == NULL))
343 return -1;
344
345 pdev = ioc->pcidev;
346 if ((pdev == NULL))
347 return -1;
348
349 pci_stop_and_remove_bus_device(pdev);
350 return 0;
351}
352
353
354
355/** 326/**
356 * mpt_fault_reset_work - work performed on workq after ioc fault 327 * mpt_fault_reset_work - work performed on workq after ioc fault
357 * @work: input argument, used to derive ioc 328 * @work: input argument, used to derive ioc
@@ -365,45 +336,12 @@ mpt_fault_reset_work(struct work_struct *work)
365 u32 ioc_raw_state; 336 u32 ioc_raw_state;
366 int rc; 337 int rc;
367 unsigned long flags; 338 unsigned long flags;
368 MPT_SCSI_HOST *hd;
369 struct task_struct *p;
370 339
371 if (ioc->ioc_reset_in_progress || !ioc->active) 340 if (ioc->ioc_reset_in_progress || !ioc->active)
372 goto out; 341 goto out;
373 342
374
375 ioc_raw_state = mpt_GetIocState(ioc, 0); 343 ioc_raw_state = mpt_GetIocState(ioc, 0);
376 if ((ioc_raw_state & MPI_IOC_STATE_MASK) == MPI_IOC_STATE_MASK) { 344 if ((ioc_raw_state & MPI_IOC_STATE_MASK) == MPI_IOC_STATE_FAULT) {
377 printk(MYIOC_s_INFO_FMT "%s: IOC is non-operational !!!!\n",
378 ioc->name, __func__);
379
380 /*
381 * Call mptscsih_flush_pending_cmds callback so that we
382 * flush all pending commands back to OS.
383 * This call is required to aovid deadlock at block layer.
384 * Dead IOC will fail to do diag reset,and this call is safe
385 * since dead ioc will never return any command back from HW.
386 */
387 hd = shost_priv(ioc->sh);
388 ioc->schedule_dead_ioc_flush_running_cmds(hd);
389
390 /*Remove the Dead Host */
391 p = kthread_run(mpt_remove_dead_ioc_func, ioc,
392 "mpt_dead_ioc_%d", ioc->id);
393 if (IS_ERR(p)) {
394 printk(MYIOC_s_ERR_FMT
395 "%s: Running mpt_dead_ioc thread failed !\n",
396 ioc->name, __func__);
397 } else {
398 printk(MYIOC_s_WARN_FMT
399 "%s: Running mpt_dead_ioc thread success !\n",
400 ioc->name, __func__);
401 }
402 return; /* don't rearm timer */
403 }
404
405 if ((ioc_raw_state & MPI_IOC_STATE_MASK)
406 == MPI_IOC_STATE_FAULT) {
407 printk(MYIOC_s_WARN_FMT "IOC is in FAULT state (%04xh)!!!\n", 345 printk(MYIOC_s_WARN_FMT "IOC is in FAULT state (%04xh)!!!\n",
408 ioc->name, ioc_raw_state & MPI_DOORBELL_DATA_MASK); 346 ioc->name, ioc_raw_state & MPI_DOORBELL_DATA_MASK);
409 printk(MYIOC_s_WARN_FMT "Issuing HardReset from %s!!\n", 347 printk(MYIOC_s_WARN_FMT "Issuing HardReset from %s!!\n",
@@ -718,8 +656,8 @@ mpt_register(MPT_CALLBACK cbfunc, MPT_DRIVER_CLASS dclass, char *func_name)
718 MptDriverClass[cb_idx] = dclass; 656 MptDriverClass[cb_idx] = dclass;
719 MptEvHandlers[cb_idx] = NULL; 657 MptEvHandlers[cb_idx] = NULL;
720 last_drv_idx = cb_idx; 658 last_drv_idx = cb_idx;
721 strlcpy(MptCallbacksName[cb_idx], func_name, 659 memcpy(MptCallbacksName[cb_idx], func_name,
722 MPT_MAX_CALLBACKNAME_LEN+1); 660 strlen(func_name) > 50 ? 50 : strlen(func_name));
723 break; 661 break;
724 } 662 }
725 } 663 }
@@ -1653,6 +1591,7 @@ mpt_mapresources(MPT_ADAPTER *ioc)
1653 unsigned long port; 1591 unsigned long port;
1654 u32 msize; 1592 u32 msize;
1655 u32 psize; 1593 u32 psize;
1594 u8 revision;
1656 int r = -ENODEV; 1595 int r = -ENODEV;
1657 struct pci_dev *pdev; 1596 struct pci_dev *pdev;
1658 1597
@@ -1666,9 +1605,11 @@ mpt_mapresources(MPT_ADAPTER *ioc)
1666 if (pci_request_selected_regions(pdev, ioc->bars, "mpt")) { 1605 if (pci_request_selected_regions(pdev, ioc->bars, "mpt")) {
1667 printk(MYIOC_s_ERR_FMT "pci_request_selected_regions() with " 1606 printk(MYIOC_s_ERR_FMT "pci_request_selected_regions() with "
1668 "MEM failed\n", ioc->name); 1607 "MEM failed\n", ioc->name);
1669 goto out_pci_disable_device; 1608 return r;
1670 } 1609 }
1671 1610
1611 pci_read_config_byte(pdev, PCI_CLASS_REVISION, &revision);
1612
1672 if (sizeof(dma_addr_t) > 4) { 1613 if (sizeof(dma_addr_t) > 4) {
1673 const uint64_t required_mask = dma_get_required_mask 1614 const uint64_t required_mask = dma_get_required_mask
1674 (&pdev->dev); 1615 (&pdev->dev);
@@ -1690,7 +1631,8 @@ mpt_mapresources(MPT_ADAPTER *ioc)
1690 } else { 1631 } else {
1691 printk(MYIOC_s_WARN_FMT "no suitable DMA mask for %s\n", 1632 printk(MYIOC_s_WARN_FMT "no suitable DMA mask for %s\n",
1692 ioc->name, pci_name(pdev)); 1633 ioc->name, pci_name(pdev));
1693 goto out_pci_release_region; 1634 pci_release_selected_regions(pdev, ioc->bars);
1635 return r;
1694 } 1636 }
1695 } else { 1637 } else {
1696 if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(32)) 1638 if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(32))
@@ -1703,7 +1645,8 @@ mpt_mapresources(MPT_ADAPTER *ioc)
1703 } else { 1645 } else {
1704 printk(MYIOC_s_WARN_FMT "no suitable DMA mask for %s\n", 1646 printk(MYIOC_s_WARN_FMT "no suitable DMA mask for %s\n",
1705 ioc->name, pci_name(pdev)); 1647 ioc->name, pci_name(pdev));
1706 goto out_pci_release_region; 1648 pci_release_selected_regions(pdev, ioc->bars);
1649 return r;
1707 } 1650 }
1708 } 1651 }
1709 1652
@@ -1733,8 +1676,8 @@ mpt_mapresources(MPT_ADAPTER *ioc)
1733 if (mem == NULL) { 1676 if (mem == NULL) {
1734 printk(MYIOC_s_ERR_FMT ": ERROR - Unable to map adapter" 1677 printk(MYIOC_s_ERR_FMT ": ERROR - Unable to map adapter"
1735 " memory!\n", ioc->name); 1678 " memory!\n", ioc->name);
1736 r = -EINVAL; 1679 pci_release_selected_regions(pdev, ioc->bars);
1737 goto out_pci_release_region; 1680 return -EINVAL;
1738 } 1681 }
1739 ioc->memmap = mem; 1682 ioc->memmap = mem;
1740 dinitprintk(ioc, printk(MYIOC_s_INFO_FMT "mem = %p, mem_phys = %llx\n", 1683 dinitprintk(ioc, printk(MYIOC_s_INFO_FMT "mem = %p, mem_phys = %llx\n",
@@ -1748,12 +1691,6 @@ mpt_mapresources(MPT_ADAPTER *ioc)
1748 ioc->pio_chip = (SYSIF_REGS __iomem *)port; 1691 ioc->pio_chip = (SYSIF_REGS __iomem *)port;
1749 1692
1750 return 0; 1693 return 0;
1751
1752out_pci_release_region:
1753 pci_release_selected_regions(pdev, ioc->bars);
1754out_pci_disable_device:
1755 pci_disable_device(pdev);
1756 return r;
1757} 1694}
1758 1695
1759/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ 1696/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
@@ -1780,6 +1717,7 @@ mpt_attach(struct pci_dev *pdev, const struct pci_device_id *id)
1780 MPT_ADAPTER *ioc; 1717 MPT_ADAPTER *ioc;
1781 u8 cb_idx; 1718 u8 cb_idx;
1782 int r = -ENODEV; 1719 int r = -ENODEV;
1720 u8 revision;
1783 u8 pcixcmd; 1721 u8 pcixcmd;
1784 static int mpt_ids = 0; 1722 static int mpt_ids = 0;
1785#ifdef CONFIG_PROC_FS 1723#ifdef CONFIG_PROC_FS
@@ -1887,8 +1825,8 @@ mpt_attach(struct pci_dev *pdev, const struct pci_device_id *id)
1887 dinitprintk(ioc, printk(MYIOC_s_INFO_FMT "facts @ %p, pfacts[0] @ %p\n", 1825 dinitprintk(ioc, printk(MYIOC_s_INFO_FMT "facts @ %p, pfacts[0] @ %p\n",
1888 ioc->name, &ioc->facts, &ioc->pfacts[0])); 1826 ioc->name, &ioc->facts, &ioc->pfacts[0]));
1889 1827
1890 mpt_get_product_name(pdev->vendor, pdev->device, pdev->revision, 1828 pci_read_config_byte(pdev, PCI_CLASS_REVISION, &revision);
1891 ioc->prod_name); 1829 mpt_get_product_name(pdev->vendor, pdev->device, revision, ioc->prod_name);
1892 1830
1893 switch (pdev->device) 1831 switch (pdev->device)
1894 { 1832 {
@@ -1903,7 +1841,7 @@ mpt_attach(struct pci_dev *pdev, const struct pci_device_id *id)
1903 break; 1841 break;
1904 1842
1905 case MPI_MANUFACTPAGE_DEVICEID_FC929X: 1843 case MPI_MANUFACTPAGE_DEVICEID_FC929X:
1906 if (pdev->revision < XL_929) { 1844 if (revision < XL_929) {
1907 /* 929X Chip Fix. Set Split transactions level 1845 /* 929X Chip Fix. Set Split transactions level
1908 * for PCIX. Set MOST bits to zero. 1846 * for PCIX. Set MOST bits to zero.
1909 */ 1847 */
@@ -1934,7 +1872,7 @@ mpt_attach(struct pci_dev *pdev, const struct pci_device_id *id)
1934 /* 1030 Chip Fix. Disable Split transactions 1872 /* 1030 Chip Fix. Disable Split transactions
1935 * for PCIX. Set MOST bits to zero if Rev < C0( = 8). 1873 * for PCIX. Set MOST bits to zero if Rev < C0( = 8).
1936 */ 1874 */
1937 if (pdev->revision < C0_1030) { 1875 if (revision < C0_1030) {
1938 pci_read_config_byte(pdev, 0x6a, &pcixcmd); 1876 pci_read_config_byte(pdev, 0x6a, &pcixcmd);
1939 pcixcmd &= 0x8F; 1877 pcixcmd &= 0x8F;
1940 pci_write_config_byte(pdev, 0x6a, pcixcmd); 1878 pci_write_config_byte(pdev, 0x6a, pcixcmd);
@@ -6475,20 +6413,8 @@ mpt_config(MPT_ADAPTER *ioc, CONFIGPARMS *pCfg)
6475 pReq->Action, ioc->mptbase_cmds.status, timeleft)); 6413 pReq->Action, ioc->mptbase_cmds.status, timeleft));
6476 if (ioc->mptbase_cmds.status & MPT_MGMT_STATUS_DID_IOCRESET) 6414 if (ioc->mptbase_cmds.status & MPT_MGMT_STATUS_DID_IOCRESET)
6477 goto out; 6415 goto out;
6478 if (!timeleft) { 6416 if (!timeleft)
6479 spin_lock_irqsave(&ioc->taskmgmt_lock, flags);
6480 if (ioc->ioc_reset_in_progress) {
6481 spin_unlock_irqrestore(&ioc->taskmgmt_lock,
6482 flags);
6483 printk(MYIOC_s_INFO_FMT "%s: host reset in"
6484 " progress mpt_config timed out.!!\n",
6485 __func__, ioc->name);
6486 mutex_unlock(&ioc->mptbase_cmds.mutex);
6487 return -EFAULT;
6488 }
6489 spin_unlock_irqrestore(&ioc->taskmgmt_lock, flags);
6490 issue_hard_reset = 1; 6417 issue_hard_reset = 1;
6491 }
6492 goto out; 6418 goto out;
6493 } 6419 }
6494 6420
@@ -7202,18 +7128,7 @@ mpt_HardResetHandler(MPT_ADAPTER *ioc, int sleepFlag)
7202 spin_lock_irqsave(&ioc->taskmgmt_lock, flags); 7128 spin_lock_irqsave(&ioc->taskmgmt_lock, flags);
7203 if (ioc->ioc_reset_in_progress) { 7129 if (ioc->ioc_reset_in_progress) {
7204 spin_unlock_irqrestore(&ioc->taskmgmt_lock, flags); 7130 spin_unlock_irqrestore(&ioc->taskmgmt_lock, flags);
7205 ioc->wait_on_reset_completion = 1; 7131 return 0;
7206 do {
7207 ssleep(1);
7208 } while (ioc->ioc_reset_in_progress == 1);
7209 ioc->wait_on_reset_completion = 0;
7210 return ioc->reset_status;
7211 }
7212 if (ioc->wait_on_reset_completion) {
7213 spin_unlock_irqrestore(&ioc->taskmgmt_lock, flags);
7214 rc = 0;
7215 time_count = jiffies;
7216 goto exit;
7217 } 7132 }
7218 ioc->ioc_reset_in_progress = 1; 7133 ioc->ioc_reset_in_progress = 1;
7219 if (ioc->alt_ioc) 7134 if (ioc->alt_ioc)
@@ -7250,7 +7165,6 @@ mpt_HardResetHandler(MPT_ADAPTER *ioc, int sleepFlag)
7250 ioc->ioc_reset_in_progress = 0; 7165 ioc->ioc_reset_in_progress = 0;
7251 ioc->taskmgmt_quiesce_io = 0; 7166 ioc->taskmgmt_quiesce_io = 0;
7252 ioc->taskmgmt_in_progress = 0; 7167 ioc->taskmgmt_in_progress = 0;
7253 ioc->reset_status = rc;
7254 if (ioc->alt_ioc) { 7168 if (ioc->alt_ioc) {
7255 ioc->alt_ioc->ioc_reset_in_progress = 0; 7169 ioc->alt_ioc->ioc_reset_in_progress = 0;
7256 ioc->alt_ioc->taskmgmt_quiesce_io = 0; 7170 ioc->alt_ioc->taskmgmt_quiesce_io = 0;
@@ -7266,7 +7180,7 @@ mpt_HardResetHandler(MPT_ADAPTER *ioc, int sleepFlag)
7266 ioc->alt_ioc, MPT_IOC_POST_RESET); 7180 ioc->alt_ioc, MPT_IOC_POST_RESET);
7267 } 7181 }
7268 } 7182 }
7269exit: 7183
7270 dtmprintk(ioc, 7184 dtmprintk(ioc,
7271 printk(MYIOC_s_DEBUG_FMT 7185 printk(MYIOC_s_DEBUG_FMT
7272 "HardResetHandler: completed (%d seconds): %s\n", ioc->name, 7186 "HardResetHandler: completed (%d seconds): %s\n", ioc->name,
diff --git a/drivers/message/fusion/mptbase.h b/drivers/message/fusion/mptbase.h
index 76c05bc24cb..fe902338539 100644
--- a/drivers/message/fusion/mptbase.h
+++ b/drivers/message/fusion/mptbase.h
@@ -76,8 +76,8 @@
76#define COPYRIGHT "Copyright (c) 1999-2008 " MODULEAUTHOR 76#define COPYRIGHT "Copyright (c) 1999-2008 " MODULEAUTHOR
77#endif 77#endif
78 78
79#define MPT_LINUX_VERSION_COMMON "3.04.20" 79#define MPT_LINUX_VERSION_COMMON "3.04.19"
80#define MPT_LINUX_PACKAGE_NAME "@(#)mptlinux-3.04.20" 80#define MPT_LINUX_PACKAGE_NAME "@(#)mptlinux-3.04.19"
81#define WHAT_MAGIC_STRING "@" "(" "#" ")" 81#define WHAT_MAGIC_STRING "@" "(" "#" ")"
82 82
83#define show_mptmod_ver(s,ver) \ 83#define show_mptmod_ver(s,ver) \
@@ -89,7 +89,6 @@
89 */ 89 */
90#define MPT_MAX_ADAPTERS 18 90#define MPT_MAX_ADAPTERS 18
91#define MPT_MAX_PROTOCOL_DRIVERS 16 91#define MPT_MAX_PROTOCOL_DRIVERS 16
92#define MPT_MAX_CALLBACKNAME_LEN 49
93#define MPT_MAX_BUS 1 /* Do not change */ 92#define MPT_MAX_BUS 1 /* Do not change */
94#define MPT_MAX_FC_DEVICES 255 93#define MPT_MAX_FC_DEVICES 255
95#define MPT_MAX_SCSI_DEVICES 16 94#define MPT_MAX_SCSI_DEVICES 16
@@ -555,47 +554,10 @@ struct mptfc_rport_info
555 u8 flags; 554 u8 flags;
556}; 555};
557 556
558/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
559
560/*
561 * MPT_SCSI_HOST defines - Used by the IOCTL and the SCSI drivers
562 * Private to the driver.
563 */
564
565#define MPT_HOST_BUS_UNKNOWN (0xFF)
566#define MPT_HOST_TOO_MANY_TM (0x05)
567#define MPT_HOST_NVRAM_INVALID (0xFFFFFFFF)
568#define MPT_HOST_NO_CHAIN (0xFFFFFFFF)
569#define MPT_NVRAM_MASK_TIMEOUT (0x000000FF)
570#define MPT_NVRAM_SYNC_MASK (0x0000FF00)
571#define MPT_NVRAM_SYNC_SHIFT (8)
572#define MPT_NVRAM_DISCONNECT_ENABLE (0x00010000)
573#define MPT_NVRAM_ID_SCAN_ENABLE (0x00020000)
574#define MPT_NVRAM_LUN_SCAN_ENABLE (0x00040000)
575#define MPT_NVRAM_TAG_QUEUE_ENABLE (0x00080000)
576#define MPT_NVRAM_WIDE_DISABLE (0x00100000)
577#define MPT_NVRAM_BOOT_CHOICE (0x00200000)
578
579typedef enum {
580 FC,
581 SPI,
582 SAS
583} BUS_TYPE;
584
585typedef struct _MPT_SCSI_HOST {
586 struct _MPT_ADAPTER *ioc;
587 ushort sel_timeout[MPT_MAX_FC_DEVICES];
588 char *info_kbuf;
589 long last_queue_full;
590 u16 spi_pending;
591 struct list_head target_reset_list;
592} MPT_SCSI_HOST;
593
594typedef void (*MPT_ADD_SGE)(void *pAddr, u32 flagslength, dma_addr_t dma_addr); 557typedef void (*MPT_ADD_SGE)(void *pAddr, u32 flagslength, dma_addr_t dma_addr);
595typedef void (*MPT_ADD_CHAIN)(void *pAddr, u8 next, u16 length, 558typedef void (*MPT_ADD_CHAIN)(void *pAddr, u8 next, u16 length,
596 dma_addr_t dma_addr); 559 dma_addr_t dma_addr);
597typedef void (*MPT_SCHEDULE_TARGET_RESET)(void *ioc); 560typedef void (*MPT_SCHEDULE_TARGET_RESET)(void *ioc);
598typedef void (*MPT_FLUSH_RUNNING_CMDS)(MPT_SCSI_HOST *hd);
599 561
600/* 562/*
601 * Adapter Structure - pci_dev specific. Maximum: MPT_MAX_ADAPTERS 563 * Adapter Structure - pci_dev specific. Maximum: MPT_MAX_ADAPTERS
@@ -754,10 +716,7 @@ typedef struct _MPT_ADAPTER
754 int taskmgmt_in_progress; 716 int taskmgmt_in_progress;
755 u8 taskmgmt_quiesce_io; 717 u8 taskmgmt_quiesce_io;
756 u8 ioc_reset_in_progress; 718 u8 ioc_reset_in_progress;
757 u8 reset_status;
758 u8 wait_on_reset_completion;
759 MPT_SCHEDULE_TARGET_RESET schedule_target_reset; 719 MPT_SCHEDULE_TARGET_RESET schedule_target_reset;
760 MPT_FLUSH_RUNNING_CMDS schedule_dead_ioc_flush_running_cmds;
761 struct work_struct sas_persist_task; 720 struct work_struct sas_persist_task;
762 721
763 struct work_struct fc_setup_reset_work; 722 struct work_struct fc_setup_reset_work;
@@ -871,6 +830,19 @@ typedef struct _MPT_LOCAL_REPLY {
871 u32 pad; 830 u32 pad;
872} MPT_LOCAL_REPLY; 831} MPT_LOCAL_REPLY;
873 832
833#define MPT_HOST_BUS_UNKNOWN (0xFF)
834#define MPT_HOST_TOO_MANY_TM (0x05)
835#define MPT_HOST_NVRAM_INVALID (0xFFFFFFFF)
836#define MPT_HOST_NO_CHAIN (0xFFFFFFFF)
837#define MPT_NVRAM_MASK_TIMEOUT (0x000000FF)
838#define MPT_NVRAM_SYNC_MASK (0x0000FF00)
839#define MPT_NVRAM_SYNC_SHIFT (8)
840#define MPT_NVRAM_DISCONNECT_ENABLE (0x00010000)
841#define MPT_NVRAM_ID_SCAN_ENABLE (0x00020000)
842#define MPT_NVRAM_LUN_SCAN_ENABLE (0x00040000)
843#define MPT_NVRAM_TAG_QUEUE_ENABLE (0x00080000)
844#define MPT_NVRAM_WIDE_DISABLE (0x00100000)
845#define MPT_NVRAM_BOOT_CHOICE (0x00200000)
874 846
875/* The TM_STATE variable is used to provide strict single threading of TM 847/* The TM_STATE variable is used to provide strict single threading of TM
876 * requests as well as communicate TM error conditions. 848 * requests as well as communicate TM error conditions.
@@ -879,6 +851,21 @@ typedef struct _MPT_LOCAL_REPLY {
879#define TM_STATE_IN_PROGRESS (1) 851#define TM_STATE_IN_PROGRESS (1)
880#define TM_STATE_ERROR (2) 852#define TM_STATE_ERROR (2)
881 853
854typedef enum {
855 FC,
856 SPI,
857 SAS
858} BUS_TYPE;
859
860typedef struct _MPT_SCSI_HOST {
861 MPT_ADAPTER *ioc;
862 ushort sel_timeout[MPT_MAX_FC_DEVICES];
863 char *info_kbuf;
864 long last_queue_full;
865 u16 spi_pending;
866 struct list_head target_reset_list;
867} MPT_SCSI_HOST;
868
882/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ 869/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
883/* 870/*
884 * More Dynamic Multi-Pathing stuff... 871 * More Dynamic Multi-Pathing stuff...
diff --git a/drivers/message/fusion/mptctl.c b/drivers/message/fusion/mptctl.c
index b383b6961e5..6e6e16aab9d 100644
--- a/drivers/message/fusion/mptctl.c
+++ b/drivers/message/fusion/mptctl.c
@@ -1250,6 +1250,7 @@ mptctl_getiocinfo (unsigned long arg, unsigned int data_size)
1250 int iocnum; 1250 int iocnum;
1251 unsigned int port; 1251 unsigned int port;
1252 int cim_rev; 1252 int cim_rev;
1253 u8 revision;
1253 struct scsi_device *sdev; 1254 struct scsi_device *sdev;
1254 VirtDevice *vdevice; 1255 VirtDevice *vdevice;
1255 1256
@@ -1323,7 +1324,8 @@ mptctl_getiocinfo (unsigned long arg, unsigned int data_size)
1323 pdev = (struct pci_dev *) ioc->pcidev; 1324 pdev = (struct pci_dev *) ioc->pcidev;
1324 1325
1325 karg->pciId = pdev->device; 1326 karg->pciId = pdev->device;
1326 karg->hwRev = pdev->revision; 1327 pci_read_config_byte(pdev, PCI_CLASS_REVISION, &revision);
1328 karg->hwRev = revision;
1327 karg->subSystemDevice = pdev->subsystem_device; 1329 karg->subSystemDevice = pdev->subsystem_device;
1328 karg->subSystemVendor = pdev->subsystem_vendor; 1330 karg->subSystemVendor = pdev->subsystem_vendor;
1329 1331
diff --git a/drivers/message/fusion/mptfc.c b/drivers/message/fusion/mptfc.c
index c13cd9bc590..d784c36707c 100644
--- a/drivers/message/fusion/mptfc.c
+++ b/drivers/message/fusion/mptfc.c
@@ -100,7 +100,7 @@ static int mptfc_slave_alloc(struct scsi_device *sdev);
100static int mptfc_qcmd(struct Scsi_Host *shost, struct scsi_cmnd *SCpnt); 100static int mptfc_qcmd(struct Scsi_Host *shost, struct scsi_cmnd *SCpnt);
101static void mptfc_target_destroy(struct scsi_target *starget); 101static void mptfc_target_destroy(struct scsi_target *starget);
102static void mptfc_set_rport_loss_tmo(struct fc_rport *rport, uint32_t timeout); 102static void mptfc_set_rport_loss_tmo(struct fc_rport *rport, uint32_t timeout);
103static void mptfc_remove(struct pci_dev *pdev); 103static void __devexit mptfc_remove(struct pci_dev *pdev);
104static int mptfc_abort(struct scsi_cmnd *SCpnt); 104static int mptfc_abort(struct scsi_cmnd *SCpnt);
105static int mptfc_dev_reset(struct scsi_cmnd *SCpnt); 105static int mptfc_dev_reset(struct scsi_cmnd *SCpnt);
106static int mptfc_bus_reset(struct scsi_cmnd *SCpnt); 106static int mptfc_bus_reset(struct scsi_cmnd *SCpnt);
@@ -1360,7 +1360,7 @@ static struct pci_driver mptfc_driver = {
1360 .name = "mptfc", 1360 .name = "mptfc",
1361 .id_table = mptfc_pci_table, 1361 .id_table = mptfc_pci_table,
1362 .probe = mptfc_probe, 1362 .probe = mptfc_probe,
1363 .remove = mptfc_remove, 1363 .remove = __devexit_p(mptfc_remove),
1364 .shutdown = mptscsih_shutdown, 1364 .shutdown = mptscsih_shutdown,
1365#ifdef CONFIG_PM 1365#ifdef CONFIG_PM
1366 .suspend = mptscsih_suspend, 1366 .suspend = mptscsih_suspend,
@@ -1496,7 +1496,8 @@ mptfc_init(void)
1496 * @pdev: Pointer to pci_dev structure 1496 * @pdev: Pointer to pci_dev structure
1497 * 1497 *
1498 */ 1498 */
1499static void mptfc_remove(struct pci_dev *pdev) 1499static void __devexit
1500mptfc_remove(struct pci_dev *pdev)
1500{ 1501{
1501 MPT_ADAPTER *ioc = pci_get_drvdata(pdev); 1502 MPT_ADAPTER *ioc = pci_get_drvdata(pdev);
1502 struct mptfc_rport_info *p, *n; 1503 struct mptfc_rport_info *p, *n;
diff --git a/drivers/message/fusion/mptlan.h b/drivers/message/fusion/mptlan.h
index 69e9d546356..c171afa9323 100644
--- a/drivers/message/fusion/mptlan.h
+++ b/drivers/message/fusion/mptlan.h
@@ -69,6 +69,7 @@
69#include <linux/spinlock.h> 69#include <linux/spinlock.h>
70#include <linux/workqueue.h> 70#include <linux/workqueue.h>
71#include <linux/delay.h> 71#include <linux/delay.h>
72// #include <linux/trdevice.h>
72 73
73#include <asm/uaccess.h> 74#include <asm/uaccess.h>
74#include <asm/io.h> 75#include <asm/io.h>
diff --git a/drivers/message/fusion/mptsas.c b/drivers/message/fusion/mptsas.c
index fa43c391c8e..7596aecd507 100644
--- a/drivers/message/fusion/mptsas.c
+++ b/drivers/message/fusion/mptsas.c
@@ -92,11 +92,6 @@ static int max_lun = MPTSAS_MAX_LUN;
92module_param(max_lun, int, 0); 92module_param(max_lun, int, 0);
93MODULE_PARM_DESC(max_lun, " max lun, default=16895 "); 93MODULE_PARM_DESC(max_lun, " max lun, default=16895 ");
94 94
95static int mpt_loadtime_max_sectors = 8192;
96module_param(mpt_loadtime_max_sectors, int, 0);
97MODULE_PARM_DESC(mpt_loadtime_max_sectors,
98 " Maximum sector define for Host Bus Adaptor.Range 64 to 8192 default=8192");
99
100static u8 mptsasDoneCtx = MPT_MAX_PROTOCOL_DRIVERS; 95static u8 mptsasDoneCtx = MPT_MAX_PROTOCOL_DRIVERS;
101static u8 mptsasTaskCtx = MPT_MAX_PROTOCOL_DRIVERS; 96static u8 mptsasTaskCtx = MPT_MAX_PROTOCOL_DRIVERS;
102static u8 mptsasInternalCtx = MPT_MAX_PROTOCOL_DRIVERS; /* Used only for internal commands */ 97static u8 mptsasInternalCtx = MPT_MAX_PROTOCOL_DRIVERS; /* Used only for internal commands */
@@ -290,11 +285,10 @@ mptsas_add_fw_event(MPT_ADAPTER *ioc, struct fw_event_work *fw_event,
290 spin_lock_irqsave(&ioc->fw_event_lock, flags); 285 spin_lock_irqsave(&ioc->fw_event_lock, flags);
291 list_add_tail(&fw_event->list, &ioc->fw_event_list); 286 list_add_tail(&fw_event->list, &ioc->fw_event_list);
292 INIT_DELAYED_WORK(&fw_event->work, mptsas_firmware_event_work); 287 INIT_DELAYED_WORK(&fw_event->work, mptsas_firmware_event_work);
293 devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT "%s: add (fw_event=0x%p)" 288 devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT "%s: add (fw_event=0x%p)\n",
294 "on cpuid %d\n", ioc->name, __func__, 289 ioc->name, __func__, fw_event));
295 fw_event, smp_processor_id())); 290 queue_delayed_work(ioc->fw_event_q, &fw_event->work,
296 queue_delayed_work_on(smp_processor_id(), ioc->fw_event_q, 291 delay);
297 &fw_event->work, delay);
298 spin_unlock_irqrestore(&ioc->fw_event_lock, flags); 292 spin_unlock_irqrestore(&ioc->fw_event_lock, flags);
299} 293}
300 294
@@ -306,11 +300,10 @@ mptsas_requeue_fw_event(MPT_ADAPTER *ioc, struct fw_event_work *fw_event,
306 unsigned long flags; 300 unsigned long flags;
307 spin_lock_irqsave(&ioc->fw_event_lock, flags); 301 spin_lock_irqsave(&ioc->fw_event_lock, flags);
308 devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT "%s: reschedule task " 302 devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT "%s: reschedule task "
309 "(fw_event=0x%p)on cpuid %d\n", ioc->name, __func__, 303 "(fw_event=0x%p)\n", ioc->name, __func__, fw_event));
310 fw_event, smp_processor_id()));
311 fw_event->retries++; 304 fw_event->retries++;
312 queue_delayed_work_on(smp_processor_id(), ioc->fw_event_q, 305 queue_delayed_work(ioc->fw_event_q, &fw_event->work,
313 &fw_event->work, msecs_to_jiffies(delay)); 306 msecs_to_jiffies(delay));
314 spin_unlock_irqrestore(&ioc->fw_event_lock, flags); 307 spin_unlock_irqrestore(&ioc->fw_event_lock, flags);
315} 308}
316 309
@@ -1950,15 +1943,6 @@ static enum blk_eh_timer_return mptsas_eh_timed_out(struct scsi_cmnd *sc)
1950 goto done; 1943 goto done;
1951 } 1944 }
1952 1945
1953 /* In case if IOC is in reset from internal context.
1954 * Do not execute EEH for the same IOC. SML should to reset timer.
1955 */
1956 if (ioc->ioc_reset_in_progress) {
1957 dtmprintk(ioc, printk(MYIOC_s_WARN_FMT ": %s: ioc is in reset,"
1958 "SML need to reset the timer (sc=%p)\n",
1959 ioc->name, __func__, sc));
1960 rc = BLK_EH_RESET_TIMER;
1961 }
1962 vdevice = sc->device->hostdata; 1946 vdevice = sc->device->hostdata;
1963 if (vdevice && vdevice->vtarget && (vdevice->vtarget->inDMD 1947 if (vdevice && vdevice->vtarget && (vdevice->vtarget->inDMD
1964 || vdevice->vtarget->deleted)) { 1948 || vdevice->vtarget->deleted)) {
@@ -5158,8 +5142,6 @@ mptsas_probe(struct pci_dev *pdev, const struct pci_device_id *id)
5158 ioc->TaskCtx = mptsasTaskCtx; 5142 ioc->TaskCtx = mptsasTaskCtx;
5159 ioc->InternalCtx = mptsasInternalCtx; 5143 ioc->InternalCtx = mptsasInternalCtx;
5160 ioc->schedule_target_reset = &mptsas_schedule_target_reset; 5144 ioc->schedule_target_reset = &mptsas_schedule_target_reset;
5161 ioc->schedule_dead_ioc_flush_running_cmds =
5162 &mptscsih_flush_running_cmds;
5163 /* Added sanity check on readiness of the MPT adapter. 5145 /* Added sanity check on readiness of the MPT adapter.
5164 */ 5146 */
5165 if (ioc->last_state != MPI_IOC_STATE_OPERATIONAL) { 5147 if (ioc->last_state != MPI_IOC_STATE_OPERATIONAL) {
@@ -5257,21 +5239,6 @@ mptsas_probe(struct pci_dev *pdev, const struct pci_device_id *id)
5257 sh->sg_tablesize = numSGE; 5239 sh->sg_tablesize = numSGE;
5258 } 5240 }
5259 5241
5260 if (mpt_loadtime_max_sectors) {
5261 if (mpt_loadtime_max_sectors < 64 ||
5262 mpt_loadtime_max_sectors > 8192) {
5263 printk(MYIOC_s_INFO_FMT "Invalid value passed for"
5264 "mpt_loadtime_max_sectors %d."
5265 "Range from 64 to 8192\n", ioc->name,
5266 mpt_loadtime_max_sectors);
5267 }
5268 mpt_loadtime_max_sectors &= 0xFFFFFFFE;
5269 dprintk(ioc, printk(MYIOC_s_DEBUG_FMT
5270 "Resetting max sector to %d from %d\n",
5271 ioc->name, mpt_loadtime_max_sectors, sh->max_sectors));
5272 sh->max_sectors = mpt_loadtime_max_sectors;
5273 }
5274
5275 hd = shost_priv(sh); 5242 hd = shost_priv(sh);
5276 hd->ioc = ioc; 5243 hd->ioc = ioc;
5277 5244
@@ -5332,7 +5299,7 @@ mptsas_shutdown(struct pci_dev *pdev)
5332 mptsas_cleanup_fw_event_q(ioc); 5299 mptsas_cleanup_fw_event_q(ioc);
5333} 5300}
5334 5301
5335static void mptsas_remove(struct pci_dev *pdev) 5302static void __devexit mptsas_remove(struct pci_dev *pdev)
5336{ 5303{
5337 MPT_ADAPTER *ioc = pci_get_drvdata(pdev); 5304 MPT_ADAPTER *ioc = pci_get_drvdata(pdev);
5338 struct mptsas_portinfo *p, *n; 5305 struct mptsas_portinfo *p, *n;
@@ -5376,8 +5343,6 @@ static struct pci_device_id mptsas_pci_table[] = {
5376 PCI_ANY_ID, PCI_ANY_ID }, 5343 PCI_ANY_ID, PCI_ANY_ID },
5377 { PCI_VENDOR_ID_LSI_LOGIC, MPI_MANUFACTPAGE_DEVID_SAS1078, 5344 { PCI_VENDOR_ID_LSI_LOGIC, MPI_MANUFACTPAGE_DEVID_SAS1078,
5378 PCI_ANY_ID, PCI_ANY_ID }, 5345 PCI_ANY_ID, PCI_ANY_ID },
5379 { PCI_VENDOR_ID_LSI_LOGIC, MPI_MANUFACTPAGE_DEVID_SAS1068_820XELP,
5380 PCI_ANY_ID, PCI_ANY_ID },
5381 {0} /* Terminating entry */ 5346 {0} /* Terminating entry */
5382}; 5347};
5383MODULE_DEVICE_TABLE(pci, mptsas_pci_table); 5348MODULE_DEVICE_TABLE(pci, mptsas_pci_table);
@@ -5387,7 +5352,7 @@ static struct pci_driver mptsas_driver = {
5387 .name = "mptsas", 5352 .name = "mptsas",
5388 .id_table = mptsas_pci_table, 5353 .id_table = mptsas_pci_table,
5389 .probe = mptsas_probe, 5354 .probe = mptsas_probe,
5390 .remove = mptsas_remove, 5355 .remove = __devexit_p(mptsas_remove),
5391 .shutdown = mptsas_shutdown, 5356 .shutdown = mptsas_shutdown,
5392#ifdef CONFIG_PM 5357#ifdef CONFIG_PM
5393 .suspend = mptscsih_suspend, 5358 .suspend = mptscsih_suspend,
diff --git a/drivers/message/fusion/mptscsih.c b/drivers/message/fusion/mptscsih.c
index 164afa71bba..ce61a576976 100644
--- a/drivers/message/fusion/mptscsih.c
+++ b/drivers/message/fusion/mptscsih.c
@@ -792,7 +792,6 @@ mptscsih_io_done(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *mr)
792 * than an unsolicited DID_ABORT. 792 * than an unsolicited DID_ABORT.
793 */ 793 */
794 sc->result = DID_RESET << 16; 794 sc->result = DID_RESET << 16;
795 break;
796 795
797 case MPI_IOCSTATUS_SCSI_EXT_TERMINATED: /* 0x004C */ 796 case MPI_IOCSTATUS_SCSI_EXT_TERMINATED: /* 0x004C */
798 if (ioc->bus_type == FC) 797 if (ioc->bus_type == FC)
@@ -831,8 +830,7 @@ mptscsih_io_done(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *mr)
831 if ((pScsiReq->CDB[0] == READ_6 && ((pScsiReq->CDB[1] & 0x02) == 0)) || 830 if ((pScsiReq->CDB[0] == READ_6 && ((pScsiReq->CDB[1] & 0x02) == 0)) ||
832 pScsiReq->CDB[0] == READ_10 || 831 pScsiReq->CDB[0] == READ_10 ||
833 pScsiReq->CDB[0] == READ_12 || 832 pScsiReq->CDB[0] == READ_12 ||
834 (pScsiReq->CDB[0] == READ_16 && 833 pScsiReq->CDB[0] == READ_16 ||
835 ((pScsiReq->CDB[1] & 0x02) == 0)) ||
836 pScsiReq->CDB[0] == VERIFY || 834 pScsiReq->CDB[0] == VERIFY ||
837 pScsiReq->CDB[0] == VERIFY_16) { 835 pScsiReq->CDB[0] == VERIFY_16) {
838 if (scsi_bufflen(sc) != 836 if (scsi_bufflen(sc) !=
@@ -1026,7 +1024,7 @@ out:
1026 * 1024 *
1027 * Must be called while new I/Os are being queued. 1025 * Must be called while new I/Os are being queued.
1028 */ 1026 */
1029void 1027static void
1030mptscsih_flush_running_cmds(MPT_SCSI_HOST *hd) 1028mptscsih_flush_running_cmds(MPT_SCSI_HOST *hd)
1031{ 1029{
1032 MPT_ADAPTER *ioc = hd->ioc; 1030 MPT_ADAPTER *ioc = hd->ioc;
@@ -1057,7 +1055,6 @@ mptscsih_flush_running_cmds(MPT_SCSI_HOST *hd)
1057 sc->scsi_done(sc); 1055 sc->scsi_done(sc);
1058 } 1056 }
1059} 1057}
1060EXPORT_SYMBOL(mptscsih_flush_running_cmds);
1061 1058
1062/* 1059/*
1063 * mptscsih_search_running_cmds - Delete any commands associated 1060 * mptscsih_search_running_cmds - Delete any commands associated
@@ -1632,13 +1629,7 @@ mptscsih_IssueTaskMgmt(MPT_SCSI_HOST *hd, u8 type, u8 channel, u8 id, int lun,
1632 return 0; 1629 return 0;
1633 } 1630 }
1634 1631
1635 /* DOORBELL ACTIVE check is not required if 1632 if (ioc_raw_state & MPI_DOORBELL_ACTIVE) {
1636 * MPI_IOCFACTS_CAPABILITY_HIGH_PRI_Q is supported.
1637 */
1638
1639 if (!((ioc->facts.IOCCapabilities & MPI_IOCFACTS_CAPABILITY_HIGH_PRI_Q)
1640 && (ioc->facts.MsgVersion >= MPI_VERSION_01_05)) &&
1641 (ioc_raw_state & MPI_DOORBELL_ACTIVE)) {
1642 printk(MYIOC_s_WARN_FMT 1633 printk(MYIOC_s_WARN_FMT
1643 "TaskMgmt type=%x: ioc_state: " 1634 "TaskMgmt type=%x: ioc_state: "
1644 "DOORBELL_ACTIVE (0x%x)!\n", 1635 "DOORBELL_ACTIVE (0x%x)!\n",
@@ -1737,9 +1728,7 @@ mptscsih_IssueTaskMgmt(MPT_SCSI_HOST *hd, u8 type, u8 channel, u8 id, int lun,
1737 printk(MYIOC_s_WARN_FMT 1728 printk(MYIOC_s_WARN_FMT
1738 "Issuing Reset from %s!! doorbell=0x%08x\n", 1729 "Issuing Reset from %s!! doorbell=0x%08x\n",
1739 ioc->name, __func__, mpt_GetIocState(ioc, 0)); 1730 ioc->name, __func__, mpt_GetIocState(ioc, 0));
1740 retval = (ioc->bus_type == SAS) ? 1731 retval = mpt_Soft_Hard_ResetHandler(ioc, CAN_SLEEP);
1741 mpt_HardResetHandler(ioc, CAN_SLEEP) :
1742 mpt_Soft_Hard_ResetHandler(ioc, CAN_SLEEP);
1743 mpt_free_msg_frame(ioc, mf); 1732 mpt_free_msg_frame(ioc, mf);
1744 } 1733 }
1745 1734
diff --git a/drivers/message/fusion/mptscsih.h b/drivers/message/fusion/mptscsih.h
index 43e75ff3992..45a5ff3eff6 100644
--- a/drivers/message/fusion/mptscsih.h
+++ b/drivers/message/fusion/mptscsih.h
@@ -135,4 +135,3 @@ extern int mptscsih_is_phys_disk(MPT_ADAPTER *ioc, u8 channel, u8 id);
135extern struct device_attribute *mptscsih_host_attrs[]; 135extern struct device_attribute *mptscsih_host_attrs[];
136extern struct scsi_cmnd *mptscsih_get_scsi_lookup(MPT_ADAPTER *ioc, int i); 136extern struct scsi_cmnd *mptscsih_get_scsi_lookup(MPT_ADAPTER *ioc, int i);
137extern void mptscsih_taskmgmt_response_code(MPT_ADAPTER *ioc, u8 response_code); 137extern void mptscsih_taskmgmt_response_code(MPT_ADAPTER *ioc, u8 response_code);
138extern void mptscsih_flush_running_cmds(MPT_SCSI_HOST *hd);
diff --git a/drivers/message/fusion/mptspi.c b/drivers/message/fusion/mptspi.c
index c3aabde2dc4..8f61ba6aac2 100644
--- a/drivers/message/fusion/mptspi.c
+++ b/drivers/message/fusion/mptspi.c
@@ -1550,7 +1550,7 @@ static struct pci_driver mptspi_driver = {
1550 .name = "mptspi", 1550 .name = "mptspi",
1551 .id_table = mptspi_pci_table, 1551 .id_table = mptspi_pci_table,
1552 .probe = mptspi_probe, 1552 .probe = mptspi_probe,
1553 .remove = mptscsih_remove, 1553 .remove = __devexit_p(mptscsih_remove),
1554 .shutdown = mptscsih_shutdown, 1554 .shutdown = mptscsih_shutdown,
1555#ifdef CONFIG_PM 1555#ifdef CONFIG_PM
1556 .suspend = mptscsih_suspend, 1556 .suspend = mptscsih_suspend,