if (dma_set_mask(dev, DMA_BIT_MASK(64))) { dev_warn(dev, "mydev: No suitable DMA available\n"); goto ignore_this_device; } 相干掩码将始终能够设置与流掩码相同或更小的掩码。然而,对于设备驱动程序仅使用一致分配的罕见情况,必须检查 dma_set_coherent_mask() 的返回值。最后,如果您的设备只能...
#definePLAYBACK_ADDRESS_BITSDMA_BIT_MASK(32)#defineRECORD_ADDRESS_BITSDMA_BIT_MASK(24) struct my_sound_card*card;struct device*dev;...if(!dma_set_mask(dev,PLAYBACK_ADDRESS_BITS)){card->playback_enabled=1;}else{card->playback_enabled=0;dev_warn(dev,"%s: Playback disabled due ...
* 64-bit DMA addresses to 64-bit hardware. There are some * 32-bit adapters that Tx hang when given 64-bit DMA addresses */pci_using_dac=0;if((hw->bus_type==e1000_bus_type_pcix)&&!dma_set_mask_and_coherent(&pdev->dev,DMA_BIT_MASK(64))){pci_using_dac=1;}else{err=dma_set...
* Assume 32-bit PCI; let 64-bit PCI cards (which are far rarer) * set this higher, assuming the system even supports it. */ dev->dma_mask = 0xffffffff; //默认设置4G ... } 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22....
+ 64 bit addresses for consistent + allocations such descriptors. */ 说完历史,那么我们就来说说,这个dma_mask,它限制了什么? 这个值其实限制的是具备dma能力的设备,它能够访问的总线地址范围,要知道,从device的角度,它是不知道物理地址的概念的,它了解自己的一亩三分地,就是自己的总线地址,比如对于pci,就是...
if(!pci_set_dma_mask(pdev,DMA_BIT_MASK(64))){pci_set_consistent_dma_mask(pdev,DMA_BIT_MASK(64));pr_info("Using a 64-bit DMA mask.\n");}elseif(!pci_set_dma_mask(pdev,DMA_BIT_MASK(32))){pci_set_consistent_dma_mask(pdev,DMA_BIT_MASK(32));pr_info("Using a 32-bit DMA...
manually zero the memory once we are done: */ gfp &= ~__GFP_ZERO; /* GFP_DMA32 and GFP_DMA are no ops without the corresponding zones: */ if (dev->coherent_dma_mask <= DMA_BIT_MASK(ARCH_ZONE_DMA_BITS)) gfp |= GFP_DMA; if (dev->coherent_dma_mask <= DMA_BIT_MASK(32) ...
1、用另外的mask 2、不使用DMA模式,采用普通I/O模式 3、忽略这个设备的存在,不对其进行初始化 一个可以寻址32 bit的设备,其初始化的示例代码如下: if (dma_set_mask_and_coherent(dev, DMA_BIT_MASK(32))) { dev_warn(dev, "mydev: No suitable DMA available "); ...
| | |--->dma_set_mask_and_coherent(dev, DMA_BIT_MASK(64));//64BIT mask:~0ULL | | |if(host->flags & SDHCI_USE_ADMA) { | | |dma_addr_tdma; | | |void*buf; | | |if(!(host->flags & SDHCI_USE_64_BIT_DMA)) |
1、用另外的mask 2、不使用DMA模式,采用普通I/O模式 3、忽略这个设备的存在,不对其进行初始化 一个可以寻址32 bit的设备,其初始化的示例代码如下: if (dma_set_mask_and_coherent(dev, DMA_BIT_MASK(32))) { dev_warn(dev, "mydev: No suitable DMA available\n"); ...