目录
摘要
接下来将要解释的这些函数,都是挂靠在DMA Engine架构下面的函数。
此 pl08x的DMA驱动也要是实现对应的函数,以便其他程序调用这些接口使用pl08x。
下面简单介绍一下通用的调用此pl08x的DMA驱动的大概流程:
dma_map_single
去将普通的CPU访问的buffer映射成DMA可以访问的bufferdma_alloc_writecombine
,自己申请一个,申请的此buffer,是combine,绑定一起的,即不论是DMA还是CPU,都可以访问的dma_async_client_register(txclient);
dma_async_client_chan_request(txclient);
去注册申请对应的client。device_prep_slave_sg
去寻找并获得和自己匹配的那个描述符descdesc->callback = as353x_nand_dma_complete_callback;
desc->callback_param = &info->callback_param;
注意 | |
---|---|
callback函数里面,会调用 而你的callback函数,会在DMA完全传输完毕后,DMA驱动中的irq中会被调用。 |
desc->tx_submit(desc);
去提交你的DMA请求info->txchan->device->device_issue_pending(info->txchan);
真正的开始DMA的数据传输。wait_for_completion_timeout
去等待你的传输完毕了。