Commit 318141a1 authored by H Hartley Sweeten's avatar H Hartley Sweeten Committed by Greg Kroah-Hartman
Browse files

staging: comedi: adl_pci9118: handle master/target abort in main interrupt handler



For aesthetics, move the master/target abort detection from the DMA handler to the
main interrupt handler. This allows removing the unused 'int_amcc' parameter from
the DMA and non-DMA handlers.

Signed-off-by: default avatarH Hartley Sweeten <hsweeten@visionengravers.com>
Reviewed-by: default avatarIan Abbott <abbotti@mev.co.uk>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 9e531485
Loading
Loading
Loading
Loading
+16 −17
Original line number Diff line number Diff line
@@ -727,7 +727,6 @@ static void pci9118_ai_munge(struct comedi_device *dev,
static void interrupt_pci9118_ai_onesample(struct comedi_device *dev,
					   struct comedi_subdevice *s,
					   unsigned short int_adstat,
					   unsigned int int_amcc,
					   unsigned short int_daq)
{
	struct pci9118_private *devpriv = dev->private;
@@ -773,26 +772,12 @@ static void interrupt_pci9118_ai_onesample(struct comedi_device *dev,
static void interrupt_pci9118_ai_dma(struct comedi_device *dev,
				     struct comedi_subdevice *s,
				     unsigned short int_adstat,
				     unsigned int int_amcc,
				     unsigned short int_daq)
{
	struct pci9118_private *devpriv = dev->private;
	struct comedi_cmd *cmd = &s->async->cmd;
	unsigned int next_dma_buf, samplesinbuf, sampls, m;

	if (int_amcc & MASTER_ABORT_INT) {
		dev_err(dev->class_dev, "AMCC IRQ - MASTER DMA ABORT!\n");
		s->async->events |= COMEDI_CB_ERROR | COMEDI_CB_EOA;
		cfc_handle_events(dev, s);
		return;
	}

	if (int_amcc & TARGET_ABORT_INT) {
		dev_err(dev->class_dev, "AMCC IRQ - TARGET DMA ABORT!\n");
		s->async->events |= COMEDI_CB_ERROR | COMEDI_CB_EOA;
		cfc_handle_events(dev, s);
		return;
	}
	if (int_adstat & devpriv->ai_maskerr)
					/* if (int_adstat & 0x106) */
		if (pci9118_decode_error_status(dev, s, int_adstat))
@@ -862,6 +847,20 @@ static irqreturn_t pci9118_interrupt(int irq, void *d)

	outl(intcsr | 0x00ff0000, devpriv->iobase_a + AMCC_OP_REG_INTCSR);

	if (intcsr & MASTER_ABORT_INT) {
		dev_err(dev->class_dev, "AMCC IRQ - MASTER DMA ABORT!\n");
		s->async->events |= COMEDI_CB_ERROR | COMEDI_CB_EOA;
		cfc_handle_events(dev, s);
		return IRQ_HANDLED;
	}

	if (intcsr & TARGET_ABORT_INT) {
		dev_err(dev->class_dev, "AMCC IRQ - TARGET DMA ABORT!\n");
		s->async->events |= COMEDI_CB_ERROR | COMEDI_CB_EOA;
		cfc_handle_events(dev, s);
		return IRQ_HANDLED;
	}

	adstat = inl(dev->iobase + PCI9118_AI_STATUS_REG) & 0x1ff;

	if (!devpriv->ai_do)
@@ -893,9 +892,9 @@ static irqreturn_t pci9118_interrupt(int irq, void *d)
	}

	if (devpriv->usedma)
		interrupt_pci9118_ai_dma(dev, s, adstat, intcsr, intsrc);
		interrupt_pci9118_ai_dma(dev, s, adstat, intsrc);
	else
		interrupt_pci9118_ai_onesample(dev, s, adstat, intcsr, intsrc);
		interrupt_pci9118_ai_onesample(dev, s, adstat, intsrc);

	return IRQ_HANDLED;
}