NdisMSetupDmaTransfer 宏 (ndis.h)
NdisMSetupDmaTransfer 函式會設定 DMA 傳輸的主機 DMA 控制器。
語法
void NdisMSetupDmaTransfer(
_S,
_H,
_B,
_O,
_L,
_M_
);
參數
_S
呼叫端提供的變數指標,此變數會傳回要求的狀態,可以是下列其中一項:
NDIS_STATUS_SUCCESS
DMA 控制器已設定為傳輸指定的數據,該數據已排清到裝置或從裝置清除,以維護數據完整性。
NDIS_STATUS_RESOURCES
嘗試設定傳輸的 DMA 控制器失敗,可能是 因為 MiniportDmaHandle 指定的通道目前正在使用傳輸數據,或因為指定的 Length 無效。
_H
NdisMRegisterDmaChannel 函式在初始化期間傳回的 DMA 句柄。
_B
緩衝區描述元的指標,對應要從中傳輸數據或從其中傳輸數據的主機記憶體範圍。
_O
對應緩衝區內應該啟動傳輸的位元組位移。 零表示傳輸應該從 緩衝區 所指定之範圍的初始位元組開始。
_L
要傳輸的數據位元組數。 Offset 和 Length 所指定的範圍必須是在 Buffer 中指定的適當子範圍。
_M_
從系統透過 NIC 進行輸出傳輸的布爾值,為 TRUE 。 否則為 FALSE。
傳回值
無
備註
從屬 DMA NIC 的驅動程式會呼叫 NdisMSetupDmaTransfer 以回應傳入傳送要求,驅動程式會將 WriteToDevice 設定為 TRUE。 他們會將 WriteToDevice 設定為 FALSE ,當從 NIC 將接收的數據傳送到主機記憶體時。
NdisMSetupDmaTransfer 的呼叫端會提供緩衝區描述元,將主機記憶體範圍對應至傳輸的目標,或包含從主機到 NIC 下載作業的數據。 若要指定符合 NIC DMA 條件約束的傳輸大小,呼叫端可以視需要設定子範圍以 Offset 和 Length 參數傳送。
呼叫端必須提供緩衝區描述元,指定 當 WriteToDevice 為 FALSE 時,接收的數據將從 NIC 傳送到其中的主機範圍。 否則, Buffer 上的緩衝區描述項已鏈結至迷你埠驅動程式的封包描述元輸入 MiniportSendNetBufferLists 函 式。
若要改善小型傳輸要求的效能,例如長度小於 256 位元組的傳送要求,迷你埠驅動程式可以將封包數據複製到內部預備緩衝區,並將該緩衝區的驅動程式配置緩衝區描述元對應傳遞至 NdisMSetupDmaTransfer。
從 NdisMSetupDmaTransfer 傳回時,主機 DMA 控制器已針對傳輸進行程序設計。 迷你埠驅動程序接著會針對傳輸作業來設定 NIC。
傳輸完成時,迷你埠驅動程序必須呼叫 NdisMCompleteDmaTransfer 函 式。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | (支援 NDIS 6.0 和 NDIS 5.1 驅動程式,請參閱 Windows Vista 中的 NdisMSetupDmaTransfer (NDIS 5.1) ) 。 (支援 NDIS 5.1 驅動程式,請參閱 Windows XP 中的 NdisMSetupDmaTransfer (NDIS 5.1) ) 。 |
目標平台 | Universal |
標頭 | ndis.h (包含 Ndis.h) |
IRQL | <= DISPATCH_LEVEL |
DDI 合規性規則 | Irql_Miniport_Driver_Function (ndis) |