aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Anholt2007-08-15 16:29:31 -0500
committerEric Anholt2007-08-15 16:29:31 -0500
commitb668d6d9050106bebfb704e4ed32d2924bb26371 (patch)
treeefdc06fab9804aebb52312ef72de029e2821aaf8 /bsd-core
parent6e93c35ba7c5001e756d0c9d1a4f534384652a5a (diff)
downloadexternal-libdrm-b668d6d9050106bebfb704e4ed32d2924bb26371.tar.gz
external-libdrm-b668d6d9050106bebfb704e4ed32d2924bb26371.tar.xz
external-libdrm-b668d6d9050106bebfb704e4ed32d2924bb26371.zip
Fix dev->agp->base initialization on BSD, and fix addmap range check on Linux.
With the previous linux commit, an AGP aperture at the end of the address space would have wrapped to 0 and the test would have failed.
Diffstat (limited to 'bsd-core')
-rw-r--r--bsd-core/drm_agpsupport.c2
-rw-r--r--bsd-core/drm_bufs.c12
2 files changed, 12 insertions, 2 deletions
diff --git a/bsd-core/drm_agpsupport.c b/bsd-core/drm_agpsupport.c
index 9aed5572..6f963b9c 100644
--- a/bsd-core/drm_agpsupport.c
+++ b/bsd-core/drm_agpsupport.c
@@ -184,7 +184,6 @@ int drm_agp_enable(drm_device_t *dev, drm_agp_mode_t mode)
184 184
185 dev->agp->mode = mode.mode; 185 dev->agp->mode = mode.mode;
186 agp_enable(dev->agp->agpdev, mode.mode); 186 agp_enable(dev->agp->agpdev, mode.mode);
187 dev->agp->base = dev->agp->info.ai_aperture_base;
188 dev->agp->enabled = 1; 187 dev->agp->enabled = 1;
189 return 0; 188 return 0;
190} 189}
@@ -405,6 +404,7 @@ drm_agp_head_t *drm_agp_init(void)
405 return NULL; 404 return NULL;
406 head->agpdev = agpdev; 405 head->agpdev = agpdev;
407 agp_get_info(agpdev, &head->info); 406 agp_get_info(agpdev, &head->info);
407 head->base = head->info.ai_aperture_base;
408 head->memory = NULL; 408 head->memory = NULL;
409 DRM_INFO("AGP at 0x%08lx %dMB\n", 409 DRM_INFO("AGP at 0x%08lx %dMB\n",
410 (long)head->info.ai_aperture_base, 410 (long)head->info.ai_aperture_base,
diff --git a/bsd-core/drm_bufs.c b/bsd-core/drm_bufs.c
index 65d8c82b..9b58c593 100644
--- a/bsd-core/drm_bufs.c
+++ b/bsd-core/drm_bufs.c
@@ -191,7 +191,17 @@ int drm_addmap(drm_device_t * dev, unsigned long offset, unsigned long size,
191 break; 191 break;
192 case _DRM_AGP: 192 case _DRM_AGP:
193 /*valid = 0;*/ 193 /*valid = 0;*/
194 map->offset += dev->agp->base; 194 /* In some cases (i810 driver), user space may have already
195 * added the AGP base itself, because dev->agp->base previously
196 * only got set during AGP enable. So, only add the base
197 * address if the map's offset isn't already within the
198 * aperture.
199 */
200 if (map->offset < dev->agp->base ||
201 map->offset > dev->agp->base +
202 dev->agp->info.ai_aperture_size - 1) {
203 map->offset += dev->agp->base;
204 }
195 map->mtrr = dev->agp->mtrr; /* for getmap */ 205 map->mtrr = dev->agp->mtrr; /* for getmap */
196 /*for (entry = dev->agp->memory; entry; entry = entry->next) { 206 /*for (entry = dev->agp->memory; entry; entry = entry->next) {
197 if ((map->offset >= entry->bound) && 207 if ((map->offset >= entry->bound) &&