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

退出打印视图

更新时间: 2014 年 9 月
 
 

传输命令

填充 scsi_pkt(9S) 结构之后,应使用 scsi_transport(9F) 将该结构提交给总线适配器驱动程序:

if (scsi_transport(pkt) != TRAN_ACCEPT) {
    bp->b_resid = bp->b_bcount;
    bioerror(bp, EIO);
    biodone(bp);
}

scsi_transport(9F) 返回的其他值如下所示:

  • TRAN_BUSY-表示已在运行针对指定目标的命令。

  • TRAN_BADPKT-包中的 DMA 计数太大,或者主机适配器驱动程序由于其他原因拒绝了该包。

  • TRAN_FATAL_ERROR-主机适配器驱动程序无法接受该包。


注 - 在调用 scsi_transport(9F) 过程中,不能持有 scsi_device(9S) 结构中的互斥锁 sd_mutex。

如果 scsi_transport(9F) 返回TRAN_ACCEPT,则该包将由主机总线适配器驱动程序负责。调用命令完成例程之前,目标驱动程序不应该访问该包。

同步 scsi_transport() 函数

如果在包中设置了 FLAG_NOINTR,则在命令完成之前,scsi_transport(9F) 不会返回。不会执行回调。


注 - 请勿在中断上下文中使用 FLAG_NOINTR