[ARM] Add a common typesafe __io implementation
Russell King [Sun, 30 Nov 2008 11:45:54 +0000 (11:45 +0000)]
As Al did for Versatile in 2ad4f86b60b649fd7428265c08d73a3bd360c81b,
add a typesafe __io implementation for platforms to use.  Convert
platforms to use this new simple typesafe implementation.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>

23 files changed:
arch/arm/include/asm/io.h
arch/arm/mach-aaec2000/include/mach/io.h
arch/arm/mach-at91/include/mach/io.h
arch/arm/mach-clps711x/include/mach/io.h
arch/arm/mach-davinci/include/mach/io.h
arch/arm/mach-ep93xx/include/mach/io.h
arch/arm/mach-h720x/include/mach/io.h
arch/arm/mach-imx/include/mach/io.h
arch/arm/mach-ixp4xx/include/mach/io.h
arch/arm/mach-ks8695/include/mach/io.h
arch/arm/mach-l7200/include/mach/io.h
arch/arm/mach-lh7a40x/include/mach/io.h
arch/arm/mach-msm/include/mach/io.h
arch/arm/mach-netx/include/mach/io.h
arch/arm/mach-ns9xxx/include/mach/io.h
arch/arm/mach-orion5x/include/mach/io.h
arch/arm/mach-pnx4008/include/mach/io.h
arch/arm/mach-pxa/include/mach/io.h
arch/arm/mach-realview/include/mach/io.h
arch/arm/mach-sa1100/include/mach/io.h
arch/arm/mach-versatile/include/mach/io.h
arch/arm/plat-mxc/include/mach/io.h
arch/arm/plat-omap/include/mach/io.h

index a809445..d2a59cf 100644 (file)
@@ -80,6 +80,14 @@ extern void __iounmap(volatile void __iomem *addr);
 extern void __readwrite_bug(const char *fn);
 
 /*
+ * A typesafe __io() helper
+ */
+static inline void __iomem *__typesafe_io(unsigned long addr)
+{
+       return (void __iomem *)addr;
+}
+
+/*
  * Now, pick up the machine-defined IO definitions
  */
 #include <mach/io.h>
index a283296..ab4fe5d 100644 (file)
@@ -12,7 +12,7 @@
  * We don't actually have real ISA nor PCI buses, but there is so many
  * drivers out there that might just work if we fake them...
  */
-#define __io(a)                        ((void __iomem *)(a))
-#define __mem_pci(a)           (a)
+#define __io(a)                __typesafe_io(a)
+#define __mem_pci(a)   (a)
 
 #endif
index 1611bd0..0b0cccc 100644 (file)
@@ -23,8 +23,8 @@
 
 #define IO_SPACE_LIMIT         0xFFFFFFFF
 
-#define __io(a)                        ((void __iomem *)(a))
-#define __mem_pci(a)           (a)
+#define __io(a)                __typesafe_io(a)
+#define __mem_pci(a)   (a)
 
 
 #ifndef __ASSEMBLY__
index 49419f9..2e0b3ce 100644 (file)
@@ -22,8 +22,8 @@
 
 #define IO_SPACE_LIMIT 0xffffffff
 
-#define __io(a)                        ((void __iomem *)(a))
-#define __mem_pci(a)           (a)
+#define __io(a)                __typesafe_io(a)
+#define __mem_pci(a)   (a)
 
 /*
  * We don't support ins[lb]/outs[lb].  Make them fault.
index b78ee91..a48795f 100644 (file)
@@ -29,8 +29,7 @@
  * We don't actually have real ISA nor PCI buses, but there is so many
  * drivers out there that might just work if we fake them...
  */
-#define PCIO_BASE               0
-#define __io(a)                        ((void __iomem *)(PCIO_BASE + (a)))
+#define __io(a)                        __typesafe_io(a)
 #define __mem_pci(a)           (a)
 #define __mem_isa(a)           (a)
 
index 1ab9a90..fd5f081 100644 (file)
@@ -4,5 +4,5 @@
 
 #define IO_SPACE_LIMIT         0xffffffff
 
-#define __io(p)                        ((void __iomem *)(p))
-#define __mem_pci(p)           (p)
+#define __io(p)                __typesafe_io(p)
+#define __mem_pci(p)   (p)
index f678e4f..2c8659c 100644 (file)
@@ -16,7 +16,7 @@
 
 #define IO_SPACE_LIMIT 0xffffffff
 
-#define __io(a)                ((void __iomem *)(a))
+#define __io(a)                __typesafe_io(a)
 #define __mem_pci(a)   (a)
 
 #endif
index 0a11b0f..9e197ae 100644 (file)
@@ -22,7 +22,7 @@
 
 #define IO_SPACE_LIMIT 0xffffffff
 
-#define __io(a)                ((void __iomem *)(a))
+#define __io(a)                __typesafe_io(a)
 #define __mem_pci(a)   (a)
 
 #endif
index b7f780f..ce63048 100644 (file)
@@ -239,7 +239,7 @@ __ixp4xx_readsl(const volatile void __iomem *bus_addr, u32 *vaddr, u32 count)
 
 #ifndef CONFIG_PCI
 
-#define        __io(v)         v
+#define        __io(v)         __typesafe_io(v)
 
 #else
 
index f364f24..a7a63ac 100644 (file)
@@ -13,7 +13,7 @@
 
 #define IO_SPACE_LIMIT         0xffffffff
 
-#define __io(a)                        ((void __iomem *)(a))
-#define __mem_pci(a)           (a)
+#define __io(a)                __typesafe_io(a)
+#define __mem_pci(a)   (a)
 
 #endif
index 64dc594..a770a89 100644 (file)
 /*
  * There are not real ISA nor PCI buses, so we fake it.
  */
