EN JA
CH(4)
CH(4) FreeBSD Kernel Interfaces Manual CH(4)

名称

chSCSI メディアチェンジャ (ジュークボックス) ドライバ

書式

device ch

解説

ch ドライバは SCSI メディアチェンジャのサポートを行ないます。それは、多くのスロットのメディアを複数のドライブの間で多重化して使用できるようにします。チェンジャデバイスはオプションとして、メディアに付随するラベル情報を読み込む、バーコードリーダを備え付けることができます。

また、SCSI アダプタは SCSI チェンジャを設定する前にシステムで別途設定しなければなりません。

SCSI アダプタがブートの間にプローブされるとき、 SCSI バスはデバイスのためにスキャンされます。 'チェンジャ' タイプデバイスとして応答するデバイスが見つかると、 ch ドライバに '取り付け' られ (アタッチされ) ます。 2.1 より前の FreeBSD リリースでは、最初に見つけられたものが ch0 として、次は ch1 などとしてアタッチされます。 2.1 から、デバイスがどんな ch ユニットとして接続するべきであるかを指定できるようになりました。カーネル設定の詳細については scsi(4) を参照してください。

カーネルの設定

明白に 1 つの ch デバイスを設定しさえすれば十分です。メディアの変更が SCSI バス上で見つけられるとき、データ構造は、動的に割り付けられます。

IOCTL

ユーザモードプログラムは以下で説明される多くの ioctl を通してチェンジャドライバと通信します。カーネルとチェンジャデバイスの間の通信で使用されるチェンジャエレメントのアドレスは 0 から始まる論理アドレスにマップされます。エレメントタイプは次のように指定されます:
CHET_MT
メディア転送エレメント (ピッカ)。
CHET_ST
ストレージエレメント (スロット)。
CHET_IE
インポート/エクスポートエレメント (ポータル)。
CHET_DT
データ転送エレメント (ドライブ)。

次の ioctl(2) 呼び出しはチェンジャに適用されます。それらはヘッダファイル < sys/chio.h> で定義されます。

CHIOMOVE
( struct changer_move) 現在のピッカを使用して、メディアを 1 つのエレメントから別のもの ( MOVE MEDIUM) へ移動します。移動元移動先のエレメントは、少なくとも次のフィールドを含んでいる、 changer_move 構造体で指定されます:

u_int cm_fromtype; /* 移動元エレメントのタイプ */ 
u_int cm_fromunit; /* 移動元エレメントの論理ユニット */ 
u_int cm_totype;   /* 移動先エレメントのタイプ */ 
u_int cm_tounit;   /* 移動先エレメントの論理ユニット */ 
u_int cm_flags;    /* その他のフラグ */

cm_flags フィールド中の CM_INVERT が設定されているなら、メディアチェンジャはそれを移動している間にメディアを反転するように指示されます。

CHIOEXCHANGE
( struct changer_exchange) 移動元エレメントにあるメディアを最初の移動先エレメントに移動し、最初の移動先にあるメディアを 2 番目の移動元エレメントに移動します。簡単な交換の場合には、移動元と 2 番目の移動先エレメントは同じであるべきです。現在のピッカは操作を実行するために使用されます。影響を受けるエレメントのアドレスは少なくとも次のフィールドを含んでいる changer_exchange 構造体で ioctl に指定されます:

u_int ce_srctype;  /* 移動元エレメントのタイプ */ 
u_int ce_srcunit;  /* 移動元の論理ユニット */ 
u_int ce_fdsttype; /* 最初の移動先のエレメントタイプ */ 
u_int ce_fdstunit; /* 最初の移動先の論理ユニット */ 
u_int ce_sdsttype; /* 2 番目の移動先のエレメント 
                      タイプ */ 
u_int ce_sdstunit; /* 2 番目の移動先の論理ユニット */ 
u_int ce_flags;  /* その他のフラグ */

ce_flags で、 CM_INVERT1 そして/または CM_INVERT2 は交換操作の間に、それぞれ、最初または 2 番目のメディアを反転するように設定することができます。

この操作は試されていません

CHIOPOSITION
( struct changer_position) 現在のピッカを指定されたエレメントの前に置きます。エレメントは、少なくとも次の要素を含んでいる、changer_position 構造体で指定されます:

u_int cp_type;  /* エレメントタイプ */ 
u_int cp_unit;  /* エレメントの論理ユニット */ 
u_int cp_flags; /* その他のフラグ */

cp_flags フィールドは操作の間にピッカを反転させるように CP_INVERT を設定できます。

CHIOGPICKER
( int) 現在のピッカの論理アドレスを返します。
CHIOSPICKER
( int) 与えられた論理アドレスによって指定されたピッカを選択します。
CHIOGPARAMS
( struct changer_params) メディアチェンジャのための設定パラメータを返します。この ioctl は少なくとも次のフィールドでユーザによって渡された changer_params 構造体を埋めます:

u_int cp_npickers; /* ピッカの数 */ 
u_int cp_nslots;   /* スロットの数 */ 
u_int cp_nportals; /* インポート/エクスポートポータル 
                      の数 */ 
u_int cp_ndrives;  /* ドライブの数 */

この呼び出しは、ジュークボックスの状態を問い合わせるために CHIGSTATUS ioctl を使用する前にジュークボックスの特質を問い合わせるアプリケーションで使用することができます。

