DMA_APPEND_HANDLER コールバック関数 (netdma.h)

メモNetDMA インターフェイスは、Windows 8 以降ではサポートされていません。

ProviderAppendDma 関数は、DMA チャネルの最後の記述子に DMA 記述子のリンクされたリストを追加します。

構文

DMA_APPEND_HANDLER DmaAppendHandler;

NTSTATUS DmaAppendHandler(
  [in] PVOID ProviderChannelContext,
  [in] PNET_DMA_DESCRIPTOR DescriptorVirtualAddress,
  [in] PHYSICAL_ADDRESS DescriptorPhysicalAddress,
  [in] ULONG DescriptorCount
)
{...}

パラメーター

[in] ProviderChannelContext

DMA チャネルのコンテキスト領域を識別するポインター。 DMA プロバイダーは、 の pProviderChannelContext パラメーターで指定された場所で、このハンドルを NetDMA に返しました ProviderAllocateDmaChannel 関数。

[in] DescriptorVirtualAddress

DMA 記述子のリンクされたリスト内の最初の NET_DMA_DESCRIPTOR 構造体の仮想アドレスへのポインター。 対応する物理アドレスは、 DescriptorPhysicalAddress パラメーターで指定されます。

[in] DescriptorPhysicalAddress

DMA 記述子のリンクされたリスト内の最初の DMA 記述子の物理アドレスへのポインター。 対応する仮想アドレスは、 DescriptorVirtualAddress パラメーターで指定されます。

[in] DescriptorCount

DescriptorVirtualAddress での DMA 記述子の数。

メモ NetDMA バージョン 2.0 より前の NetDMA プロバイダー ドライバーでは、 DescriptorCount パラメーターを無視できます。 NetDMA 2.0 以降のバージョンの場合、このパラメーターは DMA 操作の記述子の数です。
 

戻り値

ProviderAppendDma は、次のいずれかの状態値を返します。

リターン コード 説明
STATUS_SUCCESS
操作は正常に完了しました。
STATUS_UNSUCCESSFUL
指定されていない理由で操作が失敗しました。

注釈

NetDMA インターフェイスは、DMA プロバイダー ドライバーの ProviderAppendDma 関数を呼び出して、DMA チャネルの最後の記述子の後に DMA 記述子のリンクされたリストを追加します。 NetDMA インターフェイスは、DMA 転送が開始された後、何度でも ProviderAppendDma を呼び出すことができます。 ただし、NetDMA インターフェイスは、チャネルのリセットまたは中止後、または DMA チャネルが最初に割り当てられた後に ProviderStartDma 関数を呼び出す必要があります。

メモ NetDMA 2.0 以降のバージョンでは、記述子のリンクされたリストは NULL で終了しません。 リンクリストの最後の記述子の NextDescriptor メンバーは、ProviderAppendDma 関数の後続の呼び出しで使用されるNET_DMA_DESCRIPTOR構造体の物理アドレスを指定します。 NetDMA 2.0 プロバイダー ドライバーは 、NextDescriptor でアドレスをキャッシュし、次の追加操作のリンク リストの先頭としてこのアドレスを使用できます。
 
NetDMA インターフェイスは、ProviderAppendDma を呼び出す前に、最後の記述子の NextDescriptor メンバーを記述子の新しいチェーンの先頭に設定します。

アクティブ転送の現在の記述子が最後の記述子である場合、DMA エンジンは最後の記述子を再読み取りする必要があります。 最後のNET_DMA_DESCRIPTOR構造体の NextDescriptor メンバーは新しいアドレスを持つ必要があり、DMA エンジンは次の記述子を続行する必要があります。 現在の記述子が最後の記述子でない場合、DMA エンジンは追加のタスクなしで DMA 記述子の処理を続行できます。

NetDMA は、IRQL <= DISPATCH_LEVELで ProviderAppendDma を呼び出します。

要件

要件
サポートされている最小のクライアント Windows Server 2008 の NetDMA 2.0 ドライバーでサポートされます。 Windows Server 2008 の NetDMA 1.1 ドライバーでサポートされます。 Windows Server 2008 および Windows Vista の NetDMA 1.0 ドライバーでサポートされます。
対象プラットフォーム Windows
ヘッダー netdma.h (Netdma.h を含む)
IRQL <= DISPATCH_LEVEL

こちらもご覧ください

NET_DMA_DESCRIPTOR

ProviderAllocateDmaChannel

ProviderStartDma