Lines Matching +full:page +full:- +full:size

1 // SPDX-License-Identifier: GPL-2.0
6 #include <linux/dma-map-ops.h>
9 * Create scatter-list for the already allocated DMA buffer.
12 void *cpu_addr, dma_addr_t dma_addr, size_t size, in dma_common_get_sgtable() argument
15 struct page *page = virt_to_page(cpu_addr); in dma_common_get_sgtable() local
20 sg_set_page(sgt->sgl, page, PAGE_ALIGN(size), 0); in dma_common_get_sgtable()
25 * Create userspace mapping for the DMA-coherent memory.
28 void *cpu_addr, dma_addr_t dma_addr, size_t size, in dma_common_mmap() argument
33 unsigned long count = PAGE_ALIGN(size) >> PAGE_SHIFT; in dma_common_mmap()
34 unsigned long off = vma->vm_pgoff; in dma_common_mmap()
35 int ret = -ENXIO; in dma_common_mmap()
37 vma->vm_page_prot = dma_pgprot(dev, vma->vm_page_prot, attrs); in dma_common_mmap()
39 if (dma_mmap_from_dev_coherent(dev, vma, cpu_addr, size, &ret)) in dma_common_mmap()
42 if (off >= count || user_count > count - off) in dma_common_mmap()
43 return -ENXIO; in dma_common_mmap()
45 return remap_pfn_range(vma, vma->vm_start, in dma_common_mmap()
46 page_to_pfn(virt_to_page(cpu_addr)) + vma->vm_pgoff, in dma_common_mmap()
47 user_count << PAGE_SHIFT, vma->vm_page_prot); in dma_common_mmap()
49 return -ENXIO; in dma_common_mmap()
53 struct page *dma_common_alloc_pages(struct device *dev, size_t size, in dma_common_alloc_pages() argument
57 struct page *page; in dma_common_alloc_pages() local
59 page = dma_alloc_contiguous(dev, size, gfp); in dma_common_alloc_pages()
60 if (!page) in dma_common_alloc_pages()
61 page = alloc_pages_node(dev_to_node(dev), gfp, get_order(size)); in dma_common_alloc_pages()
62 if (!page) in dma_common_alloc_pages()
65 *dma_handle = ops->map_page(dev, page, 0, size, dir, in dma_common_alloc_pages()
68 dma_free_contiguous(dev, page, size); in dma_common_alloc_pages()
72 memset(page_address(page), 0, size); in dma_common_alloc_pages()
73 return page; in dma_common_alloc_pages()
76 void dma_common_free_pages(struct device *dev, size_t size, struct page *page, in dma_common_free_pages() argument
81 if (ops->unmap_page) in dma_common_free_pages()
82 ops->unmap_page(dev, dma_handle, size, dir, in dma_common_free_pages()
84 dma_free_contiguous(dev, page, size); in dma_common_free_pages()