Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8af50dcd authored by Christoph Hellwig's avatar Christoph Hellwig Committed by James Bottomley
Browse files

[SCSI] qla1280: interupt posting for irq disabling/enabling

parent a6c42741
Loading
Loading
Loading
Loading
+20 −37
Original line number Diff line number Diff line
@@ -1266,6 +1266,22 @@ qla1280_biosparam_old(Disk * disk, kdev_t dev, int geom[])
}
#endif
 
/* disable risc and host interrupts */
static inline void
qla1280_disable_intrs(struct scsi_qla_host *ha)
{
	WRT_REG_WORD(&ha->iobase->ictrl, 0);
	RD_REG_WORD(&ha->iobase->ictrl);	/* PCI Posted Write flush */
}

/* enable risc and host interrupts */
static inline void
qla1280_enable_intrs(struct scsi_qla_host *ha)
{
	WRT_REG_WORD(&ha->iobase->ictrl, (ISP_EN_INT | ISP_EN_RISC));
	RD_REG_WORD(&ha->iobase->ictrl);	/* PCI Posted Write flush */
}

/**************************************************************************
 * qla1280_intr_handler
 *   Handles the H/W interrupt
@@ -1286,7 +1302,7 @@ qla1280_intr_handler(int irq, void *dev_id, struct pt_regs *regs)
	ha->isr_count++;
	reg = ha->iobase;

	WRT_REG_WORD(&reg->ictrl, 0);	/* disable our interrupt. */
	qla1280_disable_intrs(ha);

	data = qla1280_debounce_register(&reg->istatus);
	/* Check for pending interrupts. */
@@ -1299,8 +1315,7 @@ qla1280_intr_handler(int irq, void *dev_id, struct pt_regs *regs)

	spin_unlock(HOST_LOCK);

	/* enable our interrupt. */
	WRT_REG_WORD(&reg->ictrl, (ISP_EN_INT | ISP_EN_RISC));
	qla1280_enable_intrs(ha);

	LEAVE_INTR("qla1280_intr_handler");
	return IRQ_RETVAL(handled);
@@ -1613,38 +1628,6 @@ qla1280_return_status(struct response * sts, struct scsi_cmnd *cp)
/*                QLogic ISP1280 Hardware Support Functions.                */
/****************************************************************************/

 /*
  * qla2100_enable_intrs
  * qla2100_disable_intrs
  *
  * Input:
  *      ha = adapter block pointer.
  *
  * Returns:
  *      None
  */
static inline void
qla1280_enable_intrs(struct scsi_qla_host *ha)
{
	struct device_reg __iomem *reg;

	reg = ha->iobase;
	/* enable risc and host interrupts */
	WRT_REG_WORD(&reg->ictrl, (ISP_EN_INT | ISP_EN_RISC));
	RD_REG_WORD(&reg->ictrl);	/* PCI Posted Write flush */
}

static inline void
qla1280_disable_intrs(struct scsi_qla_host *ha)
{
	struct device_reg __iomem *reg;

	reg = ha->iobase;
	/* disable risc and host interrupts */
	WRT_REG_WORD(&reg->ictrl, 0);
	RD_REG_WORD(&reg->ictrl);	/* PCI Posted Write flush */
}

/*
 * qla1280_initialize_adapter
 *      Initialize board.
@@ -4751,7 +4734,7 @@ qla1280_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)

#if LINUX_VERSION_CODE >= 0x020600
 error_disable_adapter:
	WRT_REG_WORD(&ha->iobase->ictrl, 0);
	qla1280_disable_intrs(ha);
#endif
 error_free_irq:
	free_irq(pdev->irq, ha);
@@ -4788,7 +4771,7 @@ qla1280_remove_one(struct pci_dev *pdev)
	scsi_remove_host(host);
#endif

	WRT_REG_WORD(&ha->iobase->ictrl, 0);
	qla1280_disable_intrs(ha);

	free_irq(pdev->irq, ha);