[ 前のページ ] [ 次のページ ] [ 目次 ] [ DOC Home ]

21 OpenVMS Galaxy デバイス・ドライバ

この章では,OpenVMS Alphaバージョン7.2-1でPCIドライバに対して,ダイレクト・ マップDMAウィンドウがどのように変更されたかについて説明します。

21.1 ダイレクト・マップDMAウィンドウの変更

Galaxy Software Architecture on OpenVMSとメモリ・ホールをサポートするには, ここで説明する変更が必要です。この変更では,ダイレクト・ マップDMAウィンドウを物理メモリ0から他の場所に移動します。この章では, ドライバを更新するのに必要な情報とその背景について,詳しく説明します。

この章では,バス・アドレス可能プール(BAP)については説明しません。

21.2 OpenVMS V7.2より以前にPCIダイレクト・マップDMA がどのように機能していたか

すべてのPCIベースのマシンで,ダイレクト・マップDMAウィンドウはPCI 空間の(通常は) 1 GBから始まり,1 GBの場合は0から始まる物理メモリを使用します。

図 21-1 PCIベースDMA

通常,ドライバはそれぞれのバッファ・アドレスを,IOC$K_DIRECT_DMA_ SIZEファンクション・コードを指定してIOC$NODE_DATAを呼び出すことで返されたウィンドウの長さと比較します。 ここでは,メモリ側のウィンドウが0 から始まるものと仮定しています。マップ・レジスタが必要かどうかを判断するためによく使われている別の方法として,MMG$GL_MAXPFN を確認する方法があります。 この方法もOpenVMSバージョン7.2-1では正しく動作しない可能性があります。


もっとわかりやすい図と説明については

Writing OpenVMS Device Alpha Drivers in C』を参照してください。

21.3 OpenVMSバージョン7.2でPCIダイレクト・マップDMA がどのように機能するか

Galaxyおよびメモリ・ホールについて考慮すると,ダイレクト・マップDMA ウィンドウの位置を変更しなければならなくなります。

図 21-2 OpenVMSバージョン7.2-1 DMA

メモリ内でダイレクト・マップDMAウィンドウのベースがどこにあるかをドライバから判断することはできません。 単にバッファ・アドレスをウィンドウの長さと比較しても, バッファがダイレクト・マップDMAウィンドウの内部にあるかどうか判断するのに十分ではありません。 また, mmg$gl_maxpfnに対して比較しても,すべてのプールがウィンドウの内部にあるかどうか保証できません。 チェックしなければならない正しいセルはmmg$gl_max_node_pfn です。さらに,アライメントについて考慮すると, 物理バス・アドレスの計算に少し異なるオフセットを組み込まなければならなくなります。

21.4 0以外のダイレクト・マップDMAウィンドウをサポートするためのIOC$NODE_DATA の変更

この問題に対処するために,新しいファンクション・コードが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 ]