summaryrefslogtreecommitdiff
path: root/include/asm-nios2/io.h
diff options
context:
space:
mode:
authorwdenk <wdenk>2005-03-30 23:28:18 +0000
committerwdenk <wdenk>2005-03-30 23:28:18 +0000
commit0c1c117cf18ffa3fdc0342dfc47c6003fc5fc5a0 (patch)
treeac60588bc373565ce7a626e39b3d149e715be025 /include/asm-nios2/io.h
parent8f0b7cbe8027c3745f5e0a199ecd152b032d8ad0 (diff)
downloadu-boot-imx-0c1c117cf18ffa3fdc0342dfc47c6003fc5fc5a0.zip
u-boot-imx-0c1c117cf18ffa3fdc0342dfc47c6003fc5fc5a0.tar.gz
u-boot-imx-0c1c117cf18ffa3fdc0342dfc47c6003fc5fc5a0.tar.bz2
* Patch by Scott McNutt, 21 Oct 2004:
Add support for Nios-II EPCS Controller core. * Patch by Scott McNutt, 20 Oct 2004: Nios-II cleanups: - Add sysid command (Nios-II only). - Locate default exception trampoline at proper offset. - Implement I/O routines (readb, writeb, etc) - Implement do_bootm_linux
Diffstat (limited to 'include/asm-nios2/io.h')
-rw-r--r--include/asm-nios2/io.h59
1 files changed, 56 insertions, 3 deletions
diff --git a/include/asm-nios2/io.h b/include/asm-nios2/io.h
index c2c8ffc..b16a988 100644
--- a/include/asm-nios2/io.h
+++ b/include/asm-nios2/io.h
@@ -29,8 +29,61 @@
extern unsigned char inb (unsigned char *port);
extern unsigned short inw (unsigned short *port);
extern unsigned inl (unsigned port);
-extern void outb (unsigned char val, unsigned char *port);
-extern void outw (unsigned short val, unsigned short *port);
-extern void outl (unsigned val, unsigned port);
+
+#define readb(addr)\
+ ({unsigned char val;\
+ asm volatile( "ldbio %0, 0(%1)" :"=r"(val) : "r" (addr)); val;})
+#define readw(addr)\
+ ({unsigned short val;\
+ asm volatile( "ldhio %0, 0(%1)" :"=r"(val) : "r" (addr)); val;})
+#define readl(addr)\
+ ({unsigned long val;\
+ asm volatile( "ldwio %0, 0(%1)" :"=r"(val) : "r" (addr)); val;})
+#define writeb(addr,val)\
+ asm volatile ("stbio %0, 0(%1)" : : "r" (addr), "r" (val))
+#define writew(addr,val)\
+ asm volatile ("sthio %0, 0(%1)" : : "r" (addr), "r" (val))
+#define writel(addr,val)\
+ asm volatile ("stwio %0, 0(%1)" : : "r" (addr), "r" (val))
+
+#define inb(addr) readb(addr)
+#define inw(addr) readw(addr)
+#define inl(addr) readl(addr)
+#define outb(addr,val) writeb(addr,val)
+#define outw(addr,val) writew(addr,val)
+#define outl(addr,val) writel(addr,val)
+
+static inline void insb (unsigned long port, void *dst, unsigned long count)
+{
+ unsigned char *p = dst;
+ while (count--) *p++ = inb (port);
+}
+static inline void insw (unsigned long port, void *dst, unsigned long count)
+{
+ unsigned short *p = dst;
+ while (count--) *p++ = inw (port);
+}
+static inline void insl (unsigned long port, void *dst, unsigned long count)
+{
+ unsigned long *p = dst;
+ while (count--) *p++ = inl (port);
+}
+
+static inline void outsb (unsigned long port, const void *src, unsigned long count)
+{
+ const unsigned char *p = src;
+ while (count--) outb (*p++, port);
+}
+
+static inline void outsw (unsigned long port, const void *src, unsigned long count)
+{
+ const unsigned short *p = src;
+ while (count--) outw (*p++, port);
+}
+static inline void outsl (unsigned long port, const void *src, unsigned long count)
+{
+ const unsigned long *p = src;
+ while (count--) outl (*p++, port);
+}
#endif /* __ASM_NIOS2_IO_H_ */