1 #ifndef _DRM_AGPSUPPORT_H_
2 #define _DRM_AGPSUPPORT_H_
3 
4 #include <linux/kernel.h>
5 #include <linux/list.h>
6 #include <linux/mm.h>
7 #include <linux/mutex.h>
8 #include <linux/types.h>
9 #include <sys/agpio.h>
10 #include <dev/agp/agpvar.h>
11 #include <uapi_drm/drm.h>
12 
13 struct drm_device;
14 struct drm_file;
15 
16 #define __OS_HAS_AGP	1
17 
18 struct drm_agp_head {
19 	device_t	agpdev;
20 	struct agp_info	agp_info;
21 	struct drm_agp_mem *memory;
22 	unsigned long mode;
23 	int enabled;
24 	int acquired;
25 	unsigned long base;
26 	int agp_mtrr;
27 	int cant_use_aperture;
28 	unsigned long page_mask;
29 };
30 
31 #if __OS_HAS_AGP
32 
33 #ifdef __linux__
34 void drm_free_agp(struct agp_memory * handle, int pages);
35 int drm_bind_agp(struct agp_memory * handle, unsigned int start);
36 int drm_unbind_agp(struct agp_memory * handle);
37 struct agp_memory *drm_agp_bind_pages(struct drm_device *dev,
38 				struct page **pages,
39 				unsigned long num_pages,
40 				uint32_t gtt_offset,
41 				uint32_t type);
42 #endif
43 
44 struct drm_agp_head *drm_agp_init(struct drm_device *dev);
45 void drm_agp_clear(struct drm_device *dev);
46 int drm_agp_acquire(struct drm_device *dev);
47 int drm_agp_acquire_ioctl(struct drm_device *dev, void *data,
48 			  struct drm_file *file_priv);
49 int drm_agp_release(struct drm_device *dev);
50 int drm_agp_release_ioctl(struct drm_device *dev, void *data,
51 			  struct drm_file *file_priv);
52 int drm_agp_enable(struct drm_device *dev, struct drm_agp_mode mode);
53 int drm_agp_enable_ioctl(struct drm_device *dev, void *data,
54 			 struct drm_file *file_priv);
55 int drm_agp_info(struct drm_device *dev, struct drm_agp_info *info);
56 int drm_agp_info_ioctl(struct drm_device *dev, void *data,
57 		       struct drm_file *file_priv);
58 int drm_agp_alloc(struct drm_device *dev, struct drm_agp_buffer *request);
59 int drm_agp_alloc_ioctl(struct drm_device *dev, void *data,
60 			struct drm_file *file_priv);
61 int drm_agp_free(struct drm_device *dev, struct drm_agp_buffer *request);
62 int drm_agp_free_ioctl(struct drm_device *dev, void *data,
63 		       struct drm_file *file_priv);
64 int drm_agp_unbind(struct drm_device *dev, struct drm_agp_binding *request);
65 int drm_agp_unbind_ioctl(struct drm_device *dev, void *data,
66 			 struct drm_file *file_priv);
67 int drm_agp_bind(struct drm_device *dev, struct drm_agp_binding *request);
68 int drm_agp_bind_ioctl(struct drm_device *dev, void *data,
69 		       struct drm_file *file_priv);
70 
71 #else /* __OS_HAS_AGP */
72 
73 #ifdef __linux__
74 static inline void drm_free_agp(struct agp_memory * handle, int pages)
75 {
76 }
77 
78 static inline int drm_bind_agp(struct agp_memory * handle, unsigned int start)
79 {
80 	return -ENODEV;
81 }
82 
83 static inline int drm_unbind_agp(struct agp_memory * handle)
84 {
85 	return -ENODEV;
86 }
87 
88 static inline struct agp_memory *drm_agp_bind_pages(struct drm_device *dev,
89 					      struct page **pages,
90 					      unsigned long num_pages,
91 					      uint32_t gtt_offset,
92 					      uint32_t type)
93 {
94 	return NULL;
95 }
96 #endif
97 
98 static inline struct drm_agp_head *drm_agp_init(struct drm_device *dev)
99 {
100 	return NULL;
101 }
102 
103 static inline void drm_agp_clear(struct drm_device *dev)
104 {
105 }
106 
107 static inline int drm_agp_acquire(struct drm_device *dev)
108 {
109 	return -ENODEV;
110 }
111 
112 static inline int drm_agp_acquire_ioctl(struct drm_device *dev, void *data,
113 					struct drm_file *file_priv)
114 {
115 	return -ENODEV;
116 }
117 
118 static inline int drm_agp_release(struct drm_device *dev)
119 {
120 	return -ENODEV;
121 }
122 
123 static inline int drm_agp_release_ioctl(struct drm_device *dev, void *data,
124 					struct drm_file *file_priv)
125 {
126 	return -ENODEV;
127 }
128 
129 static inline int drm_agp_enable(struct drm_device *dev,
130 				 struct drm_agp_mode mode)
131 {
132 	return -ENODEV;
133 }
134 
135 static inline int drm_agp_enable_ioctl(struct drm_device *dev, void *data,
136 				       struct drm_file *file_priv)
137 {
138 	return -ENODEV;
139 }
140 
141 static inline int drm_agp_info(struct drm_device *dev,
142 			       struct drm_agp_info *info)
143 {
144 	return -ENODEV;
145 }
146 
147 static inline int drm_agp_info_ioctl(struct drm_device *dev, void *data,
148 				     struct drm_file *file_priv)
149 {
150 	return -ENODEV;
151 }
152 
153 static inline int drm_agp_alloc(struct drm_device *dev,
154 				struct drm_agp_buffer *request)
155 {
156 	return -ENODEV;
157 }
158 
159 static inline int drm_agp_alloc_ioctl(struct drm_device *dev, void *data,
160 				      struct drm_file *file_priv)
161 {
162 	return -ENODEV;
163 }
164 
165 static inline int drm_agp_free(struct drm_device *dev,
166 			       struct drm_agp_buffer *request)
167 {
168 	return -ENODEV;
169 }
170 
171 static inline int drm_agp_free_ioctl(struct drm_device *dev, void *data,
172 				     struct drm_file *file_priv)
173 {
174 	return -ENODEV;
175 }
176 
177 static inline int drm_agp_unbind(struct drm_device *dev,
178 				 struct drm_agp_binding *request)
179 {
180 	return -ENODEV;
181 }
182 
183 static inline int drm_agp_unbind_ioctl(struct drm_device *dev, void *data,
184 				       struct drm_file *file_priv)
185 {
186 	return -ENODEV;
187 }
188 
189 static inline int drm_agp_bind(struct drm_device *dev,
190 			       struct drm_agp_binding *request)
191 {
192 	return -ENODEV;
193 }
194 
195 static inline int drm_agp_bind_ioctl(struct drm_device *dev, void *data,
196 				     struct drm_file *file_priv)
197 {
198 	return -ENODEV;
199 }
200 
201 #endif /* __OS_HAS_AGP */
202 
203 #endif /* _DRM_AGPSUPPORT_H_ */
204