Go to main content
Oracle® Solaris 11.3 デバイスドライバの記述

印刷ビューの終了

更新: 2016 年 11 月
 
 

DMA モデル

DDI/DKI (Oracle Solaris Device Driver Interface/Driver-Kernel Interface) には、アーキテクチャーに依存しないハイレベルな DMA モデルが用意されています。このモデルを使用すると、フレームワーク (つまり DMA ルーチン) で次のようなアーキテクチャー固有の詳細を隠すことができます。

  • DMA マッピングの設定

  • scatter/gather リストの作成

  • 入出力と CPU 間のキャッシュの一貫性の確保

DDI/DKI では、DMA トランザクションのさまざまな局面を記述するためにいくつかの抽象化が使用されます。

  • DMA オブジェクト - DMA 転送の転送元または転送先になるメモリー。

  • DMA ハンドル - 正常に実行された ddi_dma_alloc_handle(9F) 呼び出しから返される不透明なオブジェクト。DMA ハンドルをそのあとの DMA サブルーチン呼び出しで使用すると、そのような DMA オブジェクトを参照できます。

  • DMA cookie - ddi_dma_cookie(9S) 構造体 (ddi_dma_cookie_t) では、デバイスから完全にアドレス可能な DMA オブジェクトの連続した部分を記述します。cookie には、DMA エンジンのプログラミングに必要な DMA アドレッシング情報が含まれています。

デバイスドライバは、オブジェクトを直接メモリー内にマップするのではなく、DMA リソースをメモリーオブジェクトに割り当てます。次に、DMA ルーチンは DMA アクセス用のオブジェクトの設定に必要なプラットフォーム固有のすべての操作を実行します。ドライバは DMA ハンドルを受け取って、オブジェクトに割り当てられている DMA リソースを特定します。このハンドルはデバイスドライバに対して不透明です。ドライバはこのハンドルを保存し、そのあとの呼び出しで DMA ルーチンに渡す必要があります。ドライバがこのハンドルを解釈することはありません。

次のサービスを提供する処理は DMA ハンドルで定義されます。

  • DMA リソースの操作

  • DMA オブジェクトの同期

  • 割り当てられたリソースの属性の取り出し