情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

DMA トランザクションの作成および初期化

I/O 要求をドライバーから DMA デバイスに送信する前に、ドライバーで次の処理を実行する必要があります。

  1. WdfDmaTransactionCreate を呼び出して、その要求の DMA トランザクション オブジェクトを作成します。

  2. WdfDmaTransactionInitializeUsingRequest または WdfDmaTransactionInitialize を呼び出して、そのトランザクション オブジェクトを初期化します。

通常、ドライバーが DMA トランザクションを作成するのは、要求ハンドラーフレームワーク要求オブジェクトを受信済みで、その要求をハードウェアに渡す必要があるためです。この場合、ドライバーは、WdfDmaTransactionInitializeUsingRequest を呼び出す必要があります。これにより、要求オブジェクト ハンドルが入力として受け付けられ、要求オブジェクトから要求のアドレス パラメーターが抽出されます。

ドライバーは、受信したフレームワーク要求オブジェクトに基づかない DMA トランザクションを作成する必要がある場合、WdfDmaTransactionInitialize を呼び出す必要があります。これにより、そのドライバーに用意されているアドレス パラメーターが受け付けられます。

WdfDmaTransactionInitializeUsingRequest および WdfDmaTransactionInitialize のどちらにも、入力パラメーターとして EvtProgramDma イベント コールバック関数のアドレスが必要です。このコールバック関数はデバイスの処理をプログラミングし、DMA 転送が可能になるたびにフレームワークがそのコールバック関数を呼び出します。

ドライバーが WdfDmaEnablerCreate を呼び出して DMA イネーブラー オブジェクトを作成するときに、ドライバーからデバイスの最大転送長が格納されている WDF_DMA_ENABLER_CONFIG 構造体が提供されます。フレームワークは、この値をすべての DMA 転送に対する既定の最大長として使用します。

一部の種類の DMA トランザクションでは、デバイスの既定の最大長とは異なる最大転送長の指定が必要になる場合があります。WdfDmaTransactionSetMaximumLength を使用すると、個々のトランザクションに対して最大転送長を設定できます。フレームワークは、指定されたトランザクションを処理している間のみ指定された最大転送長を使用します。

最大転送長は、オペレーティング システムによって DMA イネーブラー オブジェクトが使用できるようにするマップ レジスタの数によって制限されます。使用できる最大転送長を確認するために、ドライバーで WdfDmaEnablerGetFragmentLength を呼び出すことができます。WdfDmaEnablerGetFragmentLength から返される値が、ドライバーが WdfDmaEnablerCreate に指定した最大転送長より小さい場合、フレームワークは小さい方の値を使用します。

ドライバーは、DMA トランザクションを作成および初期化した後で、トランザクションを起動する必要があります。

 

 

コミュニティの追加

表示:
© 2014 Microsoft