NET_DMA_DESCRIPTOR結構 (netdma.h)

注意Windows 8和更新版本中不支援 NetDMA 介面。
 
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 和更新版本的提供者驅動程式會使用 UNION 的 DCAContext32DCAContext16 和DCAContext8 成員,搭配 TransferSize 來支援 直接快取存取 (DCA)

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 描述項執行的作業。 這個成員必須包含下列一或多個值, (與位 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 成員,在通道的目標處理器 (APIC) 識別元指定 8 位進階可程式化插斷控制器。

支援 DCA 的 NetDMA 提供者必須保留具有處理器之 DMA 通道的 DCA 親和性,只要它尚未收到新的內容變更描述元。

NetDMA 介面會在配置通道之後一次提交內容變更描述元,並在 NetDMA 偵測到 DMA 提供者可能遺失硬體內容 (例如暫停和繼續作業之後) 。

NET_DMA_DESTINATION_DCA_ENABLE
如果 DMA 作業類型是標準 DMA 傳輸,DMA 引擎應該將目的地數據的 DCA 提示傳送至已指派給 DMA 通道的 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
中的 CompletionVirtualAddressCompletionPhysicalAddress 成員 NET_DMA_CHANNEL_PARAMETERS 結構參考完成狀態值。 當 DMA 引擎完成此描述項的處理時,會更新完成狀態值。

完成狀態值是64位範圍的組合,其中包含 DMA 引擎所處理的最新 DMA 描述元的實體位址,以及其他狀態資訊。

清除此位時,DMA 引擎不會使用 CompletionVirtualAddressCompletionPhysicalAddress

NET_DMA_SERIALIZE_TRANSFER
DMA 引擎保證此描述項的所有寫入,包括數據和完成狀態,都會在讀取下一個描述元的數據之前完成。

清除此位時,DMA 引擎可以開始處理下一個描述項,再完成此描述項的處理。

NET_DMA_NULL_TRANSFER
此描述項不需要 DMA 傳輸。 檢查 TransferSizeSourceAddress 或 DestinationAddress 成員不需要 DMA 引擎。

清除此位時,可能需要 DMA 傳輸,或可能是長度為零的傳輸。 DMA 引擎必須檢查 TransferSizeSourceAddress 或 DestinationAddress 成員。

注意 如果設定或清除此位,NetDMA 用戶端必須一律確保描述項定義有效的傳輸參數。
 
 

下列位掩碼會識別 ControlFlags 成員中的剩餘位:

意義
NET_DMA_OP_TYPE_MASK
位掩碼,指定保留給 DMA 作業類型的位。 NetDMA 介面會將這些位設定為零。
NET_DMA_RESERVED_MASK
位掩碼,指定保留給未來應用程式的位。 NetDMA 介面會將這些位設定為零。

SourceAddress

記憶體區塊的實體位址,這是 DMA 傳輸的來源。

DestinationAddress

記憶體區塊的實體位址,這是 DMA 傳輸的目的地。

NextDescriptor

描述項連結清單中下一個NET_DMA_DESCRIPTOR結構的實體位址。 如果此描述項是清單中的最後一個描述元, NextDescriptorNULL

Reserved1

保留給 DMA 引擎或 DMA 提供者驅動程式使用的ULONG64值。 NetDMA 2.0 和更新版本的提供者驅動程式會使用 Union 的 NextSourceAddress 成員搭配 Reserved1 來支援 來源和目的地分頁符號

NextSourceAddress

來源分頁符號中使用的第二頁來源位址實體位址。

Reserved2

保留給使用 DMA 引擎或 DMA 提供者驅動程式的ULONG64值。 NetDMA 2.0 和更新版本的提供者驅動程式會使用 Union 的 NextDestinationAddress 成員與 Reserved2 來支援 來源和目的地分頁符號

NextDestinationAddress

目的地分頁符號中使用的第二頁目的地位址實體位址。

UserContext1

保留給 NetDMA 介面使用的ULONG64值。

UserContext2

保留給 NetDMA 介面使用的ULONG64值。

備註

NET_DMA_DESCRIPTOR 結構會指定 DMA 描述元連結清單中單一 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 驅動程式。 (在 Windows Server 2008 中新增了 NextSourceAddress、NextDestinationAddress、DCAContext32、DCAContext16 和 DCAContext8 members.) 支援 NetDMA 1.1 驅動程式。 Windows Server 2008 和 Windows Vista 中支援 NetDMA 1.0 驅動程式。
標頭 netdma.h (包含 Netdma.h)

另請參閱

NET_DMA_CHANNEL_PARAMETERS

ProviderAppendDma

ProviderStartDma