1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
2 | /************************************************************************** |
3 | * Copyright (c) 2014 Patrik Jakobsson |
4 | * All Rights Reserved. |
5 | * |
6 | **************************************************************************/ |
7 | |
8 | #ifndef _GEM_H |
9 | #define _GEM_H |
10 | |
11 | #include <linux/kernel.h> |
12 | |
13 | #include <drm/drm_gem.h> |
14 | |
15 | struct drm_device; |
16 | |
17 | /* |
18 | * PSB GEM object |
19 | */ |
20 | |
21 | struct psb_gem_object { |
22 | struct drm_gem_object base; |
23 | |
24 | struct resource resource; /* GTT resource for our allocation */ |
25 | u32 offset; /* GTT offset of our object */ |
26 | int in_gart; /* Currently in the GART (ref ct) */ |
27 | bool stolen; /* Backed from stolen RAM */ |
28 | bool mmapping; /* Is mmappable */ |
29 | struct page **pages; /* Backing pages if present */ |
30 | }; |
31 | |
32 | static inline struct psb_gem_object *to_psb_gem_object(struct drm_gem_object *obj) |
33 | { |
34 | return container_of(obj, struct psb_gem_object, base); |
35 | } |
36 | |
37 | struct psb_gem_object * |
38 | psb_gem_create(struct drm_device *dev, u64 size, const char *name, bool stolen, u32 align); |
39 | |
40 | int psb_gem_pin(struct psb_gem_object *pobj); |
41 | void psb_gem_unpin(struct psb_gem_object *pobj); |
42 | |
43 | /* |
44 | * Memory management |
45 | */ |
46 | |
47 | int psb_gem_mm_init(struct drm_device *dev); |
48 | void psb_gem_mm_fini(struct drm_device *dev); |
49 | int psb_gem_mm_resume(struct drm_device *dev); |
50 | |
51 | #endif |
52 | |