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

退出打印视图

更新时间: 2014 年 9 月
 
 

DMA 软件组件:句柄、窗口和 Cookie

DMA 句柄是表示对象(通常为内存缓冲区或地址)的不透明指针。设备通过 DMA 句柄可执行 DMA 传送。对 DMA 例程的若干个不同调用可使用句柄来标识为对象分配的 DMA 资源。

DMA 句柄所表示的对象全部包含在一个或多个 DMA cookie 中。DMA cookie 表示 DMA 引擎在数据传送中使用的一段连续内存。系统会根据以下信息将对象划分为多个 cookie:

  • 驱动程序提供的 ddi_dma_attr(9S) 特性结构

  • 目标对象的内存位置

  • 目标对象的对齐

如果一个对象不满足 DMA 引擎的限制,则必须将该对象分为多个 DMA 窗口。一次只能为一个窗口激活和分配资源。使用 ddi_dma_getwin(9F) 函数可在一个对象内的多个窗口之间切换。每个 DMA 窗口都包含一个或多个 DMA cookie。有关更多信息,请参见DMA Windows

某些 DMA 引擎可以接受多个 cookie。此类引擎不用借助系统即可执行分散/集中 I/O。如果从一个绑定中返回多个 cookie,则驱动程序应重复调用 ddi_dma_nextcookie (9F) 以检索每个 cookie。然后,必须将这些 cookie 编程到引擎中。随后可对设备进行编程,以传送这些 DMA cookie 聚集所包含的总字节数。