sh: Fix up the __raw_read/writeX() definitions.
Paul Mundt [Wed, 1 Oct 2008 06:12:27 +0000 (15:12 +0900)]
These were doing largely bogus things and using the wrong typing for
the address. Bring these in line with the ARM definitions.

Signed-off-by: Paul Mundt <lethal@linux-sh.org>

arch/sh/include/asm/io.h
arch/sh/lib/io.c

index 1857666..d9e794e 100644 (file)
 #define outsw          __outsw
 #define outsl          __outsl
 
-#define __raw_readb(a)         __readb((void __iomem *)(a))
-#define __raw_readw(a)         __readw((void __iomem *)(a))
-#define __raw_readl(a)         __readl((void __iomem *)(a))
-#define __raw_writeb(v, a)     __writeb(v, (void __iomem *)(a))
-#define __raw_writew(v, a)     __writew(v, (void __iomem *)(a))
-#define __raw_writel(v, a)     __writel(v, (void __iomem *)(a))
+#define __raw_writeb(v,a)      (__chk_io_ptr(a), *(volatile unsigned char __force  *)(a) = (v))
+#define __raw_writew(v,a)      (__chk_io_ptr(a), *(volatile unsigned short __force *)(a) = (v))
+#define __raw_writel(v,a)      (__chk_io_ptr(a), *(volatile unsigned int __force   *)(a) = (v))
 
-void __raw_writesl(unsigned long addr, const void *data, int longlen);
-void __raw_readsl(unsigned long addr, void *data, int longlen);
+#define __raw_readb(a)         (__chk_io_ptr(a), *(volatile unsigned char __force  *)(a))
+#define __raw_readw(a)         (__chk_io_ptr(a), *(volatile unsigned short __force *)(a))
+#define __raw_readl(a)         (__chk_io_ptr(a), *(volatile unsigned int __force   *)(a))
+
+void __raw_writesl(void __iomem *addr, const void *data, int longlen);
+void __raw_readsl(const void __iomem *addr, void *data, int longlen);
 
 /*
  * The platform header files may define some of these macros to use
  * the inlined versions where appropriate.  These macros may also be
  * redefined by userlevel programs.
  */
-#ifdef __readb
-# define readb(a)      ({ unsigned int r_ = __raw_readb(a); mb(); r_; })
-#endif
-#ifdef __raw_readw
-# define readw(a)      ({ unsigned int r_ = __raw_readw(a); mb(); r_; })
-#endif
-#ifdef __raw_readl
-# define readl(a)      ({ unsigned int r_ = __raw_readl(a); mb(); r_; })
-#endif
+#define readb(a)       ({ unsigned int r_ = __readb(a); mb(); r_; })
+#define readw(a)       ({ unsigned int r_ = __readw(a); mb(); r_; })
+#define readl(a)       ({ unsigned int r_ = __readl(a); mb(); r_; })
 
-#ifdef __raw_writeb
-# define writeb(v,a)   ({ __raw_writeb((v),(a)); mb(); })
-#endif
-#ifdef __raw_writew
-# define writew(v,a)   ({ __raw_writew((v),(a)); mb(); })
-#endif
-#ifdef __raw_writel
-# define writel(v,a)   ({ __raw_writel((v),(a)); mb(); })
-#endif
+#define writeb(v,a)    ({ __writeb((v),(a)); mb(); })
+#define writew(v,a)    ({ __writew((v),(a)); mb(); })
+#define writel(v,a)    ({ __writel((v),(a)); mb(); })
 
 #define __BUILD_MEMORY_STRING(bwlq, type)                              \
                                                                        \
-static inline void writes##bwlq(volatile void __iomem *mem,            \
+static inline void __raw_writes##bwlq(volatile void __iomem *mem,      \
                                const void *addr, unsigned int count)   \
 {                                                                      \
        const volatile type *__addr = addr;                             \
@@ -149,8 +138,8 @@ static inline void writes##bwlq(volatile void __iomem *mem,         \
        }                                                               \
 }                                                                      \
                                                                        \
