Lines Matching +full:dma +full:- +full:safe +full:- +full:map

26 #include <linux/io-mapping.h>
41 #define use_dma(io) ((io) != -1)
45 if (use_dma(r->iobase)) in sgt_pfn()
46 return (r->sgt.dma + r->sgt.curr + r->iobase) >> PAGE_SHIFT; in sgt_pfn()
48 return r->sgt.pfn + (r->sgt.curr >> PAGE_SHIFT); in sgt_pfn()
55 if (GEM_WARN_ON(!r->sgt.sgp)) in remap_sg()
56 return -EINVAL; in remap_sg()
59 set_pte_at(r->mm, addr, pte, in remap_sg()
60 pte_mkspecial(pfn_pte(sgt_pfn(r), r->prot))); in remap_sg()
61 r->pfn++; /* track insertions in case we need to unwind later */ in remap_sg()
63 r->sgt.curr += PAGE_SIZE; in remap_sg()
64 if (r->sgt.curr >= r->sgt.max) in remap_sg()
65 r->sgt = __sgt_iter(__sg_next(r->sgt.sgp), use_dma(r->iobase)); in remap_sg()
78 set_pte_at(r->mm, addr, pte, pte_mkspecial(pfn_pte(r->pfn, r->prot))); in remap_pfn()
79 r->pfn++; in remap_pfn()
85 * remap_io_mapping - remap an IO mapping to userspace
86 * @vma: user vma to map to
89 * @size: size of map area
92 * Note: this is only safe if the mm semaphore is held when called.
101 GEM_BUG_ON((vma->vm_flags & EXPECTED_FLAGS) != EXPECTED_FLAGS); in remap_io_mapping()
103 /* We rely on prevalidation of the io-mapping to skip track_pfn(). */ in remap_io_mapping()
104 r.mm = vma->vm_mm; in remap_io_mapping()
106 r.prot = __pgprot((pgprot_val(iomap->prot) & _PAGE_CACHE_MASK) | in remap_io_mapping()
107 (pgprot_val(vma->vm_page_prot) & ~_PAGE_CACHE_MASK)); in remap_io_mapping()
111 zap_vma_ptes(vma, addr, (r.pfn - pfn) << PAGE_SHIFT); in remap_io_mapping()
120 * remap_io_sg - remap an IO mapping to userspace
121 * @vma: user vma to map to
123 * @size: size of map area
126 * @iobase: Use stored dma address offset by this address or pfn if -1
128 * Note: this is only safe if the mm semaphore is held when called.
136 .mm = vma->vm_mm, in remap_io_sg()
137 .prot = vma->vm_page_prot, in remap_io_sg()
143 /* We rely on prevalidation of the io-mapping to skip track_pfn(). */ in remap_io_sg()
144 GEM_BUG_ON((vma->vm_flags & EXPECTED_FLAGS) != EXPECTED_FLAGS); in remap_io_sg()
147 offset -= r.sgt.max >> PAGE_SHIFT; in remap_io_sg()
150 return -EINVAL; in remap_io_sg()