v4l2: add vb2_get_unmapped_area in vb2 core
Subsystems (2)
PATCH 1/1 v4l2: add vb2_get_unmapped_area in vb2 core
no mmu system needs get_unmapped_area file operations to do mmap
Signed-off-by Scott Jiang <[email protected]>
--- drivers/media/video/videobuf2-core.c | 31 +++++++++++++++++++++++++++++++ include/media/videobuf2-core.h | 7 +++++++ 2 files changed, 38 insertions(+), 0 deletions(-)
drivers/media/video/videobuf2-core.c +31 -0
@@ -1344,6 +1344,37 @@ int vb2_mmap(struct vb2_queue *q, struct vm_area_struct *vma) }EXPORT_SYMBOL_GPL (vb2_mmap); +#ifndef CONFIG_MMU +unsigned long vb2_get_unmapped_area (struct vb2_queue *q, +unsigned long addr, +unsigned long len, +unsigned long pgoff, +unsigned long flags) +{ +unsigned long off = pgoff <<PAGE_SHIFT ; +struct vb2_buffer *vb; +unsigned int buffer, plane; +int ret; + +if (q->memory !=V4L2_MEMORY_MMAP ) { +dprintk (1 ,"Queue is not currently set up for mmap\n" ); +return -EINVAL ; + } + +/* +* Find the plane corresponding to the offset passed by userspace. +*/ + ret =__find_plane_by_offset (q, off, &buffer, &plane); +if (ret) +return ret; + + vb = q->bufs[buffer]; + +return (unsigned long )vb2_plane_vaddr (vb, plane); +} +EXPORT_SYMBOL_GPL (vb2_get_unmapped_area); +#endif +static int __vb2_init_fileio (struct vb2_queue *q,int read);static int __vb2_cleanup_fileio (struct vb2_queue *q);
include/media/videobuf2-core.h +7 -0
@@ -302,6 +302,13 @@ int vb2_streamon(struct vb2_queue *q, enum v4l2_buf_type type);int vb2_streamoff (struct vb2_queue *q,enum v4l2_buf_type type);int vb2_mmap (struct vb2_queue *q,struct vm_area_struct *vma); +#ifndef CONFIG_MMU +unsigned long vb2_get_unmapped_area (struct vb2_queue *q, +unsigned long addr, +unsigned long len, +unsigned long pgoff, +unsigned long flags); +#endif unsigned int vb2_poll (struct vb2_queue *q,struct file *file,poll_table *wait);size_t vb2_read (struct vb2_queue *q,char __user *data,size_t count,loff_t *ppos,int nonblock);
Signature · 1 line
1.7.0.4
Marek Szyprowski
maintainerHello,
Quoted 3 lines · Scott Jiang
no mmu system needs
get_unmapped_areafile operations to do mmapSigned-off-by Scott Jiang <[email protected]>
The patch looks fine, I will add it to my videobuf2 fixes branch. Thanks for your contribution!
Quoted 66 lines
--- drivers/media/video/videobuf2-core.c | 31 +++++++++++++++++++++++++++++++ include/media/videobuf2-core.h | 7 +++++++ 2 files changed, 38 insertions(+), 0 deletions(-)drivers/media/video/videobuf2-core.c +31
-0@@ -1344,6 +1344,37 @@ int vb2_mmap(struct vb2_queue *q, struct vm_area_struct *vma) }EXPORT_SYMBOL_GPL (vb2_mmap); +#ifndef CONFIG_MMU +unsigned long vb2_get_unmapped_area (struct vb2_queue *q, +unsigned long addr, +unsigned long len, +unsigned long pgoff, +unsigned long flags) +{ +unsigned long off = pgoff <<PAGE_SHIFT ; +struct vb2_buffer *vb; +unsigned int buffer, plane; +int ret; + +if (q->memory !=V4L2_MEMORY_MMAP ) { +dprintk (1 ,"Queue is not currently set up for mmap\n" ); +return -EINVAL ; + } + +/* +* Find the plane corresponding to the offset passed by userspace. +*/ + ret =__find_plane_by_offset (q, off, &buffer, &plane); +if (ret) +return ret; + + vb = q->bufs[buffer]; + +return (unsigned long )vb2_plane_vaddr (vb, plane); +} +EXPORT_SYMBOL_GPL (vb2_get_unmapped_area); +#endif +static int __vb2_init_fileio (struct vb2_queue *q,int read);static int __vb2_cleanup_fileio (struct vb2_queue *q);include/media/videobuf2-core.h +7
-1@@ -302,6 +302,13 @@ int vb2_streamon(struct vb2_queue *q, enum v4l2_buf_type type);int vb2_streamoff (struct vb2_queue *q,enum v4l2_buf_type type);int vb2_mmap (struct vb2_queue *q,struct vm_area_struct *vma); +#ifndef CONFIG_MMU +unsigned long vb2_get_unmapped_area (struct vb2_queue *q, +unsigned long addr, +unsigned long len, +unsigned long pgoff, +unsigned long flags); +#endif unsigned int vb2_poll (struct vb2_queue *q,struct file *file,poll_table *wait);size_t vb2_read (struct vb2_queue *q,char __user *data,size_t count,loff_t *ppos,int nonblock); --
Quoted 1 line
1.7.0.4
Best regards
Signature · 2 lines
Marek Szyprowski Samsung Poland R&D Center