diff options
author | Jonathan Herman <hermanjl@cs.unc.edu> | 2013-01-17 16:15:55 -0500 |
---|---|---|
committer | Jonathan Herman <hermanjl@cs.unc.edu> | 2013-01-17 16:15:55 -0500 |
commit | 8dea78da5cee153b8af9c07a2745f6c55057fe12 (patch) | |
tree | a8f4d49d63b1ecc92f2fddceba0655b2472c5bd9 /drivers/message/fusion | |
parent | 406089d01562f1e2bf9f089fd7637009ebaad589 (diff) |
Patched in Tegra support.
Diffstat (limited to 'drivers/message/fusion')
-rw-r--r-- | drivers/message/fusion/lsi/mpi_cnfg.h | 1 | ||||
-rw-r--r-- | drivers/message/fusion/lsi/mpi_ioc.h | 2 | ||||
-rw-r--r-- | drivers/message/fusion/mptbase.c | 130 | ||||
-rw-r--r-- | drivers/message/fusion/mptbase.h | 73 | ||||
-rw-r--r-- | drivers/message/fusion/mptctl.c | 4 | ||||
-rw-r--r-- | drivers/message/fusion/mptfc.c | 7 | ||||
-rw-r--r-- | drivers/message/fusion/mptlan.h | 1 | ||||
-rw-r--r-- | drivers/message/fusion/mptsas.c | 53 | ||||
-rw-r--r-- | drivers/message/fusion/mptscsih.c | 19 | ||||
-rw-r--r-- | drivers/message/fusion/mptscsih.h | 1 | ||||
-rw-r--r-- | drivers/message/fusion/mptspi.c | 2 |
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 | ||
862 | typedef struct _EVENT_DATA_DISCOVERY_ERROR | 862 | typedef 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); | |||
115 | MODULE_PARM_DESC(mpt_fwfault_debug, | 113 | MODULE_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 | ||
118 | static char MptCallbacksName[MPT_MAX_PROTOCOL_DRIVERS] | 116 | static char MptCallbacksName[MPT_MAX_PROTOCOL_DRIVERS][50]; |
119 | [MPT_MAX_CALLBACKNAME_LEN+1]; | ||
120 | 117 | ||
121 | #ifdef MFCNT | 118 | #ifdef MFCNT |
122 | static int mfcounter = 0; | 119 | static 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 | */ | ||
337 | static 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 | |||
1752 | out_pci_release_region: | ||
1753 | pci_release_selected_regions(pdev, ioc->bars); | ||
1754 | out_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 | } |
7269 | exit: | 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 | |||
579 | typedef enum { | ||
580 | FC, | ||
581 | SPI, | ||
582 | SAS | ||
583 | } BUS_TYPE; | ||
584 | |||
585 | typedef 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 | |||
594 | typedef void (*MPT_ADD_SGE)(void *pAddr, u32 flagslength, dma_addr_t dma_addr); | 557 | typedef void (*MPT_ADD_SGE)(void *pAddr, u32 flagslength, dma_addr_t dma_addr); |
595 | typedef void (*MPT_ADD_CHAIN)(void *pAddr, u8 next, u16 length, | 558 | typedef void (*MPT_ADD_CHAIN)(void *pAddr, u8 next, u16 length, |
596 | dma_addr_t dma_addr); | 559 | dma_addr_t dma_addr); |
597 | typedef void (*MPT_SCHEDULE_TARGET_RESET)(void *ioc); | 560 | typedef void (*MPT_SCHEDULE_TARGET_RESET)(void *ioc); |
598 | typedef 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 | ||
854 | typedef enum { | ||
855 | FC, | ||
856 | SPI, | ||
857 | SAS | ||
858 | } BUS_TYPE; | ||
859 | |||
860 | typedef 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); | |||
100 | static int mptfc_qcmd(struct Scsi_Host *shost, struct scsi_cmnd *SCpnt); | 100 | static int mptfc_qcmd(struct Scsi_Host *shost, struct scsi_cmnd *SCpnt); |
101 | static void mptfc_target_destroy(struct scsi_target *starget); | 101 | static void mptfc_target_destroy(struct scsi_target *starget); |
102 | static void mptfc_set_rport_loss_tmo(struct fc_rport *rport, uint32_t timeout); | 102 | static void mptfc_set_rport_loss_tmo(struct fc_rport *rport, uint32_t timeout); |
103 | static void mptfc_remove(struct pci_dev *pdev); | 103 | static void __devexit mptfc_remove(struct pci_dev *pdev); |
104 | static int mptfc_abort(struct scsi_cmnd *SCpnt); | 104 | static int mptfc_abort(struct scsi_cmnd *SCpnt); |
105 | static int mptfc_dev_reset(struct scsi_cmnd *SCpnt); | 105 | static int mptfc_dev_reset(struct scsi_cmnd *SCpnt); |
106 | static int mptfc_bus_reset(struct scsi_cmnd *SCpnt); | 106 | static 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 | */ |
1499 | static void mptfc_remove(struct pci_dev *pdev) | 1499 | static void __devexit |
1500 | mptfc_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; | |||
92 | module_param(max_lun, int, 0); | 92 | module_param(max_lun, int, 0); |
93 | MODULE_PARM_DESC(max_lun, " max lun, default=16895 "); | 93 | MODULE_PARM_DESC(max_lun, " max lun, default=16895 "); |
94 | 94 | ||
95 | static int mpt_loadtime_max_sectors = 8192; | ||
96 | module_param(mpt_loadtime_max_sectors, int, 0); | ||
97 | MODULE_PARM_DESC(mpt_loadtime_max_sectors, | ||
98 | " Maximum sector define for Host Bus Adaptor.Range 64 to 8192 default=8192"); | ||
99 | |||
100 | static u8 mptsasDoneCtx = MPT_MAX_PROTOCOL_DRIVERS; | 95 | static u8 mptsasDoneCtx = MPT_MAX_PROTOCOL_DRIVERS; |
101 | static u8 mptsasTaskCtx = MPT_MAX_PROTOCOL_DRIVERS; | 96 | static u8 mptsasTaskCtx = MPT_MAX_PROTOCOL_DRIVERS; |
102 | static u8 mptsasInternalCtx = MPT_MAX_PROTOCOL_DRIVERS; /* Used only for internal commands */ | 97 | static 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 | ||
5335 | static void mptsas_remove(struct pci_dev *pdev) | 5302 | static 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 | }; |
5383 | MODULE_DEVICE_TABLE(pci, mptsas_pci_table); | 5348 | MODULE_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 | */ |
1029 | void | 1027 | static void |
1030 | mptscsih_flush_running_cmds(MPT_SCSI_HOST *hd) | 1028 | mptscsih_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 | } |
1060 | EXPORT_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); | |||
135 | extern struct device_attribute *mptscsih_host_attrs[]; | 135 | extern struct device_attribute *mptscsih_host_attrs[]; |
136 | extern struct scsi_cmnd *mptscsih_get_scsi_lookup(MPT_ADAPTER *ioc, int i); | 136 | extern struct scsi_cmnd *mptscsih_get_scsi_lookup(MPT_ADAPTER *ioc, int i); |
137 | extern void mptscsih_taskmgmt_response_code(MPT_ADAPTER *ioc, u8 response_code); | 137 | extern void mptscsih_taskmgmt_response_code(MPT_ADAPTER *ioc, u8 response_code); |
138 | extern 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, |