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; }
/* * 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; }
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)); }