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 struct drm_agp_head *drm_agp_init(struct drm_device *dev);
32 void drm_legacy_agp_clear(struct drm_device *dev);
33 int drm_agp_acquire(struct drm_device *dev);
34 int drm_agp_acquire_ioctl(struct drm_device *dev, void *data,
35 			  struct drm_file *file_priv);
36 int drm_agp_release(struct drm_device *dev);
37 int drm_agp_release_ioctl(struct drm_device *dev, void *data,
38 			  struct drm_file *file_priv);
39 int drm_agp_enable(struct drm_device *dev, struct drm_agp_mode mode);
40 int drm_agp_enable_ioctl(struct drm_device *dev, void *data,
41 			 struct drm_file *file_priv);
42 int drm_agp_info(struct drm_device *dev, struct drm_agp_info *info);
43 int drm_agp_info_ioctl(struct drm_device *dev, void *data,
44 		       struct drm_file *file_priv);
45 int drm_agp_alloc(struct drm_device *dev, struct drm_agp_buffer *request);
46 int drm_agp_alloc_ioctl(struct drm_device *dev, void *data,
47 			struct drm_file *file_priv);
48 int drm_agp_free(struct drm_device *dev, struct drm_agp_buffer *request);
49 int drm_agp_free_ioctl(struct drm_device *dev, void *data,
50 		       struct drm_file *file_priv);
51 int drm_agp_unbind(struct drm_device *dev, struct drm_agp_binding *request);
52 int drm_agp_unbind_ioctl(struct drm_device *dev, void *data,
53 			 struct drm_file *file_priv);
54 int drm_agp_bind(struct drm_device *dev, struct drm_agp_binding *request);
55 int drm_agp_bind_ioctl(struct drm_device *dev, void *data,
56 		       struct drm_file *file_priv);
57 
58 #else /* CONFIG_AGP */
59 
drm_agp_init(struct drm_device * dev)60 static inline struct drm_agp_head *drm_agp_init(struct drm_device *dev)
61 {
62 	return NULL;
63 }
64 
drm_legacy_agp_clear(struct drm_device * dev)65 static inline void drm_legacy_agp_clear(struct drm_device *dev)
66 {
67 }
68 
drm_agp_acquire(struct drm_device * dev)69 static inline int drm_agp_acquire(struct drm_device *dev)
70 {
71 	return -ENODEV;
72 }
73 
drm_agp_release(struct drm_device * dev)74 static inline int drm_agp_release(struct drm_device *dev)
75 {
76 	return -ENODEV;
77 }
78 
drm_agp_enable(struct drm_device * dev,struct drm_agp_mode mode)79 static inline int drm_agp_enable(struct drm_device *dev,
80 				 struct drm_agp_mode mode)
81 {
82 	return -ENODEV;
83 }
84 
drm_agp_info(struct drm_device * dev,struct drm_agp_info * info)85 static inline int drm_agp_info(struct drm_device *dev,
86 			       struct drm_agp_info *info)
87 {
88 	return -ENODEV;
89 }
90 
drm_agp_alloc(struct drm_device * dev,struct drm_agp_buffer * request)91 static inline int drm_agp_alloc(struct drm_device *dev,
92 				struct drm_agp_buffer *request)
93 {
94 	return -ENODEV;
95 }
96 
drm_agp_free(struct drm_device * dev,struct drm_agp_buffer * request)97 static inline int drm_agp_free(struct drm_device *dev,
98 			       struct drm_agp_buffer *request)
99 {
100 	return -ENODEV;
101 }
102 
drm_agp_unbind(struct drm_device * dev,struct drm_agp_binding * request)103 static inline int drm_agp_unbind(struct drm_device *dev,
104 				 struct drm_agp_binding *request)
105 {
106 	return -ENODEV;
107 }
108 
drm_agp_bind(struct drm_device * dev,struct drm_agp_binding * request)109 static inline int drm_agp_bind(struct drm_device *dev,
110 			       struct drm_agp_binding *request)
111 {
112 	return -ENODEV;
113 }
114 
115 #endif /* CONFIG_AGP */
116 
117 #endif /* _DRM_AGPSUPPORT_H_ */
118