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...
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 是一个位掩码,描述了您的设备支持的地址位。通常,设备的设备结构嵌入在设备的总线...
流映射的设置是通过调用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 是描述设备支持的地址的哪些位的位掩码。 ...
void *dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, int falg); 该函数处理了缓冲区的分配和映射,前两个参数是device结构和所需的缓冲区的大小。函数在两处返回DMA映射的结果:函数的返回值是缓冲区的内核虚拟地址,可以被驱动程序使用;而与其相关的总线地址保存在dma_handle...
dma_set_mask(structdevice *dev, u64 mask) 检查是否可能使用该掩码,并更新设备参数(如果可能)。 返回:如果成功则返回0,否则返回负错误。 int dma_set_coherent_mask(structdevice *dev, u64 mask) 检查是否可能使用该掩码,并更新设备参数(如果可能)。
dma_free_coherent(structdevice *dev, size_t size,void*cpu_addr, dma_addr_t handle) 需要注意的一点是,dma_alloc_xxx()函数虽然是dma_alloc_开头的,但是其申请的区域不一定在DMA区域中。以32位ARM处理器为例,当coherent_dma_mask小于0xffffffff时,才会设置GPA_DMA标记,并从DMA区域去申请内存。
dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64))) {pci_using_dac = 1;} else {err = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32));if (err) {pr_err("No usable DMA config, aborting\n");goto err_dma;}} 其中的函数dma_set_mask_and_coherent()用于对dma_...
具体做法是,在第230行,通过pci_register_driver()函数将e1000_driver这个驱动程序注册到PCI子系统。 e1000_driver是struct pci_driver类型的结构体, 代码语言:javascript 代码运行次数:0 复制 Cloud Studio代码运行 staticstruct pci_driver e1000_driver={.name=e1000_driver_name,.id_table=e1000_pci_tbl,.probe=...
其中的函数dma_set_mask_and_coherent()用于对dma_mask和coherent_dma_mask赋值。 dma_mask表示的是该设备通过DMA方式可寻址的物理地址范围,coherent_dma_mask表示所有设备通过DMA方式可寻址的公共的物理地址范围, 因为不是所有的硬件设备都能够支持64bit的地址宽度。
int dma_set_coherent_mask(struct device *dev, u64 mask); 前者是设定streaming类型的DMA地址掩码,后者是设定coherent类型的DMA地址掩码。为了更好的理解这些接口,我们聊聊参数和返回值。dev指向该设备的struct device对象,一般来说,这个struct device对象应该是嵌入在bus-specific 的实例中,例如对于PCI设备,有一个...