xref: /linux/drivers/gpu/drm/panfrost/panfrost_gem.h (revision 72251fac062c0b4fe98670ec9e3db3f0702c50ae)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /* Copyright 2019 Linaro, Ltd, Rob Herring <robh@kernel.org> */
3 
4 #ifndef __PANFROST_GEM_H__
5 #define __PANFROST_GEM_H__
6 
7 #include <drm/drm_gem_shmem_helper.h>
8 #include <drm/drm_mm.h>
9 
10 struct panfrost_gem_object {
11 	struct drm_gem_shmem_object base;
12 	struct sg_table *sgts;
13 
14 	struct drm_mm_node node;
15 	bool is_mapped		:1;
16 	bool noexec		:1;
17 	bool is_heap		:1;
18 };
19 
20 static inline
21 struct  panfrost_gem_object *to_panfrost_bo(struct drm_gem_object *obj)
22 {
23 	return container_of(to_drm_gem_shmem_obj(obj), struct panfrost_gem_object, base);
24 }
25 
26 static inline
27 struct  panfrost_gem_object *drm_mm_node_to_panfrost_bo(struct drm_mm_node *node)
28 {
29 	return container_of(node, struct panfrost_gem_object, node);
30 }
31 
32 struct drm_gem_object *panfrost_gem_create_object(struct drm_device *dev, size_t size);
33 
34 struct drm_gem_object *
35 panfrost_gem_prime_import_sg_table(struct drm_device *dev,
36 				   struct dma_buf_attachment *attach,
37 				   struct sg_table *sgt);
38 
39 struct panfrost_gem_object *
40 panfrost_gem_create_with_handle(struct drm_file *file_priv,
41 				struct drm_device *dev, size_t size,
42 				u32 flags,
43 				uint32_t *handle);
44 
45 void panfrost_gem_shrinker_init(struct drm_device *dev);
46 void panfrost_gem_shrinker_cleanup(struct drm_device *dev);
47 
48 #endif /* __PANFROST_GEM_H__ */
49