hc
2024-11-01 2f529f9b558ca1c1bd74be7437a84e4711743404
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
/* SPDX-License-Identifier: GPL-2.0 */
/*
 * DMABUF Heaps Allocation Infrastructure
 *
 * Copyright (C) 2011 Google, Inc.
 * Copyright (C) 2019 Linaro Ltd.
 * Copyright (C) 2022 Rockchip Electronics Co. Ltd.
 * Author: Simon Xue <xxm@rock-chips.com>
 */
 
#ifndef _RK_DMA_HEAPS_H_
#define _RK_DMA_HEAPS_H_
#include <linux/dma-buf.h>
 
struct rk_dma_heap;
 
#if defined(CONFIG_DMABUF_HEAPS_ROCKCHIP)
int rk_dma_heap_cma_setup(void);
 
/**
 * rk_dma_heap_set_dev - set heap dev dma param
 * @heap: DMA-Heap to retrieve private data for
 *
 * Returns:
 * Zero on success, ERR_PTR(-errno) on error
 */
int rk_dma_heap_set_dev(struct device *heap_dev);
 
/**
 * rk_dma_heap_find - Returns the registered dma_heap with the specified name
 * @name: Name of the heap to find
 *
 * NOTE: dma_heaps returned from this function MUST be released
 * using rk_dma_heap_put() when the user is done.
 */
struct rk_dma_heap *rk_dma_heap_find(const char *name);
 
/** rk_dma_heap_buffer_free - Free dma_buf allocated by rk_dma_heap_buffer_alloc
 * @dma_buf:    dma_buf to free
 *
 * This is really only a simple wrapper to dma_buf_put()
 */
void rk_dma_heap_buffer_free(struct dma_buf *dmabuf);
 
/**
 * rk_dma_heap_buffer_alloc - Allocate dma-buf from a dma_heap
 * @heap:    dma_heap to allocate from
 * @len:    size to allocate
 * @fd_flags:    flags to set on returned dma-buf fd
 * @heap_flags:    flags to pass to the dma heap
 *
 * This is for internal dma-buf allocations only.
 */
struct dma_buf *rk_dma_heap_buffer_alloc(struct rk_dma_heap *heap, size_t len,
                    unsigned int fd_flags,
                    unsigned int heap_flags,
                    const char *name);
 
/**
 * rk_dma_heap_bufferfd_alloc - Allocate dma-buf fd from a dma_heap
 * @heap:    dma_heap to allocate from
 * @len:    size to allocate
 * @fd_flags:    flags to set on returned dma-buf fd
 * @heap_flags:    flags to pass to the dma heap
 */
int rk_dma_heap_bufferfd_alloc(struct rk_dma_heap *heap, size_t len,
                  unsigned int fd_flags,
                  unsigned int heap_flags,
                  const char *name);
 
/**
 * rk_dma_heap_alloc_contig_pages - Allocate contiguous pages from a dma_heap
 * @heap:    dma_heap to allocate from
 * @len:    size to allocate
 * @name:    the name who allocate
 */
struct page *rk_dma_heap_alloc_contig_pages(struct rk_dma_heap *heap,
                       size_t len, const char *name);
 
/**
 * rk_dma_heap_free_contig_pages - Free contiguous pages to a dma_heap
 * @heap:    dma_heap to free to
 * @pages:    pages to free to
 * @len:    size to free
 * @name:    the name who allocate
 */
void rk_dma_heap_free_contig_pages(struct rk_dma_heap *heap, struct page *pages,
                  size_t len, const char *name);
 
#else
static inline int rk_dma_heap_cma_setup(void)
{
   return -ENODEV;
}
 
static inline int rk_dma_heap_set_dev(struct device *heap_dev)
{
   return -ENODEV;
}
 
static inline struct rk_dma_heap *rk_dma_heap_find(const char *name)
{
   return NULL;
}
 
static inline void rk_dma_heap_buffer_free(struct dma_buf *dmabuf)
{
}
 
static inline struct dma_buf *rk_dma_heap_buffer_alloc(struct rk_dma_heap *heap, size_t len,
                              unsigned int fd_flags,
                              unsigned int heap_flags,
                              const char *name)
{
   return NULL;
}
 
static inline int rk_dma_heap_bufferfd_alloc(struct rk_dma_heap *heap, size_t len,
                        unsigned int fd_flags,
                        unsigned int heap_flags,
                        const char *name)
{
   return -ENODEV;
}
 
static inline struct page *rk_dma_heap_alloc_contig_pages(struct rk_dma_heap *heap,
                             size_t len, const char *name)
{
   return NULL;
}
 
static inline void rk_dma_heap_free_contig_pages(struct rk_dma_heap *heap, struct page *pages,
                        size_t len, const char *name)
{
}
#endif
#endif /* _DMA_HEAPS_H */