Lines Matching refs:chan
141 static void pasemi_free_tx_chan(int chan) in pasemi_free_tx_chan() argument
143 BUG_ON(test_bit(chan, txch_free)); in pasemi_free_tx_chan()
144 set_bit(chan, txch_free); in pasemi_free_tx_chan()
160 static void pasemi_free_rx_chan(int chan) in pasemi_free_rx_chan() argument
162 BUG_ON(test_bit(chan, rxch_free)); in pasemi_free_rx_chan()
163 set_bit(chan, rxch_free); in pasemi_free_rx_chan()
185 struct pasemi_dmachan *chan; in pasemi_dma_alloc_chan() local
194 chan = buf + offset; in pasemi_dma_alloc_chan()
196 chan->priv = buf; in pasemi_dma_alloc_chan()
201 chan->chno = chno; in pasemi_dma_alloc_chan()
202 chan->irq = irq_create_mapping(NULL, in pasemi_dma_alloc_chan()
204 chan->status = &dma_status->rx_sta[chno]; in pasemi_dma_alloc_chan()
208 chan->chno = chno; in pasemi_dma_alloc_chan()
209 chan->irq = irq_create_mapping(NULL, base_hw_irq + chno); in pasemi_dma_alloc_chan()
210 chan->status = &dma_status->tx_sta[chno]; in pasemi_dma_alloc_chan()
214 chan->chan_type = type; in pasemi_dma_alloc_chan()
216 return chan; in pasemi_dma_alloc_chan()
226 void pasemi_dma_free_chan(struct pasemi_dmachan *chan) in pasemi_dma_free_chan() argument
228 if (chan->ring_virt) in pasemi_dma_free_chan()
229 pasemi_dma_free_ring(chan); in pasemi_dma_free_chan()
231 switch (chan->chan_type & (RXCHAN|TXCHAN)) { in pasemi_dma_free_chan()
233 pasemi_free_rx_chan(chan->chno); in pasemi_dma_free_chan()
236 pasemi_free_tx_chan(chan->chno); in pasemi_dma_free_chan()
240 kfree(chan->priv); in pasemi_dma_free_chan()
252 int pasemi_dma_alloc_ring(struct pasemi_dmachan *chan, int ring_size) in pasemi_dma_alloc_ring() argument
254 BUG_ON(chan->ring_virt); in pasemi_dma_alloc_ring()
256 chan->ring_size = ring_size; in pasemi_dma_alloc_ring()
258 chan->ring_virt = dma_alloc_coherent(&dma_pdev->dev, in pasemi_dma_alloc_ring()
260 &chan->ring_dma, GFP_KERNEL); in pasemi_dma_alloc_ring()
262 if (!chan->ring_virt) in pasemi_dma_alloc_ring()
265 memset(chan->ring_virt, 0, ring_size * sizeof(u64)); in pasemi_dma_alloc_ring()
276 void pasemi_dma_free_ring(struct pasemi_dmachan *chan) in pasemi_dma_free_ring() argument
278 BUG_ON(!chan->ring_virt); in pasemi_dma_free_ring()
280 dma_free_coherent(&dma_pdev->dev, chan->ring_size * sizeof(u64), in pasemi_dma_free_ring()
281 chan->ring_virt, chan->ring_dma); in pasemi_dma_free_ring()
282 chan->ring_virt = NULL; in pasemi_dma_free_ring()
283 chan->ring_size = 0; in pasemi_dma_free_ring()
284 chan->ring_dma = 0; in pasemi_dma_free_ring()
294 void pasemi_dma_start_chan(const struct pasemi_dmachan *chan, const u32 cmdsta) in pasemi_dma_start_chan() argument
296 if (chan->chan_type == RXCHAN) in pasemi_dma_start_chan()
297 pasemi_write_dma_reg(PAS_DMA_RXCHAN_CCMDSTA(chan->chno), in pasemi_dma_start_chan()
300 pasemi_write_dma_reg(PAS_DMA_TXCHAN_TCMDSTA(chan->chno), in pasemi_dma_start_chan()
318 int pasemi_dma_stop_chan(const struct pasemi_dmachan *chan) in pasemi_dma_stop_chan() argument
323 if (chan->chan_type == RXCHAN) { in pasemi_dma_stop_chan()
324 reg = PAS_DMA_RXCHAN_CCMDSTA(chan->chno); in pasemi_dma_stop_chan()
335 reg = PAS_DMA_TXCHAN_TCMDSTA(chan->chno); in pasemi_dma_stop_chan()
361 void *pasemi_dma_alloc_buf(struct pasemi_dmachan *chan, int size, in pasemi_dma_alloc_buf() argument
375 void pasemi_dma_free_buf(struct pasemi_dmachan *chan, int size, in pasemi_dma_free_buf() argument