编写设备驱动程序

设备 DMA 的类型

设备可执行以下三种类型的 DMA:

总线主控器 DMA

在设备用作实际总线主控器的情况下,驱动程序应直接对该设备的 DMA 寄存器进行编程。例如,如果 DMA 引擎驻留在设备板上,则设备便会用作总线主控器。传送地址和计数从 DMA cookie 中获取,并将传递给设备。

第三方 DMA

第三方 DMA 使用驻留在主系统板上的系统 DMA 引擎,该引擎中有若干个可供设备使用的 DMA 通道。设备依赖于系统的 DMA 引擎来执行设备与内存之间的数据传送。驱动程序使用 DMA 引擎例程(请参见 ddi_dmae(9F) 函数)对 DMA 引擎进行初始化和编程。每次进行 DMA 数据传送时,驱动程序都会对 DMA 引擎进行编程,然后会向设备发出命令,以便借助该引擎来启动传送操作。

第一方 DMA

执行第一方 DMA 时,设备使用系统 DMA 引擎中的通道来驱动该设备的 DMA 总线循环。使用 ddi_dmae_1stparty(9F) 函数可在级联模式下对此通道进行配置,以免 DMA 引擎干扰传送。