第 1 部分针对 Oracle Solaris 平台设计设备驱动程序
9. 直接内存访问 (Direct Memory Access, DMA)
14. 分层驱动程序接口 (Layered Driver Interface, LDI)
SCSI HBA 驱动程序的安装方式与叶驱动程序类似。请参见第 22 章。差别在于 add_drv(1M) 命令必须将驱动程序类指定为 SCSI,如:
# add_drv -m" * 0666 root root" -i'"pci1077,1020"' -c scsi isp
连接 HBA 设备实例时,scsi_hba_attach_setup(9F) 会为该 HBA 实例创建许多 SCSI 配置属性。仅当没有现有同名属性附加到 HBA 实例时,才会创建特定属性。此限制可避免覆盖 HBA 配置文件中的任何缺省属性值。
HBA 驱动程序必须使用 ddi_prop_get_int(9F) 检索每个属性。然后,HBA 驱动程序会修改或接受这些属性的缺省值来配置其特定操作。
scsi-reset-delay 属性是一个整数,用于指定由 SCSI 总线或 SCSI 设备造成的重置延迟的恢复时间(以毫秒为单位)。
scsi-options 属性是一个整数,用于通过单独定义的位来指定多个选项:
SCSI_OPTIONS_DR (0x008)-如果未设置,HBA 将不会授予目标设备断开连接权限。
SCSI_OPTIONS_LINK (0x010)-如果未设置,HBA 将不会启用链接的命令。
SCSI_OPTIONS_SYNC (0x020)-如果未设置,则 HBA 驱动程序决不能协商同步数据传送。驱动程序将拒绝目标启动的协商同步数据传送的任何尝试。
SCSI_OPTIONS_PARITY (0x040)-如果未设置,HBA 将会运行 SCSI 总线,而不进行奇偶校验。
SCSI_OPTIONS_TAG (0x080)-如果未设置,HBA 将不会在命令标记排队模式下运行。
SCSI_OPTIONS_FAST (0x100)-如果未设置,HBA 将不会在 FAST SCSI 模式下运行总线。
SCSI_OPTIONS_WIDE (0x200)-如果未设置,HBA 将不会在 WIDE SCSI 模式下运行总线。
HBA 驱动程序可能支持以下格式的按目标的 scsi-options 功能:
target<n>-scsi-options=<hex value>
在此示例中,< n> 是指目标 ID。如果定义了按目标的 scsi-options 属性,则 HBA 驱动程序将使用该值,而不使用按 HBA 驱动程序实例的 scsi-options 属性。例如,如果仅需针对某个特定目标设备禁用同步数据传送,则该方法可提供更准确的控制。按目标的 scsi-options 属性可以在 driver.conf(4) 文件中定义。
以下示例说明了按目标的 scsi-options 属性定义,用于禁用目标设备 3 的同步数据传送:
target3-scsi-options=0x2d8
某些 x86 SCSI 目标驱动程序(如 cmdk 磁盘驱动程序)使用以下配置属性:
disk(磁盘)
queue
flow_control
如果使用 cmdk 样例驱动程序编写适用于 x86 平台的 HBA 驱动程序,则必须在 driver.conf(4) 文件中定义所有相应属性。
注 - 这些属性定义应仅显示在 HBA 驱动程序的 driver.conf(4) 文件中。HBA 驱动程序本身不应以任何方式检查或尝试解释这些属性。这些属性仅是建议性的,并且用作 cmdk 驱动程序的附件。不应以任何方式依赖这些属性。在将来的发行版中可能不会使用这些属性定义。
disk 属性可用于定义 cmdk 支持的磁盘类型。对于 SCSI HBA,disk 属性的唯一可能值是:
disk="scdk"-磁盘类型为 SCSI 磁盘
queue 属性用于定义磁盘驱动程序如何在执行 strategy(9E) 的过程中对传入请求的队列进行排序。以下是两个可能的值:
queue="qsort"-disksort(9F) 提供的单向升降排队模型
queue="qfifo"-FIFO,即先入先出排队模型
flow_control 属性用于定义如何将命令传输到 HBA 驱动程序。以下是三个可能的值:
flow_control="dsngl"-每个 HBA 驱动程序一个命令
flow_control="dmult"-每个 HBA 驱动程序多个命令。如果 HBA 队列已满,则驱动程序返回 TRAN_BUSY .
flow_control="duplx"-HBA 可以支持单独的读/写队列,每个队列多个命令。FIFO 排序用于写队列。用于读队列的排队模型通过 queue 属性进行描述。如果 HBA 队列已满,则驱动程序返回 TRAN_BUSY
以下示例是一个供 x86 HBA PCI 设备使用的 driver.conf(4) 文件,该设备设计用于 cmdk 样例驱动程序:
# # config file for ISP 1020 SCSI HBA driver # flow_control="dsngl" queue="qsort" disk="scdk" scsi-initiator-id=7;