[ 前のページ ]
[ 次のページ ]
[ 目次 ]
[ DOC Home ]
この章では,OpenVMS Alphaバージョン7.2-1でPCIドライバに対して,ダイレクト・ マップDMAウィンドウがどのように変更されたかについて説明します。
Galaxy Software Architecture on OpenVMSとメモリ・ホールをサポートするには, ここで説明する変更が必要です。この変更では,ダイレクト・ マップDMAウィンドウを物理メモリ0から他の場所に移動します。この章では, ドライバを更新するのに必要な情報とその背景について,詳しく説明します。
この章では,バス・アドレス可能プール(BAP)については説明しません。
すべてのPCIベースのマシンで,ダイレクト・マップDMAウィンドウはPCI 空間の(通常は) 1 GBから始まり,1 GBの場合は0から始まる物理メモリを使用します。
通常,ドライバはそれぞれのバッファ・アドレスを,IOC$K_DIRECT_DMA_ SIZEファンクション・コードを指定してIOC$NODE_DATAを呼び出すことで返されたウィンドウの長さと比較します。 ここでは,メモリ側のウィンドウが0 から始まるものと仮定しています。マップ・レジスタが必要かどうかを判断するためによく使われている別の方法として,MMG$GL_MAXPFN を確認する方法があります。 この方法もOpenVMSバージョン7.2-1では正しく動作しない可能性があります。
Galaxyおよびメモリ・ホールについて考慮すると,ダイレクト・マップDMA ウィンドウの位置を変更しなければならなくなります。
メモリ内でダイレクト・マップDMAウィンドウのベースがどこにあるかをドライバから判断することはできません。 単にバッファ・アドレスをウィンドウの長さと比較しても, バッファがダイレクト・マップDMAウィンドウの内部にあるかどうか判断するのに十分ではありません。 また, mmg$gl_maxpfnに対して比較しても,すべてのプールがウィンドウの内部にあるかどうか保証できません。 チェックしなければならない正しいセルはmmg$gl_max_node_pfn です。さらに,アライメントについて考慮すると, 物理バス・アドレスの計算に少し異なるオフセットを組み込まなければならなくなります。
この問題に対処するために,新しいファンクション・コードがioc$node_ dataに追加されました。ここではダイレクト・マップDMAに関連するすべてのコードのリストを示し, データがどのような意味を持つかについても説明します。
IOC$K_DIRECT_DMA_BASE | これはPCI側のベース・ アドレスであるか,またはバス・アドレスである。これは, IOC$K_DDMA_BASE_BAというファンクション・コードの同意語である。 |
IOC$DIRECT_DMA_SIZE | Galaxy以外のマシンでは,これはダイレクト・マップDMAウィンドウのサイズ( メガバイト数)を返す。ダイレクト・マップDMAウィンドウが0 から始まらないシステムでは,返されるデータは0であり,ダイレクト・ マップDMAウィンドウが存在しないことを示す。 |
IOC$K_DDMA_WIN_SIZE | すべてのシステム(x6jh) で,これはダイレクト・マップDMAウィンドウのサイズを返す(メガバイト単位) 。 |
IOC$K_DIRECT_DMA_BASE_ PA | これはダイレクト・マップDMAウィンドウのメモリ内でのベース物理アドレスである。 おそらくmmg$gl_min_node_pfnに密接に関係しているが, アライメントを考慮したため,少し異なる可能性がある。 |
IOC$K_DIRECT_DMA_BASE_PAコードを使用して返されるアドレスは,オフセットを計算するのに必要です( これは通常,メモリPAとバス・アドレスの間の1 GB の差として使用されます)。オフセットは,ベース・バス・アドレスとベース・ メモリ・アドレスの間の符号付きの差として定義されます。 これは必ずしも1 GBではありません。
[ 前のページ ]
[ 次のページ ]
[ 目次 ]
[ DOC Home ]