Lines Matching refs:buf

13 #include <linux/dma-buf.h>
71 struct vb2_dc_buf *buf = buf_priv;
73 return &buf->dma_addr;
78 struct vb2_dc_buf *buf = buf_priv;
80 if (!buf->vaddr && buf->db_attach)
81 buf->vaddr = dma_buf_vmap(buf->db_attach->dmabuf);
83 return buf->vaddr;
88 struct vb2_dc_buf *buf = buf_priv;
90 return refcount_read(&buf->refcount);
95 struct vb2_dc_buf *buf = buf_priv;
96 struct sg_table *sgt = buf->dma_sgt;
101 dma_sync_sgtable_for_device(buf->dev, sgt, buf->dma_dir);
106 struct vb2_dc_buf *buf = buf_priv;
107 struct sg_table *sgt = buf->dma_sgt;
112 dma_sync_sgtable_for_cpu(buf->dev, sgt, buf->dma_dir);
121 struct vb2_dc_buf *buf = buf_priv;
123 if (!refcount_dec_and_test(&buf->refcount))
126 if (buf->sgt_base) {
127 sg_free_table(buf->sgt_base);
128 kfree(buf->sgt_base);
130 dma_free_attrs(buf->dev, buf->size, buf->cookie, buf->dma_addr,
131 buf->attrs);
132 put_device(buf->dev);
133 kfree(buf);
140 struct vb2_dc_buf *buf;
145 buf = kzalloc(sizeof *buf, GFP_KERNEL);
146 if (!buf)
149 buf->attrs = attrs;
150 buf->cookie = dma_alloc_attrs(dev, size, &buf->dma_addr,
151 GFP_KERNEL | gfp_flags, buf->attrs);
152 if (!buf->cookie) {
154 kfree(buf);
158 if ((buf->attrs & DMA_ATTR_NO_KERNEL_MAPPING) == 0)
159 buf->vaddr = buf->cookie;
162 buf->dev = get_device(dev);
163 buf->size = size;
164 buf->dma_dir = dma_dir;
166 buf->handler.refcount = &buf->refcount;
167 buf->handler.put = vb2_dc_put;
168 buf->handler.arg = buf;
170 refcount_set(&buf->refcount, 1);
172 return buf;
177 struct vb2_dc_buf *buf = buf_priv;
180 if (!buf) {
185 ret = dma_mmap_attrs(buf->dev, vma, buf->cookie,
186 buf->dma_addr, buf->size, buf->attrs);
194 vma->vm_private_data = &buf->handler;
200 __func__, (unsigned long)buf->dma_addr, vma->vm_start,
201 buf->size);
222 struct vb2_dc_buf *buf = dbuf->priv;
230 /* Copy the buf->base_sgt scatter list to the attachment, as we can't
233 ret = sg_alloc_table(sgt, buf->sgt_base->orig_nents, GFP_KERNEL);
239 rd = buf->sgt_base->sgl;
349 struct vb2_dc_buf *buf = dbuf->priv;
351 return buf->vaddr;
372 static struct sg_table *vb2_dc_get_base_sgt(struct vb2_dc_buf *buf)
379 dev_err(buf->dev, "failed to alloc sg table\n");
383 ret = dma_get_sgtable_attrs(buf->dev, sgt, buf->cookie, buf->dma_addr,
384 buf->size, buf->attrs);
386 dev_err(buf->dev, "failed to get scatterlist from DMA API\n");
396 struct vb2_dc_buf *buf = buf_priv;
401 exp_info.size = buf->size;
403 exp_info.priv = buf;
405 if (!buf->sgt_base)
406 buf->sgt_base = vb2_dc_get_base_sgt(buf);
408 if (WARN_ON(!buf->sgt_base))
416 refcount_inc(&buf->refcount);
427 struct vb2_dc_buf *buf = buf_priv;
428 struct sg_table *sgt = buf->dma_sgt;
437 dma_unmap_sgtable(buf->dev, sgt, buf->dma_dir,
439 pages = frame_vector_pages(buf->vec);
442 if (buf->dma_dir == DMA_FROM_DEVICE ||
443 buf->dma_dir == DMA_BIDIRECTIONAL)
444 for (i = 0; i < frame_vector_count(buf->vec); i++)
449 dma_unmap_resource(buf->dev, buf->dma_addr, buf->size,
450 buf->dma_dir, 0);
452 vb2_destroy_framevec(buf->vec);
453 kfree(buf);
459 struct vb2_dc_buf *buf;
482 buf = kzalloc(sizeof *buf, GFP_KERNEL);
483 if (!buf)
486 buf->dev = dev;
487 buf->dma_dir = dma_dir;
495 buf->vec = vec;
508 buf->dma_addr = dma_map_resource(buf->dev,
509 __pfn_to_phys(nums[0]), size, buf->dma_dir, 0);
510 if (dma_mapping_error(buf->dev, buf->dma_addr)) {
535 if (dma_map_sgtable(buf->dev, sgt, buf->dma_dir,
550 buf->dma_addr = sg_dma_address(sgt->sgl);
551 buf->dma_sgt = sgt;
553 buf->size = size;
555 return buf;
558 dma_unmap_sgtable(buf->dev, sgt, buf->dma_dir, DMA_ATTR_SKIP_CPU_SYNC);
570 kfree(buf);
581 struct vb2_dc_buf *buf = mem_priv;
585 if (WARN_ON(!buf->db_attach)) {
590 if (WARN_ON(buf->dma_sgt)) {
596 sgt = dma_buf_map_attachment(buf->db_attach, buf->dma_dir);
604 if (contig_size < buf->size) {
606 contig_size, buf->size);
607 dma_buf_unmap_attachment(buf->db_attach, sgt, buf->dma_dir);
611 buf->dma_addr = sg_dma_address(sgt->sgl);
612 buf->dma_sgt = sgt;
613 buf->vaddr = NULL;
620 struct vb2_dc_buf *buf = mem_priv;
621 struct sg_table *sgt = buf->dma_sgt;
623 if (WARN_ON(!buf->db_attach)) {
633 if (buf->vaddr) {
634 dma_buf_vunmap(buf->db_attach->dmabuf, buf->vaddr);
635 buf->vaddr = NULL;
637 dma_buf_unmap_attachment(buf->db_attach, sgt, buf->dma_dir);
639 buf->dma_addr = 0;
640 buf->dma_sgt = NULL;
645 struct vb2_dc_buf *buf = mem_priv;
648 if (WARN_ON(buf->dma_addr))
649 vb2_dc_unmap_dmabuf(buf);
652 dma_buf_detach(buf->db_attach->dmabuf, buf->db_attach);
653 kfree(buf);
659 struct vb2_dc_buf *buf;
668 buf = kzalloc(sizeof(*buf), GFP_KERNEL);
669 if (!buf)
672 buf->dev = dev;
674 dba = dma_buf_attach(dbuf, buf->dev);
677 kfree(buf);
681 buf->dma_dir = dma_dir;
682 buf->size = size;
683 buf->db_attach = dba;
685 return buf;