-static inline void reads##bwlq(volatile void __iomem *mem, void *addr, \
-                              unsigned int count)                      \
+static inline void __raw_reads##bwlq(volatile void __iomem *mem,       \
+                              void *addr, unsigned int count)          \
 {                                                                      \
        volatile type *__addr = addr;                                   \
                                                                        \
@@ -162,7 +151,13 @@ static inline void reads##bwlq(volatile void __iomem *mem, void *addr,     \
 
 __BUILD_MEMORY_STRING(b, u8)
 __BUILD_MEMORY_STRING(w, u16)
+
+#define writesb        __raw_writesb
+#define writesw        __raw_writesw
 #define writesl __raw_writesl
+
+#define readsb __raw_readsb
+#define readsw __raw_readsw
 #define readsl  __raw_readsl
 
 #define readb_relaxed(a) readb(a)
@@ -170,25 +165,25 @@ __BUILD_MEMORY_STRING(w, u16)
 #define readl_relaxed(a) readl(a)
 
 /* Simple MMIO */
-#define ioread8(a)             readb(a)
-#define ioread16(a)            readw(a)
+#define ioread8(a)             __raw_readb(a)
+#define ioread16(a)            __raw_readw(a)
 #define ioread16be(a)          be16_to_cpu(__raw_readw((a)))
-#define ioread32(a)            readl(a)
+#define ioread32(a)            __raw_readl(a)
 #define ioread32be(a)          be32_to_cpu(__raw_readl((a)))
 
-#define iowrite8(v,a)          writeb((v),(a))
-#define iowrite16(v,a)         writew((v),(a))
+#define iowrite8(v,a)          __raw_writeb((v),(a))
+#define iowrite16(v,a)         __raw_writew((v),(a))
 #define iowrite16be(v,a)       __raw_writew(cpu_to_be16((v)),(a))
-#define iowrite32(v,a)         writel((v),(a))
+#define iowrite32(v,a)         __raw_writel((v),(a))
 #define iowrite32be(v,a)       __raw_writel(cpu_to_be32((v)),(a))
 
-#define ioread8_rep(a, d, c)   readsb((a), (d), (c))
-#define ioread16_rep(a, d, c)  readsw((a), (d), (c))
-#define ioread32_rep(a, d, c)  readsl((a), (d), (c))
+#define ioread8_rep(a, d, c)   __raw_readsb((a), (d), (c))
+#define ioread16_rep(a, d, c)  __raw_readsw((a), (d), (c))
+#define ioread32_rep(a, d, c)  __raw_readsl((a), (d), (c))
 
-#define iowrite8_rep(a, s, c)  writesb((a), (s), (c))
-#define iowrite16_rep(a, s, c) writesw((a), (s), (c))
-#define iowrite32_rep(a, s, c) writesl((a), (s), (c))
+#define iowrite8_rep(a, s, c)  __raw_writesb((a), (s), (c))
+#define iowrite16_rep(a, s, c) __raw_writesw((a), (s), (c))
+#define iowrite32_rep(a, s, c) __raw_writesl((a), (s), (c))
 
 #define mmiowb()       wmb()   /* synco on SH-4A, otherwise a nop */
 
index 4f54ec4..88dfe6e 100644 (file)
 #include <linux/module.h>
 #include <linux/io.h>
 
-void __raw_readsl(unsigned long addr, void *datap, int len)
+void __raw_readsl(const void __iomem *addr, void *datap, int len)
 {
        u32 *data;
 
        for (data = datap; (len != 0) && (((u32)data & 0x1f) != 0); len--)
-               *data++ = ctrl_inl(addr);
+               *data++ = __raw_readl(addr);
 
        if (likely(len >= (0x20 >> 2))) {
                int tmp2, tmp3, tmp4, tmp5, tmp6;
@@ -59,11 +59,11 @@ void __raw_readsl(unsigned long addr, void *datap, int len)
        }
 
        for (; len != 0; len--)
-               *data++ = ctrl_inl(addr);
+               *data++ = __raw_readl(addr);
 }
 EXPORT_SYMBOL(__raw_readsl);
 
-void __raw_writesl(unsigned long addr, const void *data, int len)
+void __raw_writesl(void __iomem *addr, const void *data, int len)
 {
        if (likely(len != 0)) {
                int tmp1;