DMA 操作インターフェイスのバージョン 3
DMA 操作インターフェイスのバージョン 3 は、Windows 8 以降で使用できます。 このインターフェイスの DMA_OPERATIONS 構造体には、このインターフェイスの以前のバージョンで定義されていない新しいルーチンが多数含まれています。 バージョン 3 のルーチンの一覧については、 DMA_OPERATIONSを参照してください。
DMA 操作インターフェイスのバージョン 3 はすべての Windows ハードウェア プラットフォームで使用できますが、このインターフェイスには、カーネル モード ドライバーが System on a Chip (SoC) 集積回路のシステム DMA コントローラーの高度な機能を使用できるようにするための多くの機能があります。 通常、これらの機能には、散布図/収集リスト DMA 転送を実行する機能が含まれます。 これに対し、以前のバージョンの DMA 操作インターフェイスでは、バス マスター デバイスへの散布図/収集リスト DMA 転送が制限されています。 バージョン 3 インターフェイスは、散布図/収集リストの管理を簡素化し、複雑な DMA 転送中のドライバーの介入の必要性を軽減します。
DMA 操作インターフェイスのバージョン 3 を使用して DMA 転送を実行するには、ドライバーは通常、次のルーチンを呼び出します。
IoGetDmaAdapter
DMA アダプター オブジェクトを割り当て、DMA 操作インターフェイスを 含む DMA_ADAPTER 構造体へのポインターを返します。
GetDmaTransferInfo
呼び出し元によって記述される DMA 転送を実行するために必要なリソースの説明を提供します。
AllocateAdapterChannelEx
DMA 転送に必要なリソースを割り当て、これらのリソースを DMA アダプター オブジェクトに割り当てます。
MapTransferEx
DMA 転送のマップ レジスタと散布図/収集バッファーを初期化し、転送を開始します。
FlushAdapterBuffersEx
DMA 転送の最後に必要になる可能性があるキャッシュ操作を実行します。
FreeAdapterChannel
DMA チャネルとマップ レジスタを解放します。
PutDmaAdapter
アダプター オブジェクトを解放します。
これらのルーチンは、専用 DMA コントローラーを使用するバス マスター デバイスと、システム DMA コントローラーを共有する下位デバイスの両方に使用されます。 ドライバーが一般的な DMA 転送中に行う呼び出しの詳細な説明については、「 バージョン 3 DMA ルーチンの基本的な呼び出しパターン」を参照してください。
注: DMA 操作インターフェイスのバージョン 3 では、DMA 転送の前後に KeFlushIoBuffers ルーチンの呼び出しは必要ありません。 その理由は、次のルーチンが、ハードウェアでキャッシュの一貫性を強制しないプラットフォームでデータ キャッシュをフラッシュする必要性をカバーするためです。
- MapTransferEx を使用すると、書き込み (メモリからデバイスへ) 転送の前にプロセッサ データ キャッシュがフラッシュされることを保証します。
- FlushAdapterBuffersEx を使用すると、読み取り (デバイスからメモリへ) 転送後にキャッシュが無効化されることを保証します。
x86 または x64 プロセッサでは、 KeFlushIoBuffers 呼び出しは操作を実行せず、この呼び出しは不要ですが、ハードウェア プラットフォームの操作を妨げません。 Arm プロセッサでは、DMA 転送中に KeFlushIoBuffers を呼び出すと、不要なキャッシュ操作が実行され、パフォーマンスが低下する可能性があります。