Lines Matching refs:chan

90 rt_err_t rt_dma_chan_start(struct rt_dma_chan *chan)  in rt_dma_chan_start()  argument
95 if (!chan) in rt_dma_chan_start()
100 if (chan->prep_err) in rt_dma_chan_start()
102 LOG_D("%s: Not config done", rt_dm_dev_get_name(chan->slave)); in rt_dma_chan_start()
104 return chan->prep_err; in rt_dma_chan_start()
107 ctrl = chan->ctrl; in rt_dma_chan_start()
111 err = ctrl->ops->start(chan); in rt_dma_chan_start()
118 rt_err_t rt_dma_chan_stop(struct rt_dma_chan *chan) in rt_dma_chan_stop() argument
123 if (!chan) in rt_dma_chan_stop()
128 if (chan->prep_err) in rt_dma_chan_stop()
130 LOG_D("%s: Not prepare done", rt_dm_dev_get_name(chan->slave)); in rt_dma_chan_stop()
132 return chan->prep_err; in rt_dma_chan_stop()
135 ctrl = chan->ctrl; in rt_dma_chan_stop()
139 err = ctrl->ops->stop(chan); in rt_dma_chan_stop()
146 rt_err_t rt_dma_chan_config(struct rt_dma_chan *chan, in rt_dma_chan_config() argument
153 if (!chan || !conf) in rt_dma_chan_config()
174 ctrl = chan->ctrl; in rt_dma_chan_config()
182 if (!chan->name && dir != RT_DMA_MEM_TO_MEM) in rt_dma_chan_config()
193 err = ctrl->ops->config(chan, conf); in rt_dma_chan_config()
199 rt_memcpy(&chan->conf, conf, sizeof(*conf)); in rt_dma_chan_config()
203 chan->conf_err = err; in rt_dma_chan_config()
208 rt_err_t rt_dma_chan_done(struct rt_dma_chan *chan, rt_size_t size) in rt_dma_chan_done() argument
210 if (!chan) in rt_dma_chan_done()
215 if (chan->callback) in rt_dma_chan_done()
217 chan->callback(chan, size); in rt_dma_chan_done()
236 rt_err_t rt_dma_prep_memcpy(struct rt_dma_chan *chan, in rt_dma_prep_memcpy() argument
245 if (!chan || !transfer) in rt_dma_prep_memcpy()
250 ctrl = chan->ctrl; in rt_dma_prep_memcpy()
251 conf = &chan->conf; in rt_dma_prep_memcpy()
253 if (chan->conf_err) in rt_dma_prep_memcpy()
255 LOG_D("%s: Not config done", rt_dm_dev_get_name(chan->slave)); in rt_dma_prep_memcpy()
257 return chan->conf_err; in rt_dma_prep_memcpy()
260 RT_ASSERT(chan->conf.direction == RT_DMA_MEM_TO_MEM); in rt_dma_prep_memcpy()
281 err = ctrl->ops->prep_memcpy(chan, dma_addr_src, dma_addr_dst, len); in rt_dma_prep_memcpy()
292 rt_memcpy(&chan->transfer, transfer, sizeof(*transfer)); in rt_dma_prep_memcpy()
295 chan->prep_err = err; in rt_dma_prep_memcpy()
300 rt_err_t rt_dma_prep_cyclic(struct rt_dma_chan *chan, in rt_dma_prep_cyclic() argument
309 if (!chan || !transfer) in rt_dma_prep_cyclic()
314 ctrl = chan->ctrl; in rt_dma_prep_cyclic()
315 conf = &chan->conf; in rt_dma_prep_cyclic()
317 if (chan->conf_err) in rt_dma_prep_cyclic()
319 LOG_D("%s: Not config done", rt_dm_dev_get_name(chan->slave)); in rt_dma_prep_cyclic()
321 return chan->conf_err; in rt_dma_prep_cyclic()
324 dir = chan->conf.direction; in rt_dma_prep_cyclic()
355 err = ctrl->ops->prep_cyclic(chan, dma_buf_addr, in rt_dma_prep_cyclic()
367 rt_memcpy(&chan->transfer, transfer, sizeof(*transfer)); in rt_dma_prep_cyclic()
370 chan->prep_err = err; in rt_dma_prep_cyclic()
375 rt_err_t rt_dma_prep_single(struct rt_dma_chan *chan, in rt_dma_prep_single() argument
384 if (!chan || !transfer) in rt_dma_prep_single()
389 ctrl = chan->ctrl; in rt_dma_prep_single()
390 conf = &chan->conf; in rt_dma_prep_single()
392 if (chan->conf_err) in rt_dma_prep_single()
394 LOG_D("%s: Not config done", rt_dm_dev_get_name(chan->slave)); in rt_dma_prep_single()
396 return chan->conf_err; in rt_dma_prep_single()
399 dir = chan->conf.direction; in rt_dma_prep_single()
430 err = ctrl->ops->prep_single(chan, dma_buf_addr, in rt_dma_prep_single()
442 rt_memcpy(&chan->transfer, transfer, sizeof(*transfer)); in rt_dma_prep_single()
445 chan->prep_err = err; in rt_dma_prep_single()
489 struct rt_dma_chan *chan; in rt_dma_chan_request() local
527 chan = ctrl->ops->request_chan(ctrl, dev, fw_data); in rt_dma_chan_request()
531 chan = rt_calloc(1, sizeof(*chan)); in rt_dma_chan_request()
533 if (!chan) in rt_dma_chan_request()
535 chan = rt_err_ptr(-RT_ENOMEM); in rt_dma_chan_request()
539 if (rt_is_err(chan)) in rt_dma_chan_request()
541 return chan; in rt_dma_chan_request()
544 if (!chan) in rt_dma_chan_request()
551 chan->name = name; in rt_dma_chan_request()
552 chan->ctrl = ctrl; in rt_dma_chan_request()
553 chan->slave = dev; in rt_dma_chan_request()
555 rt_list_init(&chan->list); in rt_dma_chan_request()
556 chan->conf_err = -RT_ERROR; in rt_dma_chan_request()
557 chan->prep_err = -RT_ERROR; in rt_dma_chan_request()
560 rt_list_insert_before(&ctrl->channels_nodes, &chan->list); in rt_dma_chan_request()
563 return chan; in rt_dma_chan_request()
566 rt_err_t rt_dma_chan_release(struct rt_dma_chan *chan) in rt_dma_chan_release() argument
570 if (!chan) in rt_dma_chan_release()
575 rt_mutex_take(&chan->ctrl->mutex, RT_WAITING_FOREVER); in rt_dma_chan_release()
576 rt_list_remove(&chan->list); in rt_dma_chan_release()
577 rt_mutex_release(&chan->ctrl->mutex); in rt_dma_chan_release()
579 if (chan->ctrl->ops->release_chan) in rt_dma_chan_release()
581 err = chan->ctrl->ops->release_chan(chan); in rt_dma_chan_release()
585 rt_free(chan); in rt_dma_chan_release()