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