54 lines
1.4 KiB
C
54 lines
1.4 KiB
C
|
/* 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 */
|