填充 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,则该包将由主机总线适配器驱动程序负责。调用命令完成例程之前,目标驱动程序不应该访问该包。
如果在包中设置了 FLAG_NOINTR,则在命令完成之前,scsi_transport(9F) 不会返回。不会执行回调。
请勿在中断上下文中使用 FLAG_NOINTR。