coherent_dma_mask :用来分配连续一致性dma。 dma_mask:在dma_map_single->dma_map_page,dma_capable用。 先看默认设置。后续可以通过pci_set_dma_mask/pci_set_consistent_dma_mask分别设置 设置: int pci_setup_device(struct pci_dev *dev) { u32 class; u16 cmd; u8 hdr_type; int pos = 0; stru...
流映射的设置是通过调用dma_set_mask()来执行的 intdma_set_mask(struct device*dev,u64 mask); 一致分配的设置是通过调用dma_set_coherent_mask()来执行的 intdma_set_coherent_mask(struct device*dev,u64 mask); 这里,dev 是指向设备的设备结构的指针,mask 是描述设备支持的地址的哪些位的位掩码。 ...
inline int dma_set_mask_and_coherent(struct device *dev, u64 mask) 流式DMA的寻址范围可通过以下接口设置: inline int dma_set_mask(struct device *dev, u64 mask) 也可以通过以下接口同时设置一致性DMA和流式DMA接口的寻址范围: inline int dma_set_mask_and_coherent(struct device *dev, u64 mask)...
int dma_set_mask_and_coherent(struct device *dev, u64 mask); 这将为流式 API 和连贯 API 一起设置掩码。如果您有一些特殊要求,则可以使用以下两个单独的调用来代替:流映射的设置是通过调用 dma_set_mask() 来执行的: int dma_set_mask(struct device *dev, u64 mask); 通过调用 dma_set_coherent...
如何设备支持常见的23位DMA操作,则没有必要调用dma_set_mask。 DMA映射 一个DMA映射是 要分配的DMA缓冲区 与 为该缓冲区生成的、设备可访问地址的组合。 DMA映射必须解决缓存一致性的问题。如果设备改变了主内存找那个的区域,则任何覆盖该区域的处理器缓存都将无效。
dma_set_mask(structdevice *dev, u64 mask) 检查是否可能使用该掩码,并更新设备参数(如果可能)。 返回:如果成功则返回0,否则返回负错误。 int dma_set_coherent_mask(structdevice *dev, u64 mask) 检查是否可能使用该掩码,并更新设备参数(如果可能)。
int dma_set_mask(struct device *dev, u64 mask); 该掩码显示该设备能寻址能力对应的位。比如说,设备受限于24位寻址,则mask应该是0x0FFFFFF。 5. DMA映射 IOMMU在设备可访问的地址范围内规划了物理内存,使得物理上分散的缓冲区对设备来说成连续的。对IOMMU的运用需要使用到通用DMA层,而vir_to_bus函数不能...
其中的函数dma_set_mask_and_coherent()用于对dma_mask和coherent_dma_mask赋值。 dma_mask表示的是该设备通过DMA方式可寻址的物理地址范围,coherent_dma_mask表示所有设备通过DMA方式可寻址的公共的物理地址范围, 因为不是所有的硬件设备都能够支持64bit的地址宽度。
ret=dma_set_coherent_mask(wed->dev,DMA_BIT_MASK(32)); if(ret) returnret; return1; #else return0; Expand Down 6 changes: 5 additions & 1 deletion6mt7996/pci.c Original file line numberDiff line numberDiff line change Expand Up@@ -111,7 +111,11 @@ static int mt7996_pci_probe(...
(4)屏蔽寄存器(Mask Register)用来屏蔽 某个DMA通道。当一个DMA通道被屏蔽后,它就不能在服务于DMA请求,直到通道的屏蔽码被清除。各位的定义如下: 上述屏蔽寄存器也称为“单通道屏蔽寄存器”(Single Channel Mask Register),因为它一次只能屏蔽一个通道。此外含有一个屏蔽寄存器,可以实现一次屏蔽所有4个DMA通道,如下:...