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