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

印刷ビューの終了

更新: 2016 年 11 月
 
 

DMA ソフトウェアコンポーネント: ハンドル、ウィンドウ、cookie

DMA ハンドルは、オブジェクト (通常はメモリーバッファーやメモリーアドレス) を表す隠されたポインタです。DMA ハンドルを使用すると、デバイスは DMA 転送を行うことができます。さまざまな DMA ルーチンの呼び出しで、このハンドルを使用して、オブジェクトに割り当てられている DMA リソースを特定しています。

DMA ハンドルで表されるオブジェクトは、1 つ以上の DMA cookie に完全に収まります。DMA cookie は、DMA エンジンがデータ転送で使用するメモリーの連続した部分を表します。システムは、次の情報に基づいてオブジェクトを複数の cookie に分けます。

  • ドライバが提供する ddi_dma_attr(9S) 属性構造体

  • ターゲットオブジェクトのメモリー位置

  • ターゲットオブジェクトの配置

オブジェクトが DMA エンジンの制限内に収まらない大きさの場合は、そのオブジェクトを複数の DMA ウィンドウ に分ける必要があります。リソースをアクティブにして割り当てることができるのは、1 度に 1 つのウィンドウだけです。ddi_dma_getwin(9F) 関数は、オブジェクト内のウィンドウ間の位置を決めるために使用します。各 DMA ウィンドウは、1 つ以上の DMA cookie で構成されます。詳細は、DMA ウィンドウを参照してください。

DMA エンジンの中には、複数の cookie を受け入れられるものがあります。そのようなエンジンは、システムの助けを借りずに scatter/gather 入出力を実行します。1 つのバインドから複数の cookie が返される場合、ドライバは ddi_dma_nextcookie(9F) を繰り返し呼び出して、各 cookie を取得します。これらの cookie は、エンジン内にプログラミングする必要があります。その後、これらの DMA cookie の集合体の総バイト数を転送するようにデバイスをプログラミングできます。