/* SPDX-License-Identifier: GPL-2.0 */ /* * DMABUF Heaps helper code * * Copyright (C) 2011 Google, Inc. * Copyright (C) 2019 Linaro Ltd. */ #ifndef _HEAP_HELPERS_H #define _HEAP_HELPERS_H #include <linux/dma-heap.h> #include <linux/list.h> /** * struct heap_helper_buffer - helper buffer metadata * @heap: back pointer to the heap the buffer came from * @dmabuf: backing dma-buf for this buffer * @size: size of the buffer * @priv_virt pointer to heap specific private value * @lock mutext to protect the data in this structure * @vmap_cnt count of vmap references on the buffer * @vaddr vmap'ed virtual address * @pagecount number of pages in the buffer * @pages list of page pointers * @attachments list of device attachments * * @free heap callback to free the buffer */ struct heap_helper_buffer { struct dma_heap *heap; struct dma_buf *dmabuf; size_t size; void *priv_virt; struct mutex lock; int vmap_cnt; void *vaddr; pgoff_t pagecount; struct page **pages; struct list_head attachments; void (*free)(struct heap_helper_buffer *buffer); }; void init_heap_helper_buffer(struct heap_helper_buffer *buffer, void (*free)(struct heap_helper_buffer *)); struct dma_buf *heap_helper_export_dmabuf(struct heap_helper_buffer *buffer, int fd_flags); extern const struct dma_buf_ops heap_helper_ops; #endif /* _HEAP_HELPERS_H */