Lines Matching refs:chan

30 static unsigned long dma_find_base(unsigned int chan)  in dma_find_base()  argument
35 if (chan >= 6) in dma_find_base()
42 static unsigned long dma_base_addr(unsigned int chan) in dma_base_addr() argument
44 unsigned long base = dma_find_base(chan); in dma_base_addr()
47 if (chan >= 9) in dma_base_addr()
48 chan -= 6; in dma_base_addr()
49 if (chan >= 4) in dma_base_addr()
52 return base + (chan * 0x10); in dma_base_addr()
56 static inline unsigned int get_dmte_irq(unsigned int chan) in get_dmte_irq() argument
58 return chan >= 6 ? DMTE6_IRQ : DMTE0_IRQ; in get_dmte_irq()
78 static inline unsigned int get_dmte_irq(unsigned int chan) in get_dmte_irq() argument
80 return dmte_irq_map[chan]; in get_dmte_irq()
94 static inline unsigned int calc_xmit_shift(struct dma_channel *chan) in calc_xmit_shift() argument
96 u32 chcr = __raw_readl(dma_base_addr(chan->chan) + CHCR); in calc_xmit_shift()
111 struct dma_channel *chan = dev_id; in dma_tei() local
114 chcr = __raw_readl(dma_base_addr(chan->chan) + CHCR); in dma_tei()
120 __raw_writel(chcr, (dma_base_addr(chan->chan) + CHCR)); in dma_tei()
122 wake_up(&chan->wait_queue); in dma_tei()
127 static int sh_dmac_request_dma(struct dma_channel *chan) in sh_dmac_request_dma() argument
129 if (unlikely(!(chan->flags & DMA_TEI_CAPABLE))) in sh_dmac_request_dma()
132 return request_irq(get_dmte_irq(chan->chan), dma_tei, IRQF_SHARED, in sh_dmac_request_dma()
133 chan->dev_id, chan); in sh_dmac_request_dma()
136 static void sh_dmac_free_dma(struct dma_channel *chan) in sh_dmac_free_dma() argument
138 free_irq(get_dmte_irq(chan->chan), chan); in sh_dmac_free_dma()
142 sh_dmac_configure_channel(struct dma_channel *chan, unsigned long chcr) in sh_dmac_configure_channel() argument
149 chan->flags |= DMA_TEI_CAPABLE; in sh_dmac_configure_channel()
151 chan->flags &= ~DMA_TEI_CAPABLE; in sh_dmac_configure_channel()
154 __raw_writel(chcr, (dma_base_addr(chan->chan) + CHCR)); in sh_dmac_configure_channel()
156 chan->flags |= DMA_CONFIGURED; in sh_dmac_configure_channel()
160 static void sh_dmac_enable_dma(struct dma_channel *chan) in sh_dmac_enable_dma() argument
165 chcr = __raw_readl(dma_base_addr(chan->chan) + CHCR); in sh_dmac_enable_dma()
168 if (chan->flags & DMA_TEI_CAPABLE) in sh_dmac_enable_dma()
171 __raw_writel(chcr, (dma_base_addr(chan->chan) + CHCR)); in sh_dmac_enable_dma()
173 if (chan->flags & DMA_TEI_CAPABLE) { in sh_dmac_enable_dma()
174 irq = get_dmte_irq(chan->chan); in sh_dmac_enable_dma()
179 static void sh_dmac_disable_dma(struct dma_channel *chan) in sh_dmac_disable_dma() argument
184 if (chan->flags & DMA_TEI_CAPABLE) { in sh_dmac_disable_dma()
185 irq = get_dmte_irq(chan->chan); in sh_dmac_disable_dma()
189 chcr = __raw_readl(dma_base_addr(chan->chan) + CHCR); in sh_dmac_disable_dma()
191 __raw_writel(chcr, (dma_base_addr(chan->chan) + CHCR)); in sh_dmac_disable_dma()
194 static int sh_dmac_xfer_dma(struct dma_channel *chan) in sh_dmac_xfer_dma() argument
200 if (unlikely(!(chan->flags & DMA_CONFIGURED))) in sh_dmac_xfer_dma()
201 sh_dmac_configure_channel(chan, 0); in sh_dmac_xfer_dma()
203 sh_dmac_disable_dma(chan); in sh_dmac_xfer_dma()
220 if (chan->sar || (mach_is_dreamcast() && in sh_dmac_xfer_dma()
221 chan->chan == PVR2_CASCADE_CHAN)) in sh_dmac_xfer_dma()
222 __raw_writel(chan->sar, (dma_base_addr(chan->chan) + SAR)); in sh_dmac_xfer_dma()
223 if (chan->dar || (mach_is_dreamcast() && in sh_dmac_xfer_dma()
224 chan->chan == PVR2_CASCADE_CHAN)) in sh_dmac_xfer_dma()
225 __raw_writel(chan->dar, (dma_base_addr(chan->chan) + DAR)); in sh_dmac_xfer_dma()
227 __raw_writel(chan->count >> calc_xmit_shift(chan), in sh_dmac_xfer_dma()
228 (dma_base_addr(chan->chan) + TCR)); in sh_dmac_xfer_dma()
230 sh_dmac_enable_dma(chan); in sh_dmac_xfer_dma()
235 static int sh_dmac_get_dma_residue(struct dma_channel *chan) in sh_dmac_get_dma_residue() argument
237 if (!(__raw_readl(dma_base_addr(chan->chan) + CHCR) & CHCR_DE)) in sh_dmac_get_dma_residue()
240 return __raw_readl(dma_base_addr(chan->chan) + TCR) in sh_dmac_get_dma_residue()
241 << calc_xmit_shift(chan); in sh_dmac_get_dma_residue()