From 65d25572deec33b7da13c211bf0aa78c361f535a Mon Sep 17 00:00:00 2001 From: Michel Daenzer Date: Sat, 2 Feb 2002 17:03:51 +0000 Subject: wrapper for ioremap_nocache() like for ioremap() (Paul Mundt) --- linux/drmP.h | 4 ++++ linux/drm_memory.h | 23 +++++++++++++++++++++++ 2 files changed, 27 insertions(+) (limited to 'linux') diff --git a/linux/drmP.h b/linux/drmP.h index 7557fdc9..85a6a06f 100644 --- a/linux/drmP.h +++ b/linux/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/drm_memory.h b/linux/drm_memory.h index f11b80c3..22aab7f4 100644 --- a/linux/drm_memory.h +++ b/linux/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; -- cgit v1.2.3