H2C Channel:Host-to-Card Channel(DMA读)
C2H Channel:Card-to-Host Channel(DMA写)
xdma基于描述符(‘descriptor’)实现主机内存和DMA子系统之间的数据搬移,这些描述符包含了数据传输的源、目的和数量信息。
DMA可以配置为具有被所有通道共享的单个AXI4主接口,或者每个通道启用一个AXI4-Stream接口。
xdma ip还提供多达16条用户中断线用于向主机产生中断。
xdma支持的PCIe事务类型MRd32,MRd64,MWr32,MWr64,Msg(INT,Error) ,Cpl,CplD。(不支持IO和配置类型事务)
在内部,子系统可以配置为实现最多8个独立的物理DMA引擎(最多4个H2C和4个C2H)。这些DMA引擎可以映射到用户应用程序的单个AXI4-Stream接口或者共享的AXI4 MM接口。在AXI4 MM接口上,xdma子系统产生请求和预期cpl包。而AXI4-Stream接口仅为数据接口。
H2C通道产生对PCIe的读请求,并向用户侧提供数据或产生写请求。C2H通道等待用户侧数据,或者产生用户侧读请求,然后产生包含接收数据的PCIe写请求。
MSI中断:
如果启用了MSI或MSI-X,断言usr_irq_req的一个或多个位会导致产生MSI或MSI-X中断。
在断言usr_irq_req位之后,它必须保持断言状态,直到相应的usr_irq _ack位被断言,并且中断已由主机提供服务并清除为止。
我们之前说xdma是基于描述符这种结构来实现数据搬移的。那么描述符的内容取决于很多因素,包括为DMA引擎选择哪个用户接口。如果选择了AXI4-Stream接口,那么C2H传输不使用源地址字段并且H2C字段不使用目的地址。这是因为AXI4-Stream接口是一个不使用地址的FIFO类型接口。如果选择了AXI MM接口,那么对于H2C传输,源地址是PCIe地址,目的地址是AXI地址。C2H相反。
描述符其实是一组链表,这些描述符指定了DMA传输的源、目的和长度。描述符列表由驱动创建并且存储在host内存中。
Magic: 16’had4b. Code to verify that the driver generated descriptor is valid.
Nxt_adj: The number of additional adjacent descriptors after the descriptor located at the next descriptor address field.
Length: Length of the data in bytes.
Src_adr : Source address for H2C and memory mapped transfers. Metadata writeback address for C2H transfers.
Dst_adr : Destination address for C2H and memory mapped transfers. Not used for H2C stream.
Nxt_adr : Address of the next descriptor in the list.