[media] videobuf2-dma-contig: allow to vmap contiguous dma buffers
authorPhilipp Zabel <p.zabel@pengutronix.de>
Mon, 26 May 2014 14:17:32 +0000 (11:17 -0300)
committerMauro Carvalho Chehab <m.chehab@samsung.com>
Fri, 4 Jul 2014 19:13:21 +0000 (16:13 -0300)
This allows drivers to vmap contiguous dma buffers so they can inspect the
buffer contents with the CPU. This will be needed for the CODA driver's JPEG
handling. On CODA960, the header parsing has to be done on the CPU. The
hardware modules can only process the entropy coded segment after all
registers and tables are set up.

Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
Acked-by: Marek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
drivers/media/v4l2-core/videobuf2-dma-contig.c

index 880be0782dd9d707db81d7f26068cf5700e6cba6..6b254b8e47c4daed6622854b6e00a478a3a72d60 100644 (file)
@@ -98,6 +98,9 @@ static void *vb2_dc_vaddr(void *buf_priv)
 {
        struct vb2_dc_buf *buf = buf_priv;
 
+       if (!buf->vaddr && buf->db_attach)
+               buf->vaddr = dma_buf_vmap(buf->db_attach->dmabuf);
+
        return buf->vaddr;
 }
 
@@ -735,6 +738,7 @@ static int vb2_dc_map_dmabuf(void *mem_priv)
 
        buf->dma_addr = sg_dma_address(sgt->sgl);
        buf->dma_sgt = sgt;
+       buf->vaddr = NULL;
 
        return 0;
 }
@@ -754,6 +758,10 @@ static void vb2_dc_unmap_dmabuf(void *mem_priv)
                return;
        }
 
+       if (buf->vaddr) {
+               dma_buf_vunmap(buf->db_attach->dmabuf, buf->vaddr);
+               buf->vaddr = NULL;
+       }
        dma_buf_unmap_attachment(buf->db_attach, sgt, buf->dma_dir);
 
        buf->dma_addr = 0;