*参照元 [#y2043c1b]
#backlinks

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

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


**引数 [#n79ae54f]
-struct device *dev
--
--[[linux-4.4.1/device]]
-struct vm_area_struct *vma
--
--[[linux-4.4.1/vm_area_struct]]
-void *vaddr
--
-size_t size
--
-int *ret
--


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


**参考 [#l9badc66]


*実装 [#l1a72a51]
 /**
  * dma_mmap_from_coherent() - try to mmap the memory allocated from
  * per-device coherent memory pool to userspace
  * @dev:        device from which the memory was allocated
  * @vma:        vm_area for the userspace memory
  * @vaddr:      cpu address returned by dma_alloc_from_coherent
  * @size:       size of the memory buffer allocated by dma_alloc_from_coherent
  * @ret:        result from remap_pfn_range()
  *
  * This checks whether the memory was allocated from the per-device
  * coherent memory pool and if so, maps that memory to the provided vma.
  *
  * Returns 1 if we correctly mapped the memory, or 0 if the caller should
  * proceed with mapping memory from generic pools.
  */
 int dma_mmap_from_coherent(struct device *dev, struct vm_area_struct *vma,
                            void *vaddr, size_t size, int *ret)
 {
         struct dma_coherent_mem *mem = dev ? dev->dma_mem : NULL;
 
-
--[[linux-4.4.1/dma_coherent_mem]]

         if (mem && vaddr >= mem->virt_base && vaddr + size <=
                    (mem->virt_base + (mem->size << PAGE_SHIFT))) {
                 unsigned long off = vma->vm_pgoff;
                 int start = (vaddr - mem->virt_base) >> PAGE_SHIFT;
                 int user_count = (vma->vm_end - vma->vm_start) >> PAGE_SHIFT;
                 int count = size >> PAGE_SHIFT;
 
                 *ret = -ENXIO;
                 if (off < count && user_count <= count - off) {
                         unsigned long pfn = mem->pfn_base + start + off;
                         *ret = remap_pfn_range(vma, vma->vm_start, pfn,
                                                user_count << PAGE_SHIFT,
                                                vma->vm_page_prot);
-
--[[linux-4.4.1/remap_pfn_range()]]

                 }
                 return 1;
         }
         return 0;
 }
 EXPORT_SYMBOL(dma_mmap_from_coherent);
-
--[[linux-4.4.1/EXPORT_SYMBOL()]]


*コメント [#w235093e]


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