diff options
Diffstat (limited to 'linux-core')
| -rw-r--r-- | linux-core/drmP.h | 4 | ||||
| -rw-r--r-- | linux-core/drm_memory.h | 23 | 
2 files changed, 27 insertions, 0 deletions
| diff --git a/linux-core/drmP.h b/linux-core/drmP.h index 7557fdc9..85a6a06f 100644 --- a/linux-core/drmP.h +++ b/linux-core/drmP.h @@ -180,6 +180,9 @@  #define DRM_IOREMAP(map)						\  	(map)->handle = DRM(ioremap)( (map)->offset, (map)->size ) +#define DRM_IOREMAP_NOCACHE(map)					\ +	(map)->handle = DRM(ioremap_nocache)((map)->offset, (map)->size) +  #define DRM_IOREMAPFREE(map)						\  	do {								\  		if ( (map)->handle && (map)->size )			\ @@ -622,6 +625,7 @@ extern unsigned long DRM(alloc_pages)(int order, int area);  extern void	     DRM(free_pages)(unsigned long address, int order,  				     int area);  extern void	     *DRM(ioremap)(unsigned long offset, unsigned long size); +extern void	     *DRM(ioremap_nocache)(unsigned long offset, unsigned long size);  extern void	     DRM(ioremapfree)(void *pt, unsigned long size);  #if __REALLY_HAVE_AGP diff --git a/linux-core/drm_memory.h b/linux-core/drm_memory.h index f11b80c3..22aab7f4 100644 --- a/linux-core/drm_memory.h +++ b/linux-core/drm_memory.h @@ -314,6 +314,29 @@ void *DRM(ioremap)(unsigned long offset, unsigned long size)  	return pt;  } +void *DRM(ioremap_nocache)(unsigned long offset, unsigned long size) +{ +	void *pt; + +	if (!size) { +		DRM_MEM_ERROR(DRM_MEM_MAPPINGS, +			      "Mapping 0 bytes at 0x%08lx\n", offset); +		return NULL; +	} + +	if (!(pt = ioremap_nocache(offset, size))) { +		spin_lock(&DRM(mem_lock)); +		++DRM(mem_stats)[DRM_MEM_MAPPINGS].fail_count; +		spin_unlock(&DRM(mem_lock)); +		return NULL; +	} +	spin_lock(&DRM(mem_lock)); +	++DRM(mem_stats)[DRM_MEM_MAPPINGS].succeed_count; +	DRM(mem_stats)[DRM_MEM_MAPPINGS].bytes_allocated += size; +	spin_unlock(&DRM(mem_lock)); +	return pt; +} +  void DRM(ioremapfree)(void *pt, unsigned long size)  {  	int alloc_count; | 