-static inline void __iomem *__io(unsigned long addr)
-{
-       return (void __iomem *)addr;
-}
-#define __io(a)        __io(a)
-#define __mem_pci(a)           (a)
+#define __io(a)                __typesafe_io(a)
+#define __mem_pci(a)   (a)
 
 #endif
index e41422d..6ece459 100644 (file)
@@ -14,7 +14,7 @@
 #define IO_SPACE_LIMIT 0xffffffff
 
 /* No ISA or PCI bus on this machine. */
-#define __io(a)                        ((void __iomem *)(a))
-#define __mem_pci(a)           (a)
+#define __io(a)                __typesafe_io(a)
+#define __mem_pci(a)   (a)
 
 #endif /* __ASM_ARCH_IO_H */
index c6a2feb..aab9645 100644 (file)
 
 void __iomem *__msm_ioremap(unsigned long phys_addr, size_t size, unsigned int mtype);
 
-static inline void __iomem *__io(unsigned long addr)
-{
-       return (void __iomem *)addr;
-}
-#define __io(a)         __io(a)
+#define __io(a)                __typesafe_io(a)
 #define __mem_pci(a)    (a)
 
 #endif
index 468b92a..c3921cb 100644 (file)
@@ -22,7 +22,7 @@
 
 #define IO_SPACE_LIMIT 0xffffffff
 
-#define __io(a)         ((void __iomem *)(a))
+#define __io(a)                __typesafe_io(a)
 #define __mem_pci(a)            (a)
 
 #endif
index 027bf64..f08451d 100644 (file)
@@ -13,7 +13,7 @@
 
 #define IO_SPACE_LIMIT  0xffffffff /* XXX */
 
-#define __io(a)         ((void __iomem *)(a))
+#define __io(a)                __typesafe_io(a)
 #define __mem_pci(a)    (a)
 #define __mem_isa(a)    (IO_BASE + (a))
 
index f24b251..c47b033 100644 (file)
@@ -38,14 +38,9 @@ __arch_iounmap(void __iomem *addr)
                __iounmap(addr);
 }
 
-static inline void __iomem *__io(unsigned long addr)
-{
-       return (void __iomem *)addr;
-}
-
 #define __arch_ioremap(p, s, m)        __arch_ioremap(p, s, m)
 #define __arch_iounmap(a)      __arch_iounmap(a)
-#define __io(a)                        __io(a)
+#define __io(a)                        __typesafe_io(a)
 #define __mem_pci(a)           (a)
 
 
index c6206f2..cbf0904 100644 (file)
@@ -15,7 +15,7 @@
 
 #define IO_SPACE_LIMIT 0xffffffff
 
-#define __io(a)                        ((void __iomem *)(a))
-#define __mem_pci(a)           (a)
+#define __io(a)                __typesafe_io(a)
+#define __mem_pci(a)   (a)
 
 #endif
index 38cb212..262691f 100644 (file)
@@ -12,7 +12,7 @@
  * We don't actually have real ISA nor PCI buses, but there is so many
  * drivers out there that might just work if we fake them...
  */
-#define __io(a)                        ((void __iomem *)(a))
-#define __mem_pci(a)           (a)
+#define __io(a)                __typesafe_io(a)
+#define __mem_pci(a)   (a)
 
 #endif
index aa06942..f05bcdf 100644 (file)
 
 #define IO_SPACE_LIMIT 0xffffffff
 
-static inline void __iomem *__io(unsigned long addr)
-{
-       return (void __iomem *)addr;
-}
-
-#define __io(a)                        __io(a)
-#define __mem_pci(a)           (a)
+#define __io(a)                __typesafe_io(a)
+#define __mem_pci(a)   (a)
 
 #endif
index 0c070a6..d8b43f3 100644 (file)
  * We don't actually have real ISA nor PCI buses, but there is so many 
  * drivers out there that might just work if we fake them...
  */
-static inline void __iomem *__io(unsigned long addr)
-{
-       return (void __iomem *)addr;
-}
-#define __io(a)                        __io(a)
-#define __mem_pci(a)           (a)
+#define __io(a)                __typesafe_io(a)
+#define __mem_pci(a)   (a)
 
 #endif
index c0b9dd1..f067c14 100644 (file)
 
 #define IO_SPACE_LIMIT 0xffffffff
 
-static inline void __iomem *__io(unsigned long addr)
-{
-       return (void __iomem *)addr;
-}
-#define __io(a)        __io(a)
-#define __mem_pci(a)           (a)
+#define __io(a)                __typesafe_io(a)
+#define __mem_pci(a)   (a)
 
 #endif
index 5d4cb11..c0cb267 100644 (file)
@@ -35,8 +35,8 @@ __mx3_ioremap(unsigned long phys_addr, size_t size, unsigned int mtype)
 #endif
 
 /* io address mapping macro */
-#define __io(a)                        ((void __iomem *)(a))
+#define __io(a)                __typesafe_io(a)
 
-#define __mem_pci(a)           (a)
+#define __mem_pci(a)   (a)
 
 #endif
index adc83b7..d92bf79 100644 (file)
@@ -42,8 +42,8 @@
  * We don't actually have real ISA nor PCI buses, but there is so many
  * drivers out there that might just work if we fake them...
  */
-#define __io(a)                        ((void __iomem *)(PCIO_BASE + (a)))
-#define __mem_pci(a)           (a)
+#define __io(a)                __typesafe_io(a)
+#define __mem_pci(a)   (a)
 
 /*
  * ----------------------------------------------------------------------------
@@ -51,8 +51,6 @@
  * ----------------------------------------------------------------------------
  */
 
-#define PCIO_BASE      0
-
 #if defined(CONFIG_ARCH_OMAP1)
 
 #define IO_PHYS                        0xFFFB0000