aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHans Verkuil <hans.verkuil@cisco.com>2014-11-18 07:50:59 -0500
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>2014-11-25 05:51:44 -0500
commitd935c57e8fb6902a9ede603bb55d9e158f75f09a (patch)
treef2640e64127e2a8cc1fedc55830fc37aab3ae540
parentcd474037c4a9a9c15cab46ff26ceeed1bbda6abb (diff)
[media] vb2: add dma_dir to the alloc memop
This is needed for the next patch where the dma-sg alloc memop needs to know the dma_dir. Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Acked-by: Pawel Osciak <pawel@osciak.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
-rw-r--r--drivers/media/v4l2-core/videobuf2-core.c4
-rw-r--r--drivers/media/v4l2-core/videobuf2-dma-contig.c4
-rw-r--r--drivers/media/v4l2-core/videobuf2-dma-sg.c5
-rw-r--r--drivers/media/v4l2-core/videobuf2-vmalloc.c4
-rw-r--r--include/media/videobuf2-core.h4
5 files changed, 15 insertions, 6 deletions
diff --git a/drivers/media/v4l2-core/videobuf2-core.c b/drivers/media/v4l2-core/videobuf2-core.c
index 573f6fb9b40f..7aed8f22e075 100644
--- a/drivers/media/v4l2-core/videobuf2-core.c
+++ b/drivers/media/v4l2-core/videobuf2-core.c
@@ -189,6 +189,8 @@ static void __vb2_queue_cancel(struct vb2_queue *q);
189static int __vb2_buf_mem_alloc(struct vb2_buffer *vb) 189static int __vb2_buf_mem_alloc(struct vb2_buffer *vb)
190{ 190{
191 struct vb2_queue *q = vb->vb2_queue; 191 struct vb2_queue *q = vb->vb2_queue;
192 enum dma_data_direction dma_dir =
193 V4L2_TYPE_IS_OUTPUT(q->type) ? DMA_TO_DEVICE : DMA_FROM_DEVICE;
192 void *mem_priv; 194 void *mem_priv;
193 int plane; 195 int plane;
194 196
@@ -200,7 +202,7 @@ static int __vb2_buf_mem_alloc(struct vb2_buffer *vb)
200 unsigned long size = PAGE_ALIGN(q->plane_sizes[plane]); 202 unsigned long size = PAGE_ALIGN(q->plane_sizes[plane]);
201 203
202 mem_priv = call_ptr_memop(vb, alloc, q->alloc_ctx[plane], 204 mem_priv = call_ptr_memop(vb, alloc, q->alloc_ctx[plane],
203 size, q->gfp_flags); 205 size, dma_dir, q->gfp_flags);
204 if (IS_ERR_OR_NULL(mem_priv)) 206 if (IS_ERR_OR_NULL(mem_priv))
205 goto free; 207 goto free;
206 208
diff --git a/drivers/media/v4l2-core/videobuf2-dma-contig.c b/drivers/media/v4l2-core/videobuf2-dma-contig.c
index 2bdffd383572..c4305bf3dbed 100644
--- a/drivers/media/v4l2-core/videobuf2-dma-contig.c
+++ b/drivers/media/v4l2-core/videobuf2-dma-contig.c
@@ -155,7 +155,8 @@ static void vb2_dc_put(void *buf_priv)
155 kfree(buf); 155 kfree(buf);
156} 156}
157 157
158static void *vb2_dc_alloc(void *alloc_ctx, unsigned long size, gfp_t gfp_flags) 158static void *vb2_dc_alloc(void *alloc_ctx, unsigned long size,
159 enum dma_data_direction dma_dir, gfp_t gfp_flags)
159{ 160{
160 struct vb2_dc_conf *conf = alloc_ctx; 161 struct vb2_dc_conf *conf = alloc_ctx;
161 struct device *dev = conf->dev; 162 struct device *dev = conf->dev;
@@ -176,6 +177,7 @@ static void *vb2_dc_alloc(void *alloc_ctx, unsigned long size, gfp_t gfp_flags)
176 /* Prevent the device from being released while the buffer is used */ 177 /* Prevent the device from being released while the buffer is used */
177 buf->dev = get_device(dev); 178 buf->dev = get_device(dev);
178 buf->size = size; 179 buf->size = size;
180 buf->dma_dir = dma_dir;
179 181
180 buf->handler.refcount = &buf->refcount; 182 buf->handler.refcount = &buf->refcount;
181 buf->handler.put = vb2_dc_put; 183 buf->handler.put = vb2_dc_put;
diff --git a/drivers/media/v4l2-core/videobuf2-dma-sg.c b/drivers/media/v4l2-core/videobuf2-dma-sg.c
index 6b54a14ee827..2529b831725b 100644
--- a/drivers/media/v4l2-core/videobuf2-dma-sg.c
+++ b/drivers/media/v4l2-core/videobuf2-dma-sg.c
@@ -86,7 +86,8 @@ static int vb2_dma_sg_alloc_compacted(struct vb2_dma_sg_buf *buf,
86 return 0; 86 return 0;
87} 87}
88 88
89static void *vb2_dma_sg_alloc(void *alloc_ctx, unsigned long size, gfp_t gfp_flags) 89static void *vb2_dma_sg_alloc(void *alloc_ctx, unsigned long size,
90 enum dma_data_direction dma_dir, gfp_t gfp_flags)
90{ 91{
91 struct vb2_dma_sg_buf *buf; 92 struct vb2_dma_sg_buf *buf;
92 int ret; 93 int ret;
@@ -97,7 +98,7 @@ static void *vb2_dma_sg_alloc(void *alloc_ctx, unsigned long size, gfp_t gfp_fla
97 return NULL; 98 return NULL;
98 99
99 buf->vaddr = NULL; 100 buf->vaddr = NULL;
100 buf->dma_dir = DMA_NONE; 101 buf->dma_dir = dma_dir;
101 buf->offset = 0; 102 buf->offset = 0;
102 buf->size = size; 103 buf->size = size;
103 /* size is already page aligned */ 104 /* size is already page aligned */
diff --git a/drivers/media/v4l2-core/videobuf2-vmalloc.c b/drivers/media/v4l2-core/videobuf2-vmalloc.c
index fc1eb45a6143..bba2460961df 100644
--- a/drivers/media/v4l2-core/videobuf2-vmalloc.c
+++ b/drivers/media/v4l2-core/videobuf2-vmalloc.c
@@ -35,7 +35,8 @@ struct vb2_vmalloc_buf {
35 35
36static void vb2_vmalloc_put(void *buf_priv); 36static void vb2_vmalloc_put(void *buf_priv);
37 37
38static void *vb2_vmalloc_alloc(void *alloc_ctx, unsigned long size, gfp_t gfp_flags) 38static void *vb2_vmalloc_alloc(void *alloc_ctx, unsigned long size,
39 enum dma_data_direction dma_dir, gfp_t gfp_flags)
39{ 40{
40 struct vb2_vmalloc_buf *buf; 41 struct vb2_vmalloc_buf *buf;
41 42
@@ -45,6 +46,7 @@ static void *vb2_vmalloc_alloc(void *alloc_ctx, unsigned long size, gfp_t gfp_fl
45 46
46 buf->size = size; 47 buf->size = size;
47 buf->vaddr = vmalloc_user(buf->size); 48 buf->vaddr = vmalloc_user(buf->size);
49 buf->dma_dir = dma_dir;
48 buf->handler.refcount = &buf->refcount; 50 buf->handler.refcount = &buf->refcount;
49 buf->handler.put = vb2_vmalloc_put; 51 buf->handler.put = vb2_vmalloc_put;
50 buf->handler.arg = buf; 52 buf->handler.arg = buf;
diff --git a/include/media/videobuf2-core.h b/include/media/videobuf2-core.h
index d607871749c7..bd2cec2d6c3d 100644
--- a/include/media/videobuf2-core.h
+++ b/include/media/videobuf2-core.h
@@ -82,7 +82,9 @@ struct vb2_threadio_data;
82 * unmap_dmabuf. 82 * unmap_dmabuf.
83 */ 83 */
84struct vb2_mem_ops { 84struct vb2_mem_ops {
85 void *(*alloc)(void *alloc_ctx, unsigned long size, gfp_t gfp_flags); 85 void *(*alloc)(void *alloc_ctx, unsigned long size,
86 enum dma_data_direction dma_dir,
87 gfp_t gfp_flags);
86 void (*put)(void *buf_priv); 88 void (*put)(void *buf_priv);
87 struct dma_buf *(*get_dmabuf)(void *buf_priv, unsigned long flags); 89 struct dma_buf *(*get_dmabuf)(void *buf_priv, unsigned long flags);
88 90