NET_DMA_DESCRIPTOR結構 (netdma.h)
語法
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 的 DCAContext32、 DCAContext16 和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 運算結合) :
除非另有說明,否則描述會在設定位時套用至 。 | 意義 |
---|---|
|
NetDMA 2.0 版或更新版本的提供者會從 SourceAddress 成員中指定的來源實體地址啟動複本,並在到達第一頁結尾時,從 NextSourceAddress 成員中指定的實體地址繼續複製。 |
|
NetDMA 2.0 版或更新版本的提供者會啟動複製到 DestinationAddress 成員中指定的目的地實體位址,並在到達第一頁結尾時,繼續將複本複製到 NextDestinationAddress 成員中指定的實體位址。 |
|
DMA 引擎應該將描述項識別為 內容變更 描述項。
NetDMA 介面會將內容變更描述項提交至支援 DCA 的 NetDMA 提供者,以設定 NetDMA 通道上所有 DMA 傳輸目的地數據的 DCA 目標處理器。 NetDMA 介面會在內容變更描述項中使用 DCAContext8 成員,在通道的目標處理器 (APIC) 識別元指定 8 位進階可程式化插斷控制器。 支援 DCA 的 NetDMA 提供者必須保留具有處理器之 DMA 通道的 DCA 親和性,只要它尚未收到新的內容變更描述元。 NetDMA 介面會在配置通道之後一次提交內容變更描述元,並在 NetDMA 偵測到 DMA 提供者可能遺失硬體內容 (例如暫停和繼續作業之後) 。 |
|
如果 DMA 作業類型是標準 DMA 傳輸,DMA 引擎應該將目的地數據的 DCA 提示傳送至已指派給 DMA 通道的 DCA 目標處理器。
若要設定 DMA 通道的 DCA 目標處理器,NetDMA 介面先前已將該通道提交內容變更描述項。 |
|
DMA 引擎在處理這個 DMA 描述項之後,應該為相關聯的 DMA 通道產生中斷。
清除此位時,DMA 引擎不會產生中斷。 |
|
來源地址不應該被探查。
清除此位時,來源位址會位於一致的記憶體空間中,而且必須探查每個CPU快取行。 DMA 用戶端必須確認適當的 DMA 作業不需要探查 CPU 快取。 |
|
目的地地址不應被探查。
清除此位時,目的地位址會位於一致的記憶體空間中,而且必須探查每個CPU快取行。 DMA 用戶端必須確認適當的 DMA 作業不需要探查 CPU 快取。 |
|
中的 CompletionVirtualAddress 和 CompletionPhysicalAddress 成員 NET_DMA_CHANNEL_PARAMETERS 結構參考完成狀態值。 當 DMA 引擎完成此描述項的處理時,會更新完成狀態值。
完成狀態值是64位範圍的組合,其中包含 DMA 引擎所處理的最新 DMA 描述元的實體位址,以及其他狀態資訊。 清除此位時,DMA 引擎不會使用 CompletionVirtualAddress 或 CompletionPhysicalAddress。 |
|
DMA 引擎保證此描述項的所有寫入,包括數據和完成狀態,都會在讀取下一個描述元的數據之前完成。
清除此位時,DMA 引擎可以開始處理下一個描述項,再完成此描述項的處理。 |
|
此描述項不需要 DMA 傳輸。 檢查 TransferSize、SourceAddress 或 DestinationAddress 成員不需要 DMA 引擎。
清除此位時,可能需要 DMA 傳輸,或可能是長度為零的傳輸。 DMA 引擎必須檢查 TransferSize、SourceAddress 或 DestinationAddress 成員。 注意 如果設定或清除此位,NetDMA 用戶端必須一律確保描述項定義有效的傳輸參數。
|
下列位掩碼會識別 ControlFlags 成員中的剩餘位:
值 | 意義 |
---|---|
|
位掩碼,指定保留給 DMA 作業類型的位。 NetDMA 介面會將這些位設定為零。 |
|
位掩碼,指定保留給未來應用程式的位。 NetDMA 介面會將這些位設定為零。 |
SourceAddress
記憶體區塊的實體位址,這是 DMA 傳輸的來源。
DestinationAddress
記憶體區塊的實體位址,這是 DMA 傳輸的目的地。
NextDescriptor
描述項連結清單中下一個NET_DMA_DESCRIPTOR結構的實體位址。 如果此描述項是清單中的最後一個描述元, NextDescriptor 為 NULL。
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) |