第 1 部分针对 Oracle Solaris 平台设计设备驱动程序
9. 直接内存访问 (Direct Memory Access, DMA)
Oracle Solaris 设备驱动程序接口/驱动程序内核接口 (Device Driver Interface/Driver-Kernel Interface, DDI/DKI) 为 DMA 提供了独立于体系结构的高级别模型。通过此模型,框架(即 DMA 例程)可以隐藏此类体系结构特定的详细信息,例如:
设置 DMA 映射
生成分散/集中列表
确保 I/O 和 CPU 高速缓存一致
DDI/DKI 中使用了若干个抽象术语来描述 DMA 事务的各个方面:
DMA 句柄-成功调用 ddi_dma_alloc_handle(9F) 后返回的不透明对象。在后续的 DMA 子例程调用中可以使用 DMA 句柄来引用此类 DMA 对象。
DMA cookie-ddi_dma_cookie(9S) 结构 (ddi_dma_cookie_t) 用于描述 DMA 对象中可由设备完全寻址的连续部分。该 cookie 包含对 DMA 引擎进行编程所需的 DMA 寻址信息。
设备驱动程序不会直接将对象映射到内存中,而是为内存对象分配 DMA 资源。然后,DMA 例程将执行为 DMA 访问设置对象时所需的任何特定于平台的操作。驱动程序将收到一个 DMA 句柄,用于标识为该对象分配的 DMA 资源。此句柄对于设备驱动程序而言是不透明的。驱动程序必须保存句柄并在后续调用中将其传递给 DMA 例程。驱动程序不应以任何方式解释句柄。
针对 DMA 句柄定义的操作可提供以下服务:
处理 DMA 资源
同步 DMA 对象
检索已分配资源的特性