编写适用于 Oracle® Solaris 11.2 的设备驱动程序

退出打印视图

更新时间: 2014 年 9 月
 
 

DMA 模型

Oracle Solaris 设备驱动程序接口/驱动程序内核接口 (Device Driver Interface/Driver-Kernel Interface, DDI/DKI) 为 DMA 提供了独立于体系结构的高级别模型。通过此模型,框架(即 DMA 例程)可以隐藏此类体系结构特定的详细信息,例如:

  • 设置 DMA 映射

  • 生成分散/集中列表

  • 确保 I/O 和 CPU 高速缓存一致

DDI/DKI 中使用了若干个抽象术语来描述 DMA 事务的各个方面:

  • DMA 对象-作为 DMA 传输的源或目标的内存。

  • DMA 句柄-成功调用 ddi_dma_alloc_handle(9F) 后返回的不透明对象。在后续的 DMA 子例程调用中可以使用 DMA 句柄来引用此类 DMA 对象。

  • DMA cookieddi_dma_cookie(9S) 结构 (ddi_dma_cookie_t) 用于描述 DMA 对象中可由设备完全寻址的连续部分。该 cookie 包含对 DMA 引擎进行编程所需的 DMA 寻址信息。

设备驱动程序不会直接将对象映射到内存中,而是为内存对象分配 DMA 资源。然后,DMA 例程将执行为 DMA 访问设置对象时所需的任何特定于平台的操作。驱动程序将收到一个 DMA 句柄,用于标识为该对象分配的 DMA 资源。此句柄对于设备驱动程序而言是不透明的。驱动程序必须保存句柄并在后续调用中将其传递给 DMA 例程。驱动程序不应以任何方式解释句柄。

针对 DMA 句柄定义的操作可提供以下服务:

  • 处理 DMA 资源

  • 同步 DMA 对象

  • 检索已分配资源的特性