OpenVMS Alpha
オペレーティング・システム
64 ビット・アドレッシングおよび
VLM 機能説明書


前へ 次へ 目次 索引


7.2 64 ビット・アドレスをサポートする OpenVMS ドライバ

デバイス・ドライバは,64 ビット・アドレスのサポートを I/O 関数コードごとに宣言します。ディスク・デバイス・ドライバおよびテープ・デバイス・ドライバは,仮想,論理,および物理的な読み込み関数と書き込み関数において,ディスク・デバイスとテープ・デバイスを対象とするデータ転送で 64 ビット・アドレスをサポートします。たとえば,OpenVMS SCSI ディスク・クラス・ドライバの SYS$DKDRIVER は,IO$_READVBLK 関数および IO$_WRITEVBLK 関数において 64 ビット・アドレスをサポートしますが,IO$_AUDIO 関数ではサポートしません。

64 ビット・アドレスをサポートする OpenVMS Alpha デバイス・ドライバには,次のドライバが含まれます。

少なくとも 1 つの関数で 64 ビット・アドレスをサポートする OpenVMS Alpha デバイス・ドライバを 表 7-2 に示します。

表 7-2 64 ビット・アドレスをサポートするドライバ
ドライバ 説明
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 に示します。

表 7-3 32 ビット・アドレスに制限されるドライバ
ドライバ 説明
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 ビット・バッファ・アドレスに制限されるドライバについて,特に次の点に注意してください。

7.3 64 ビット・アドレスをサポートする機能コード

64 ビット・アドレスをサポートする OpenVMS Alpha I/O 機能コードを 表 7-4 に示します。

表 7-4 64 ビット・アドレスが使用できる機能コード
ドライバのタイプ 機能コード 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$L_OPCODE

このフィールドは,ユーザ・アプリケーションが S2DGB のほかのフィールドに 32 ビット仮想アドレスを指定するか,または 64 ビット仮想アドレスを指定するかに応じて,S2DGB$K_OP_XCDB32 または S2DGB$K_OP_XCDB64 を含みます。

S2DGB$L_FLAGS

このフィールドは,次の表に示すビット・フィールドを含みます。これらのビット定義はビット 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$K_ORDERED は,コマンドが ORDERED キュー・タグで送られることを指定する。


S2DGB$K_EXPRESS は,コマンドが HEAD OF QUEUE キュー・タグで送られることを指定する。


S2DGB$V_TAGGED_REQ が 0 の場合,このフィールドは無視される。タグ付きコマンド・キュー登録をサポートしないポートは,常に S2DGB$V_TAG フィールドを無視し,すべてのコマンドを非タグ付き操作として送信する。

IO$_DIAGNOSE 関数からは,自動的条件付き忠実処理 (automatic contingent allegiance processing) はアクセスできない。また,これは 3 ビット・フィールドだが,現在は 2 ビットのみ使用されている。つまり,上の 3 つの定数は,ビット位置ではなく値を表す。


1これらのガイドラインは 64 ビット・アドレッシングに適用されます。ただしフィールド名 S2DGB$PQ_64SENSEADDR および S2DGB$L_64SENSELEN だけが異なる。

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 の場合,このフィールドは無視されます。


前へ 次へ 目次 索引