前へ | 次へ | 目次 | 索引 |
デバイス・ドライバは,64 ビット・アドレスのサポートを I/O 関数コードごとに宣言します。ディスク・デバイス・ドライバおよびテープ・デバイス・ドライバは,仮想,論理,および物理的な読み込み関数と書き込み関数において,ディスク・デバイスとテープ・デバイスを対象とするデータ転送で 64 ビット・アドレスをサポートします。たとえば,OpenVMS SCSI ディスク・クラス・ドライバの SYS$DKDRIVER は,IO$_READVBLK 関数および IO$_WRITEVBLK 関数において 64 ビット・アドレスをサポートしますが,IO$_AUDIO 関数ではサポートしません。
64 ビット・アドレスをサポートする OpenVMS Alpha デバイス・ドライバには,次のドライバが含まれます。
少なくとも 1 つの関数で 64 ビット・アドレスをサポートする OpenVMS Alpha デバイス・ドライバを 表 7-2 に示します。
ドライバ | 説明 |
---|---|
SYS$DADDRIVER | ローカル・エリア・ディスク・クライアント・ディスク・ドライバ |
SYS$DKDRIVER | SCSI ディスク・クラス・ドライバ |
SYS$DUDRIVER | DSA ディスク・クラス・ドライバ |
SYS$DVDRIVER | Intel 83077AA のフロッピー・ディスク |
SYS$ECDRIVER | LAN driver for PMAI |
SYS$ERDRIVER | LAN driver for DE422 |
SYS$ESDRIVER | LAN driver for DESUA |
SYS$EWDRIVER | TULIP LAN, PCI |
SYS$EXDRIVER | DEMNA LAN, XMI |
SYS$EZDRIVER | SGEC/INEC/TGEC LAN |
SYS$FADRIVER | FDDI for Futurebus |
SYS$FCDRIVER | DEFZA, DEFTA LAN, TC |
SYS$FRDRIVER | DEFEA LAN, EISA |
SYS$FXDRIVER | DEMFA LAN, XMI |
SYS$GKDRIVER | SCSI 汎用クラス・ドライバ |
SYS$HCDRIVER | OTTO クラス ATM |
SYS$ICDRIVER | TMS380 LAN, TC |
SYS$IRDRIVER | TMS380 EISA トークン・リング |
SYS$LADDRIVER | Local Area Disk |
SYS$LASTDRIVER | Local Area System Transport |
SYS$LRDRIVER | VL82C106 parallel printer driver |
SYS$MADDRIVER | ローカル・エリア・クライアント・テープ |
MBDRIVER | メールボックス・ドライバ |
SYS$MKDRIVER | SCSI テープ・クラス・ドライバ |
NLDRIVER | ヌル・デバイス・ドライバ |
SYS$PADRIVER | SHAC CI および DSSI ポート・ドライバ |
SYS$PEDRIVER | NI SCS ポート・ドライバ |
SYS$PIDRIVER | NCR 53C710 DSSI ポート |
SYS$PKCDRIVER | SCSI NCR 53C94 ポート |
SYS$PKEDRIVER | NCR 53C810 SCSI ポート |
SYS$PKJDRIVER | ADAPTEC 1742A SCSI ポート |
SYS$PKSDRIVER | SIMport TC-SCSI ポート |
SYS$PKTDRIVER | NCR 53C710 SCSI ポート |
SYS$PKZDRIVER | XZA SCSI ポート |
SYS$PNDRIVER | NPORT SCS ポート |
SYS$PUDRIVER | CI UDA ポート・ドライバ |
SYS$SHDRIVER | ボリューム・シャドウィング |
SYS$TUDRIVER | MSCP/DSA テープ・クラス |
SYS$WPDRIVER | ウォッチポイント・ドライバ |
OpenVMS Alpha バージョン 7.0 で 64 ビット・アドレスをサポートしない OpenVMS Alpha デバイス・ドライバを 表 7-3 に示します。
ドライバ | 説明 |
---|---|
SYS$CTDRIVER | CTERM ドライバ |
SYS$FBDRIVER | ターミナル・フォールバック・ドライバ |
SYS$FTDRIVER | 擬似ターミナル・ドライバ |
SYS$FYDRIVER | DUP DSA プロトコル・クラス・ドライバ |
SYS$GQADRIVER | QVISION ドライバ |
SYS$GTADRIVER | DECwindows TX driver for Flamingo |
SYS$GXADRIVER | Flamingo CXTurbo (aka SFB, aka HX) ドライバ |
SYS$GYADRIVER | SFB+ aka HX+, aka FFB ドライバ |
SYS$GYBDRIVER | PCI バス上の TGA グラフィクス用ドライバ |
SYS$IEDRIVER | DECwindows 拡張 |
SYS$IKBDRIVER | DECwindows PCXAL キーボード |
SYS$IKDRIVER | DECwindows LKxxx キーボード |
SYS$IMBDRIVER | DECwindows PCXAS (PS2) マウス |
SYS$IMDRIVER | DECwindows VSxxx マウス |
SYS$INDRIVER | DECwindows 入力ドライバ |
SYS$LTDRIVER | LAT ターミナル・ドライバ |
NDDRIVER | DECnet Phase IV DLE (MOP サポート) |
NETDRIVER | DECnet Phase IV |
SYS$RTTDRIVER | リモート DECnet ターミナル・ドライバ |
SYS$SODRIVER | AMD79C30A Audio/ISDN ドライバ |
SYS$TTDRIVER | ターミナル・クラス・ドライバ |
DECW$XTDRIVER | X ターミナル・クラス・ドライバ |
SYS$YRDRIVER | Z85C30 SCC ターミナル・ポート・ドライバ |
SYS$YSDRIVER | PC87312 ターミナル・ポート・ドライバ |
32 ビット・バッファ・アドレスに制限されるドライバについて,特に次の点に注意してください。
64 ビット・アドレスをサポートする OpenVMS Alpha I/O 機能コードを 表 7-4 に示します。
ドライバのタイプ | 機能コード | 64 ビット・アドレス |
---|---|---|
ディスク | ||
IO$_READLBLK | P1 | |
IO$_READPBLK | P1 | |
IO$_READVBLK | P1 | |
IO$_WRITECHECK | P1 | |
IO$_WRITELBLK | P1 | |
IO$_WRITEPBLK | P1 | |
IO$_WRITEVBLK | P1 | |
磁気テープ | ||
IO$_READLBLK | P1 | |
IO$_READPBLK | P1 | |
IO$_READVBLK | P1 | |
IO$_WRITELBLK | P1 | |
IO$_WRITEOF | P1 | |
IO$_WRITEPBLK | P1 | |
IO$_WRITEVBLK | P1 | |
メールボックス | ||
IO$_READLBLK | P1 | |
IO$_READPBLK | P1 | |
IO$_READVBLK | P1 | |
IO$_WRITELBLK | P1 | |
IO$_WRITEPBLK | P1 | |
IO$_WRITEVBLK | P1 | |
Local Area Network (LAN) | ||
IO$_READLBLK | P1,P5 | |
IO$_READPBLK | P1,P5 | |
IO$_READVBLK | P1,P5 | |
IO$_WRITELBLK | P1,P4,P5 | |
IO$_WRITEPBLK | P1,P4,P5 | |
IO$_WRITEVBLK | P1,P4,P5 |
7.4 SCSI クラス・ドライバ用の 64 ビット IO$_DIAGNOSE 関数
$QIO IO$_DIAGNOSE 関数は強化され,SCSI クラス・ドライバの GKDRIVER,DKDRIVER,および MKDRIVER に対して 64 ビット・アドレッシングをサポートするようになりました。つまり S2DGB の中で指定される仮想アドレスは,ユーザ・アプリケーションの要求に応じて 64 ビット仮想アドレスになります。
$QIO IO$_DIAGNOSE 引数を次に示します。
引数 | 目的 |
---|---|
P1 | S2DGB 基底アドレス |
P2 | S2DGB の長さ |
P3 | 予約。0 を指定する。 |
P4 | 予約。0 を指定する。 |
P5 | 予約。0 を指定する。 |
P6 | 予約。0 を指定する。 |
STARLET で定義される SCSI Diagnose Buffer (S2DGB) は,32 ビット・アドレッシングと 64 ビット・アドレッシングの 2 つの形式を認めています。32 ビット形式は OpenVMS Alpha バージョン6.2 でサポートされている形式と同じです。32 ビット S2DGB 形式を 図 7-1 に,64 ビット S2DGB 形式を 図 7-2 に示します。
図 7-1 32 ビットの OpenVMS SCSI-2 Diagnose Buffer (S2DGB) のレイアウト
図 7-2 64 ビットの OpenVMS SCSI-2 Diagnose Buffer (S2DGB) のレイアウト
ユーザ・アプリケーションは,S2DGB$L_OPCODE で形式値を渡すことによって,2 種類の S2DGB 形式のうちどちらの形式を使用するのかを指定しなければなりません。特に S2DGB$L_OPCODE には,32 ビット形式を要求する OP_XCDB32 (= 1),または 64 ビット形式を要求する OP_XCDB64 (= 2)を割り当てる必要があります。OP_XCDB64 の値が指定されると,ユーザ・アプリケーションは 64 ビットの S2DGB 形式の使用と,特に,次に説明する S2DGB フィールドに対して 64 ビット名の使用が求められます。同様に,オペレーティング・コードの OP_XCDB32 は,ユーザ・アプリケーションがそのフィールドに対して 32 ビット名を使用することを求めます。
構造の正しい長さは,定数 S2DGB$K_XCDB64_LENGTH (値 : 60 - 10 進) と同様に,定数 S2DGB$K_XCDB32_LENGTH (値 : 60 - 10 進) によって定義されます。
S2DGB 内のフィールドを次に定義します。フィールドの名前が 32 ビットと 64 ビットとでそれぞれ異なる場合は,まず最初に 32 ビット名を示し,次に 64 ビット名を括弧で囲んで示します。アドレスを格納するフィールドを除いて,すべてのフィールドは符号なしのロングワードです。
このフィールドは,ユーザ・アプリケーションが S2DGB のほかのフィールドに 32 ビット仮想アドレスを指定するか,または 64 ビット仮想アドレスを指定するかに応じて,S2DGB$K_OP_XCDB32 または S2DGB$K_OP_XCDB64 を含みます。
このフィールドは,次の表に示すビット・フィールドを含みます。これらのビット定義はビット 0 で始まり,省略されるビットはありません。これは,Alpha OpenVMS V6.1 以前で使用可能な IO$_DIAGNOSE インタフェースとの互換性のために必要です。
S2DGB$V_READ | 実行されている操作が読み込みの場合,このビットは 1 である。操作が書き込みの場合は 0 である。 |
S2DGB$V_DISCPRIV | このビットには,この操作で送られる IDENTIFY メッセージの中で使用される DiscPriv ビット値が含まれる。S2DGB$V_TAGGED_REQ が 1 の場合,このビットは無視される。なお,ポートによってはこのビットが無視される場合があるので注意する。 |
S2DGB$V_SYNCHRONOUS | このビットは,その値を SISC-2 ドライバの中でユーザが制御できないために無視される。 |
S2DGB$V_OBSOLETE1 | このビットは無視される。以前のリリースではこのビットは,コマンドの再送の無効化を表していたが,現在は,SISC-2 ドライバの中でユーザが制御できないために無視される。 |
S2DGB$V_AUTOSENSE | このビットが 1 の場合,S2DGB$L_32SENSEADDR および S2DGB$L_32SENSELEN は,有効なセンス・バッファ・アドレスと長さを含む。CHECK CONDITION または COMMAND TERMINATED 状態が返される場合,REQUEST SENSE データは,S2DGB$L_32SENSEADDR および S2DGB$L_32SENSELEN で定義されるバッファに返される。 |
S2DGB$V_AUTOSENSE が 0 の場合,S2DGB$L_32SENSEADDR および S2DGB$L_32SENSELEN で定義されるバッファは無視される。このような場合,クラス・ドライバはオートセンス・データをプールに保存し,これを次の IO$_DIAGNOSE に返す。ただしこれは,IO$_DIAGNOSE が REQUEST SENSE CDB を持つ場合に限られる。 | |
S2DGB$L_FLAGS 内のほかのすべてのビットは 0 です。 | |
S2DGB$V_TAGGED_REQ |
このビットが 1 の場合,タグ付きコマンド・キュー登録を使用しているものとして操作が処理され,S2DGB$V_TAG は使用するタグ値を定義しておく必要がある。このビットが 0 の場合,タグ付きコマンド・キュー登録を使用せずに操作が処理される。タグ付きコマンド・キュー登録をサポートしないポートは常に,このビットが 0 として動作する。なお,ポートによっては,適切なタグ付き操作を使用して,非タグ付き操作をシミュレーションするので注意する。S2DGB$V_TAGGED_REQ が 1 の場合,この 3 ビットのフィールドは次のコード化された定数値を含まなければならない。
S2DGB$K_SIMPLE は,コマンドが SIMPLE キュー・タグで送られることを指定する。 |
S2DGB$L_32CDBADDR (S2DGB$PQ_64CDBADDR)
このフィールドは,この IO$_DIAGNOSE 操作によってターゲットに送られる,SCSI コマンド・データ・ブロック (CDB) の 32 ビット (または 64 ビット) 仮想アドレスを含みます。
なお,S2DGB$PQ_64CDBADDR はクォドワードへのポインタであるのに対して,S2DGB$L_32CDBADDR はロングワードへのポインタであることに注意してください。
S2DGB$L_32CDBLEN (S2DGB$L_64CDBLEN)
このフィールドは,この IO$_DIAGNOSE 操作によってターゲットに送られる,SCSI コマンド・データ・ブロック (CDB) 内のバイト数を含みます。(有効値 : 2 〜 248 。ただし,ポートによってはより小さな長さに CDB を制限している場合もあります。推奨値 : 2 〜 16。)
S2DGB$L_32DATADDR (S2DGB$PQ_64DATADDR)
このフィールドは,この SCSI 操作で使用される DATAIN または DATAOUT バッファの 32 ビット (または 64 ビット) 仮想アドレスを含みます。ターゲットに送られる CDB が DATAIN または DATAOUT バッファを使用しない場合,このフィールドの値は 0 です。
なお,S2DGB$PQ_64DATADDR はクォドワードへのポインタであるのに対して,S2DGB$L_32DATADDR はロングワードへのポインタであることに注意してください。
S2DGB$L_32DATLEN (S2DGB$L_64DATLEN)
このフィールドは,この操作に関連する DATAIN または DATAOUT バッファ内のバイト数を含みます。ターゲットに送られる CDB が DATAIN または DATAOUT バッファを使用しない場合,このフィールドの値は 0 です。(有効値 : 0 〜 UCB$L_MAXBCNT。推奨値 : 0 〜 65,536。ポートはすべて,少なくとも 65,536 バイトのデータ転送をサポートすることが求められます。)
S2DGB$L_32PADCNT (S2DGB$L_64PADCNT)
このフィールドは,この操作で必要なパディング DATAIN または DATAOUT バイト数を含みます。(有効値 : 0 〜このシステム上のディスク・ブロック内の最大バイト数から 1 を引いた値。現在の有効値 : 0 〜 511。)
S2DGB$L_32PHSTMO (S2DGB$L_64PHSTMO)
このフィールドは,フェーズ遷移が発生するまで,または期待される割り込みの実行要求までの,ポート・ドライバの待ち時間(秒数)を含みます。S2DGB$V_TAGGED_REQ が 1 の場合,またはこのフィールドが 0 または 1 を含む場合,現在設定されているフェーズ遷移の時間切れの値は変更しません。(有効値 : 0 〜 300 {5 分})
S2DGB$L_32DSCTMO (S2DGB$L_64DSCTMO)
このフィールドは,切断していたトランザクションが再び接続するまでの,ポート・ドライバの待ち時間(秒数)を含みます。S2DGB$V_TAGGED_REQ が 1 の場合,またはこのフィールドが 0 または 1 を含む場合,現在設定されている切断の時間切れの値は変更しません。(有効値 : 0 〜 65,535 {約 18 時間})
S2DGB$L_32SENSEADDR (S2DGB$PQ_64SENSEADDR)
S2DGB$V_AUTOSENSE が 1 の場合,このフィールドは,この SCSI 操作で使用されるセンス・バッファの 32 ビット (または 64 ビット) 仮想アドレスを含みます。S2DGB$V_AUTOSENSE が 0 の場合,このフィールドは無視されます。
なお,S2DGB$PQ_64SENSEADDR はクォドワードへのポインタであるのに対して,S2DGB$L_32SENSEADDR はロングワードへのポインタであることに注意してください。
S2DGB$L_32SENSELEN (S2DGB$L_64SENSELEN)
S2DGB$V_AUTOSENSE が 1 の場合,このフィールドは,この操作に関連するセンス・バッファ内のバイト数を含みます。(有効値 : 0 〜 255。注意 : 値 0 はクラス・ドライバに対して,受信したセンス・データの廃棄を指定します。推奨値 : 18。ポートによってはセンス・バイト数を 18 に制限しています。) S2DGB$V_AUTOSENSE が 0 の場合,このフィールドは無視されます。
前へ | 次へ | 目次 | 索引 |