mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 18:51:56 -04:00
[media] v4l: vb2: add support for shared buffer (dma_buf)
This patch adds support for DMABUF memory type in videobuf2. It calls relevant APIs of dma_buf for v4l reqbuf / qbuf / dqbuf operations. For this version, the support is for videobuf2 as a user of the shared buffer; so the allocation of the buffer is done outside of V4L2. [A sample allocator of dma-buf shared buffer is given at [1]] [1]: Rob Clark's DRM: https://github.com/robclark/kernel-omap4/commits/drmplane-dmabuf [original work in the PoC for buffer sharing] Signed-off-by: Tomasz Stanislawski <[email protected]> Signed-off-by: Sumit Semwal <[email protected]> Signed-off-by: Sumit Semwal <[email protected]> Acked-by: Laurent Pinchart <[email protected]> Acked-by: Hans Verkuil <[email protected]> Tested-by: Mauro Carvalho Chehab <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
This commit is contained in:
parent
4b9c1cb641
commit
c538404869
3 changed files with 231 additions and 3 deletions
|
|
@ -16,6 +16,7 @@
|
|||
#include <linux/mutex.h>
|
||||
#include <linux/poll.h>
|
||||
#include <linux/videodev2.h>
|
||||
#include <linux/dma-buf.h>
|
||||
|
||||
struct vb2_alloc_ctx;
|
||||
struct vb2_fileio_data;
|
||||
|
|
@ -41,6 +42,20 @@ struct vb2_fileio_data;
|
|||
* argument to other ops in this structure
|
||||
* @put_userptr: inform the allocator that a USERPTR buffer will no longer
|
||||
* be used
|
||||
* @attach_dmabuf: attach a shared struct dma_buf for a hardware operation;
|
||||
* used for DMABUF memory types; alloc_ctx is the alloc context
|
||||
* dbuf is the shared dma_buf; returns NULL on failure;
|
||||
* allocator private per-buffer structure on success;
|
||||
* this needs to be used for further accesses to the buffer
|
||||
* @detach_dmabuf: inform the exporter of the buffer that the current DMABUF
|
||||
* buffer is no longer used; the buf_priv argument is the
|
||||
* allocator private per-buffer structure previously returned
|
||||
* from the attach_dmabuf callback
|
||||
* @map_dmabuf: request for access to the dmabuf from allocator; the allocator
|
||||
* of dmabuf is informed that this driver is going to use the
|
||||
* dmabuf
|
||||
* @unmap_dmabuf: releases access control to the dmabuf - allocator is notified
|
||||
* that this driver is done using the dmabuf for now
|
||||
* @vaddr: return a kernel virtual address to a given memory buffer
|
||||
* associated with the passed private structure or NULL if no
|
||||
* such mapping exists
|
||||
|
|
@ -56,6 +71,8 @@ struct vb2_fileio_data;
|
|||
* Required ops for USERPTR types: get_userptr, put_userptr.
|
||||
* Required ops for MMAP types: alloc, put, num_users, mmap.
|
||||
* Required ops for read/write access types: alloc, put, num_users, vaddr
|
||||
* Required ops for DMABUF types: attach_dmabuf, detach_dmabuf, map_dmabuf,
|
||||
* unmap_dmabuf.
|
||||
*/
|
||||
struct vb2_mem_ops {
|
||||
void *(*alloc)(void *alloc_ctx, unsigned long size);
|
||||
|
|
@ -65,6 +82,12 @@ struct vb2_mem_ops {
|
|||
unsigned long size, int write);
|
||||
void (*put_userptr)(void *buf_priv);
|
||||
|
||||
void *(*attach_dmabuf)(void *alloc_ctx, struct dma_buf *dbuf,
|
||||
unsigned long size, int write);
|
||||
void (*detach_dmabuf)(void *buf_priv);
|
||||
int (*map_dmabuf)(void *buf_priv);
|
||||
void (*unmap_dmabuf)(void *buf_priv);
|
||||
|
||||
void *(*vaddr)(void *buf_priv);
|
||||
void *(*cookie)(void *buf_priv);
|
||||
|
||||
|
|
@ -75,6 +98,8 @@ struct vb2_mem_ops {
|
|||
|
||||
struct vb2_plane {
|
||||
void *mem_priv;
|
||||
struct dma_buf *dbuf;
|
||||
unsigned int dbuf_mapped;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -83,12 +108,14 @@ struct vb2_plane {
|
|||
* @VB2_USERPTR: driver supports USERPTR with streaming API
|
||||
* @VB2_READ: driver supports read() style access
|
||||
* @VB2_WRITE: driver supports write() style access
|
||||
* @VB2_DMABUF: driver supports DMABUF with streaming API
|
||||
*/
|
||||
enum vb2_io_modes {
|
||||
VB2_MMAP = (1 << 0),
|
||||
VB2_USERPTR = (1 << 1),
|
||||
VB2_READ = (1 << 2),
|
||||
VB2_WRITE = (1 << 3),
|
||||
VB2_DMABUF = (1 << 4),
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Reference in a new issue