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/scsi/qla2xxx/qla_isr.c | |
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/scsi/qla2xxx/qla_isr.c')
-rw-r--r-- | drivers/scsi/qla2xxx/qla_isr.c | 27 |
1 files changed, 22 insertions, 5 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 | ||