*参照元 [#adbf5100]
#backlinks

*説明 [#yc141f7a]
-パス: [[linux-4.4.1/drivers/base/dma-mapping.c]]

-FIXME: これは何?
--説明


**引数 [#h734cdc0]
-struct device *dev
--
--[[linux-4.4.1/device]]
-struct vm_area_struct *vma
--
--[[linux-4.4.1/vm_area_struct]]
-void *cpu_addr
--
-dma_addr_t dma_addr
--
--[[linux-4.4.1/dma_addr_t]]
-size_t size
--


**返り値 [#q272019c]
-int
--


**参考 [#oa4ba104]


*実装 [#k2e3a08f]
 /*
  * Create userspace mapping for the DMA-coherent memory.
  */
 int dma_common_mmap(struct device *dev, struct vm_area_struct *vma,
                     void *cpu_addr, dma_addr_t dma_addr, size_t size)
 {
         int ret = -ENXIO;
 #ifdef CONFIG_MMU
-
--[[linux-4.4.1/CONFIG_MMU]]

         unsigned long user_count = (vma->vm_end - vma->vm_start) >> PAGE_SHIFT;
         unsigned long count = PAGE_ALIGN(size) >> PAGE_SHIFT;
         unsigned long pfn = page_to_pfn(virt_to_page(cpu_addr));
         unsigned long off = vma->vm_pgoff;
 
-
--[[linux-4.4.1/PAGE_ALIGN()]]
--[[linux-4.4.1/page_to_pfn()]]
--[[linux-4.4.1/virt_to_page()]]

         vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
 
-
--[[linux-4.4.1/pgprot_noncached()]]

         if (dma_mmap_from_coherent(dev, vma, cpu_addr, size, &ret))
                 return ret;
 
-
--[[linux-4.4.1/dma_mmap_from_coherent()]]

         if (off < count && user_count <= (count - off)) {
                 ret = remap_pfn_range(vma, vma->vm_start,
                                       pfn + off,
                                       user_count << PAGE_SHIFT,
                                       vma->vm_page_prot);
         }
-
--[[linux-4.4.1/remap_pfn_range()]]

 #endif  /* CONFIG_MMU */
 
         return ret;
 }
 EXPORT_SYMBOL(dma_common_mmap);
-
--[[linux-4.4.1/EXPORT_SYMBOL()]]


*コメント [#p563c9e7]


トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS