Lines Matching refs:chan
39 static unsigned long dma_find_base(unsigned int chan) in dma_find_base() argument
44 if (chan >= SH_DMAC_NR_MD_CH) in dma_find_base()
51 static unsigned long dma_base_addr(unsigned int chan) in dma_base_addr() argument
53 unsigned long base = dma_find_base(chan); in dma_base_addr()
55 chan = (chan % SH_DMAC_NR_MD_CH) * SH_DMAC_CH_SZ; in dma_base_addr()
58 if (chan >= DMAOR) in dma_base_addr()
61 return base + chan; in dma_base_addr()
65 static inline unsigned int get_dmte_irq(unsigned int chan) in get_dmte_irq() argument
67 return chan >= 6 ? DMTE6_IRQ : DMTE0_IRQ; in get_dmte_irq()
87 static inline unsigned int get_dmte_irq(unsigned int chan) in get_dmte_irq() argument
89 return dmte_irq_map[chan]; in get_dmte_irq()
103 static inline unsigned int calc_xmit_shift(struct dma_channel *chan) in calc_xmit_shift() argument
105 u32 chcr = __raw_readl(dma_base_addr(chan->chan) + CHCR); in calc_xmit_shift()
120 struct dma_channel *chan = dev_id; in dma_tei() local
123 chcr = __raw_readl(dma_base_addr(chan->chan) + CHCR); in dma_tei()
129 __raw_writel(chcr, (dma_base_addr(chan->chan) + CHCR)); in dma_tei()
131 wake_up(&chan->wait_queue); in dma_tei()
136 static int sh_dmac_request_dma(struct dma_channel *chan) in sh_dmac_request_dma() argument
138 if (unlikely(!(chan->flags & DMA_TEI_CAPABLE))) in sh_dmac_request_dma()
141 return request_irq(get_dmte_irq(chan->chan), dma_tei, IRQF_SHARED, in sh_dmac_request_dma()
142 chan->dev_id, chan); in sh_dmac_request_dma()
145 static void sh_dmac_free_dma(struct dma_channel *chan) in sh_dmac_free_dma() argument
147 free_irq(get_dmte_irq(chan->chan), chan); in sh_dmac_free_dma()
151 sh_dmac_configure_channel(struct dma_channel *chan, unsigned long chcr) in sh_dmac_configure_channel() argument
158 chan->flags |= DMA_TEI_CAPABLE; in sh_dmac_configure_channel()
160 chan->flags &= ~DMA_TEI_CAPABLE; in sh_dmac_configure_channel()
163 __raw_writel(chcr, (dma_base_addr(chan->chan) + CHCR)); in sh_dmac_configure_channel()
165 chan->flags |= DMA_CONFIGURED; in sh_dmac_configure_channel()
169 static void sh_dmac_enable_dma(struct dma_channel *chan) in sh_dmac_enable_dma() argument
174 chcr = __raw_readl(dma_base_addr(chan->chan) + CHCR); in sh_dmac_enable_dma()
177 if (chan->flags & DMA_TEI_CAPABLE) in sh_dmac_enable_dma()
180 __raw_writel(chcr, (dma_base_addr(chan->chan) + CHCR)); in sh_dmac_enable_dma()
182 if (chan->flags & DMA_TEI_CAPABLE) { in sh_dmac_enable_dma()
183 irq = get_dmte_irq(chan->chan); in sh_dmac_enable_dma()
188 static void sh_dmac_disable_dma(struct dma_channel *chan) in sh_dmac_disable_dma() argument
193 if (chan->flags & DMA_TEI_CAPABLE) { in sh_dmac_disable_dma()
194 irq = get_dmte_irq(chan->chan); in sh_dmac_disable_dma()
198 chcr = __raw_readl(dma_base_addr(chan->chan) + CHCR); in sh_dmac_disable_dma()
200 __raw_writel(chcr, (dma_base_addr(chan->chan) + CHCR)); in sh_dmac_disable_dma()
203 static int sh_dmac_xfer_dma(struct dma_channel *chan) in sh_dmac_xfer_dma() argument
209 if (unlikely(!(chan->flags & DMA_CONFIGURED))) in sh_dmac_xfer_dma()
210 sh_dmac_configure_channel(chan, 0); in sh_dmac_xfer_dma()
212 sh_dmac_disable_dma(chan); in sh_dmac_xfer_dma()
229 if (chan->sar || (mach_is_dreamcast() && in sh_dmac_xfer_dma()
230 chan->chan == PVR2_CASCADE_CHAN)) in sh_dmac_xfer_dma()
231 __raw_writel(chan->sar, (dma_base_addr(chan->chan) + SAR)); in sh_dmac_xfer_dma()
232 if (chan->dar || (mach_is_dreamcast() && in sh_dmac_xfer_dma()
233 chan->chan == PVR2_CASCADE_CHAN)) in sh_dmac_xfer_dma()
234 __raw_writel(chan->dar, (dma_base_addr(chan->chan) + DAR)); in sh_dmac_xfer_dma()
236 __raw_writel(chan->count >> calc_xmit_shift(chan), in sh_dmac_xfer_dma()
237 (dma_base_addr(chan->chan) + TCR)); in sh_dmac_xfer_dma()
239 sh_dmac_enable_dma(chan); in sh_dmac_xfer_dma()
244 static int sh_dmac_get_dma_residue(struct dma_channel *chan) in sh_dmac_get_dma_residue() argument
246 if (!(__raw_readl(dma_base_addr(chan->chan) + CHCR) & CHCR_DE)) in sh_dmac_get_dma_residue()
249 return __raw_readl(dma_base_addr(chan->chan) + TCR) in sh_dmac_get_dma_residue()
250 << calc_xmit_shift(chan); in sh_dmac_get_dma_residue()