编写设备驱动程序

传输命令

填充 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) 返回的其他值如下所示:


注 –

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


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

同步 scsi_transport() 函数

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


注 –

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