diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/char/drm/drm_bufs.c | 66 | ||||
-rw-r--r-- | drivers/char/drm/drm_context.c | 2 | ||||
-rw-r--r-- | drivers/char/drm/drm_sysfs.c | 1 | ||||
-rw-r--r-- | drivers/char/drm/mga_dma.c | 14 |
4 files changed, 46 insertions, 37 deletions
diff --git a/drivers/char/drm/drm_bufs.c b/drivers/char/drm/drm_bufs.c index e0743ebbe4bd..f28e70ae6606 100644 --- a/drivers/char/drm/drm_bufs.c +++ b/drivers/char/drm/drm_bufs.c | |||
@@ -48,8 +48,8 @@ unsigned long drm_get_resource_len(drm_device_t *dev, unsigned int resource) | |||
48 | } | 48 | } |
49 | EXPORT_SYMBOL(drm_get_resource_len); | 49 | EXPORT_SYMBOL(drm_get_resource_len); |
50 | 50 | ||
51 | static drm_local_map_t *drm_find_matching_map(drm_device_t *dev, | 51 | static drm_map_list_t *drm_find_matching_map(drm_device_t *dev, |
52 | drm_local_map_t *map) | 52 | drm_local_map_t *map) |
53 | { | 53 | { |
54 | struct list_head *list; | 54 | struct list_head *list; |
55 | 55 | ||
@@ -57,7 +57,7 @@ static drm_local_map_t *drm_find_matching_map(drm_device_t *dev, | |||
57 | drm_map_list_t *entry = list_entry(list, drm_map_list_t, head); | 57 | drm_map_list_t *entry = list_entry(list, drm_map_list_t, head); |
58 | if (entry->map && map->type == entry->map->type && | 58 | if (entry->map && map->type == entry->map->type && |
59 | entry->map->offset == map->offset) { | 59 | entry->map->offset == map->offset) { |
60 | return entry->map; | 60 | return entry; |
61 | } | 61 | } |
62 | } | 62 | } |
63 | 63 | ||
@@ -114,14 +114,13 @@ static __inline__ unsigned int HandleID(unsigned long lhandle, drm_device_t *dev | |||
114 | * type. Adds the map to the map list drm_device::maplist. Adds MTRR's where | 114 | * type. Adds the map to the map list drm_device::maplist. Adds MTRR's where |
115 | * applicable and if supported by the kernel. | 115 | * applicable and if supported by the kernel. |
116 | */ | 116 | */ |
117 | int drm_addmap(drm_device_t * dev, unsigned int offset, | 117 | int drm_addmap_core(drm_device_t * dev, unsigned int offset, |
118 | unsigned int size, drm_map_type_t type, | 118 | unsigned int size, drm_map_type_t type, |
119 | drm_map_flags_t flags, drm_local_map_t ** map_ptr) | 119 | drm_map_flags_t flags, drm_map_list_t **maplist) |
120 | { | 120 | { |
121 | drm_map_t *map; | 121 | drm_map_t *map; |
122 | drm_map_list_t *list; | 122 | drm_map_list_t *list; |
123 | drm_dma_handle_t *dmah; | 123 | drm_dma_handle_t *dmah; |
124 | drm_local_map_t *found_map; | ||
125 | 124 | ||
126 | map = drm_alloc( sizeof(*map), DRM_MEM_MAPS ); | 125 | map = drm_alloc( sizeof(*map), DRM_MEM_MAPS ); |
127 | if ( !map ) | 126 | if ( !map ) |
@@ -166,17 +165,17 @@ int drm_addmap(drm_device_t * dev, unsigned int offset, | |||
166 | * needing to be aware of it. Therefore, we just return success | 165 | * needing to be aware of it. Therefore, we just return success |
167 | * when the server tries to create a duplicate map. | 166 | * when the server tries to create a duplicate map. |
168 | */ | 167 | */ |
169 | found_map = drm_find_matching_map(dev, map); | 168 | list = drm_find_matching_map(dev, map); |
170 | if (found_map != NULL) { | 169 | if (list != NULL) { |
171 | if (found_map->size != map->size) { | 170 | if (list->map->size != map->size) { |
172 | DRM_DEBUG("Matching maps of type %d with " | 171 | DRM_DEBUG("Matching maps of type %d with " |
173 | "mismatched sizes, (%ld vs %ld)\n", | 172 | "mismatched sizes, (%ld vs %ld)\n", |
174 | map->type, map->size, found_map->size); | 173 | map->type, map->size, list->map->size); |
175 | found_map->size = map->size; | 174 | list->map->size = map->size; |
176 | } | 175 | } |
177 | 176 | ||
178 | drm_free(map, sizeof(*map), DRM_MEM_MAPS); | 177 | drm_free(map, sizeof(*map), DRM_MEM_MAPS); |
179 | *map_ptr = found_map; | 178 | *maplist = list; |
180 | return 0; | 179 | return 0; |
181 | } | 180 | } |
182 | 181 | ||
@@ -264,9 +263,22 @@ int drm_addmap(drm_device_t * dev, unsigned int offset, | |||
264 | : map->offset, dev); | 263 | : map->offset, dev); |
265 | up(&dev->struct_sem); | 264 | up(&dev->struct_sem); |
266 | 265 | ||
267 | *map_ptr = map; | 266 | *maplist = list; |
268 | return 0; | 267 | return 0; |
269 | } | 268 | } |
269 | |||
270 | int drm_addmap(drm_device_t *dev, unsigned int offset, | ||
271 | unsigned int size, drm_map_type_t type, | ||
272 | drm_map_flags_t flags, drm_local_map_t **map_ptr) | ||
273 | { | ||
274 | drm_map_list_t *list; | ||
275 | int rc; | ||
276 | |||
277 | rc = drm_addmap_core(dev, offset, size, type, flags, &list); | ||
278 | if (!rc) | ||
279 | *map_ptr = list->map; | ||
280 | return rc; | ||
281 | } | ||
270 | EXPORT_SYMBOL(drm_addmap); | 282 | EXPORT_SYMBOL(drm_addmap); |
271 | 283 | ||
272 | int drm_addmap_ioctl(struct inode *inode, struct file *filp, | 284 | int drm_addmap_ioctl(struct inode *inode, struct file *filp, |
@@ -275,10 +287,9 @@ int drm_addmap_ioctl(struct inode *inode, struct file *filp, | |||
275 | drm_file_t *priv = filp->private_data; | 287 | drm_file_t *priv = filp->private_data; |
276 | drm_device_t *dev = priv->head->dev; | 288 | drm_device_t *dev = priv->head->dev; |
277 | drm_map_t map; | 289 | drm_map_t map; |
278 | drm_map_t *map_ptr; | 290 | drm_map_list_t *maplist; |
279 | drm_map_t __user *argp = (void __user *)arg; | 291 | drm_map_t __user *argp = (void __user *)arg; |
280 | int err; | 292 | int err; |
281 | unsigned long handle = 0; | ||
282 | 293 | ||
283 | if (!(filp->f_mode & 3)) | 294 | if (!(filp->f_mode & 3)) |
284 | return -EACCES; /* Require read/write */ | 295 | return -EACCES; /* Require read/write */ |
@@ -287,26 +298,15 @@ int drm_addmap_ioctl(struct inode *inode, struct file *filp, | |||
287 | return -EFAULT; | 298 | return -EFAULT; |
288 | } | 299 | } |
289 | 300 | ||
290 | err = drm_addmap(dev, map.offset, map.size, map.type, map.flags, | 301 | err = drm_addmap_core(dev, map.offset, map.size, map.type, map.flags, |
291 | &map_ptr); | 302 | &maplist); |
292 | 303 | ||
293 | if (err) { | 304 | if (err) |
294 | return err; | 305 | return err; |
295 | } | ||
296 | |||
297 | { | ||
298 | drm_map_list_t *_entry; | ||
299 | list_for_each_entry(_entry, &dev->maplist->head, head) { | ||
300 | if (_entry->map == map_ptr) | ||
301 | handle = _entry->user_token; | ||
302 | } | ||
303 | if (!handle) | ||
304 | return -EFAULT; | ||
305 | } | ||
306 | 306 | ||
307 | if (copy_to_user(argp, map_ptr, sizeof(*map_ptr))) | 307 | if (copy_to_user(argp, maplist->map, sizeof(drm_map_t))) |
308 | return -EFAULT; | 308 | return -EFAULT; |
309 | if (put_user(handle, &argp->handle)) | 309 | if (put_user(maplist->user_token, &argp->handle)) |
310 | return -EFAULT; | 310 | return -EFAULT; |
311 | return 0; | 311 | return 0; |
312 | } | 312 | } |
@@ -1041,7 +1041,7 @@ static int drm_addbufs_sg(drm_device_t *dev, drm_buf_desc_t *request) | |||
1041 | return 0; | 1041 | return 0; |
1042 | } | 1042 | } |
1043 | 1043 | ||
1044 | int drm_addbufs_fb(drm_device_t *dev, drm_buf_desc_t *request) | 1044 | static int drm_addbufs_fb(drm_device_t *dev, drm_buf_desc_t *request) |
1045 | { | 1045 | { |
1046 | drm_device_dma_t *dma = dev->dma; | 1046 | drm_device_dma_t *dma = dev->dma; |
1047 | drm_buf_entry_t *entry; | 1047 | drm_buf_entry_t *entry; |
diff --git a/drivers/char/drm/drm_context.c b/drivers/char/drm/drm_context.c index f515567e5b6f..502892794c16 100644 --- a/drivers/char/drm/drm_context.c +++ b/drivers/char/drm/drm_context.c | |||
@@ -308,7 +308,7 @@ found: | |||
308 | * | 308 | * |
309 | * Attempt to set drm_device::context_flag. | 309 | * Attempt to set drm_device::context_flag. |
310 | */ | 310 | */ |
311 | int drm_context_switch( drm_device_t *dev, int old, int new ) | 311 | static int drm_context_switch( drm_device_t *dev, int old, int new ) |
312 | { | 312 | { |
313 | if ( test_and_set_bit( 0, &dev->context_flag ) ) { | 313 | if ( test_and_set_bit( 0, &dev->context_flag ) ) { |
314 | DRM_ERROR( "Reentering -- FIXME\n" ); | 314 | DRM_ERROR( "Reentering -- FIXME\n" ); |
diff --git a/drivers/char/drm/drm_sysfs.c b/drivers/char/drm/drm_sysfs.c index 2fc10c4bbcdf..475cc5e555e1 100644 --- a/drivers/char/drm/drm_sysfs.c +++ b/drivers/char/drm/drm_sysfs.c | |||
@@ -17,6 +17,7 @@ | |||
17 | #include <linux/err.h> | 17 | #include <linux/err.h> |
18 | 18 | ||
19 | #include "drm_core.h" | 19 | #include "drm_core.h" |
20 | #include "drmP.h" | ||
20 | 21 | ||
21 | struct drm_sysfs_class { | 22 | struct drm_sysfs_class { |
22 | struct class_device_attribute attr; | 23 | struct class_device_attribute attr; |
diff --git a/drivers/char/drm/mga_dma.c b/drivers/char/drm/mga_dma.c index 567b425b784f..fc7d4a594bca 100644 --- a/drivers/char/drm/mga_dma.c +++ b/drivers/char/drm/mga_dma.c | |||
@@ -417,6 +417,7 @@ int mga_driver_preinit(drm_device_t *dev, unsigned long flags) | |||
417 | return 0; | 417 | return 0; |
418 | } | 418 | } |
419 | 419 | ||
420 | #if __OS_HAS_AGP | ||
420 | /** | 421 | /** |
421 | * Bootstrap the driver for AGP DMA. | 422 | * Bootstrap the driver for AGP DMA. |
422 | * | 423 | * |
@@ -560,6 +561,13 @@ static int mga_do_agp_dma_bootstrap(drm_device_t * dev, | |||
560 | DRM_INFO("Initialized card for AGP DMA.\n"); | 561 | DRM_INFO("Initialized card for AGP DMA.\n"); |
561 | return 0; | 562 | return 0; |
562 | } | 563 | } |
564 | #else | ||
565 | static int mga_do_agp_dma_bootstrap(drm_device_t * dev, | ||
566 | drm_mga_dma_bootstrap_t * dma_bs) | ||
567 | { | ||
568 | return -EINVAL; | ||
569 | } | ||
570 | #endif | ||
563 | 571 | ||
564 | /** | 572 | /** |
565 | * Bootstrap the driver for PCI DMA. | 573 | * Bootstrap the driver for PCI DMA. |
@@ -697,7 +705,6 @@ static int mga_do_dma_bootstrap(drm_device_t * dev, | |||
697 | * carve off portions of it for internal uses. The remaining memory | 705 | * carve off portions of it for internal uses. The remaining memory |
698 | * is returned to user-mode to be used for AGP textures. | 706 | * is returned to user-mode to be used for AGP textures. |
699 | */ | 707 | */ |
700 | |||
701 | if (is_agp) { | 708 | if (is_agp) { |
702 | err = mga_do_agp_dma_bootstrap(dev, dma_bs); | 709 | err = mga_do_agp_dma_bootstrap(dev, dma_bs); |
703 | } | 710 | } |
@@ -932,6 +939,7 @@ static int mga_do_cleanup_dma( drm_device_t *dev ) | |||
932 | drm_core_ioremapfree(dev->agp_buffer_map, dev); | 939 | drm_core_ioremapfree(dev->agp_buffer_map, dev); |
933 | 940 | ||
934 | if (dev_priv->used_new_dma_init) { | 941 | if (dev_priv->used_new_dma_init) { |
942 | #if __OS_HAS_AGP | ||
935 | if (dev_priv->agp_mem != NULL) { | 943 | if (dev_priv->agp_mem != NULL) { |
936 | dev_priv->agp_textures = NULL; | 944 | dev_priv->agp_textures = NULL; |
937 | drm_unbind_agp(dev_priv->agp_mem); | 945 | drm_unbind_agp(dev_priv->agp_mem); |
@@ -944,7 +952,7 @@ static int mga_do_cleanup_dma( drm_device_t *dev ) | |||
944 | if ((dev->agp != NULL) && dev->agp->acquired) { | 952 | if ((dev->agp != NULL) && dev->agp->acquired) { |
945 | err = drm_agp_release(dev); | 953 | err = drm_agp_release(dev); |
946 | } | 954 | } |
947 | 955 | #endif | |
948 | dev_priv->used_new_dma_init = 0; | 956 | dev_priv->used_new_dma_init = 0; |
949 | } | 957 | } |
950 | 958 | ||
@@ -965,7 +973,7 @@ static int mga_do_cleanup_dma( drm_device_t *dev ) | |||
965 | } | 973 | } |
966 | } | 974 | } |
967 | 975 | ||
968 | return 0; | 976 | return err; |
969 | } | 977 | } |
970 | 978 | ||
971 | int mga_dma_init( DRM_IOCTL_ARGS ) | 979 | int mga_dma_init( DRM_IOCTL_ARGS ) |