DMA通常包括system dma和bus-master dma。他们的区别在于system dma是依赖于系统,device本身并没有dma控制传输的能力,而bus-master则相反,device有dma控制传输的能力。通常比较多见的是bus-master dma方式。
总线主控式DMA(bus-master)
大多数DMA方式均为总线主控式DMA,包括ARM和PPC。总线主控式DMA的意思是CPU配置完总线DMA控制器后,让出总线控制权给DMA控制器,其后的数据传输完全由DMA控制器负责,传输完毕后中断通知CPU,CPU接管总线控制权。这种方式主要是CPU配置DMA控制器需要传输的数据的源地址、目的地址、长度等寄存器,之后使能DMA控制器即可。
本地和总线主控式DMA两种方式使用的地址参数都是DMA总线地址,总线地址不同于物理地址和虚拟地址,但在x86体系结构中总线地址数值等于物理地址。两种方式都需要CPU首先申请用于DMA传输的缓冲区,至于申请一致性coherent还是流式streamingDMA缓冲区则因系统和用途而定。