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 和更新版本的提供者驅動程式會使用 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 成員,為通道指定目標處理器的 8 位進階可程式化插斷控制器 (APIC) 識別符。 支援 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 引擎完成這個描述項的處理時,會更新完成狀態值。
完成狀態值是 DMA 引擎所處理之最新 DMA 描述元之實體位址的 64 位寬組合,以及其他狀態資訊。 清除此位時,DMA 引擎不會使用 CompletionVirtualAddress 或 CompletionPhysicalAddress。 |
|
DMA 引擎保證此描述項的所有寫入,包括數據和完成狀態,都會在讀取下一個描述項的數據之前完成。
清除此位時,DMA 引擎可以開始處理下一個描述元,再完成這個描述項的處理。 |
|
此描述項不需要 DMA 傳輸。 DMA 引擎不需要檢查 TransferSize、SourceAddress或 DestinationAddress 成員。
清除此位時,可能需要 DMA 傳輸,或可能是長度為零的傳輸。 DMA 引擎必須檢查 TransferSize、SourceAddress或 DestinationAddress 成員。
注意 如果設定或清除此位,NetDMA 用戶端必須一律確保描述項定義有效的傳輸參數。
|
下列位掩碼會識別 ControlFlags 成員中的其餘位:
價值 | 意義 |
---|---|
|
位掩碼,指定保留給 DMA 作業類型的位。 NetDMA 介面會將這些位設定為零。 |
|
位掩碼,指定保留給未來應用程式的位。 NetDMA 介面會將這些位設定為零。 |
SourceAddress
記憶體區塊的實體位址,這是 DMA 傳輸的來源。
DestinationAddress
記憶體區塊的實體位址,該區塊是 DMA 傳輸的目的地。
NextDescriptor
描述項連結清單中的下一個NET_DMA_DESCRIPTOR結構的實體位址。 如果這個描述元是清單中的最後一個描述元,NextDescriptorNULL。
Reserved1
保留給 DMA 引擎或 DMA 提供者驅動程式使用的ULONG64值。 NetDMA 2.0 和更新版本的提供者驅動程式會使用 NextSourceAddress 成員與 Reserved1,以支援 Source 和 Destination Page Break。
NextSourceAddress
來源分頁符號中所使用之來源位址第二頁的實體位址。
Reserved2
保留給使用 DMA 引擎或 DMA 提供者驅動程式的ULONG64值。 NetDMA 2.0 和更新版本的提供者驅動程式會使用 NextDestinationAddress 成員與 Reserved2,以支援 來源和目的地分頁符號。
NextDestinationAddress
目的地分頁符號中使用的第二頁目的地位址實體位址。
UserContext1
保留給 NetDMA 介面使用的ULONG64值。
UserContext2
保留給 NetDMA 介面使用的ULONG64值。
言論
NET_DMA_DESCRIPTOR 結構會指定 DMA 描述元連結清單中單一 DMA 傳輸的來源、目的地和控制資訊。
若要啟動 DMA 傳輸,NetDMA 介面會在 DMA 提供者驅動程式 ProviderStartDma 函式的 描述元PhysicalAddress 參數提供NET_DMA_DESCRIPTOR結構的實體位址。 描述元VirtualAddress 參數包含描述項的虛擬位址。
NextDescriptor NET_DMA_DESCRIPTOR 結構的成員包含描述元連結清單中下一個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 驅動程式。 |
標頭 | netdma.h (包括 Netdma.h) |