ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
![]() |
デバイスドライバの記述 Oracle Solaris 11.1 Information Library (日本語) |
パート I Oracle Solaris プラットフォーム用デバイスドライバの設計
2. Oracle Solaris カーネルとデバイスツリー
22. ドライバのコンパイル、ロード、パッケージ化、およびテスト
23. デバイスドライバのデバッグ、テスト、およびチューニング
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 の集合体の総バイト数を転送するようにデバイスをプログラミングできます。