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_device(9S) 構造体内の sd_mutex という mutex は、scsi_transport (9F) の呼び出しを越えて保持してはいけません。

scsi_transport(9F) が TRAN_ACCEPT を返す場合、パケットはホストバスアダプタドライバで管理されるものになっています。パケットは、コマンド完了ルーチンが呼び出されるまで、ターゲットドライバからアクセスしてはいけません。

同期 scsi_transport() 関数

パケット内に FLAG_NOINTR が設定されている場合、コマンドが完了するまで scsi_transport(9F) は復帰しません。コールバックは実行されません。


注 - 割り込みのコンテキストで FLAG_NOINTR を使わないでください。