WdfDmaTransactionSetDeviceAddressOffset 函数 (wdfdmatransaction.h)
[仅适用于 KMDF]
WdfDmaTransactionSetDeviceAddressOffset 方法指定系统 DMA 控制器在执行 DMA 操作时将访问的寄存器的偏移量。
语法
void WdfDmaTransactionSetDeviceAddressOffset(
[in] WDFDMATRANSACTION DmaTransaction,
[in] ULONG Offset
);
参数
[in] DmaTransaction
DMA 事务对象的句柄,该对象指定要修改的事务。
[in] Offset
寄存器的偏移量,从 WDF_DMA_SYSTEM_PROFILE_CONFIG 中指定的 DeviceAddress,到或从中执行 DMA。
返回值
无
备注
WdfDmaTransactionSetDeviceAddressOffset 必须与指定系统模式 DMA 配置文件的 DMA 启用程序一起使用。
基于框架的驱动程序在初始化 DMA 事务后和执行它之前调用 WdfDmaTransactionSetDeviceAddressOffset 。
驱动程序可以使用此方法访问设备注册文件中的多个寄存器。
例如,驱动程序可以使用 DMA 访问设备注册文件中的单独读取和写入寄存器。
为此,驱动程序在配置启用程序时指定设备寄存器文件的基址,然后在执行事务之前根据需要设置读取或写入寄存器的偏移量。
如果驱动程序在早于 Windows 8 的操作系统上调用此方法,框架的验证程序将报告错误。
示例
下面的代码示例初始化 DMA 事务。 然后,它设置系统 DMA 控制器将访问的寄存器的偏移量,提供传输完成回调例程,并执行 DMA 事务。
status = WdfDmaTransactionInitialize(
RequestContext->DmaTransaction,
EvtProgramDma,
direction,
mdl,
startingVa,
length
);
if(!NT_SUCCESS(status)) {
goto Complete;
}
WdfDmaTransactionSetDeviceAddressOffset(
RequestContext->DmaTransaction,
READ_DATA_REGISTER_OFFSET
);
WdfDmaTransactionSetTransferCompleteCallback(
RequestContext->DmaTransaction,
EvtDmaTransactionDmaTransferComplete,
RequestContext
);
status = WdfDmaTransactionExecute(
RequestContext->DmaTransaction,
RequestContext );
if(!NT_SUCCESS(status)) {
goto Complete;
}
return status;
Complete:
WdfDmaTransactionRelease(
RequestContext->DmaTransaction
);
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 8 |
目标平台 | 通用 |
最低 KMDF 版本 | 1.11 |
标头 | wdfdmatransaction.h (包括 Wdf.h) |
Library | Wdf01000.sys (请参阅框架库版本控制.) |
IRQL | <=DISPATCH_LEVEL |
DDI 符合性规则 | DriverCreate (kmdf) |