1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _DRM_AGPSUPPORT_H_
3 #define _DRM_AGPSUPPORT_H_
4
5 #include <linux/agp_backend.h>
6 #include <linux/kernel.h>
7 #include <linux/list.h>
8 #include <linux/mm.h>
9 #include <linux/mutex.h>
10 #include <linux/types.h>
11 #include <uapi/drm/drm.h>
12
13 struct drm_device;
14 struct drm_file;
15
16 struct drm_agp_head {
17 struct agp_kern_info agp_info;
18 struct list_head memory;
19 unsigned long mode;
20 struct agp_bridge_data *bridge;
21 int enabled;
22 int acquired;
23 unsigned long base;
24 int agp_mtrr;
25 int cant_use_aperture;
26 unsigned long page_mask;
27 };
28
29 #if IS_ENABLED(CONFIG_AGP)
30
31 void drm_free_agp(struct agp_memory * handle, int pages);
32 int drm_bind_agp(struct agp_memory * handle, unsigned int start);
33 int drm_unbind_agp(struct agp_memory * handle);
34
35 struct drm_agp_head *drm_agp_init(struct drm_device *dev);
36 void drm_legacy_agp_clear(struct drm_device *dev);
37 int drm_agp_acquire(struct drm_device *dev);
38 int drm_agp_acquire_ioctl(struct drm_device *dev, void *data,
39 struct drm_file *file_priv);
40 int drm_agp_release(struct drm_device *dev);
41 int drm_agp_release_ioctl(struct drm_device *dev, void *data,
42 struct drm_file *file_priv);
43 int drm_agp_enable(struct drm_device *dev, struct drm_agp_mode mode);
44 int drm_agp_enable_ioctl(struct drm_device *dev, void *data,
45 struct drm_file *file_priv);
46 int drm_agp_info(struct drm_device *dev, struct drm_agp_info *info);
47 int drm_agp_info_ioctl(struct drm_device *dev, void *data,
48 struct drm_file *file_priv);
49 int drm_agp_alloc(struct drm_device *dev, struct drm_agp_buffer *request);
50 int drm_agp_alloc_ioctl(struct drm_device *dev, void *data,
51 struct drm_file *file_priv);
52 int drm_agp_free(struct drm_device *dev, struct drm_agp_buffer *request);
53 int drm_agp_free_ioctl(struct drm_device *dev, void *data,
54 struct drm_file *file_priv);
55 int drm_agp_unbind(struct drm_device *dev, struct drm_agp_binding *request);
56 int drm_agp_unbind_ioctl(struct drm_device *dev, void *data,
57 struct drm_file *file_priv);
58 int drm_agp_bind(struct drm_device *dev, struct drm_agp_binding *request);
59 int drm_agp_bind_ioctl(struct drm_device *dev, void *data,
60 struct drm_file *file_priv);
61
62 #else /* CONFIG_AGP */
63
drm_free_agp(struct agp_memory * handle,int pages)64 static inline void drm_free_agp(struct agp_memory * handle, int pages)
65 {
66 }
67
drm_bind_agp(struct agp_memory * handle,unsigned int start)68 static inline int drm_bind_agp(struct agp_memory * handle, unsigned int start)
69 {
70 return -ENODEV;
71 }
72
drm_unbind_agp(struct agp_memory * handle)73 static inline int drm_unbind_agp(struct agp_memory * handle)
74 {
75 return -ENODEV;
76 }
77
drm_agp_init(struct drm_device * dev)78 static inline struct drm_agp_head *drm_agp_init(struct drm_device *dev)
79 {
80 return NULL;
81 }
82
drm_legacy_agp_clear(struct drm_device * dev)83 static inline void drm_legacy_agp_clear(struct drm_device *dev)
84 {
85 }
86
drm_agp_acquire(struct drm_device * dev)87 static inline int drm_agp_acquire(struct drm_device *dev)
88 {
89 return -ENODEV;
90 }
91
drm_agp_release(struct drm_device * dev)92 static inline int drm_agp_release(struct drm_device *dev)
93 {
94 return -ENODEV;
95 }
96
drm_agp_enable(struct drm_device * dev,struct drm_agp_mode mode)97 static inline int drm_agp_enable(struct drm_device *dev,
98 struct drm_agp_mode mode)
99 {
100 return -ENODEV;
101 }
102
drm_agp_info(struct drm_device * dev,struct drm_agp_info * info)103 static inline int drm_agp_info(struct drm_device *dev,
104 struct drm_agp_info *info)
105 {
106 return -ENODEV;
107 }
108
drm_agp_alloc(struct drm_device * dev,struct drm_agp_buffer * request)109 static inline int drm_agp_alloc(struct drm_device *dev,
110 struct drm_agp_buffer *request)
111 {
112 return -ENODEV;
113 }
114
drm_agp_free(struct drm_device * dev,struct drm_agp_buffer * request)115 static inline int drm_agp_free(struct drm_device *dev,
116 struct drm_agp_buffer *request)
117 {
118 return -ENODEV;
119 }
120
drm_agp_unbind(struct drm_device * dev,struct drm_agp_binding * request)121 static inline int drm_agp_unbind(struct drm_device *dev,
122 struct drm_agp_binding *request)
123 {
124 return -ENODEV;
125 }
126
drm_agp_bind(struct drm_device * dev,struct drm_agp_binding * request)127 static inline int drm_agp_bind(struct drm_device *dev,
128 struct drm_agp_binding *request)
129 {
130 return -ENODEV;
131 }
132
133 #endif /* CONFIG_AGP */
134
135 #endif /* _DRM_AGPSUPPORT_H_ */
136