OSDN Git Service

wrapper for ioremap_nocache() like for ioremap() (Paul Mundt)
authorMichel Daenzer <michel@daenzer.net>
Sat, 2 Feb 2002 17:03:51 +0000 (17:03 +0000)
committerMichel Daenzer <michel@daenzer.net>
Sat, 2 Feb 2002 17:03:51 +0000 (17:03 +0000)
linux-core/drmP.h
linux-core/drm_memory.h
linux/drmP.h
linux/drm_memory.h

index 7557fdc..85a6a06 100644 (file)
 #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
index f11b80c..22aab7f 100644 (file)
@@ -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;
index 7557fdc..85a6a06 100644 (file)
 #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
index f11b80c..22aab7f 100644 (file)
@@ -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;