diff options
Diffstat (limited to 'bsd-core')
| -rw-r--r-- | bsd-core/drm_agpsupport.c | 2 | ||||
| -rw-r--r-- | bsd-core/drm_bufs.c | 12 | 
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)  	dev->agp->mode    = mode.mode;  	agp_enable(dev->agp->agpdev, mode.mode); -	dev->agp->base    = dev->agp->info.ai_aperture_base;  	dev->agp->enabled = 1;  	return 0;  } @@ -405,6 +404,7 @@ drm_agp_head_t *drm_agp_init(void)  			return NULL;  		head->agpdev = agpdev;  		agp_get_info(agpdev, &head->info); +		head->base = head->info.ai_aperture_base;  		head->memory = NULL;  		DRM_INFO("AGP at 0x%08lx %dMB\n",  			 (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,  		break;  	case _DRM_AGP:  		/*valid = 0;*/ -		map->offset += dev->agp->base; +		/* In some cases (i810 driver), user space may have already +		 * added the AGP base itself, because dev->agp->base previously +		 * only got set during AGP enable.  So, only add the base +		 * address if the map's offset isn't already within the +		 * aperture. +		 */ +		if (map->offset < dev->agp->base || +		    map->offset > dev->agp->base + +		    dev->agp->info.ai_aperture_size - 1) { +			map->offset += dev->agp->base; +		}  		map->mtrr   = dev->agp->mtrr; /* for getmap */  		/*for (entry = dev->agp->memory; entry; entry = entry->next) {  			if ((map->offset >= entry->bound) &&  | 
