NET_DMA_DESCRIPTOR構造体 (netdma.h)

メモNetDMA インターフェイスは、Windows 8 以降ではサポートされていません。
 
NET_DMA_DESCRIPTOR構造体は、DMA 記述子のリンクされたリスト内の各エントリの DMA 転送情報を指定します。

構文

typedef struct _NET_DMA_DESCRIPTOR {
  union {
    ULONG TransferSize;
    struct {
      ULONG DCAContext : 32;
    } DCAContext32;
    struct {
      ULONG DCAContext : 16;
      ULONG Reserved : 16;
    } DCAContext16;
    struct {
      ULONG DCAContext : 8;
      ULONG Reserved : 24;
    } DCAContext8;
  };
  ULONG            ControlFlags;
  PHYSICAL_ADDRESS SourceAddress;
  PHYSICAL_ADDRESS DestinationAddress;
  PHYSICAL_ADDRESS NextDescriptor;
  union {
    ULONG64          Reserved1;
    PHYSICAL_ADDRESS NextSourceAddress;
  };
  union {
    ULONG64          Reserved2;
    PHYSICAL_ADDRESS NextDestinationAddress;
  };
  ULONG64          UserContext1;
  ULONG64          UserContext2;
} NET_DMA_DESCRIPTOR, *PNET_DMA_DESCRIPTOR;

メンバー

TransferSize

この DMA 記述子に関連付けられているメモリ ブロックのサイズ (バイト単位)。

NetDMA 2.0 以降のプロバイダー ドライバーは、Direct Cache Access (DCA) をサポートするために、TransferSize との共用体の DCAContext32DCAContext16、および DCAContext8 メンバーを使用します。

DCAContext32

32 ビット DCA コンテキスト。

DCAContext32.DCAContext

DCA コンテキスト。

DCAContext16

16 ビット DCA コンテキスト。

DCAContext16.DCAContext

DCA コンテキスト。

DCAContext16.Reserved

予約済みビット。

DCAContext8

8 ビット DCA コンテキスト。

DCAContext8.DCAContext

DCA コンテキスト。

DCAContext8.Reserved

予約済みビット。

ControlFlags

この DMA 記述子に対して DMA エンジンが実行する必要がある操作を指定するフラグのセット。 このメンバーには、次の値の 1 つ以上が含まれている必要があります (ビットごとの OR 演算と組み合わせる)。

特に記載がない限り、ビットが設定されている場合に説明が適用されます。 意味
NET_DMA_SOURCE_PAGE_BREAK
NetDMA バージョン 2.0 以降のプロバイダーは、 SourceAddress メンバーで指定されているソース物理アドレスからコピーを開始し、最初のページの末尾に達すると、 NextSourceAddress メンバーで指定された物理アドレスからのコピーを続行します。
NET_DMA_DESTINATION_PAGE_BREAK
NetDMA バージョン 2.0 以降のプロバイダーは、 DestinationAddress メンバーで指定されている宛先の物理アドレスへのコピーを開始し、最初のページの末尾に達すると、 NextDestinationAddress メンバーで指定された物理アドレスへのコピーを続行します。
NET_DMA_OP_TYPE_CONTEXT_CHANGE
DMA エンジンは、 記述子をコンテキスト変更 記述子として識別する必要があります。

NetDMA インターフェイスは、コンテキスト変更記述子を DCA 対応 NetDMA プロバイダーに送信して、NetDMA チャネル上のすべての DMA 転送の宛先データの DCA ターゲット プロセッサを設定します。 NetDMA インターフェイスは、コンテキスト変更記述子の DCAContext8 メンバーを使用して、チャネルのターゲット プロセッサの 8 ビットの高度なプログラミング可能割り込みコントローラー (APIC) 識別子を指定します。

DCA 対応 NetDMA プロバイダーは、新しいコンテキスト変更記述子を受信していない限り、DMA チャネルの DCA アフィニティをプロセッサと共に保持する必要があります。

NetDMA インターフェイスは、チャネルが割り当てられた 1 回後にコンテキスト変更記述子を送信します。また、DMA プロバイダーがハードウェア コンテキストを失った可能性があることを NetDMA が検出した場合 (たとえば、中断操作と再開操作の後など)。

NET_DMA_DESTINATION_DCA_ENABLE
DMA 操作の種類が標準の DMA 転送の場合、DMA エンジンは、DMA チャネルに割り当てられている DCA ターゲット プロセッサに宛先データの DCA ヒントを送信する必要があります。

DMA チャネルの DCA ターゲット プロセッサを設定するために、NetDMA インターフェイスは以前、そのチャネルにコンテキスト変更記述子を送信しました。

NET_DMA_INTERRUPT_ON_COMPLETION
DMA エンジンは、この DMA 記述子を処理した後、関連付けられた DMA チャネルの割り込みを生成する必要があります。

このビットがクリアされると、DMA エンジンは割り込みを生成しません。

NET_DMA_SOURCE_NO_SNOOP
送信元アドレスをスヌーピングしないでください。

このビットがクリアされると、ソース アドレスは一貫性のあるメモリ空間内にあり、各 CPU キャッシュ行をスヌーピングする必要があります。 DMA クライアントは、適切な DMA 操作に CPU キャッシュのスヌーピングが必要ないことを確認する必要があります。

