26 #include <linux/slab.h>
29 #include <linux/export.h>
31 static inline int is_dma_buf_file(
struct file *);
37 if (!is_dma_buf_file(file))
42 dmabuf->
ops->release(dmabuf);
47 static int dma_buf_mmap_internal(
struct file *file,
struct vm_area_struct *vma)
51 if (!is_dma_buf_file(file))
61 return dmabuf->
ops->mmap(dmabuf, vma);
65 .release = dma_buf_release,
66 .mmap = dma_buf_mmap_internal,
72 static inline int is_dma_buf_file(
struct file *file)
74 return file->
f_op == &dma_buf_fops;
139 if (!dmabuf || !dmabuf->
file)
168 return ERR_PTR(-
EBADF);
170 if (!is_dma_buf_file(file)) {
222 if (dmabuf->
ops->attach) {
223 ret = dmabuf->
ops->attach(dmabuf, dev, attach);
248 if (
WARN_ON(!dmabuf || !attach))
253 if (dmabuf->
ops->detach)
254 dmabuf->
ops->detach(dmabuf, attach);
282 sg_table = attach->
dmabuf->ops->map_dma_buf(attach, direction);
304 attach->
dmabuf->ops->unmap_dma_buf(attach, sg_table,
330 if (dmabuf->
ops->begin_cpu_access)
331 ret = dmabuf->
ops->begin_cpu_access(dmabuf, start, len, direction);
354 if (dmabuf->
ops->end_cpu_access)
355 dmabuf->
ops->end_cpu_access(dmabuf, start, len, direction);
372 return dmabuf->
ops->kmap_atomic(dmabuf, page_num);
389 if (dmabuf->
ops->kunmap_atomic)
390 dmabuf->
ops->kunmap_atomic(dmabuf, page_num, vaddr);
407 return dmabuf->
ops->kmap(dmabuf, page_num);
424 if (dmabuf->
ops->kunmap)
425 dmabuf->
ops->kunmap(dmabuf, page_num, vaddr);
467 return dmabuf->
ops->mmap(dmabuf, vma);
486 if (dmabuf->
ops->vmap)
487 return dmabuf->
ops->vmap(dmabuf);
502 if (dmabuf->
ops->vunmap)
503 dmabuf->
ops->vunmap(dmabuf, vaddr);