STDEVINFO(4) — NEWS-OS Programmer’s Manual
名称
stdevinfo − SCSI テープドライブ情報テーブル
形式
#define NDENS_CODE 8 /∗ number of density code ∗/
#define MAX_MSEL_LEN 40 /∗ maximum MODE SELECT param length ∗/
struct stinfo {
char si_ninfo; /∗ additional length byte of INQUIRY ∗/
char ∗si_ident; /∗ vender unique parameter string of INQUIRY ∗/
char ∗si_name; /∗ name of device ∗/
char si_fixrec; /∗ device type, fixed or flex record size ∗/
int si_maxbsize; /∗ maximum block size, 0 for automatic ∗/
char si_progio; /∗ data transfer mode, usually use dma ∗/
char si_immediate; /∗ REWIND command returns immediately ∗/
u_short si_flags; /∗ device’s capability flags, see follows ∗/
char si_nrsense; /∗ REQUEST SENSE parameter length ∗/
char si_exerrpos; /∗ position of extended error code ∗/
char si_nerrcode; /∗ number of byte of error code ∗/
char si_nmsense; /∗ MODE SENSE parameter length ∗/
char si_nmselect; /∗ MODE SELECT parameter length ∗/
u_char si_mseldata[MAX_MSEL_LEN]; /∗ MODE SELECT data ∗/
u_char si_denstab[NDENS_CODE]; /∗ density code table ∗/
};
解説
stdevinfo は SCSI テープドライブの情報テーブルです。 st デバイスドライバがサポートしているテープドライブは、 デバイスコンフィギュレーションファイル /sys/newsiodev/stdefs.c 中のデバイス情報テーブル stdevinfo に記述されています。 また、 このテーブルに記述を追加することにより、 新しいタイプのテープドライブを使用することも可能です。
さらに、 stdevinfo に記述されていないテープドライブを接続することも可能です。 この場合、 ドライブに固有の機能などを選択するための MODE SELECT は行われません。 そのテープドライブの持つ、 デフォルトの状態で動作します。
si_ninfoこのデータはドライブのプローブ時に使われます。 INQUIRY コマンドで得られるデータの、 Additional Length (5 バイト目) の値を記述します。 ただし、 INQUIRY コマンドで Vendor Unique フィールドに Vendor ID や Product ID の文字列が 得られるドライブの場合は −1 を記述してください。 この場合、 情報テーブルのサーチは後述する si_ident フィールドの文字列によって行われます。 ここに 0 以上の値を記述した場合、 その値と Additional Length の値がマッチしただけで、 そのエントリが選択されてしまいます。
si_identINQUIRY コマンドで得られるデータのうち、 Vendor Unique のフィールド (6 バイト目より) にセットされる文字列を記述します。 INQUIRY コマンドで Vendor Unique フィールドに Vendor ID や Product ID の文字列が 返されないドライブの場合、 NULL を記述します。
si_nameNEWS−OS 上で用いるドライブの内部名を文字列で記述します。 基本的にはどのようなものでもかまいません。
si_fixrecドライブが tu 型であれば STDR_FIXED と、 mt 型であれば STDR_FLEX と記述します。
si_maxbsize0 を記述してください。 最大ブロックサイズは st デバイスドライバが自動的に調べます。
si_progioSTDT_DMA を記述してください。
si_immediateREWIND コマンドを発行した時、 巻き戻し動作の完了を待たずにコマンドを終了させる機能を持っている場合 1 を、 そうでない場合 0 を記述します。 ここに 1 を記述すると、 REWIND コマンドの発行時、 イミディエイトビット (CDB の 2 バイトめの LSB) がセットされます。
si_flagsSPACE、 MODE SELECT、 MODE SENSE、 LOAD の各コマンドのうち、 ドライブがサポートしているものを指定します。 マクロ定数 STDF_SPACE、 STDF_MSELECT、 STDF_MSENSE、 STDF_LOAD のうち、 サポートされているコマンドに対応するものを、 “|” 記号でむすんで記述します。 例えば、 MODE SENSE、 MODE SELECT、 LOAD のみがサポートされているドライブであれば、
STDF_MSELECT|STDF_MSENSE|STDF_LOAD
となります。 なお、 UNLOAD を行った時に、 テープメディアが BOT 方向ではなく、 EOM へ送られるタイプのドライブの場合、 STDF_UL2EOM をも指定してください。
si_nrsenseREQUEST SENSE コマンドで読み出す、 センスデータの長さをバイト数で記述します。 4 バイト以上、 20 バイト以下でなければなりません。
si_exerrposREQUEST SENSE で得られるセンスデータが、 ドライブに固有の拡張エラーコードを持っている時、 そのエラーコードのセンスデータ内での位置を記述します。 例えば、 センスデータの 9 バイト目が拡張エラーコードであれば 8 を記述します。 拡張エラーコードを持っていない時は、 −1 を記述してください。 ここで設定した拡張エラーコードは、 SCSI エラーが検出された時、 センスキーとともにコンソールに表示されます。
si_nerrcode前記の拡張エラーコードのバイト数を記述します。 拡張エラーコードを持っていない時は、 −1 を記述してください。
si_nmsenseドライブが MODE SENSE コマンドをサポートしている時、 センスするパラメータの長さをバイト数で記述します。 長さは 40 バイト以下である必要があります。 また、 ドライブが MODE SENSE コマンドをサポートしていない場合、 −1 を記述してください。
si_nmselectドライブが MODE SELECT コマンドをサポートしている時、 モードセレクトパラメータの長さをバイト数で記述します。 長さは 40 バイト以下である必要があります。 また、 ドライブが MODE SELECT コマンドをサポートしていない場合、 −1 を記述してください。
si_mseldataMODE SELECT コマンドによってセットするパラメータを記述します。 ただし、 Block Descriptor Length、 Density Code、 Block Length の 3 項目はデバイスドライバによって自動的にセットされますので、 これらの部分には 0 を記述しておいてください。 このフィールドにはドライブに固有の特殊なパラメータをセットする必要があるとき、 そのデータを記述します。
si_denstabst デバイスドライバは、 マイナーデバイス番号によって記録フォーマットを切り替えます。 このフィールドには、 マイナー番号の記録フォーマットに対応するデンシティコードを記述してください。 値として TD_INVAL を記述した場合、 該当するマイナー番号でデバイスを open() するとエラーが発生します。
ドライブのプローブ時、 テーブルのサーチは 3 番めのエントリから下方にむかって順に行われます。 マッチするエントリがなかった場合、 ドライブは Unknown Drive としてプローブされます。 この時、 st デバイスドライバは、 ドライブが tu 型ならば 1 番めのエントリをもとに、 mt 型であれば 2 番めのエントリをもとにして動作します。
記述例
/∗
∗ ARCHIVE CARTRIDGE STREAMER
∗ 2060S - 60MB
∗/
{
-1,"ARCHIVE VIPER 60",
"2060S",
STDR_FIXED,
0,
STDT_DMA,
1,
STDF_SPACE|STDF_MSELECT|STDF_MSENSE|STDF_LOAD,
7,-1,-1,
12,
12,
{
0, 0, SCM1_BUFM, 0, 0, 0, 0, 0, 0, 0, 0, 0
},
{TD_DEFLT,TD_INVAL,TD_INVAL,TD_Q24,
TD_INVAL,TD_INVAL,TD_INVAL,TD_INVAL
},
},
関連ファイル
/dev/{r|nr|anr}st∗ デバイススペシャルファイル
/sys/newsiodev/streg.h stdevinfo 構造体および ioctl の定義
/sys/newsiodev/stdefs.c コンフィギュレーションファイル
関連事項
NEWS-OSRelease 4.2.1R