NET_DMA_DESTINATION_NO_SNOOP
宛先アドレスをスヌーピングしないでください。

このビットがクリアされると、宛先アドレスは一貫性のあるメモリ空間にあり、各 CPU キャッシュ行をスヌーピングする必要があります。 DMA クライアントは、適切な DMA 操作に CPU キャッシュのスヌーピングが必要ないことを確認する必要があります。

NET_DMA_STATUS_UPDATE_ON_COMPLETION
の CompletionVirtualAddress メンバーと CompletionPhysicalAddress メンバー 構造体NET_DMA_CHANNEL_PARAMETERS 完了状態の値を参照します。 DMA エンジンは、この記述子の処理を完了すると、完了状態の値を更新します。

完了状態の値は、DMA エンジンによって処理された最新の DMA 記述子の物理アドレスと、その他の状態情報の 64 ビット幅の組み合わせです。

このビットがクリアされると、DMA エンジンは CompletionVirtualAddress または CompletionPhysicalAddress を使用しません。

NET_DMA_SERIALIZE_TRANSFER
DMA エンジンでは、データと完了状態を含め、この記述子のすべての書き込みが完了してから、次の記述子のデータを読み取ります。

このビットがクリアされると、DMA エンジンは、この記述子の処理を完了する前に、次の記述子の処理を開始できます。

NET_DMA_NULL_TRANSFER
この記述子には DMA 転送は必要ありません。 DMA エンジンは、TransferSizeSourceAddress、または DestinationAddress メンバーをチェックする必要はありません。

このビットをクリアすると、DMA 転送が必要な場合や、長さが 0 の転送である可能性があります。 DMA エンジンは、TransferSizeSourceAddress、または DestinationAddress メンバーをチェックする必要があります。

メモ このビットが設定またはクリアされている場合、NetDMA クライアントは、記述子が有効な転送パラメーターを定義していることを常に確認する必要があります。
 
 

次のビットマスクは、 ControlFlags メンバーの残りのビットを識別します。

意味
NET_DMA_OP_TYPE_MASK
DMA 操作の種類用に予約されているビットを指定するビット マスク。 NetDMA インターフェイスは、これらのビットを 0 に設定します。
NET_DMA_RESERVED_MASK
将来のアプリケーション用に予約されているビットを指定するビット マスク。 NetDMA インターフェイスは、これらのビットを 0 に設定します。

SourceAddress

DMA 転送のソースであるメモリ ブロックの物理アドレス。

DestinationAddress

DMA 転送の宛先であるメモリ ブロックの物理アドレス。

NextDescriptor

記述子のリンクリスト内の次のNET_DMA_DESCRIPTOR構造体の物理アドレス。 この記述子がリスト内の最後の記述子である場合、 NextDescriptorNULL です

Reserved1

DMA エンジンまたは DMA プロバイダー ドライバーが使用するために予約されているULONG64値。 NetDMA 2.0 以降のプロバイダー ドライバーは、Reserved1 を持つ共用体の NextSourceAddress メンバーを使用して、ソースと宛先の改ページをサポートします。

NextSourceAddress

ソース 改ページで使用されるソース アドレスの 2 ページ目の物理アドレス。

Reserved2

使用する DMA エンジンまたは DMA プロバイダー ドライバー用に予約されているULONG64値。 NetDMA 2.0 以降のプロバイダー ドライバーは、Reserved2 との共用体の NextDestinationAddress メンバーを使用して、ソースと宛先の改ページをサポートします。

NextDestinationAddress

宛先改ページで使用される宛先アドレスの 2 ページ目の物理アドレス。

UserContext1

NetDMA インターフェイスで使用するために予約されているULONG64値。

UserContext2

NetDMA インターフェイスで使用するために予約されているULONG64値。

注釈

NET_DMA_DESCRIPTOR構造体は、DMA 記述子のリンクされたリスト内の 1 つの DMA 転送のソース、宛先、および制御情報を指定します。

DMA 転送を開始するために、NetDMA インターフェイスは、DMA プロバイダー ドライバーの ProviderStartDma 関数の DescriptorPhysicalAddress パラメーターで、NET_DMA_DESCRIPTOR構造体の物理アドレスを提供します。 DescriptorVirtualAddress パラメーターには、記述子の仮想アドレスが含まれています。

NET_DMA_DESCRIPTOR構造体の NextDescriptor メンバーには、記述子のリンクされたリスト内の次のNET_DMA_DESCRIPTOR構造体の物理アドレスが含まれます。

NetDMA インターフェイスは、DMA プロバイダー ドライバーの ProviderAppendDma 関数を呼び出して、DMA チャネルの最後の記述子の後に DMA 記述子のリンクリストを追加します。

要件

要件
サポートされている最小のクライアント Windows Server 2008 の NetDMA 2.0 ドライバーでサポートされています。 (NextSourceAddress、NextDestinationAddress、DCAContext32、DCAContext16、および DCAContext8 メンバーを追加しました)。Windows Server 2008 の NetDMA 1.1 ドライバーでサポートされます。 Windows Server 2008 および Windows Vista の NetDMA 1.0 ドライバーでサポートされます。
Header netdma.h (Netdma.h を含む)

こちらもご覧ください

NET_DMA_CHANNEL_PARAMETERS

ProviderAppendDma

ProviderStartDma