前言
本章要分析 全志的DMA controller 驱动(sunxi-dma.c),进一步看一下是如何一步一步的注册到DMA framework里的。
重要的数据结构
从上一节的软件构图中,可知,DMA framework 需要3个比较重要的数据结构:
- 一个DMA controller的抽象
struct dma_device - 对应DMA物理通道的抽象
struct dma_chan - 对应虚拟抽象的通道
struct virt_dma_chan
结构体的对应如下:
我们可以但看到, vchan0与vchan1 对应 一个 dma_chan n(物理通道n),vchan2 对应dma_chan m(物理通道m), 另外, dma_device 结构体作为 DMA controller的抽象,其中的channels链表成员,将 dma_chan设备链接在一起。
实际上代码分析得知,vchan其实是被当做"dma_chan"来用的,即 vchan->dma_c