aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/qla2xxx/qla_isr.c
diff options
context:
space:
mode:
authorAndrew Vasquez <andrew.vasquez@qlogic.com>2008-01-31 15:33:50 -0500
committerJames Bottomley <James.Bottomley@HansenPartnership.com>2008-02-07 19:02:39 -0500
commit963b0fdd3a4aa68e6e65e0967ec0adcca0736fde (patch)
tree33ad21e58997cdd85f944f29722a6bcc4759fbf8 /drivers/scsi/qla2xxx/qla_isr.c
parent3db0652ef986f3bc3d779c4f986330ee3fdd50cc (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.c27
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
1815qla2x00_request_irqs(scsi_qla_host_t *ha) 1815qla2x00_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;
1877clear_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(&reg->isp24.hccr, HCCRX_CLR_HOST_INT);
1883 WRT_REG_DWORD(&reg->isp24.hccr, HCCRX_CLR_RISC_INT);
1884 } else {
1885 WRT_REG_WORD(&reg->isp.semaphore, 0);
1886 WRT_REG_WORD(&reg->isp.hccr, HCCR_CLR_RISC_INT);
1887 WRT_REG_WORD(&reg->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
1892fail:
1876 return ret; 1893 return ret;
1877} 1894}
1878 1895