[media] vb2: add a dev field to use for the default allocation context
The allocation context is nothing more than a per-plane device pointer to use when allocating buffers. So just provide a dev pointer in vb2_queue for that purpose and drivers can skip allocating/releasing/filling in the allocation context unless they require different per-plane device pointers as used by some Samsung SoCs. Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Cc: Sakari Ailus <sakari.ailus@iki.fi> Cc: Florian Echtler <floe@butterbrot.org> Cc: Federico Vaga <federico.vaga@gmail.com> Cc: "Lad, Prabhakar" <prabhakar.csengg@gmail.com> Cc: Scott Jiang <scott.jiang.linux@gmail.com> Acked-by: Philipp Zabel <p.zabel@pengutronix.de> Cc: Fabien Dessenne <fabien.dessenne@st.com> Acked-by: Benoit Parrot <bparrot@ti.com> Cc: Mikhail Ulyanov <mikhail.ulyanov@cogentembedded.com> Cc: Guennadi Liakhovetski <g.liakhovetski@gmx.de> Cc: Jonathan Corbet <corbet@lwn.net> Cc: Ludovic Desroches <ludovic.desroches@atmel.com> Cc: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> Cc: Kyungmin Park <kyungmin.park@samsung.com> Cc: Sylwester Nawrocki <s.nawrocki@samsung.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
This commit is contained in:
parent
d16e832da2
commit
20be7ab8db
|
@ -206,7 +206,8 @@ static int __vb2_buf_mem_alloc(struct vb2_buffer *vb)
|
||||||
for (plane = 0; plane < vb->num_planes; ++plane) {
|
for (plane = 0; plane < vb->num_planes; ++plane) {
|
||||||
unsigned long size = PAGE_ALIGN(vb->planes[plane].length);
|
unsigned long size = PAGE_ALIGN(vb->planes[plane].length);
|
||||||
|
|
||||||
mem_priv = call_ptr_memop(vb, alloc, q->alloc_ctx[plane],
|
mem_priv = call_ptr_memop(vb, alloc,
|
||||||
|
q->alloc_ctx[plane] ? : &q->dev,
|
||||||
q->dma_attrs, size, dma_dir, q->gfp_flags);
|
q->dma_attrs, size, dma_dir, q->gfp_flags);
|
||||||
if (IS_ERR_OR_NULL(mem_priv))
|
if (IS_ERR_OR_NULL(mem_priv))
|
||||||
goto free;
|
goto free;
|
||||||
|
@ -1131,9 +1132,10 @@ static int __qbuf_userptr(struct vb2_buffer *vb, const void *pb)
|
||||||
vb->planes[plane].data_offset = 0;
|
vb->planes[plane].data_offset = 0;
|
||||||
|
|
||||||
/* Acquire each plane's memory */
|
/* Acquire each plane's memory */
|
||||||
mem_priv = call_ptr_memop(vb, get_userptr, q->alloc_ctx[plane],
|
mem_priv = call_ptr_memop(vb, get_userptr,
|
||||||
planes[plane].m.userptr,
|
q->alloc_ctx[plane] ? : &q->dev,
|
||||||
planes[plane].length, dma_dir);
|
planes[plane].m.userptr,
|
||||||
|
planes[plane].length, dma_dir);
|
||||||
if (IS_ERR_OR_NULL(mem_priv)) {
|
if (IS_ERR_OR_NULL(mem_priv)) {
|
||||||
dprintk(1, "failed acquiring userspace "
|
dprintk(1, "failed acquiring userspace "
|
||||||
"memory for plane %d\n", plane);
|
"memory for plane %d\n", plane);
|
||||||
|
@ -1256,8 +1258,8 @@ static int __qbuf_dmabuf(struct vb2_buffer *vb, const void *pb)
|
||||||
|
|
||||||
/* Acquire each plane's memory */
|
/* Acquire each plane's memory */
|
||||||
mem_priv = call_ptr_memop(vb, attach_dmabuf,
|
mem_priv = call_ptr_memop(vb, attach_dmabuf,
|
||||||
q->alloc_ctx[plane], dbuf, planes[plane].length,
|
q->alloc_ctx[plane] ? : &q->dev,
|
||||||
dma_dir);
|
dbuf, planes[plane].length, dma_dir);
|
||||||
if (IS_ERR(mem_priv)) {
|
if (IS_ERR(mem_priv)) {
|
||||||
dprintk(1, "failed to attach dmabuf\n");
|
dprintk(1, "failed to attach dmabuf\n");
|
||||||
ret = PTR_ERR(mem_priv);
|
ret = PTR_ERR(mem_priv);
|
||||||
|
|
|
@ -400,6 +400,8 @@ struct vb2_buf_ops {
|
||||||
* caller. For example, for V4L2, it should match
|
* caller. For example, for V4L2, it should match
|
||||||
* the V4L2_BUF_TYPE_* in include/uapi/linux/videodev2.h
|
* the V4L2_BUF_TYPE_* in include/uapi/linux/videodev2.h
|
||||||
* @io_modes: supported io methods (see vb2_io_modes enum)
|
* @io_modes: supported io methods (see vb2_io_modes enum)
|
||||||
|
* @dev: device to use for the default allocation context if the driver
|
||||||
|
* doesn't fill in the @alloc_ctx array.
|
||||||
* @dma_attrs: DMA attributes to use for the DMA. May be NULL.
|
* @dma_attrs: DMA attributes to use for the DMA. May be NULL.
|
||||||
* @fileio_read_once: report EOF after reading the first buffer
|
* @fileio_read_once: report EOF after reading the first buffer
|
||||||
* @fileio_write_immediately: queue buffer after each write() call
|
* @fileio_write_immediately: queue buffer after each write() call
|
||||||
|
@ -467,6 +469,7 @@ struct vb2_buf_ops {
|
||||||
struct vb2_queue {
|
struct vb2_queue {
|
||||||
unsigned int type;
|
unsigned int type;
|
||||||
unsigned int io_modes;
|
unsigned int io_modes;
|
||||||
|
struct device *dev;
|
||||||
const struct dma_attrs *dma_attrs;
|
const struct dma_attrs *dma_attrs;
|
||||||
unsigned fileio_read_once:1;
|
unsigned fileio_read_once:1;
|
||||||
unsigned fileio_write_immediately:1;
|
unsigned fileio_write_immediately:1;
|
||||||
|
|
Loading…
Reference in New Issue