Branch data Line data Source code
1 : : #ifndef __DRM_LEGACY_H__
2 : : #define __DRM_LEGACY_H__
3 : :
4 : : /*
5 : : * Copyright (c) 2014 David Herrmann <dh.herrmann@gmail.com>
6 : : *
7 : : * Permission is hereby granted, free of charge, to any person obtaining a
8 : : * copy of this software and associated documentation files (the "Software"),
9 : : * to deal in the Software without restriction, including without limitation
10 : : * the rights to use, copy, modify, merge, publish, distribute, sublicense,
11 : : * and/or sell copies of the Software, and to permit persons to whom the
12 : : * Software is furnished to do so, subject to the following conditions:
13 : : *
14 : : * The above copyright notice and this permission notice shall be included in
15 : : * all copies or substantial portions of the Software.
16 : : *
17 : : * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 : : * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 : : * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20 : : * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
21 : : * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
22 : : * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23 : : * OTHER DEALINGS IN THE SOFTWARE.
24 : : */
25 : :
26 : : /*
27 : : * This file contains legacy interfaces that modern drm drivers
28 : : * should no longer be using. They cannot be removed as legacy
29 : : * drivers use them, and removing them are API breaks.
30 : : */
31 : : #include <linux/list.h>
32 : :
33 : : #include <drm/drm.h>
34 : : #include <drm/drm_device.h>
35 : : #include <drm/drm_legacy.h>
36 : :
37 : : struct agp_memory;
38 : : struct drm_device;
39 : : struct drm_file;
40 : : struct drm_buf_desc;
41 : :
42 : : /*
43 : : * Generic DRM Contexts
44 : : */
45 : :
46 : : #define DRM_KERNEL_CONTEXT 0
47 : : #define DRM_RESERVED_CONTEXTS 1
48 : :
49 : : #if IS_ENABLED(CONFIG_DRM_LEGACY)
50 : : void drm_legacy_ctxbitmap_init(struct drm_device *dev);
51 : : void drm_legacy_ctxbitmap_cleanup(struct drm_device *dev);
52 : : void drm_legacy_ctxbitmap_flush(struct drm_device *dev, struct drm_file *file);
53 : : #else
54 [ # # ]: 0 : static inline void drm_legacy_ctxbitmap_init(struct drm_device *dev) {}
55 : 0 : static inline void drm_legacy_ctxbitmap_cleanup(struct drm_device *dev) {}
56 [ # # ]: 0 : static inline void drm_legacy_ctxbitmap_flush(struct drm_device *dev, struct drm_file *file) {}
57 : : #endif
58 : :
59 : : void drm_legacy_ctxbitmap_free(struct drm_device *dev, int ctx_handle);
60 : :
61 : : #if IS_ENABLED(CONFIG_DRM_LEGACY)
62 : : int drm_legacy_resctx(struct drm_device *d, void *v, struct drm_file *f);
63 : : int drm_legacy_addctx(struct drm_device *d, void *v, struct drm_file *f);
64 : : int drm_legacy_getctx(struct drm_device *d, void *v, struct drm_file *f);
65 : : int drm_legacy_switchctx(struct drm_device *d, void *v, struct drm_file *f);
66 : : int drm_legacy_newctx(struct drm_device *d, void *v, struct drm_file *f);
67 : : int drm_legacy_rmctx(struct drm_device *d, void *v, struct drm_file *f);
68 : :
69 : : int drm_legacy_setsareactx(struct drm_device *d, void *v, struct drm_file *f);
70 : : int drm_legacy_getsareactx(struct drm_device *d, void *v, struct drm_file *f);
71 : : #endif
72 : :
73 : : /*
74 : : * Generic Buffer Management
75 : : */
76 : :
77 : : #define DRM_MAP_HASH_OFFSET 0x10000000
78 : :
79 : : #if IS_ENABLED(CONFIG_DRM_LEGACY)
80 : : static inline int drm_legacy_create_map_hash(struct drm_device *dev)
81 : : {
82 : : return drm_ht_create(&dev->map_hash, 12);
83 : : }
84 : :
85 : : static inline void drm_legacy_remove_map_hash(struct drm_device *dev)
86 : : {
87 : : drm_ht_remove(&dev->map_hash);
88 : : }
89 : : #else
90 : 0 : static inline int drm_legacy_create_map_hash(struct drm_device *dev)
91 : : {
92 [ # # ]: 0 : return 0;
93 : : }
94 : :
95 : 0 : static inline void drm_legacy_remove_map_hash(struct drm_device *dev) {}
96 : : #endif
97 : :
98 : :
99 : : #if IS_ENABLED(CONFIG_DRM_LEGACY)
100 : : int drm_legacy_getmap_ioctl(struct drm_device *dev, void *data,
101 : : struct drm_file *file_priv);
102 : : int drm_legacy_addmap_ioctl(struct drm_device *d, void *v, struct drm_file *f);
103 : : int drm_legacy_rmmap_ioctl(struct drm_device *d, void *v, struct drm_file *f);
104 : :
105 : : int drm_legacy_addbufs(struct drm_device *d, void *v, struct drm_file *f);
106 : : int drm_legacy_infobufs(struct drm_device *d, void *v, struct drm_file *f);
107 : : int drm_legacy_markbufs(struct drm_device *d, void *v, struct drm_file *f);
108 : : int drm_legacy_freebufs(struct drm_device *d, void *v, struct drm_file *f);
109 : : int drm_legacy_mapbufs(struct drm_device *d, void *v, struct drm_file *f);
110 : : int drm_legacy_dma_ioctl(struct drm_device *d, void *v, struct drm_file *f);
111 : : #endif
112 : :
113 : : int __drm_legacy_infobufs(struct drm_device *, void *, int *,
114 : : int (*)(void *, int, struct drm_buf_entry *));
115 : : int __drm_legacy_mapbufs(struct drm_device *, void *, int *,
116 : : void __user **,
117 : : int (*)(void *, int, unsigned long, struct drm_buf *),
118 : : struct drm_file *);
119 : :
120 : : #if IS_ENABLED(CONFIG_DRM_LEGACY)
121 : : void drm_legacy_master_rmmaps(struct drm_device *dev,
122 : : struct drm_master *master);
123 : : void drm_legacy_rmmaps(struct drm_device *dev);
124 : : #else
125 : 0 : static inline void drm_legacy_master_rmmaps(struct drm_device *dev,
126 : 0 : struct drm_master *master) {}
127 : 0 : static inline void drm_legacy_rmmaps(struct drm_device *dev) {}
128 : : #endif
129 : :
130 : : #if IS_ENABLED(CONFIG_DRM_VM) && IS_ENABLED(CONFIG_DRM_LEGACY)
131 : : void drm_legacy_vma_flush(struct drm_device *d);
132 : : #else
133 : : static inline void drm_legacy_vma_flush(struct drm_device *d)
134 : : {
135 : : /* do nothing */
136 : : }
137 : : #endif
138 : :
139 : : /*
140 : : * AGP Support
141 : : */
142 : :
143 : : struct drm_agp_mem {
144 : : unsigned long handle;
145 : : struct agp_memory *memory;
146 : : unsigned long bound;
147 : : int pages;
148 : : struct list_head head;
149 : : };
150 : :
151 : : /* drm_lock.c */
152 : : #if IS_ENABLED(CONFIG_DRM_LEGACY)
153 : : int drm_legacy_lock(struct drm_device *d, void *v, struct drm_file *f);
154 : : int drm_legacy_unlock(struct drm_device *d, void *v, struct drm_file *f);
155 : : void drm_legacy_lock_release(struct drm_device *dev, struct file *filp);
156 : : #else
157 : : static inline void drm_legacy_lock_release(struct drm_device *dev, struct file *filp) {}
158 : : #endif
159 : :
160 : : /* DMA support */
161 : : #if IS_ENABLED(CONFIG_DRM_LEGACY)
162 : : int drm_legacy_dma_setup(struct drm_device *dev);
163 : : void drm_legacy_dma_takedown(struct drm_device *dev);
164 : : #else
165 : : static inline int drm_legacy_dma_setup(struct drm_device *dev)
166 : : {
167 : : return 0;
168 : : }
169 : : #endif
170 : :
171 : : void drm_legacy_free_buffer(struct drm_device *dev,
172 : : struct drm_buf * buf);
173 : : #if IS_ENABLED(CONFIG_DRM_LEGACY)
174 : : void drm_legacy_reclaim_buffers(struct drm_device *dev,
175 : : struct drm_file *filp);
176 : : #else
177 : : static inline void drm_legacy_reclaim_buffers(struct drm_device *dev,
178 : : struct drm_file *filp) {}
179 : : #endif
180 : :
181 : : /* Scatter Gather Support */
182 : : #if IS_ENABLED(CONFIG_DRM_LEGACY)
183 : : void drm_legacy_sg_cleanup(struct drm_device *dev);
184 : : int drm_legacy_sg_alloc(struct drm_device *dev, void *data,
185 : : struct drm_file *file_priv);
186 : : int drm_legacy_sg_free(struct drm_device *dev, void *data,
187 : : struct drm_file *file_priv);
188 : : #endif
189 : :
190 : : #if IS_ENABLED(CONFIG_DRM_LEGACY)
191 : : void drm_legacy_init_members(struct drm_device *dev);
192 : : void drm_legacy_destroy_members(struct drm_device *dev);
193 : : void drm_legacy_dev_reinit(struct drm_device *dev);
194 : : int drm_legacy_setup(struct drm_device * dev);
195 : : #else
196 : 0 : static inline void drm_legacy_init_members(struct drm_device *dev) {}
197 : 0 : static inline void drm_legacy_destroy_members(struct drm_device *dev) {}
198 : : static inline void drm_legacy_dev_reinit(struct drm_device *dev) {}
199 : : static inline int drm_legacy_setup(struct drm_device * dev) { return 0; }
200 : : #endif
201 : :
202 : : #if IS_ENABLED(CONFIG_DRM_LEGACY)
203 : : void drm_legacy_lock_master_cleanup(struct drm_device *dev, struct drm_master *master);
204 : : #else
205 [ # # ]: 0 : static inline void drm_legacy_lock_master_cleanup(struct drm_device *dev, struct drm_master *master) {}
206 : : #endif
207 : :
208 : : #if IS_ENABLED(CONFIG_DRM_LEGACY)
209 : : void drm_master_legacy_init(struct drm_master *master);
210 : : #else
211 : 0 : static inline void drm_master_legacy_init(struct drm_master *master) {}
212 : : #endif
213 : :
214 : : #endif /* __DRM_LEGACY_H__ */
|