XenevaOS
Loading...
Searching...
No Matches
drm_gem_dma_helper.h
Go to the documentation of this file.
1/* SPDX-License-Identifier: GPL-2.0 */
2#ifndef __DRM_GEM_DMA_HELPER_H__
3#define __DRM_GEM_DMA_HELPER_H__
4
5#include <drm/drm_file.h>
6#include <drm/drm_ioctl.h>
7#include <drm/drm_gem.h>
8
10
24 struct sg_table *sgt;
25
26 /* For objects with DMA memory allocated by GEM DMA */
27 void *vaddr;
28
30};
31
32#define to_drm_gem_dma_obj(gem_obj) \
33 container_of(gem_obj, struct drm_gem_dma_object, base)
34
36 size_t size);
38void drm_gem_dma_print_info(const struct drm_gem_dma_object *dma_obj,
39 struct drm_printer *p, unsigned int indent);
42 struct iosys_map *map);
43int drm_gem_dma_mmap(struct drm_gem_dma_object *dma_obj, struct vm_area_struct *vma);
44
46
47/*
48 * GEM object functions
49 */
50
58static inline void drm_gem_dma_object_free(struct drm_gem_object *obj)
59{
60 struct drm_gem_dma_object *dma_obj = to_drm_gem_dma_obj(obj);
61
62 drm_gem_dma_free(dma_obj);
63}
64
74static inline void drm_gem_dma_object_print_info(struct drm_printer *p, unsigned int indent,
75 const struct drm_gem_object *obj)
76{
77 const struct drm_gem_dma_object *dma_obj = to_drm_gem_dma_obj(obj);
78
79 drm_gem_dma_print_info(dma_obj, p, indent);
80}
81
92static inline struct sg_table *drm_gem_dma_object_get_sg_table(struct drm_gem_object *obj)
93{
94 struct drm_gem_dma_object *dma_obj = to_drm_gem_dma_obj(obj);
95
96 return drm_gem_dma_get_sg_table(dma_obj);
97}
98
99/*
100 * drm_gem_dma_object_vmap - GEM object function for drm_gem_dma_vmap()
101 * @obj: GEM object
102 * @map: Returns the kernel virtual address of the DMA GEM object's backing store.
103 *
104 * This function wraps drm_gem_dma_vmap(). Drivers that employ the DMA helpers should
105 * use it as their &drm_gem_object_funcs.vmap handler.
106 *
107 * Returns:
108 * 0 on success or a negative error code on failure.
109 */
110static inline int drm_gem_dma_object_vmap(struct drm_gem_object *obj,
111 struct iosys_map *map)
112{
113 struct drm_gem_dma_object *dma_obj = to_drm_gem_dma_obj(obj);
114
115 return drm_gem_dma_vmap(dma_obj, map);
116}
117
129static inline int drm_gem_dma_object_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma)
130{
131 struct drm_gem_dma_object *dma_obj = to_drm_gem_dma_obj(obj);
132
133 return drm_gem_dma_mmap(dma_obj, vma);
134}
135
136/*
137 * Driver ops
138 */
139
140/* create memory region for DRM framebuffer */
142 struct drm_device *drm,
143 struct drm_mode_create_dumb *args);
144
145/* create memory region for DRM framebuffer */
146int drm_gem_dma_dumb_create(struct drm_file *file_priv,
147 struct drm_device *drm,
148 struct drm_mode_create_dumb *args);
149
150struct drm_gem_object *
152 struct dma_buf_attachment *attach,
153 struct sg_table *sgt);
154
168#define DRM_GEM_DMA_DRIVER_OPS_WITH_DUMB_CREATE(dumb_create_func) \
169 .dumb_create = (dumb_create_func), \
170 .gem_prime_import_sg_table = drm_gem_dma_prime_import_sg_table
171
184#define DRM_GEM_DMA_DRIVER_OPS \
185 DRM_GEM_DMA_DRIVER_OPS_WITH_DUMB_CREATE(drm_gem_dma_dumb_create)
186
203#define DRM_GEM_DMA_DRIVER_OPS_VMAP_WITH_DUMB_CREATE(dumb_create_func) \
204 .dumb_create = (dumb_create_func), \
205 .gem_prime_import_sg_table = drm_gem_dma_prime_import_sg_table_vmap
206
222#define DRM_GEM_DMA_DRIVER_OPS_VMAP \
223 DRM_GEM_DMA_DRIVER_OPS_VMAP_WITH_DUMB_CREATE(drm_gem_dma_dumb_create)
224
225struct drm_gem_object *
227 struct dma_buf_attachment *attach,
228 struct sg_table *sgt);
229
230/*
231 * File ops
232 */
233
234#ifndef CONFIG_MMU
236 unsigned long addr,
237 unsigned long len,
238 unsigned long pgoff,
239 unsigned long flags);
240#define DRM_GEM_DMA_UNMAPPED_AREA_FOPS \
241 .get_unmapped_area = drm_gem_dma_get_unmapped_area,
242#else
243#define DRM_GEM_DMA_UNMAPPED_AREA_FOPS
244#endif
245
259#define DEFINE_DRM_GEM_DMA_FOPS(name) \
260 static const struct file_operations name = {\
261 .owner = THIS_MODULE,\
262 .open = drm_open,\
263 .release = drm_release,\
264 .unlocked_ioctl = drm_ioctl,\
265 .compat_ioctl = drm_compat_ioctl,\
266 .poll = drm_poll,\
267 .read = drm_read,\
268 .llseek = noop_llseek,\
269 .mmap = drm_gem_mmap,\
270 .fop_flags = FOP_UNSIGNED_OFFSET, \
271 DRM_GEM_DMA_UNMAPPED_AREA_FOPS \
272 }
273
274#endif /* __DRM_GEM_DMA_HELPER_H__ */
uint8_t flags
Definition virtio.h:0
int map
Definition d_mode.c:31
size_t size
Definition drm_bridge.h:1299
void drm_gem_dma_free(struct drm_gem_dma_object *dma_obj)
struct drm_gem_object * drm_gem_dma_prime_import_sg_table(struct drm_device *dev, struct dma_buf_attachment *attach, struct sg_table *sgt)
#define to_drm_gem_dma_obj(gem_obj)
Definition drm_gem_dma_helper.h:32
const struct vm_operations_struct drm_gem_dma_vm_ops
struct drm_gem_object * drm_gem_dma_prime_import_sg_table_vmap(struct drm_device *drm, struct dma_buf_attachment *attach, struct sg_table *sgt)
unsigned long drm_gem_dma_get_unmapped_area(struct file *filp, unsigned long addr, unsigned long len, unsigned long pgoff, unsigned long flags)
int drm_gem_dma_vmap(struct drm_gem_dma_object *dma_obj, struct iosys_map *map)
int drm_gem_dma_mmap(struct drm_gem_dma_object *dma_obj, struct vm_area_struct *vma)
int drm_gem_dma_dumb_create_internal(struct drm_file *file_priv, struct drm_device *drm, struct drm_mode_create_dumb *args)
void drm_gem_dma_print_info(const struct drm_gem_dma_object *dma_obj, struct drm_printer *p, unsigned int indent)
struct drm_gem_dma_object * drm_gem_dma_create(struct drm_device *drm, size_t size)
struct sg_table * drm_gem_dma_get_sg_table(struct drm_gem_dma_object *dma_obj)
int drm_gem_dma_dumb_create(struct drm_file *file_priv, struct drm_device *drm, struct drm_mode_create_dumb *args)
const struct device * dev
Definition drm_print.h:519
size_t len
Definition initial.c:23
uintptr_t dma_addr_t
Definition kernel.h:42
const char const char va_list args
Definition seq_buf.h:182
Definition dma-buf.h:494
Definition drm_device.h:75
Definition drm_file.h:165
Definition drm_gem_dma_helper.h:21
dma_addr_t dma_addr
Definition drm_gem_dma_helper.h:23
bool map_noncoherent
Definition drm_gem_dma_helper.h:29
struct sg_table * sgt
Definition drm_gem_dma_helper.h:24
void * vaddr
Definition drm_gem_dma_helper.h:27
struct drm_gem_object base
Definition drm_gem_dma_helper.h:22
Definition drm_gem.h:277
struct file * filp
Definition drm_gem.h:315
Definition drm_mode.h:1249
Definition drm_print.h:181
Definition fs.h:142
Definition iosys-map.h:109
Definition scatterlist.h:135
Definition mm.h:182
Definition mm.h:145