1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * DMABUF Heaps helper code 4 * 5 * Copyright (C) 2011 Google, Inc. 6 * Copyright (C) 2019 Linaro Ltd. 7 */ 8 9 #ifndef _HEAP_HELPERS_H 10 #define _HEAP_HELPERS_H 11 12 #include <linux/dma-heap.h> 13 #include <linux/list.h> 14 15 /** 16 * struct heap_helper_buffer - helper buffer metadata 17 * @heap: back pointer to the heap the buffer came from 18 * @dmabuf: backing dma-buf for this buffer 19 * @size: size of the buffer 20 * @priv_virt pointer to heap specific private value 21 * @lock mutext to protect the data in this structure 22 * @vmap_cnt count of vmap references on the buffer 23 * @vaddr vmap'ed virtual address 24 * @pagecount number of pages in the buffer 25 * @pages list of page pointers 26 * @attachments list of device attachments 27 * 28 * @free heap callback to free the buffer 29 */ 30 struct heap_helper_buffer { 31 struct dma_heap *heap; 32 struct dma_buf *dmabuf; 33 size_t size; 34 35 void *priv_virt; 36 struct mutex lock; 37 int vmap_cnt; 38 void *vaddr; 39 pgoff_t pagecount; 40 struct page **pages; 41 struct list_head attachments; 42 43 void (*free)(struct heap_helper_buffer *buffer); 44 }; 45 46 void init_heap_helper_buffer(struct heap_helper_buffer *buffer, 47 void (*free)(struct heap_helper_buffer *)); 48 49 struct dma_buf *heap_helper_export_dmabuf(struct heap_helper_buffer *buffer, 50 int fd_flags); 51 52 extern const struct dma_buf_ops heap_helper_ops; 53 #endif /* _HEAP_HELPERS_H */ 54