• Home
  • Raw
  • Download

Lines Matching refs:buf

73 	struct vb2_dc_buf *buf = buf_priv;  in vb2_dc_cookie()  local
75 return &buf->dma_addr; in vb2_dc_cookie()
80 struct vb2_dc_buf *buf = buf_priv; in vb2_dc_vaddr() local
84 if (!buf->vaddr && buf->db_attach) { in vb2_dc_vaddr()
85 ret = dma_buf_vmap(buf->db_attach->dmabuf, &map); in vb2_dc_vaddr()
86 buf->vaddr = ret ? NULL : map.vaddr; in vb2_dc_vaddr()
89 return buf->vaddr; in vb2_dc_vaddr()
94 struct vb2_dc_buf *buf = buf_priv; in vb2_dc_num_users() local
96 return refcount_read(&buf->refcount); in vb2_dc_num_users()
101 struct vb2_dc_buf *buf = buf_priv; in vb2_dc_prepare() local
102 struct sg_table *sgt = buf->dma_sgt; in vb2_dc_prepare()
107 dma_sync_sgtable_for_device(buf->dev, sgt, buf->dma_dir); in vb2_dc_prepare()
112 struct vb2_dc_buf *buf = buf_priv; in vb2_dc_finish() local
113 struct sg_table *sgt = buf->dma_sgt; in vb2_dc_finish()
118 dma_sync_sgtable_for_cpu(buf->dev, sgt, buf->dma_dir); in vb2_dc_finish()
127 struct vb2_dc_buf *buf = buf_priv; in vb2_dc_put() local
129 if (!refcount_dec_and_test(&buf->refcount)) in vb2_dc_put()
132 if (buf->sgt_base) { in vb2_dc_put()
133 sg_free_table(buf->sgt_base); in vb2_dc_put()
134 kfree(buf->sgt_base); in vb2_dc_put()
136 dma_free_attrs(buf->dev, buf->size, buf->cookie, buf->dma_addr, in vb2_dc_put()
137 buf->attrs); in vb2_dc_put()
138 put_device(buf->dev); in vb2_dc_put()
139 kfree(buf); in vb2_dc_put()
146 struct vb2_dc_buf *buf; in vb2_dc_alloc() local
151 buf = kzalloc(sizeof *buf, GFP_KERNEL); in vb2_dc_alloc()
152 if (!buf) in vb2_dc_alloc()
155 buf->attrs = vb->vb2_queue->dma_attrs; in vb2_dc_alloc()
156 buf->cookie = dma_alloc_attrs(dev, size, &buf->dma_addr, in vb2_dc_alloc()
158 buf->attrs); in vb2_dc_alloc()
159 if (!buf->cookie) { in vb2_dc_alloc()
161 kfree(buf); in vb2_dc_alloc()
165 if ((buf->attrs & DMA_ATTR_NO_KERNEL_MAPPING) == 0) in vb2_dc_alloc()
166 buf->vaddr = buf->cookie; in vb2_dc_alloc()
169 buf->dev = get_device(dev); in vb2_dc_alloc()
170 buf->size = size; in vb2_dc_alloc()
171 buf->dma_dir = vb->vb2_queue->dma_dir; in vb2_dc_alloc()
173 buf->handler.refcount = &buf->refcount; in vb2_dc_alloc()
174 buf->handler.put = vb2_dc_put; in vb2_dc_alloc()
175 buf->handler.arg = buf; in vb2_dc_alloc()
176 buf->vb = vb; in vb2_dc_alloc()
178 refcount_set(&buf->refcount, 1); in vb2_dc_alloc()
180 return buf; in vb2_dc_alloc()
185 struct vb2_dc_buf *buf = buf_priv; in vb2_dc_mmap() local
188 if (!buf) { in vb2_dc_mmap()
193 ret = dma_mmap_attrs(buf->dev, vma, buf->cookie, in vb2_dc_mmap()
194 buf->dma_addr, buf->size, buf->attrs); in vb2_dc_mmap()
202 vma->vm_private_data = &buf->handler; in vb2_dc_mmap()
208 __func__, (unsigned long)buf->dma_addr, vma->vm_start, in vb2_dc_mmap()
209 buf->size); in vb2_dc_mmap()
230 struct vb2_dc_buf *buf = dbuf->priv; in vb2_dc_dmabuf_ops_attach() local
241 ret = sg_alloc_table(sgt, buf->sgt_base->orig_nents, GFP_KERNEL); in vb2_dc_dmabuf_ops_attach()
247 rd = buf->sgt_base->sgl; in vb2_dc_dmabuf_ops_attach()
357 struct vb2_dc_buf *buf = dbuf->priv; in vb2_dc_dmabuf_ops_vmap() local
359 dma_buf_map_set_vaddr(map, buf->vaddr); in vb2_dc_dmabuf_ops_vmap()
382 static struct sg_table *vb2_dc_get_base_sgt(struct vb2_dc_buf *buf) in vb2_dc_get_base_sgt() argument
389 dev_err(buf->dev, "failed to alloc sg table\n"); in vb2_dc_get_base_sgt()
393 ret = dma_get_sgtable_attrs(buf->dev, sgt, buf->cookie, buf->dma_addr, in vb2_dc_get_base_sgt()
394 buf->size, buf->attrs); in vb2_dc_get_base_sgt()
396 dev_err(buf->dev, "failed to get scatterlist from DMA API\n"); in vb2_dc_get_base_sgt()
408 struct vb2_dc_buf *buf = buf_priv; in vb2_dc_get_dmabuf() local
413 exp_info.size = buf->size; in vb2_dc_get_dmabuf()
415 exp_info.priv = buf; in vb2_dc_get_dmabuf()
417 if (!buf->sgt_base) in vb2_dc_get_dmabuf()
418 buf->sgt_base = vb2_dc_get_base_sgt(buf); in vb2_dc_get_dmabuf()
420 if (WARN_ON(!buf->sgt_base)) in vb2_dc_get_dmabuf()
428 refcount_inc(&buf->refcount); in vb2_dc_get_dmabuf()
439 struct vb2_dc_buf *buf = buf_priv; in vb2_dc_put_userptr() local
440 struct sg_table *sgt = buf->dma_sgt; in vb2_dc_put_userptr()
449 dma_unmap_sgtable(buf->dev, sgt, buf->dma_dir, in vb2_dc_put_userptr()
451 pages = frame_vector_pages(buf->vec); in vb2_dc_put_userptr()
454 if (buf->dma_dir == DMA_FROM_DEVICE || in vb2_dc_put_userptr()
455 buf->dma_dir == DMA_BIDIRECTIONAL) in vb2_dc_put_userptr()
456 for (i = 0; i < frame_vector_count(buf->vec); i++) in vb2_dc_put_userptr()
461 dma_unmap_resource(buf->dev, buf->dma_addr, buf->size, in vb2_dc_put_userptr()
462 buf->dma_dir, 0); in vb2_dc_put_userptr()
464 vb2_destroy_framevec(buf->vec); in vb2_dc_put_userptr()
465 kfree(buf); in vb2_dc_put_userptr()
471 struct vb2_dc_buf *buf; in vb2_dc_get_userptr() local
494 buf = kzalloc(sizeof *buf, GFP_KERNEL); in vb2_dc_get_userptr()
495 if (!buf) in vb2_dc_get_userptr()
498 buf->dev = dev; in vb2_dc_get_userptr()
499 buf->dma_dir = vb->vb2_queue->dma_dir; in vb2_dc_get_userptr()
500 buf->vb = vb; in vb2_dc_get_userptr()
508 buf->vec = vec; in vb2_dc_get_userptr()
521 buf->dma_addr = dma_map_resource(buf->dev, in vb2_dc_get_userptr()
522 __pfn_to_phys(nums[0]), size, buf->dma_dir, 0); in vb2_dc_get_userptr()
523 if (dma_mapping_error(buf->dev, buf->dma_addr)) { in vb2_dc_get_userptr()
548 if (dma_map_sgtable(buf->dev, sgt, buf->dma_dir, in vb2_dc_get_userptr()
563 buf->dma_addr = sg_dma_address(sgt->sgl); in vb2_dc_get_userptr()
564 buf->dma_sgt = sgt; in vb2_dc_get_userptr()
566 buf->size = size; in vb2_dc_get_userptr()
568 return buf; in vb2_dc_get_userptr()
571 dma_unmap_sgtable(buf->dev, sgt, buf->dma_dir, DMA_ATTR_SKIP_CPU_SYNC); in vb2_dc_get_userptr()
583 kfree(buf); in vb2_dc_get_userptr()
594 struct vb2_dc_buf *buf = mem_priv; in vb2_dc_map_dmabuf() local
598 if (WARN_ON(!buf->db_attach)) { in vb2_dc_map_dmabuf()
603 if (WARN_ON(buf->dma_sgt)) { in vb2_dc_map_dmabuf()
609 sgt = dma_buf_map_attachment(buf->db_attach, buf->dma_dir); in vb2_dc_map_dmabuf()
617 if (contig_size < buf->size) { in vb2_dc_map_dmabuf()
619 contig_size, buf->size); in vb2_dc_map_dmabuf()
620 dma_buf_unmap_attachment(buf->db_attach, sgt, buf->dma_dir); in vb2_dc_map_dmabuf()
624 buf->dma_addr = sg_dma_address(sgt->sgl); in vb2_dc_map_dmabuf()
625 buf->dma_sgt = sgt; in vb2_dc_map_dmabuf()
626 buf->vaddr = NULL; in vb2_dc_map_dmabuf()
633 struct vb2_dc_buf *buf = mem_priv; in vb2_dc_unmap_dmabuf() local
634 struct sg_table *sgt = buf->dma_sgt; in vb2_dc_unmap_dmabuf()
635 struct dma_buf_map map = DMA_BUF_MAP_INIT_VADDR(buf->vaddr); in vb2_dc_unmap_dmabuf()
637 if (WARN_ON(!buf->db_attach)) { in vb2_dc_unmap_dmabuf()
647 if (buf->vaddr) { in vb2_dc_unmap_dmabuf()
648 dma_buf_vunmap(buf->db_attach->dmabuf, &map); in vb2_dc_unmap_dmabuf()
649 buf->vaddr = NULL; in vb2_dc_unmap_dmabuf()
651 dma_buf_unmap_attachment(buf->db_attach, sgt, buf->dma_dir); in vb2_dc_unmap_dmabuf()
653 buf->dma_addr = 0; in vb2_dc_unmap_dmabuf()
654 buf->dma_sgt = NULL; in vb2_dc_unmap_dmabuf()
659 struct vb2_dc_buf *buf = mem_priv; in vb2_dc_detach_dmabuf() local
662 if (WARN_ON(buf->dma_addr)) in vb2_dc_detach_dmabuf()
663 vb2_dc_unmap_dmabuf(buf); in vb2_dc_detach_dmabuf()
666 dma_buf_detach(buf->db_attach->dmabuf, buf->db_attach); in vb2_dc_detach_dmabuf()
667 kfree(buf); in vb2_dc_detach_dmabuf()
673 struct vb2_dc_buf *buf; in vb2_dc_attach_dmabuf() local
682 buf = kzalloc(sizeof(*buf), GFP_KERNEL); in vb2_dc_attach_dmabuf()
683 if (!buf) in vb2_dc_attach_dmabuf()
686 buf->dev = dev; in vb2_dc_attach_dmabuf()
687 buf->vb = vb; in vb2_dc_attach_dmabuf()
690 dba = dma_buf_attach(dbuf, buf->dev); in vb2_dc_attach_dmabuf()
693 kfree(buf); in vb2_dc_attach_dmabuf()
697 buf->dma_dir = vb->vb2_queue->dma_dir; in vb2_dc_attach_dmabuf()
698 buf->size = size; in vb2_dc_attach_dmabuf()
699 buf->db_attach = dba; in vb2_dc_attach_dmabuf()
701 return buf; in vb2_dc_attach_dmabuf()