HBA ドライバには、次のヘッダーファイルを含める必要があります。
#include <sys/scsi/scsi.h> #include <sys/ddi.h> #include <sys/sunddi.h>
モジュールが SCSA ルーチンに依存していることをシステムに通知するには、次のコマンドを使用してドライバのバイナリを生成する必要があります。SCSA ルーチンの詳細については、SCSA HBA Interfacesを参照してください。
% ld -r xx.o -o xx -N "misc/scsi"
サンプルコードは、QLogic Intelligent SCSI Peripheral デバイス用の簡略化された isp ドライバから入手できます。isp ドライバは、最大 15 台のターゲットデバイスを接続可能で、1 つのターゲットに 8 台までの論理ユニット (LUN) を接続できるワイド SCSI をサポートしています。
HBA ドライバは通常、ターゲットドライバが実行するコマンドごとに状態を保持する構造体を定義する必要があります。このコマンド別構造体のレイアウトは、デバイスドライバの作成者がすべて管理します。レイアウトに必要なのは、ドライバで使用されるハードウェアの機能とソフトウェアのアルゴリズムを反映させることです。
コマンド別構造体の例を次に示します。この章の残りのコードフラグメントは、この構造体を使って HBA インタフェースを示しています。
struct isp_cmd {
struct isp_request cmd_isp_request;
struct isp_response cmd_isp_response;
struct scsi_pkt *cmd_pkt;
struct isp_cmd *cmd_forw;
uint32_t cmd_dmacount;
ddi_dma_handle_t cmd_dmahandle;
uint_t cmd_cookie;
uint_t cmd_ncookies;
uint_t cmd_cookiecnt;
uint_t cmd_nwin;
uint_t cmd_curwin;
off_t cmd_dma_offset;
uint_t cmd_dma_len;
ddi_dma_cookie_t cmd_dmacookies[ISP_NDATASEGS];
u_int cmd_flags;
u_short cmd_slot;
u_int cmd_cdblen;
u_int cmd_scblen;
};