第 1 部分针对 Oracle Solaris 平台设计设备驱动程序
9. 直接内存访问 (Direct Memory Access, DMA)
SCSA 是 DDI/DKI 编程接口,用于将 SCSI 命令从目标驱动程序传送到主机适配器驱动程序。通过与 SCSA 保持兼容,目标驱动程序可以将 SCSI 命令和序列的任何组合轻松传递到目标设备。无需了解主机适配器的硬件实现。从概念上讲,SCSA 会将生成 SCSI 命令与将命令(和数据)传输到 SCSI 总线这两个过程分离开来。SCSA 通过 HBA 传输层管理目标驱动程序与 HBA 驱动程序之间的连接,如下图所示:
图 18-1 SCSA 接口
HBA 传输层是一个硬件和软件层,负责将 SCSI 命令传输到 SCSI 目标设备。HBA 驱动程序会响应 SCSI 目标驱动程序通过 SCSA 发出的请求,提供资源分配、DMA 管理和传输服务。另外,主机适配器驱动程序还会管理主机适配器硬件以及执行命令所需的 SCSI 协议。完成命令后,HBA 驱动程序将调用目标驱动程序的 SCSI pkt 命令完成例程。
以下示例说明了此流程,并重点介绍了如何将信息从目标驱动程序传送到 SCSA,然后再传送到 HBA 驱动程序。下图还说明了典型的传输入口点和函数调用。
图 18-2 传输层流程