blob: 055dc058d147247c4a1652f98db20cc869a731dc [file] [log] [blame]
David Herrmann00fd78e2013-08-08 22:19:12 +02001#ifndef _DRM_AGPSUPPORT_H_
2#define _DRM_AGPSUPPORT_H_
3
David Herrmannd7d2c482014-08-29 12:12:40 +02004#include <linux/agp_backend.h>
David Herrmann00fd78e2013-08-08 22:19:12 +02005#include <linux/kernel.h>
David Herrmannd7d2c482014-08-29 12:12:40 +02006#include <linux/list.h>
David Herrmann00fd78e2013-08-08 22:19:12 +02007#include <linux/mm.h>
8#include <linux/mutex.h>
9#include <linux/types.h>
David Herrmannd7d2c482014-08-29 12:12:40 +020010#include <uapi/drm/drm.h>
11
12struct drm_device;
13struct drm_file;
David Herrmann00fd78e2013-08-08 22:19:12 +020014
David Herrmann71930d72014-08-29 12:12:36 +020015#define __OS_HAS_AGP (defined(CONFIG_AGP) || (defined(CONFIG_AGP_MODULE) && \
16 defined(MODULE)))
17
David Herrmanncc5ea592014-08-29 12:12:32 +020018struct 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
David Herrmann00fd78e2013-08-08 22:19:12 +020031#if __OS_HAS_AGP
32
Daniel Vetterd2e546b2013-12-11 11:34:40 +010033void 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,
David Herrmann00fd78e2013-08-08 22:19:12 +020037 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);
David Herrmann00fd78e2013-08-08 22:19:12 +020043void 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);
David Herrmannd7d2c482014-08-29 12:12:40 +020068
David Herrmann00fd78e2013-08-08 22:19:12 +020069#else /* __OS_HAS_AGP */
70
Daniel Vetterd2e546b2013-12-11 11:34:40 +010071static inline void drm_free_agp(struct agp_memory * handle, int pages)
David Herrmann00fd78e2013-08-08 22:19:12 +020072{
73}
74
Daniel Vetterd2e546b2013-12-11 11:34:40 +010075static inline int drm_bind_agp(struct agp_memory * handle, unsigned int start)
David Herrmann00fd78e2013-08-08 22:19:12 +020076{
77 return -ENODEV;
78}
79
Daniel Vetterd2e546b2013-12-11 11:34:40 +010080static inline int drm_unbind_agp(struct agp_memory * handle)
David Herrmann00fd78e2013-08-08 22:19:12 +020081{
82 return -ENODEV;
83}
84
Daniel Vetterd2e546b2013-12-11 11:34:40 +010085static inline struct agp_memory *drm_agp_bind_pages(struct drm_device *dev,
David Herrmann00fd78e2013-08-08 22:19:12 +020086 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
David Herrmann00fd78e2013-08-08 22:19:12 +020099static 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}
David Herrmannd7d2c482014-08-29 12:12:40 +0200196
David Herrmann00fd78e2013-08-08 22:19:12 +0200197#endif /* __OS_HAS_AGP */
198
199#endif /* _DRM_AGPSUPPORT_H_ */