*参照元 [#j0e2c692]
#backlinks

*説明 [#oa955ac5]
-パス: [[linux-4.4.1/arch/arm/mm/dma-mapping.c]]

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


**引数 [#vc775079]
-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
--
-struct dma_attrs *attrs
--
--[[linux-4.4.1/dma_attrs]]


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


**参考 [#t3640eb0]


*実装 [#g05af261]
 static int __arm_dma_mmap(struct device *dev, struct vm_area_struct *vma,
                  void *cpu_addr, dma_addr_t dma_addr, size_t size,
                  struct dma_attrs *attrs)
 {
         int ret = -ENXIO;
 #ifdef CONFIG_MMU
-
--[[linux-4.4.1/CONFIG_MMU]]

         unsigned long nr_vma_pages = (vma->vm_end - vma->vm_start) >> PAGE_SHIFT;
         unsigned long nr_pages = PAGE_ALIGN(size) >> PAGE_SHIFT;
         unsigned long pfn = dma_to_pfn(dev, dma_addr);
         unsigned long off = vma->vm_pgoff;
 
-
--[[linux-4.4.1/PAGE_ALIGN()]]
--[[linux-4.4.1/PAGE_SHIFT]]
--[[linux-4.4.1/dma_to_pfn()]]

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

         if (off < nr_pages && nr_vma_pages <= (nr_pages - off)) {
                 ret = remap_pfn_range(vma, vma->vm_start,
                                       pfn + off,
                                       vma->vm_end - vma->vm_start,
                                       vma->vm_page_prot);
-
--[[linux-4.4.1/remap_pfn_range()]]

         }
 #endif  /* CONFIG_MMU */
 
         return ret;
 }


*コメント [#vf05078d]


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