int dma_set_mask(struct device *dev, u64 mask); 通过调用 dma_set_coherent_mask() 来执行一致分配的设置: int dma_set_coherent_mask(struct device *dev, u64 mask); 在这里,dev 是指向设备的设备结构的指针,而 mask 是一个位掩码,描述了您的设备支持的地址位。通常,设备的设备结构嵌入在设备的总线...
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...
*/static inline int dma_set_mask_and_coherent(struct device *dev, u64 mask){int rc = dma_set_mask(dev, mask);if (rc == 0)dma_set_coherent_mask(dev, mask);return rc;}rc==0表示该设备的dma_mask赋值成功,所以可以接着对coherent_dma_mask赋同样的值。继续阅读e1000_probe函数, if (pci...
其中的函数dma_set_mask_and_coherent()用于对dma_mask和coherent_dma_mask赋值。 dma_mask表示的是该设备通过DMA方式可寻址的物理地址范围,coherent_dma_mask表示所有设备通过DMA方式可寻址的公共的物理地址范围, 因为不是所有的硬件设备都能够支持64bit的地址宽度。 /include/linux/dma-mapping.h /* * Set both ...
这是通过调用 dma_set_mask_and_coherent() 来执行的:: 代码语言:javascript 复制 intdma_set_mask_and_coherent(struct device*dev,u64 mask); 这将为流式 API(streaming )和一致性 API(coherent) 一起设置掩码。 如果您有一些特殊要求,则可以使用以下两个单独的调用来代替: ...
dma_set_mask_and_coherent(structdevice *dev, u64 mask) 检查是否可能使用该掩码,并更新设备流式和一致性DMA掩码参数(如果可能)。 返回:如果成功则返回0,否则返回负错误。 int dma_set_mask(structdevice *dev, u64 mask) 检查是否可能使用该掩码,并更新设备参数(如果可能)。
int dma_set_coherent_mask(struct device *dev, u64 mask); Here, dev is a pointer to the device struct of your device, and mask is a bit mask describing which bits of an address your device supports. Often the device struct of your device is embedded in the bus-specific device struct ...
其中的函数dma_set_mask_and_coherent()用于对dma_mask和coherent_dma_mask赋值。 dma_mask表示的是该设备通过DMA方式可寻址的物理地址范围,coherent_dma_mask表示所有设备通过DMA方式可寻址的公共的物理地址范围, 因为不是所有的硬件设备都能够支持64bit的地址宽度。
ops->map //调用iommu_ops的map函数 arm_smmu_map 见下。 //direct dma_direct_alloc __dma_direct_alloc_pages //gfp |= dma_direct_optimal_gfp_mask(dev, dev->coherent_dma_mask,&phys_limit); //根据coherent_dma_mask来确定是否支持64bit ...
int dma_set_mask_and_coherent(struct device *dev, u64 mask); 根据DMA buffer的特性,DMA操作有两种:一种是streaming,DMA buffer是一次性的,用完就算。这种DMA buffer需要自己考虑cache一致性。另外一种是DMA buffer是cache coherent的,软件实现上比较简单,更重要的是这种DMA buffer往往是静态的、长时间存在的。