blob: 3bebeb4af8645a7188ee64672bde307b23d678b3 [file] [log] [blame]
David Herrmann00fd78e2013-08-08 22:19:12 +02001#ifndef _DRM_AGPSUPPORT_H_
2#define _DRM_AGPSUPPORT_H_
3
4#include <linux/kernel.h>
5#include <linux/mm.h>
6#include <linux/mutex.h>
7#include <linux/types.h>
8#include <linux/agp_backend.h>
9#include <drm/drmP.h>
10
David Herrmanncc5ea592014-08-29 12:12:32 +020011struct drm_agp_head {
12 struct agp_kern_info agp_info;
13 struct list_head memory;
14 unsigned long mode;
15 struct agp_bridge_data *bridge;
16 int enabled;
17 int acquired;
18 unsigned long base;
19 int agp_mtrr;
20 int cant_use_aperture;
21 unsigned long page_mask;
22};
23
David Herrmann00fd78e2013-08-08 22:19:12 +020024#if __OS_HAS_AGP
25
Daniel Vetterd2e546b2013-12-11 11:34:40 +010026void drm_free_agp(struct agp_memory * handle, int pages);
27int drm_bind_agp(struct agp_memory * handle, unsigned int start);
28int drm_unbind_agp(struct agp_memory * handle);
29struct agp_memory *drm_agp_bind_pages(struct drm_device *dev,
David Herrmann00fd78e2013-08-08 22:19:12 +020030 struct page **pages,
31 unsigned long num_pages,
32 uint32_t gtt_offset,
33 uint32_t type);
34
35struct drm_agp_head *drm_agp_init(struct drm_device *dev);
David Herrmann00fd78e2013-08-08 22:19:12 +020036void drm_agp_clear(struct drm_device *dev);
37int drm_agp_acquire(struct drm_device *dev);
38int drm_agp_acquire_ioctl(struct drm_device *dev, void *data,
39 struct drm_file *file_priv);
40int drm_agp_release(struct drm_device *dev);
41int drm_agp_release_ioctl(struct drm_device *dev, void *data,
42 struct drm_file *file_priv);
43int drm_agp_enable(struct drm_device *dev, struct drm_agp_mode mode);
44int drm_agp_enable_ioctl(struct drm_device *dev, void *data,
45 struct drm_file *file_priv);
46int drm_agp_info(struct drm_device *dev, struct drm_agp_info *info);
47int drm_agp_info_ioctl(struct drm_device *dev, void *data,
48 struct drm_file *file_priv);
49int drm_agp_alloc(struct drm_device *dev, struct drm_agp_buffer *request);
50int drm_agp_alloc_ioctl(struct drm_device *dev, void *data,
51 struct drm_file *file_priv);
52int drm_agp_free(struct drm_device *dev, struct drm_agp_buffer *request);
53int drm_agp_free_ioctl(struct drm_device *dev, void *data,
54 struct drm_file *file_priv);
55int drm_agp_unbind(struct drm_device *dev, struct drm_agp_binding *request);
56int drm_agp_unbind_ioctl(struct drm_device *dev, void *data,
57 struct drm_file *file_priv);
58int drm_agp_bind(struct drm_device *dev, struct drm_agp_binding *request);
59int drm_agp_bind_ioctl(struct drm_device *dev, void *data,
60 struct drm_file *file_priv);
David Herrmann00fd78e2013-08-08 22:19:12 +020061#else /* __OS_HAS_AGP */
62
Daniel Vetterd2e546b2013-12-11 11:34:40 +010063static inline void drm_free_agp(struct agp_memory * handle, int pages)
David Herrmann00fd78e2013-08-08 22:19:12 +020064{
65}
66
Daniel Vetterd2e546b2013-12-11 11:34:40 +010067static inline int drm_bind_agp(struct agp_memory * handle, unsigned int start)
David Herrmann00fd78e2013-08-08 22:19:12 +020068{
69 return -ENODEV;
70}
71
Daniel Vetterd2e546b2013-12-11 11:34:40 +010072static inline int drm_unbind_agp(struct agp_memory * handle)
David Herrmann00fd78e2013-08-08 22:19:12 +020073{
74 return -ENODEV;
75}
76
Daniel Vetterd2e546b2013-12-11 11:34:40 +010077static inline struct agp_memory *drm_agp_bind_pages(struct drm_device *dev,
David Herrmann00fd78e2013-08-08 22:19:12 +020078 struct page **pages,
79 unsigned long num_pages,
80 uint32_t gtt_offset,
81 uint32_t type)
82{
83 return NULL;
84}
85
86static inline struct drm_agp_head *drm_agp_init(struct drm_device *dev)
87{
88 return NULL;
89}
90
David Herrmann00fd78e2013-08-08 22:19:12 +020091static inline void drm_agp_clear(struct drm_device *dev)
92{
93}
94
95static inline int drm_agp_acquire(struct drm_device *dev)
96{
97 return -ENODEV;
98}
99
100static inline int drm_agp_acquire_ioctl(struct drm_device *dev, void *data,
101 struct drm_file *file_priv)
102{
103 return -ENODEV;
104}
105
106static inline int drm_agp_release(struct drm_device *dev)
107{
108 return -ENODEV;
109}
110
111static inline int drm_agp_release_ioctl(struct drm_device *dev, void *data,
112 struct drm_file *file_priv)
113{
114 return -ENODEV;
115}
116
117static inline int drm_agp_enable(struct drm_device *dev,
118 struct drm_agp_mode mode)
119{
120 return -ENODEV;
121}
122
123static inline int drm_agp_enable_ioctl(struct drm_device *dev, void *data,
124 struct drm_file *file_priv)
125{
126 return -ENODEV;
127}
128
129static inline int drm_agp_info(struct drm_device *dev,
130 struct drm_agp_info *info)
131{
132 return -ENODEV;
133}
134
135static inline int drm_agp_info_ioctl(struct drm_device *dev, void *data,
136 struct drm_file *file_priv)
137{
138 return -ENODEV;
139}
140
141static inline int drm_agp_alloc(struct drm_device *dev,
142 struct drm_agp_buffer *request)
143{
144 return -ENODEV;
145}
146
147static inline int drm_agp_alloc_ioctl(struct drm_device *dev, void *data,
148 struct drm_file *file_priv)
149{
150 return -ENODEV;
151}
152
153static inline int drm_agp_free(struct drm_device *dev,
154 struct drm_agp_buffer *request)
155{
156 return -ENODEV;
157}
158
159static inline int drm_agp_free_ioctl(struct drm_device *dev, void *data,
160 struct drm_file *file_priv)
161{
162 return -ENODEV;
163}
164
165static inline int drm_agp_unbind(struct drm_device *dev,
166 struct drm_agp_binding *request)
167{
168 return -ENODEV;
169}
170
171static inline int drm_agp_unbind_ioctl(struct drm_device *dev, void *data,
172 struct drm_file *file_priv)
173{
174 return -ENODEV;
175}
176
177static inline int drm_agp_bind(struct drm_device *dev,
178 struct drm_agp_binding *request)
179{
180 return -ENODEV;
181}
182
183static inline int drm_agp_bind_ioctl(struct drm_device *dev, void *data,
184 struct drm_file *file_priv)
185{
186 return -ENODEV;
187}
David Herrmann00fd78e2013-08-08 22:19:12 +0200188#endif /* __OS_HAS_AGP */
189
190#endif /* _DRM_AGPSUPPORT_H_ */