コード例 #1
0
static int dma_request_interrupts(struct sata_dwc_device *hsdev, int irq)
{
    int retval = 0;
    int chan;

    for (chan = 0; chan < DMA_NUM_CHANS; chan++) {

        out_le32(&(host_pvt.sata_dma_regs)->interrupt_mask.error.low,
                 DMA_ENABLE_CHAN(chan));


        out_le32(&(host_pvt.sata_dma_regs)->interrupt_mask.tfr.low,
                 DMA_ENABLE_CHAN(chan));
    }

    retval = request_irq(irq, dma_dwc_interrupt, 0, "SATA DMA", hsdev);
    if (retval) {
        dev_err(host_pvt.dwc_dev, "%s: could not get IRQ %d\n",
                __func__, irq);
        return -ENODEV;
    }


    hsdev->irq_dma = irq;
    return 0;
}
コード例 #2
0
/*
 * Function: dma_request_interrupts
 * arguments: hsdev
 * returns status
 * This function registers ISR for a particular DMA channel interrupt
 */
static int dma_request_interrupts(struct sata_dwc_device *hsdev, int irq)
{
	int retval = 0;
	int chan = host_pvt.dma_channel;

	if (chan >= 0) {
		/* Unmask error interrupt */
		out_le32(&(host_pvt.sata_dma_regs)->interrupt_mask.error.low,
			 DMA_ENABLE_CHAN(chan));

		/* Unmask end-of-transfer interrupt */
		out_le32(&(host_pvt.sata_dma_regs)->interrupt_mask.tfr.low,
			 DMA_ENABLE_CHAN(chan));
	}

	retval = request_irq(irq, dma_dwc_interrupt, 0, "SATA DMA", hsdev);
	if (retval) {
		dev_err(host_pvt.dwc_dev, "%s: could not get IRQ %d\n",
		__func__, irq);
		return -ENODEV;
	}

	/* Mark this interrupt as requested */
	hsdev->irq_dma = irq;
	return 0;
}
コード例 #3
0
static void dma_dwc_xfer_start(int dma_ch)
{

    out_le32(&(host_pvt.sata_dma_regs->dma_chan_en.low),
             in_le32(&(host_pvt.sata_dma_regs->dma_chan_en.low)) |
             DMA_ENABLE_CHAN(dma_ch));
}