SERCX2_SYSTEM_DMA_RECEIVE_CONFIG结构(sercx.h)

SERCX2_SYSTEM_DMA_RECEIVE_CONFIG 结构包含串行框架扩展版本 2(SerCx2)用于配置新的 system-DMA-receive 对象的信息。

语法

typedef struct _SERCX2_SYSTEM_DMA_RECEIVE_CONFIG {
  ULONG                                                      Size;
  size_t                                                     MaximumTransferLength;
  size_t                                                     MinimumTransactionLength;
  ULONG                                                      DmaAlignment;
  ULONG                                                      MaximumScatterGatherFragments;
  DMA_WIDTH                                                  DmaWidth;
  PHYSICAL_ADDRESS                                           DeviceAddress;
  PCM_PARTIAL_RESOURCE_DESCRIPTOR                            DmaDescriptor;
  ULONG                                                      MinimumTransferUnitOverride;
  BOOLEAN                                                    Exclusive;
  PFN_SERCX2_SYSTEM_DMA_RECEIVE_INITIALIZE_TRANSACTION       EvtSerCx2SystemDmaReceiveInitializeTransaction;
  PFN_SERCX2_SYSTEM_DMA_RECEIVE_CLEANUP_TRANSACTION          EvtSerCx2SystemDmaReceiveCleanupTransaction;
  PFN_SERCX2_SYSTEM_DMA_RECEIVE_CONFIGURE_DMA_CHANNEL        EvtSerCx2SystemDmaReceiveConfigureDmaChannel;
  PFN_SERCX2_SYSTEM_DMA_RECEIVE_ENABLE_NEW_DATA_NOTIFICATION EvtSerCx2SystemDmaReceiveEnableNewDataNotification;
  PFN_SERCX2_SYSTEM_DMA_RECEIVE_CANCEL_NEW_DATA_NOTIFICATION EvtSerCx2SystemDmaReceiveCancelNewDataNotification;
} SERCX2_SYSTEM_DMA_RECEIVE_CONFIG, *PSERCX2_SYSTEM_DMA_RECEIVE_CONFIG;

成员

Size

此结构的大小(以字节为单位)。 SerCx2SystemDmaReceiveCreate 方法使用此成员来确定调用方正在使用的结构版本。 此结构的大小可能会在 Sercx.h 头文件的未来版本中更改。

MaximumTransferLength

串行控制器可以在单个系统 DMA 传输中处理的默认最大大小(以字节为单位)。 如果读取(IRP_MJ_READ)请求中的缓冲区大小大于此最大大小,则 SerCx2 使用多个 DMA 传输来处理请求,并将每个传输限制为最大长度。

MinimumTransactionLength

系统 DMA 接收事务的最小长度(以字节为单位)。 如果读取请求中的缓冲区长度小于此最小长度,则 SerCx2 对事务使用编程 I/O (PIO)。

DmaAlignment

DMA 对齐要求。 指定如何在内存中对齐 system-DMA-receive 事务中传输的起始地址。 将此成员设置为 Wdm.h 头文件中的相应 FILE_XXX_ALIGNMENT 常量。 例如,FILE_WORD_ALIGNMENT指示起始 DMA 地址必须与内存中的双字节边界对齐,FILE_LONG_ALIGNMENT指示该地址必须与四字节边界对齐,等等。 SerCx2 不支持FILE_BYTE_ALIGNMENT。 系统 DMA 适配器的最小传输单元(MTU)应大于或等于所需的对齐方式。 例如,如果 MTU 为四个字节,DmaAlignment 必须至少FILE_LONG_ALIGNMENT。

MaximumScatterGatherFragments

可以在分散/收集列表中为系统 DMA 接收事务中的 DMA 传输指定的最大缓冲区片段数。

DmaWidth

DeviceAddress指定的地址处的数据寄存器的宽度。 可能的值为 Width8BitsWidth16BitsWidth32BitsWidth64Bits

DeviceAddress

DMA 控制器从中传输的已转换地址。 有关详细信息,请参阅 WDF_DMA_SYSTEM_PROFILE_CONFIG中的 DeviceAddress 成员的说明。

DmaDescriptor

指向用于接收事务的系统 DMA 资源的 CM_PARTIAL_RESOURCE_DESCRIPTOR 结构的指针。 串行控制器驱动程序从它在启动串行控制器的 EvtDevicePrepareHardware 回调中从它接收的原始资源列表中获取此结构。

