struct_vb2_mem_ops(9) memory handling/memory allocator operations

SYNOPSIS


struct vb2_mem_ops {
void *(* alloc) (void *alloc_ctx, unsigned long size,enum dma_data_direction dma_dir,gfp_t gfp_flags);
void (* put) (void *buf_priv);
struct dma_buf *(* get_dmabuf) (void *buf_priv, unsigned long flags);
void *(* get_userptr) (void *alloc_ctx, unsigned long vaddr,unsigned long size,enum dma_data_direction dma_dir);
void (* put_userptr) (void *buf_priv);
void (* prepare) (void *buf_priv);
void (* finish) (void *buf_priv);
void *(* attach_dmabuf) (void *alloc_ctx, struct dma_buf *dbuf,unsigned long size,enum dma_data_direction dma_dir);
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);
unsigned int (* num_users) (void *buf_priv);
int (* mmap) (void *buf_priv, struct vm_area_struct *vma);
};

MEMBERS

alloc

allocate video memory and, optionally, allocator private data, return NULL on failure or a pointer to allocator private, per-buffer data on success; the returned private structure will then be passed as buf_priv argument to other ops in this structure. Additional gfp_flags to use when allocating the are also passed to this operation. These flags are from the gfp_flags field of vb2_queue.

put

inform the allocator that the buffer will no longer be used; usually will result in the allocator freeing the buffer (if no other users of this buffer are present); the buf_priv argument is the allocator private per-buffer structure previously returned from the alloc callback.

get_dmabuf

acquire userspace memory for a hardware operation; used for DMABUF memory types.

get_userptr

acquire userspace memory for a hardware operation; used for USERPTR memory types; vaddr is the address passed to the videobuf layer when queuing a video buffer of USERPTR type; should return an allocator private per-buffer structure associated with the buffer on success, NULL on failure; the returned private structure will then be passed as buf_priv argument to other ops in this structure.

put_userptr

inform the allocator that a USERPTR buffer will no longer be used.

prepare

called every time the buffer is passed from userspace to the driver, useful for cache synchronisation, optional.

finish

called every time the buffer is passed back from the driver to the userspace, also optional.

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.

cookie

return allocator specific cookie for a given memory buffer associated with the passed private structure or NULL if not available.

num_users

return the current number of users of a memory buffer; return 1 if the videobuf layer (or actually the driver using it) is the only user.

mmap

setup a userspace mapping for a given memory buffer under the provided virtual memory region.

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.

COPYRIGHT