aboutsummaryrefslogtreecommitdiff
path: root/include/asm-m68k
diff options
context:
space:
mode:
authorHaavard Skinnemoen2007-12-13 12:56:31 +0100
committerStefan Roese2007-12-13 13:15:04 +0100
commit812711ce6b3a386125dcf0d6a59588e461abbb87 (patch)
tree7aa549af060b380507eb6da479a11ac63fb34968 /include/asm-m68k
parentbe60a9021c82fc5aecd5b2b1fc96f70a9c81bbcd (diff)
Implement __raw_{read,write}[bwl] on all architectures
This adds implementations of __raw_read[bwl] and __raw_write[bwl] to m68k, ppc, nios and nios2. The m68k and ppc implementations were taken from Linux. Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
Diffstat (limited to 'include/asm-m68k')
-rw-r--r--include/asm-m68k/io.h14
1 files changed, 14 insertions, 0 deletions
diff --git a/include/asm-m68k/io.h b/include/asm-m68k/io.h
index e14a581dc16..29b3972473b 100644
--- a/include/asm-m68k/io.h
+++ b/include/asm-m68k/io.h
@@ -28,6 +28,20 @@
#include <asm/byteorder.h>
+/* ++roman: The assignments to temp. vars avoid that gcc sometimes generates
+ * two accesses to memory, which may be undesirable for some devices.
+ */
+#define __raw_readb(addr) \
+ ({ u8 __v = (*(volatile u8 *) (addr)); __v; })
+#define __raw_readw(addr) \
+ ({ u16 __v = (*(volatile u16 *) (addr)); __v; })
+#define __raw_readl(addr) \
+ ({ u32 __v = (*(volatile u32 *) (addr)); __v; })
+
+#define __raw_writeb(addr,b) (void)((*(volatile u8 *) (addr)) = (b))
+#define __raw_writew(addr,w) (void)((*(volatile u16 *) (addr)) = (w))
+#define __raw_writel(addr,l) (void)((*(volatile u32 *) (addr)) = (l))
+
#define readb(addr) in_8((volatile u8 *)(addr))
#define writeb(b,addr) out_8((volatile u8 *)(addr), (b))
#if !defined(__BIG_ENDIAN)