SCIOCMD SCSI アダプター・デバイス・ドライバー ioctl 操作

目的

SCSI デバイスに対して任意の SCSI コマンドを発行する手段を提供します。

説明

_ 翻訳不要 _SCIOCMD 操作により、呼び出し元は選択されたアダプターに対して SCSI コマンドを発行できます。 このコマンドは、SCSI 装置の構成を支援するために、システム管理ルーチンによって使用することができます。

SCIOCMD 操作の arg パラメーターは、 sc_passthru 構造体のアドレスです。これは、 /usr/include/sys/scsi.h フィールドに定義されています。 sc_passthru パラメーターを使用すると、呼び出し元は、コマンドを送信する SCSI および LUN IDS を選択できます。

SCSI 状況バイトおよびアダプター状況バイトは、 sc_passthru 構造体を介して戻されます。 もし、 SCIOCMD操作は値を返します-1 errno グローバル変数がゼロ以外の値に設定されている場合、要求された操作は失敗します。 これが発生した場合、呼び出し元は、返された状況バイトを評価して、操作が失敗した理由と、実行する必要があるリカバリー・アクションを判別する必要があります。

もし、 SCIOCMD操作は失敗しました。 sc_passthru構造体に無効な値がある場合、サブルーチンは値を返します。-1 errnoグローバル変数は次のように設定されます。アインヴァル、 そしてその無効な引数フィールドは、無効な値があったフィールドのフィールド番号 (バージョン フィールドの場合は 1 から始まる) に設定されます。 EINVAL_ARG フィールドの値が 0 の場合は、追加情報がないことを示します。

sc_passthru 構造体の version フィールドは、 /usr/include/sys/scsi.h ファイル内の SC_VERSION_2 の値に設定でき、ユーザーは以下のフィールドを指定できます。
  • 変数 cdb_ptr は、変数 SCSI cdb を含むバッファーを指すポインターです。
  • 変数 cdb_length は、 変数 cdb_ptr フィールドが指す CDB 変数の長さを決定します。
_ 翻訳不要 _SCIOCMD ioctl 要求の完了時に、 残差 フィールドは、装置がこの要求に対して完全には満たさなかった残りのデータを示します。 正常終了の場合、 残差 フィールドは、要求されたすべてのデータが装置にないか、または装置のデータ量が要求された量より少ないことを示します。 失敗の完了時に、ユーザーは 状況の妥当性 フィールドを調べて、有効な SCSI バスの問題が存在するかどうかを判別する必要があります。 この場合、 残差 フィールドは、この要求に対して装置が完了できなかったバイト数を示します。

デバイス情報 構造は、コマンドの最大転送サイズを定義します。 最大転送サイズを超えて転送しようとすると、サブルーチンは次の値を返します。-1 errnoグローバル変数を次の値に設定します。アインヴァルを設定し、無効な引数フィールドの値を 18 に設定します。

特定の装置の要求センス・データの形式については、「 Small Computer System Interface (SCSI) 仕様 」を参照してください。

戻り値

_ 翻訳不要 _SCIOCMD 操作は、正常に完了すると値 0 を返します。 失敗した場合、-1が返され、errno グローバル変数は次のいずれかの値に設定されます。
項目 説明
EIO システム・エラーが発生した。 別の試行が成功する可能性があるため、操作を複数回試行することを検討してください。 EIO 社 エラーが発生し、 状況の妥当性 フィールドが SC_SCSI エラーに設定されている場合、 SCSI 状況 フィールドには有効な値が設定されているため、検査する必要があります。

状況の妥当性 フィールドがゼロのままで、その後の試行でも同じままである場合は、リカバリー不能エラーが発生しています。

状況の妥当性 フィールドが SC_SCSI エラー で、 SCSI 状況 フィールドに チェック条件 状況が含まれている場合、センス・データをリカバリーするために _ 翻訳不要 _SCIOCMD ioctl を使用して SCSI 要求センスを発行する必要があります。

EFAULT ユーザー・プロセス・コピーが失敗しました。
EINVAL 装置がオープンされていないか、呼び出し側が sc_passthru 構造体のフィールドを無効な値に設定しました。
EACCES アダプターは診断モードです。
ENOMEM メモリー要求が失敗しました。
ETIMEDOUT コマンドがタイムアウトになりました。 別の試行が成功する可能性があるため、操作を数回試行することを検討してください。
ENODEV 装置が応答していません。
ETIMEDOUT タイムアウト値を超える前に操作が完了しませんでした。

ファイル

項目 説明
/dev/scsi0, /dev/scsi1, ... /dev/scsin すべての SCSI デバイス・ドライバーが SCSI デバイスまたはアダプターにアクセスするためのインターフェースを提供します。