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

データアクセス関数

Solaris デバイスはデバイス (devinfo) ツリーというツリー状の構造内で管理されます。devinfo ツリーの各ノードには、システム内にあるデバイスの特定のインスタンスに関する情報が保存されています。各末端ノードはデバイスドライバに対応しています。それ以外のノードは連結 (nexus) ノードといいます。通常は、1 つの連結 (nexus) が 1 つのバスを表します。バスノードは末端ドライバをバスへの依存関係から分離し、その結果、アーキテクチャ上独立したドライバが作成できます。

DDI 関数の多く (特にデータアクセス関数 (DAF)) は、結果としてバス連結ドライバに対する上位呼び出しになります。末端ドライバはハードウェアにアクセスすると、アクセスルーチンにハンドルを渡します。バス連結はハンドルの操作方法を知っており、要求に応じます。DDI 準拠のドライバはこれらの DDI アクセスルーチンだけを使用して、ハードウェアにアクセスします。テストハーネスはこれらの上位呼び出しが指定されたバス連結に到達する前に横取りします。データアクセスがドライバのテスト担当者で指定されている基準に一致すると、そのアクセスは破壊されます。データアクセスが基準に一致しなかった場合は、バス連結に渡され、通常どおりに処理されます。

ドライバは ddi_map_regs_setup (diprsetmaoffsetsizehandle) 関数を使用して、アクセスハンドルを取得します。引数では、対応付け (マッピング) 対象の「オフボード」メモリーを指定します。ハンドルはドライバをバス階層構造の詳細から分離するためのものなので、対応付けされた I/O アドレスをドライバが参照するときは、返されたハンドルを使用する必要があります。したがって、返される対応付けされたアドレスである ma を直接使用しないようにしてください。対応付けされたアドレスを直接使用すると、DAF の機構を使用しないことになります。

プログラムされた I/O では、DAF の組み合わせは次のようになります。

Xrepcnt は、転送されるバイト数です。X は 8 バイト、16 バイト、32 バイト、または 64 バイトのバス転送サイズです。

DMA には類似した、さらに充実した一群の DAF があります。