Solaris 7 のソフトウェア開発 (追補)

SPARC: SCSI HBA ドライバ用 DR サポート

この機能は、Solaris 7 - 11/99 ソフトウェアリリースで追加されたものです。

このリリースでは、動的再構成 (DR) のサポートが SCSI デバイス用に更新されました。SCSI HBA ドライバは、(以前『Writing Device Drivers』の「Converting Device Drivers to Support Hotplugging」で記述されていた) cb_ops 構造体なしで、動的再構成をサポートできるようになりました。

新しいデフォルトの SCSI HBA ドライバエントリポイント

ホットプラグ操作の最小セットをサポートするには、ドライバにバスの休止、バスの休止解除、およびリセットのサポートが実装されている必要があります。scsi_hba_tran(9S) 構造体は、これらの新しい操作をサポートするために拡張されました。ハードウェアがバスの休止、バスの休止解除、およびリセットを必要としない場合は、ドライバを変更する必要はありません。

次の新しいフィールドが scsi_hba_tran 構造体に追加されました。


int (*tran_quiesce)(dev_info_t *hba_dip);
int (*tran_unquiesce)(dev_info_t *hba_dip);
int (*tran_bus_reset)(dev_info_t *hba_dip, int level);

新しいドライバエントリポイントについては、次の節で説明します。

tran_quiesce()tran_unquiesce()

SCSI バスに対して、休止と休止解除のサポートを実装するように設定します。


#include <sys/scsi/scsi.h>

int prefix tran_quiesce(dev_info_t *hba_dip);

int prefix tran_unquiesce(dev_info_t *hba_dip);

ホットプラグをサポートするよう設定されていないバス上にある SCSI デバイスについて動的再構成 (DR) をサポートするには、HBA ドライバにより tran_quiesce(9E)tran_unquiesce(9E) を実装する必要があります。

scsi_hba_tran(9S) 構造体にある tran_quiesce()tran_unquiesce() ベクトルは、HBA ドライバに attach(9E) を実行して HBA エントリポイントを指すようにする際に初期化する必要があります。こうしておくと、ユーザーが休止および休止解除の操作を始めるときに呼び出されます。

tran_quiesce(9E) は SCSA フレームワークにより呼び出され、SCSI バスに接続されたデバイスの再構成が始まる前と再構成の間、SCSI バス上のすべての動作を休止させます。tran_unquiesce(9E) は、再構成操作が終了してから SCSA フレームワークによって呼び出され、SCSI バス上の動作を再開します。

HBA ドライバは、中断されていたコマンドがすべて終了して正常終了を示すメッセージが返されるまで、tran_quiesce(9E) を操作している必要があります。HBA はバスを休止させた後、SCSA フレームワークが対応する tran_unquiesce(9E) エントリポイントを呼び出すまで、ターゲットドライバからの新しい入出力要求を待ち行列に入れておかなければなりません。

HBA ドライバは、バスが静止している間に HBA が待ち行列に入れたターゲットドライバの入出力要求を起動することによって、tran_unquiesce(9E) の呼び出しを行います。

tran_bus_reset()

tran_bus_reset(9E) は、ターゲットをリセットすることなく SCSI バスをリセットする必要があります。


#include <sys/scsi/scsi.h>

	int prefix tran_bus_reset(dev_info_t *hba_dip, int level);

level には次を指定します。

RESET_BUS

ターゲットではなく、SCSI バスのみをリセットする

scsi_hba_tran(9S) 構造体の tran_bus_reset() ベクトルは、ユーザーがバスリセットを開始したときに呼び出される HBA エントリポイントを指すように HBA ドライバが attach(9E) を実行する間に、初期化される必要があります。

実装はハードウェアにより異なります。ターゲットに影響を与えることなく SCSI バスをリセットするのが不可能な場合は、HBA ドライバは RESET_BUS の実行に失敗するか、このベクトルを初期化しません。

詳細は、『Writing Device Drivers』の「Converting Device Drivers to Support Hotplugging」を参照してください。