diff options
author | Hans Verkuil <hans.verkuil@cisco.com> | 2014-11-18 07:50:59 -0500 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@osg.samsung.com> | 2014-11-25 05:51:44 -0500 |
commit | d935c57e8fb6902a9ede603bb55d9e158f75f09a (patch) | |
tree | f2640e64127e2a8cc1fedc55830fc37aab3ae540 | |
parent | cd474037c4a9a9c15cab46ff26ceeed1bbda6abb (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.c | 4 | ||||
-rw-r--r-- | drivers/media/v4l2-core/videobuf2-dma-contig.c | 4 | ||||
-rw-r--r-- | drivers/media/v4l2-core/videobuf2-dma-sg.c | 5 | ||||
-rw-r--r-- | drivers/media/v4l2-core/videobuf2-vmalloc.c | 4 | ||||
-rw-r--r-- | include/media/videobuf2-core.h | 4 |
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); | |||
189 | static int __vb2_buf_mem_alloc(struct vb2_buffer *vb) | 189 | static 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 | ||
158 | static void *vb2_dc_alloc(void *alloc_ctx, unsigned long size, gfp_t gfp_flags) | 158 | static 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 | ||
89 | static void *vb2_dma_sg_alloc(void *alloc_ctx, unsigned long size, gfp_t gfp_flags) | 89 | static 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 | ||
36 | static void vb2_vmalloc_put(void *buf_priv); | 36 | static void vb2_vmalloc_put(void *buf_priv); |
37 | 37 | ||
38 | static void *vb2_vmalloc_alloc(void *alloc_ctx, unsigned long size, gfp_t gfp_flags) | 38 | static 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 | */ |
84 | struct vb2_mem_ops { | 84 | struct 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 | ||