1
2
3#ifndef DRM_VRAM_MM_HELPER_H
4#define DRM_VRAM_MM_HELPER_H
5
6#include <drm/ttm/ttm_bo_driver.h>
7
8struct drm_device;
9
10
11
12
13
14
15
16
17
18
19
20struct drm_vram_mm_funcs {
21 void (*evict_flags)(struct ttm_buffer_object *bo,
22 struct ttm_placement *placement);
23 int (*verify_access)(struct ttm_buffer_object *bo, struct file *filp);
24};
25
26
27
28
29
30
31
32
33
34
35
36
37
38struct drm_vram_mm {
39 uint64_t vram_base;
40 size_t vram_size;
41
42 struct ttm_bo_device bdev;
43
44 const struct drm_vram_mm_funcs *funcs;
45};
46
47
48
49
50
51
52
53
54
55static inline struct drm_vram_mm *drm_vram_mm_of_bdev(
56 struct ttm_bo_device *bdev)
57{
58 return container_of(bdev, struct drm_vram_mm, bdev);
59}
60
61int drm_vram_mm_init(struct drm_vram_mm *vmm, struct drm_device *dev,
62 uint64_t vram_base, size_t vram_size,
63 const struct drm_vram_mm_funcs *funcs);
64void drm_vram_mm_cleanup(struct drm_vram_mm *vmm);
65
66int drm_vram_mm_mmap(struct file *filp, struct vm_area_struct *vma,
67 struct drm_vram_mm *vmm);
68
69
70
71
72
73struct drm_vram_mm *drm_vram_helper_alloc_mm(
74 struct drm_device *dev, uint64_t vram_base, size_t vram_size,
75 const struct drm_vram_mm_funcs *funcs);
76void drm_vram_helper_release_mm(struct drm_device *dev);
77
78
79
80
81
82int drm_vram_mm_file_operations_mmap(
83 struct file *filp, struct vm_area_struct *vma);
84
85
86
87
88
89
90
91
92#define DRM_VRAM_MM_FILE_OPERATIONS \
93 .llseek = no_llseek, \
94 .read = drm_read, \
95 .poll = drm_poll, \
96 .unlocked_ioctl = drm_ioctl, \
97 .compat_ioctl = drm_compat_ioctl, \
98 .mmap = drm_vram_mm_file_operations_mmap, \
99 .open = drm_open, \
100 .release = drm_release \
101
102#endif
103