diff options
author | Andrew Vasquez <andrew.vasquez@qlogic.com> | 2008-01-31 15:33:50 -0500 |
---|---|---|
committer | James Bottomley <James.Bottomley@HansenPartnership.com> | 2008-02-07 19:02:39 -0500 |
commit | 963b0fdd3a4aa68e6e65e0967ec0adcca0736fde (patch) | |
tree | 33ad21e58997cdd85f944f29722a6bcc4759fbf8 /drivers | |
parent | 3db0652ef986f3bc3d779c4f986330ee3fdd50cc (diff) |
[SCSI] qla2xxx: Move RISC-interrupt-register modifications to qla2x00_request_irqs().
There's no functional change involved with this update, instead
it simply migrates the "set cleared interrupt state" codes to a
more approprate method, qla2x00_request_irqs(), and cleans-up the
driver's probe() logic.
Signed-off-by: Andrew Vasquez <andrew.vasquez@qlogic.com>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/scsi/qla2xxx/qla_isr.c | 27 | ||||
-rw-r--r-- | drivers/scsi/qla2xxx/qla_os.c | 18 |
2 files changed, 22 insertions, 23 deletions
diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c index 642a0c3f09c6..14e6f22944b7 100644 --- a/drivers/scsi/qla2xxx/qla_isr.c +++ b/drivers/scsi/qla2xxx/qla_isr.c | |||
@@ -1815,6 +1815,8 @@ int | |||
1815 | qla2x00_request_irqs(scsi_qla_host_t *ha) | 1815 | qla2x00_request_irqs(scsi_qla_host_t *ha) |
1816 | { | 1816 | { |
1817 | int ret; | 1817 | int ret; |
1818 | device_reg_t __iomem *reg = ha->iobase; | ||
1819 | unsigned long flags; | ||
1818 | 1820 | ||
1819 | /* If possible, enable MSI-X. */ | 1821 | /* If possible, enable MSI-X. */ |
1820 | if (!IS_QLA2432(ha) && !IS_QLA2532(ha)) | 1822 | if (!IS_QLA2432(ha) && !IS_QLA2532(ha)) |
@@ -1846,7 +1848,7 @@ qla2x00_request_irqs(scsi_qla_host_t *ha) | |||
1846 | DEBUG2(qla_printk(KERN_INFO, ha, | 1848 | DEBUG2(qla_printk(KERN_INFO, ha, |
1847 | "MSI-X: Enabled (0x%X, 0x%X).\n", ha->chip_revision, | 1849 | "MSI-X: Enabled (0x%X, 0x%X).\n", ha->chip_revision, |
1848 | ha->fw_attributes)); | 1850 | ha->fw_attributes)); |
1849 | return ret; | 1851 | goto clear_risc_ints; |
1850 | } | 1852 | } |
1851 | qla_printk(KERN_WARNING, ha, | 1853 | qla_printk(KERN_WARNING, ha, |
1852 | "MSI-X: Falling back-to INTa mode -- %d.\n", ret); | 1854 | "MSI-X: Falling back-to INTa mode -- %d.\n", ret); |
@@ -1864,15 +1866,30 @@ skip_msi: | |||
1864 | 1866 | ||
1865 | ret = request_irq(ha->pdev->irq, ha->isp_ops->intr_handler, | 1867 | ret = request_irq(ha->pdev->irq, ha->isp_ops->intr_handler, |
1866 | IRQF_DISABLED|IRQF_SHARED, QLA2XXX_DRIVER_NAME, ha); | 1868 | IRQF_DISABLED|IRQF_SHARED, QLA2XXX_DRIVER_NAME, ha); |
1867 | if (!ret) { | 1869 | if (ret) { |
1868 | ha->flags.inta_enabled = 1; | ||
1869 | ha->host->irq = ha->pdev->irq; | ||
1870 | } else { | ||
1871 | qla_printk(KERN_WARNING, ha, | 1870 | qla_printk(KERN_WARNING, ha, |
1872 | "Failed to reserve interrupt %d already in use.\n", | 1871 | "Failed to reserve interrupt %d already in use.\n", |
1873 | ha->pdev->irq); | 1872 | ha->pdev->irq); |
1873 | goto fail; | ||
1874 | } | ||
1875 | ha->flags.inta_enabled = 1; | ||
1876 | ha->host->irq = ha->pdev->irq; | ||
1877 | clear_risc_ints: | ||
1878 | |||
1879 | ha->isp_ops->disable_intrs(ha); | ||
1880 | spin_lock_irqsave(&ha->hardware_lock, flags); | ||
1881 | if (IS_FWI2_CAPABLE(ha)) { | ||
1882 | WRT_REG_DWORD(®->isp24.hccr, HCCRX_CLR_HOST_INT); | ||
1883 | WRT_REG_DWORD(®->isp24.hccr, HCCRX_CLR_RISC_INT); | ||
1884 | } else { | ||
1885 | WRT_REG_WORD(®->isp.semaphore, 0); | ||
1886 | WRT_REG_WORD(®->isp.hccr, HCCR_CLR_RISC_INT); | ||
1887 | WRT_REG_WORD(®->isp.hccr, HCCR_CLR_HOST_INT); | ||
1874 | } | 1888 | } |
1889 | spin_unlock_irqrestore(&ha->hardware_lock, flags); | ||
1890 | ha->isp_ops->enable_intrs(ha); | ||
1875 | 1891 | ||
1892 | fail: | ||
1876 | return ret; | 1893 | return ret; |
1877 | } | 1894 | } |
1878 | 1895 | ||
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index 5270e2d0d114..6285c9c2eaf0 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c | |||
@@ -1576,10 +1576,8 @@ static int __devinit | |||
1576 | qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id) | 1576 | qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id) |
1577 | { | 1577 | { |
1578 | int ret = -ENODEV; | 1578 | int ret = -ENODEV; |
1579 | device_reg_t __iomem *reg; | ||
1580 | struct Scsi_Host *host; | 1579 | struct Scsi_Host *host; |
1581 | scsi_qla_host_t *ha; | 1580 | scsi_qla_host_t *ha; |
1582 | unsigned long flags = 0; | ||
1583 | char pci_info[30]; | 1581 | char pci_info[30]; |
1584 | char fw_str[30]; | 1582 | char fw_str[30]; |
1585 | struct scsi_host_template *sht; | 1583 | struct scsi_host_template *sht; |
@@ -1769,22 +1767,6 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id) | |||
1769 | DEBUG2(printk("DEBUG: detect hba %ld at address = %p\n", | 1767 | DEBUG2(printk("DEBUG: detect hba %ld at address = %p\n", |
1770 | ha->host_no, ha)); | 1768 | ha->host_no, ha)); |
1771 | 1769 | ||
1772 | ha->isp_ops->disable_intrs(ha); | ||
1773 | |||
1774 | spin_lock_irqsave(&ha->hardware_lock, flags); | ||
1775 | reg = ha->iobase; | ||
1776 | if (IS_FWI2_CAPABLE(ha)) { | ||
1777 | WRT_REG_DWORD(®->isp24.hccr, HCCRX_CLR_HOST_INT); | ||
1778 | WRT_REG_DWORD(®->isp24.hccr, HCCRX_CLR_RISC_INT); | ||
1779 | } else { | ||
1780 | WRT_REG_WORD(®->isp.semaphore, 0); | ||
1781 | WRT_REG_WORD(®->isp.hccr, HCCR_CLR_RISC_INT); | ||
1782 | WRT_REG_WORD(®->isp.hccr, HCCR_CLR_HOST_INT); | ||
1783 | } | ||
1784 | spin_unlock_irqrestore(&ha->hardware_lock, flags); | ||
1785 | |||
1786 | ha->isp_ops->enable_intrs(ha); | ||
1787 | |||
1788 | pci_set_drvdata(pdev, ha); | 1770 | pci_set_drvdata(pdev, ha); |
1789 | 1771 | ||
1790 | ha->flags.init_done = 1; | 1772 | ha->flags.init_done = 1; |