スポンサーリンク

CH(4) FreeBSD カーネルインタフェースマニュアル CH(4)

名称

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

書式

device ch

device ch1 target 4 lun 0

解説

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

SCSI チェンジャをシステムに組み込む前に、SCSI アダプタを別途組み込んでお く必要があります。

ブート時に SCSI アダプタをプローブしているときに、 SCSI バスを走査しデバ イスを探します。‘Changer’ タイプであると応答するデバイスが見つかると、そ れらは ch ドライバに「アタッチ」されます。 2.1 より前のリリースの FreeBSD では、最初に見つかったデバイスが ch0 にアタッチされ、以後見つかったデバイ スは順次、 ch1 などにアタッチされます。 2.1 から、あるデバイスがどの ch ユニットとして接続すべきかを指定できるようになりました。このためのカーネ ル設定については、 scsi(4) を参照して下さい。

カーネル設定

設定の際に、オプションとして count を指定した場合、その数だけの SCSI メ ディアチェンジャが設定されます。ドライバの記憶領域のほとんどは、デバイス が見つかった時にのみ割り当てられるので、たくさんのデバイスを設定しても高 くはつきません (ひとたび最初のデバイスがドライバを組み込んだ場合)。

IOCTL

ユーザモードプログラムは、次に示す ioctl を使ってチェンジャドライバとデー タのやりとりを行ないます。カーネルとチェンジャデバイスとの間のデータのや りとりで使用される、チェンジャエレメントのアドレスは、 0 から始まる論理ア ドレスに割り当てられます。エレメントのタイプは次のように指定します。

       CHET_MT

メディア移動エレメント (ピッカ)

CHET_ST
ストレージエレメント (スロット)

CHET_IE
持ち込み/持ち出しエレメント (ポータル)

CHET_DT
データ転送エレメント (ドライブ)

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

CHIOMOVE
(struct changer_move) これは、現在のピッカを用いて、メディ アをあるエレメントから別のエレメントに移動させます (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_INVERT1CM_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 つ以上のエレメ ントの状態が問い合わされます。

アプリケーションは 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_base フィールドと cesr_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 ドライバがサポートする機能の多くは、完全にテストできていませ ん。これは、代替ボリュームタグ、メディア反転、エレメントの持ち込み/持ち出 し操作、複数ピッカ操作、その他の機能があります。

作者

ch は、 And Communications, http://www.and.com/ の Jason R. Thorpe ⟨thorpej@and.com⟩ が記述しました。これを、その手のデバイスを持っていた
Stefan Grefen ⟨grefen@goofy.zdv.uni-mainz.de⟩ がシステムに付け加えまし た。これを CAM に移植したのは、
Kenneth Merry ⟨ken@FreeBSD.ORG⟩ です。これを更新してボリュームタグをサ ポートするようにしたのは、
Hans Huebner ⟨hans@artcom.de⟩ です。

関連ファイル

       /dev/ch[0-9]

デバイスエントリ

診断

メディアチェンジャが ch ドライバが要求する機能をサポートしていない場合、 ここで記述した ioctl に対し、コンソールエラーメッセージとエラーリターン コードを生成します。

関連項目

chio(1), cd(4), sd(4), st(4)

歴史

ch は、386BSD 0.1 で現れました。

FreeBSD May 14, 1998 FreeBSD

スポンサーリンク