CHIOIELEM
メディアチェンジャデバイスに対して INITIALIZE ELEMENT STATUS 呼び出しを実行します。これによって、メディアチェンジャはロードされたメディアに関する内部状態の情報を強制的に更新します。ラベルリーダがあれば、備えられたどんなバーコードラベルもスキャンします。 ch ドライバの状態はこの呼び出しによっても影響されません。
CHIOGSTATUS
( struct changer_element_status_request) メディアチェンジャデバイスに対して READ ELEMENT STATUS 呼び出しを実行します。この呼び出しはメディアチェンジャのエレメント状態情報を読み込み、それを changer_element_status 構造体の配列に変換します。

CHIOGSTATUS への呼び出しごとに、1 つのタイプの 1 つ以上のエレメントの状態は問い合わされます。

アプリケーションは次のフィールドを含む changer_element_status_request 構造体を ch ドライバへ渡します:

u_int                          cesr_element_type; 
u_int                          cesr_element_base; 
u_int                          cesr_element_count; 
u_int                          cesr_flags; 
struct changer_element_status *cesr_element_status;

この構造体は、 cesr_element_status フィールドによって指された changer_element_status 構造体の配列で返される情報のために、タイプ、論理ベースアドレスとエレメントの数を決定するためにドライバによって読み込まれます。アプリケーションは cesr_element_count 状態構造体 (下記参照) のために十分な大きさのメモリを割り付けなければなりません。 cesr_flags は、ボリュームタグ (バーコード) 情報がジュークボックスから読み込まれて返されることを示すために CESR_VOLTAGS をオプションで設定することができます。

cesr_element_basecesr_element_count フィールドはチェンジャの物理的な設定に関して有効でなければなりません。それらが有効でないなら、 CHIOGSTATUS ioctl は EINVAL エラーコードを返します。

エレメントに関する情報は changer_element_status 構造体の配列で返されます。この構造体は少なくとも次のフィールトを含んでいます:

u_int            ces_addr; 
                     /* メディアチェンジャの 
                        エレメントアドレス */ 
u_char           ces_flags; 
                     /* 下記の CESTATUS の定義を参照 */ 
u_char           ces_sensecode; 
                     /* エレメントの追加センスコード */ 
u_char           ces_sensequal; 
                     /* 追加センスコード修飾子 */ 
u_char           ces_invert; 
                     /* 反転ビット */ 
u_char           ces_svalid; 
                     /* 移動元アドレス (ces_source) 
                        が有効 */ 
u_short          ces_source; 
                     /* メディアの移動元アドレス */ 
changer_voltag_t ces_pvoltag; 
                     /* プライマリボリュームタグ */ 
changer_voltag_t ces_avoltag; 
                     /* 代替ボリュームタグ */ 
u_char           ces_idvalid; 
                     /* ces_scsi_id が有効 */ 
u_char           ces_scsi_id; 
                     /* エレメントの SCSI id 
                        (ces_idvalid が非 0 なら) */ 
u_char           ces_lunvalid; 
                     /* ces_scsi_lun が有効 */ 
u_char           ces_scsi_lun; 
                     /* エレメントの SCSI lun 
                        (ces_lunvalid が非 0 なら) */

ces_addr フィールドはメディアチェンジャの座標系でエレメントのアドレスを含んでいます。それはドライバによって使用されません。診断目的だけに使用されるべきです。

次のフラグは ces_flags フィールドのために定義されます:

CESTATUS_FULL
メディアは存在しています。
CESTATUS_IMPEXP
メディアはオペレータ (そして、ピッカによってではなく) によって挿入されました。
CESTATUS_EXCEPT
エレメントは例外的な状態 (例えば、無効のバーコードラベル、まだスキャンされていないバーコード) にあります。
CESTATUS_ACCESS
エレメントはピッカによってアクセス可能です。
CESTATUS_EXENAB
エレメントはメディアのエクスポートをサポートします。
CESTATUS_INENAB
エレメントはメディアのインポートをサポートします。

すべてのエレメントタイプに対してすべてのフラグが有効でないことに注意してください。

ch ドライバのこのバージョンは DEC TZ875 (5 スロット、1 DLT ドライブ) と Breece Hill Q47 (60 スロット、4 DLT ドライブ、バーコードリーダ) でテストされました。

ch ドライバがサポートする多くの機能は、テストするために利用可能なデバイスが必要なコマンドをサポートしてないという事実のために、完全にテストされていません。これは、代替ボリュームタグ、メディア反転、インポート/エクスポートエレメント操作、複数ピッカ操作、および他のものに当てはまります。

関連ファイル

/dev/ch[0-9]
デバイスエントリ

診断

メディアチェンジャが ch ドライバによって要求された機能をサポートしないなら、それはここに記述された ioctl の結果としてコンソールエラーメッセージと失敗のリターンコードの両方を生成します。

関連項目

cam(4), chio(1), cd(4), da(4), sa(4)

歴史

ch ドライバは、 386BSD-0.1 で登場しました。

作者

ch ドライバは、 And Communications、 http://www.and.com/ のために Jason R. Thorpe <thorpej@and.com>によって書かれました。どうやらそのようなデバイスを持っていたらしい Stefan Grefen <grefen@goofy.zdv.uni-mainz.de>によってシステムに追加されました。それは、 Kenneth Merry <ken@FreeBSD.org>によって CAM に移植されました。 Hans Huebner <hans@artcom.de>によってボリュームタグをサポートするように更新されました。
May 14, 1998 FreeBSD