xref: /openbmc/linux/drivers/gpu/drm/gma500/gem.h (revision 4f2c0a4acffbec01079c28f839422e64ddeff004)
12025cf9eSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */
2c269c685SPatrik Jakobsson /**************************************************************************
3c269c685SPatrik Jakobsson  * Copyright (c) 2014 Patrik Jakobsson
4c269c685SPatrik Jakobsson  * All Rights Reserved.
5c269c685SPatrik Jakobsson  *
6c269c685SPatrik Jakobsson  **************************************************************************/
7c269c685SPatrik Jakobsson 
8c269c685SPatrik Jakobsson #ifndef _GEM_H
9c269c685SPatrik Jakobsson #define _GEM_H
10c269c685SPatrik Jakobsson 
11f2d061edSThomas Zimmermann #include <linux/kernel.h>
12f2d061edSThomas Zimmermann 
131f9f6790SThomas Zimmermann #include <drm/drm_gem.h>
141f9f6790SThomas Zimmermann 
152717e595SLee Jones struct drm_device;
162717e595SLee Jones 
17*d339386cSThomas Zimmermann /*
18*d339386cSThomas Zimmermann  * PSB GEM object
19*d339386cSThomas Zimmermann  */
20*d339386cSThomas Zimmermann 
21f2d061edSThomas Zimmermann struct psb_gem_object {
22f2d061edSThomas Zimmermann 	struct drm_gem_object base;
23f2d061edSThomas Zimmermann 
24f2d061edSThomas Zimmermann 	struct resource resource;	/* GTT resource for our allocation */
25f2d061edSThomas Zimmermann 	u32 offset;			/* GTT offset of our object */
26f2d061edSThomas Zimmermann 	int in_gart;			/* Currently in the GART (ref ct) */
27f2d061edSThomas Zimmermann 	bool stolen;			/* Backed from stolen RAM */
28f2d061edSThomas Zimmermann 	bool mmapping;			/* Is mmappable */
29f2d061edSThomas Zimmermann 	struct page **pages;		/* Backing pages if present */
30f2d061edSThomas Zimmermann };
31f2d061edSThomas Zimmermann 
to_psb_gem_object(struct drm_gem_object * obj)32f2d061edSThomas Zimmermann static inline struct psb_gem_object *to_psb_gem_object(struct drm_gem_object *obj)
33f2d061edSThomas Zimmermann {
34f2d061edSThomas Zimmermann 	return container_of(obj, struct psb_gem_object, base);
35f2d061edSThomas Zimmermann }
36f2d061edSThomas Zimmermann 
37f2d061edSThomas Zimmermann struct psb_gem_object *
38576d4d2dSThomas Zimmermann psb_gem_create(struct drm_device *dev, u64 size, const char *name, bool stolen, u32 align);
397cd467d0SThomas Zimmermann 
40f2d061edSThomas Zimmermann int psb_gem_pin(struct psb_gem_object *pobj);
41f2d061edSThomas Zimmermann void psb_gem_unpin(struct psb_gem_object *pobj);
421f9f6790SThomas Zimmermann 
43*d339386cSThomas Zimmermann /*
44*d339386cSThomas Zimmermann  * Memory management
45*d339386cSThomas Zimmermann  */
46*d339386cSThomas Zimmermann 
47*d339386cSThomas Zimmermann int psb_gem_mm_init(struct drm_device *dev);
48*d339386cSThomas Zimmermann void psb_gem_mm_fini(struct drm_device *dev);
49*d339386cSThomas Zimmermann int psb_gem_mm_resume(struct drm_device *dev);
50*d339386cSThomas Zimmermann 
51c269c685SPatrik Jakobsson #endif
52