1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | /* |
3 | * DMABUF Heaps Allocation Infrastructure |
4 | * |
5 | * Copyright (C) 2011 Google, Inc. |
6 | * Copyright (C) 2019 Linaro Ltd. |
7 | */ |
8 | |
9 | #ifndef _DMA_HEAPS_H |
10 | #define _DMA_HEAPS_H |
11 | |
12 | #include <linux/cdev.h> |
13 | #include <linux/types.h> |
14 | |
15 | struct dma_heap; |
16 | |
17 | /** |
18 | * struct dma_heap_ops - ops to operate on a given heap |
19 | * @allocate: allocate dmabuf and return struct dma_buf ptr |
20 | * |
21 | * allocate returns dmabuf on success, ERR_PTR(-errno) on error. |
22 | */ |
23 | struct dma_heap_ops { |
24 | struct dma_buf *(*allocate)(struct dma_heap *heap, |
25 | unsigned long len, |
26 | unsigned long fd_flags, |
27 | unsigned long heap_flags); |
28 | }; |
29 | |
30 | /** |
31 | * struct dma_heap_export_info - information needed to export a new dmabuf heap |
32 | * @name: used for debugging/device-node name |
33 | * @ops: ops struct for this heap |
34 | * @priv: heap exporter private data |
35 | * |
36 | * Information needed to export a new dmabuf heap. |
37 | */ |
38 | struct dma_heap_export_info { |
39 | const char *name; |
40 | const struct dma_heap_ops *ops; |
41 | void *priv; |
42 | }; |
43 | |
44 | /** |
45 | * dma_heap_get_drvdata() - get per-heap driver data |
46 | * @heap: DMA-Heap to retrieve private data for |
47 | * |
48 | * Returns: |
49 | * The per-heap data for the heap. |
50 | */ |
51 | void *dma_heap_get_drvdata(struct dma_heap *heap); |
52 | |
53 | /** |
54 | * dma_heap_get_name() - get heap name |
55 | * @heap: DMA-Heap to retrieve private data for |
56 | * |
57 | * Returns: |
58 | * The char* for the heap name. |
59 | */ |
60 | const char *dma_heap_get_name(struct dma_heap *heap); |
61 | |
62 | /** |
63 | * dma_heap_add - adds a heap to dmabuf heaps |
64 | * @exp_info: information needed to register this heap |
65 | */ |
66 | struct dma_heap *dma_heap_add(const struct dma_heap_export_info *exp_info); |
67 | |
68 | #endif /* _DMA_HEAPS_H */ |
69 | |