SerCx2SystemDmaReceiveCreate 函式 (sercx.h)
SerCx2SystemDmaReceiveCreate 方法會建立 SerCx2 system-DMA-receive 物件,這是序列架構延伸模組 (SerCx2) 第 2 版用來執行 system-DMA-receive 交易。
語法
NTSTATUS SerCx2SystemDmaReceiveCreate(
[in] WDFDEVICE Device,
[in] PSERCX2_SYSTEM_DMA_RECEIVE_CONFIG SystemDmaReceiveConfig,
[in, optional] PWDF_OBJECT_ATTRIBUTES Attributes,
[out] SERCX2SYSTEMDMARECEIVE *SystemDmaReceive
);
參數
[in] Device
代表序列控制器之架構裝置物件的WDFDEVICE句柄。 序列控制器驅動程式會在其 EvtDriverDeviceAdd 回呼函式中建立這個物件。 如需詳細資訊,請參閱 SerCx2InitializeDevice。
[in] SystemDmaReceiveConfig
SERCX2_SYSTEM_DMA_RECEIVE_CONFIG 結構的指標。 呼叫此方法之前,呼叫端必須呼叫 SERCX2_SYSTEM_DMA_RECEIVE_CONFIG_INIT 或 SERCX2_SYSTEM_DMA_RECEIVE_CONFIG_INIT_NEW_DATA_NOTIFICATION 函式來初始化 結構。 此結構包含序列控制器驅動程式所實作之一組事件回呼例程的指標。 SerCx2 會呼叫這些函式來執行 system-DMA-receive 交易。
[in, optional] Attributes
WDF_OBJECT_ATTRIBUTES 結構的指標,描述要指派給新 system-DMA-receive 對象的屬性。 呼叫此方法之前,呼叫端必須呼叫 WDF_OBJECT_ATTRIBUTES_INIT 函式來初始化 結構。 此參數是選擇性的,如果序列控制器驅動程式不需要將屬性指派給物件,則可以指定為WDF_NO_OBJECT_ATTRIBUTES。 如需詳細資訊,請參閱。
[out] SystemDmaReceive
這個方法將 SERCX2SYSTEMDMARECEIVE 句柄寫入新建立之 system-DMA-receive 物件的位置指標。 SerCx2 和序列控制器驅動程式會在後續呼叫中使用這個句柄來參考這個物件。
傳回值
如果呼叫成功,這個方法會傳回STATUS_SUCCESS。 可能的錯誤傳回值包括下列狀態代碼。
傳回碼 | 描述 |
---|---|
|
先前 SerCx2SystemDmaReceiveCreate 呼叫已有 system-DMA-receive 物件存在;或自定義接收物件已存在於先前呼叫 SerCx2CustomReceiveCreate 方法;或自定義傳輸物件存在於先前呼叫 SerCx2CustomTransmitCreate 方法;或 SerCx2PioReceiveCreate 尚未呼叫來建立 PIO 接收物件。 |
|
|
|
參數值無效。 |
|
資源不足,無法執行要求的作業。 |
言論
串行控制器驅動程式會呼叫這個方法,以建立 system-DMA-receive 物件。 SerCx2 會使用此物件來執行系統 DMA 接收交易,這是使用系統 DMA 控制器讀取序列控制器所接收數據的 I/O 交易。
序列控制器驅動程式通常會從其 EvtDevicePrepareHardware 回呼函式呼叫 SerCx2SystemDmaReceiveCreate。 此函式會接收硬體資源清單,其中包含系統 DMA 通道。
序列控制器驅動程式必須在呼叫 SerCx2SystemDmaReceiveCreate之前,成功呼叫 SerCx2InitializeDevice 和 SerCx2PioReceiveCre ate 方法。
在呼叫 SerCx2SystemDmaReceiveCreate之前,序列控制器驅動程式必須呼叫 SERCX2_SYSTEM_DMA_RECEIVE_CONFIG_INIT 或 SERCX2_SYSTEM_DMA_RECEIVE_CONFIG_INIT_NEW_DATA_NOTIFICATION 函式,以初始化 SystemDmaReceiveConfig 所指向的 SERCX2_SYSTEM_DMA_RECEIVE_CONFIG 結構。 這些函式會將 結構的下列成員設定為零:
- MaximumScatterGatherFragments
- MinimumTransferUnitOverride
- DmaAlignment
- MinimumTransactionLength
- 獨佔
- 如果 MaximumScatterGatherFragments 為零,則 SerCx2 會將散佈/收集清單中的元素數目上限設定為 (ULONG)-1。
- 如果 MinimumTransferUnitOverride 為零,則 SerCx2 會將最小傳輸單位設定為其預設值,這是在系統 DMA 控制器的 DMA_ADAPTER 結構中指定的。 如需此結構的詳細資訊,請參閱 WdfDmaEnablerWdmGetDmaAdapter。
- 如果 DmaAlignment 為零,則 SerCx2 會將對齊值設定為最小傳輸單位。 如果 MinimumTransferUnitOverride 為零,則會使用預設最小傳輸單位。
- 如果 MinimumTransactionLength 為零,則 SerCx2 會將交易長度下限設定為一個字節。
- 如果 獨佔 為零(FALSE),則會停用獨佔模式。
如果實作回呼函式的指定組合無效,SerCx2SystemDmaReceiveCreate 會失敗並傳回STATUS_INVALID_PARAMETER。 驅動程式必須實作 EvtSerCx2SystemDmaReceiveEnableNewDataNotification 和 EvtSerCx2SystemDmaReceiveCancelNewDataNotification 函式。
作為選項,序列控制器驅動程式可以使用 Attributes 參數來建立 system-DMA-receive 對象的內容,並提供指標給 EvtCleanupCallback 和 EvtDestroyCallback 函式,以準備刪除物件。 如需詳細資訊,請參閱 WDF_OBJECT_ATTRIBUTES。
如果 屬性 參數指向 WDF_OBJECT_ATTRIBUTES 結構,呼叫端不得覆寫 WDF_OBJECT_ATTRIBUTES_INIT 初始化函式寫入至 ParentObject、ExecutionLevel和 SynchronizationScope 成員的值。
如需建立 system-DMA-receive 對象的詳細資訊,請參閱 SERCX2SYSTEMDMARECEIVE。 如需 system-DMA-receive 交易的詳細資訊,請參閱 SerCx2 System-DMA-Receive Transactions。
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | 從 Windows 8.1 開始提供。 |
目標平臺 | 普遍 |
標頭 | sercx.h |
IRQL | PASSIVE_LEVEL |
另請參閱
EvtSerCx2SystemDmaReceiveCancelNewDataNotification
EvtSerCx2SystemDmaReceiveCleanupTransaction
EvtSerCx2SystemDmaReceiveEnableNewDataNotification
EvtSerCx2SystemDmaReceiveInitializeTransaction
SERCX2_SYSTEM_DMA_RECEIVE_CONFIG
SERCX2_SYSTEM_DMA_RECEIVE_CONFIG_INIT