MinimumTransferUnitOverride

替代值,用于代替默认最小传输单元。 散点/收集列表中元素指定的字节数必须是最小传输单元的整数倍数。 值为零表示应使用默认最小传输单位。 有关详细信息,请参阅 DMA_ADAPTER_INFO_V1MinimumTransferUnit 成员的说明。

Exclusive

是否以独占方式使用 system-DMA 接收事务来处理写入(IRP_MJ_READ)请求。 设置为 TRUE 以指示读取请求应以独占方式使用 system-DMA-receive 事务。 设置为 FALSE,以指示读取请求可以使用 system-DMA-receive 事务和 PIO 接收事务的组合。

仅当系统-DMA 接收事务的最小传输单元为一个字节时,将此成员设置为 TRUE,最小事务长度为一个字节,并且事务的读取缓冲区可以在内存中的任何字节边界上启动。

如果 排他TRUE,则 MinimumTransferUnitOverrideDmaAlignmentMinimumTransactionLength 成员必须为零。

无论此成员的值如何,PIO 接收事务都用于在串行控制器退出 D0 设备电源状态进入低功率状态之前在接收 FIFO 中保存任何未读数据。

EvtSerCx2SystemDmaReceiveInitializeTransaction

指向驱动程序实现 EvtSerCx2SystemDmaReceiveInitializeTransaction 事件回调函数的指针。 此成员是可选的,可以设置为 NULL,以指示驱动程序未实现该函数。

EvtSerCx2SystemDmaReceiveCleanupTransaction

指向驱动程序实现 EvtSerCx2SystemDmaReceiveCleanupTransaction 事件回调函数的指针。 此成员是可选的,可以设置为 NULL,以指示驱动程序未实现该函数。

EvtSerCx2SystemDmaReceiveConfigureDmaChannel

指向驱动程序实现 EvtSerCx2SystemDmaReceiveConfigureDmaChannel 事件回调函数的指针。 此成员是可选的,可以设置为 NULL,以指示驱动程序未实现该函数。

EvtSerCx2SystemDmaReceiveEnableNewDataNotification

指向驱动程序实现 EvtSerCx2SystemDmaReceiveEnableNewDataNotification 事件回调函数的指针。 此成员是可选的,可以设置为 NULL,以指示驱动程序未实现该函数。 但是,实现此函数的驱动程序还必须实现 EvtSerCx2SystemDmaReceiveCancelNewDataNotification 函数。

EvtSerCx2SystemDmaReceiveCancelNewDataNotification

指向驱动程序实现 EvtSerCx2SystemDmaReceiveCancelNewDataNotification 事件回调函数的指针。 此成员是可选的,可以设置为 NULL,以指示驱动程序未实现该函数。 但是,实现此函数的驱动程序还必须实现 EvtSerCx2SystemDmaReceiveEnableNewDataNotification 函数。

言论

SerCx2SystemDmaReceiveCreate 方法接受指向 SERCX2_SYSTEM_DMA_RECEIVE_CONFIG 结构的指针作为输入参数。 在调用 SerCx2SystemDmaReceiveCreate之前,请调用 SERCX2_SYSTEM_DMA_RECEIVE_CONFIG_INITSERCX2_SYSTEM_DMA_RECEIVE_CONFIG_INIT_NEW_DATA_NOTIFICATION 函数来初始化此结构。

要求

要求 价值
最低支持的客户端 从 Windows 8.1 开始支持。
标头 sercx.h

另请参阅

CM_PARTIAL_RESOURCE_DESCRIPTOR

EvtDevicePrepareHardware

EvtSerCx2SystemDmaReceiveCancelNewDataNotification

EvtSerCx2SystemDmaReceiveCleanupTransaction

EvtSerCx2SystemDmaReceiveConfigureDmaChannel

EvtSerCx2SystemDmaReceiveEnableNewDataNotification

EvtSerCx2SystemDmaReceiveInitializeTransaction

IRP_MJ_READ

SERCX2_SYSTEM_DMA_RECEIVE_CONFIG_INIT

SERCX2_SYSTEM_DMA_RECEIVE_CONFIG_INIT_NEW_DATA_NOTIFICATION

SerCx2SystemDmaReceiveCreate

WdfDmaEnablerSetMaximumScatterGatherElements