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
12struct drm_device;
13struct drm_file;
14
15#define __OS_HAS_AGP (defined(CONFIG_AGP) || (defined(CONFIG_AGP_MODULE) && \
16					      defined(MODULE)))
17
18struct drm_agp_head {
19	struct agp_kern_info agp_info;
20	struct list_head memory;
21	unsigned long mode;
22	struct agp_bridge_data *bridge;
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
33void drm_free_agp(struct agp_memory * handle, int pages);
34int drm_bind_agp(struct agp_memory * handle, unsigned int start);
35int drm_unbind_agp(struct agp_memory * handle);
36struct agp_memory *drm_agp_bind_pages(struct drm_device *dev,
37				struct page **pages,
38				unsigned long num_pages,
39				uint32_t gtt_offset,
40				uint32_t type);
41
42struct drm_agp_head *drm_agp_init(struct drm_device *dev);
43void drm_agp_clear(struct drm_device *dev);
44int drm_agp_acquire(struct drm_device *dev);
45int drm_agp_acquire_ioctl(struct drm_device *dev, void *data,
46			  struct drm_file *file_priv);
47int drm_agp_release(struct drm_device *dev);
48int drm_agp_release_ioctl(struct drm_device *dev, void *data,
49			  struct drm_file *file_priv);
50int drm_agp_enable(struct drm_device *dev, struct drm_agp_mode mode);
51int drm_agp_enable_ioctl(struct drm_device *dev, void *data,
52			 struct drm_file *file_priv);
53int drm_agp_info(struct drm_device *dev, struct drm_agp_info *info);
54int drm_agp_info_ioctl(struct drm_device *dev, void *data,
55		       struct drm_file *file_priv);
56int drm_agp_alloc(struct drm_device *dev, struct drm_agp_buffer *request);
57int drm_agp_alloc_ioctl(struct drm_device *dev, void *data,
58			struct drm_file *file_priv);
59int drm_agp_free(struct drm_device *dev, struct drm_agp_buffer *request);
60int drm_agp_free_ioctl(struct drm_device *dev, void *data,
61		       struct drm_file *file_priv);
62int drm_agp_unbind(struct drm_device *dev, struct drm_agp_binding *request);
63int drm_agp_unbind_ioctl(struct drm_device *dev, void *data,
64			 struct drm_file *file_priv);
65int drm_agp_bind(struct drm_device *dev, struct drm_agp_binding *request);
66int drm_agp_bind_ioctl(struct drm_device *dev, void *data,
67		       struct drm_file *file_priv);
68
69#else /* __OS_HAS_AGP */
70
71static inline void drm_free_agp(struct agp_memory * handle, int pages)
72{
73}
74
75static inline int drm_bind_agp(struct agp_memory * handle, unsigned int start)
76{
77	return -ENODEV;
78}
79
80static inline int drm_unbind_agp(struct agp_memory * handle)
81{
82	return -ENODEV;
83}
84
85static inline struct agp_memory *drm_agp_bind_pages(struct drm_device *dev,
86					      struct page **pages,
87					      unsigned long num_pages,
88					      uint32_t gtt_offset,
89					      uint32_t type)
90{
91	return NULL;
92}
93
94static inline struct drm_agp_head *drm_agp_init(struct drm_device *dev)
95{
96	return NULL;
97}
98
99static inline void drm_agp_clear(struct drm_device *dev)
100{
101}
102
103static inline int drm_agp_acquire(struct drm_device *dev)
104{
105	return -ENODEV;
106}
107
108static inline int drm_agp_acquire_ioctl(struct drm_device *dev, void *data,
109					struct drm_file *file_priv)
110{
111	return -ENODEV;
112}
113
114static inline int drm_agp_release(struct drm_device *dev)
115{
116	return -ENODEV;
117}
118
119static inline int drm_agp_release_ioctl(struct drm_device *dev, void *data,
120					struct drm_file *file_priv)
121{
122	return -ENODEV;
123}
124
125static inline int drm_agp_enable(struct drm_device *dev,
126				 struct drm_agp_mode mode)
127{
128	return -ENODEV;
129}
130
131static inline int drm_agp_enable_ioctl(struct drm_device *dev, void *data,
132				       struct drm_file *file_priv)
133{
134	return -ENODEV;
135}
136
137static inline int drm_agp_info(struct drm_device *dev,
138			       struct drm_agp_info *info)
139{
140	return -ENODEV;
141}
142
143static inline int drm_agp_info_ioctl(struct drm_device *dev, void *data,
144				     struct drm_file *file_priv)
145{
146	return -ENODEV;
147}
148
149static inline int drm_agp_alloc(struct drm_device *dev,
150				struct drm_agp_buffer *request)
151{
152	return -ENODEV;
153}
154
155static inline int drm_agp_alloc_ioctl(struct drm_device *dev, void *data,
156				      struct drm_file *file_priv)
157{
158	return -ENODEV;
159}
160
161static inline int drm_agp_free(struct drm_device *dev,
162			       struct drm_agp_buffer *request)
163{
164	return -ENODEV;
165}
166
167static inline int drm_agp_free_ioctl(struct drm_device *dev, void *data,
168				     struct drm_file *file_priv)
169{
170	return -ENODEV;
171}
172
173static inline int drm_agp_unbind(struct drm_device *dev,
174				 struct drm_agp_binding *request)
175{
176	return -ENODEV;
177}
178
179static inline int drm_agp_unbind_ioctl(struct drm_device *dev, void *data,
180				       struct drm_file *file_priv)
181{
182	return -ENODEV;
183}
184
185static inline int drm_agp_bind(struct drm_device *dev,
186			       struct drm_agp_binding *request)
187{
188	return -ENODEV;
189}
190
191static inline int drm_agp_bind_ioctl(struct drm_device *dev, void *data,
192				     struct drm_file *file_priv)
193{
194	return -ENODEV;
195}
196
197#endif /* __OS_HAS_AGP */
198
199#endif /* _DRM_AGPSUPPORT_H_ */
200