patch-2_6_7-vs1_9_1_12
[linux-2.6.git] / include / asm-ppc64 / io.h
index ac409a0..f6262ba 100644 (file)
@@ -240,22 +240,23 @@ static inline int in_8(volatile unsigned char *addr)
 {
        int ret;
 
-       __asm__ __volatile__("lbz%U1%X1 %0,%1; twi 0,%0,0; isync" :
-                            "=r" (ret) : "m" (*addr));
+       __asm__ __volatile__("lbz%U1%X1 %0,%1; twi 0,%0,0; isync"
+                            "=r" (ret) : "m" (*addr));
        return ret;
 }
 
 static inline void out_8(volatile unsigned char *addr, int val)
 {
-       __asm__ __volatile__("stb%U0%X0 %1,%0; eieio" : "=m" (*addr) : "r" (val));
+       __asm__ __volatile__("stb%U0%X0 %1,%0; sync"
+                            : "=m" (*addr) : "r" (val));
 }
 
 static inline int in_le16(volatile unsigned short *addr)
 {
        int ret;
 
-       __asm__ __volatile__("lhbrx %0,0,%1; twi 0,%0,0; isync" :
-                            "=r" (ret) : "r" (addr), "m" (*addr));
+       __asm__ __volatile__("lhbrx %0,0,%1; twi 0,%0,0; isync"
+                            "=r" (ret) : "r" (addr), "m" (*addr));
        return ret;
 }
 
@@ -263,28 +264,29 @@ static inline int in_be16(volatile unsigned short *addr)
 {
        int ret;
 
-       __asm__ __volatile__("lhz%U1%X1 %0,%1; twi 0,%0,0; isync" :
-                            "=r" (ret) : "m" (*addr));
+       __asm__ __volatile__("lhz%U1%X1 %0,%1; twi 0,%0,0; isync"
+                            "=r" (ret) : "m" (*addr));
        return ret;
 }
 
 static inline void out_le16(volatile unsigned short *addr, int val)
 {
-       __asm__ __volatile__("sthbrx %1,0,%2; eieio" : "=m" (*addr) :
-                             "r" (val), "r" (addr));
+       __asm__ __volatile__("sthbrx %1,0,%2; sync"
+                            : "=m" (*addr) : "r" (val), "r" (addr));
 }
 
 static inline void out_be16(volatile unsigned short *addr, int val)
 {
-       __asm__ __volatile__("sth%U0%X0 %1,%0; eieio" : "=m" (*addr) : "r" (val));
+       __asm__ __volatile__("sth%U0%X0 %1,%0; sync"
+                            : "=m" (*addr) : "r" (val));
 }
 
 static inline unsigned in_le32(volatile unsigned *addr)
 {
        unsigned ret;
 
-       __asm__ __volatile__("lwbrx %0,0,%1; twi 0,%0,0; isync" :
-                            "=r" (ret) : "r" (addr), "m" (*addr));
+       __asm__ __volatile__("lwbrx %0,0,%1; twi 0,%0,0; isync"
+                            "=r" (ret) : "r" (addr), "m" (*addr));
        return ret;
 }
 
@@ -292,20 +294,21 @@ static inline unsigned in_be32(volatile unsigned *addr)
 {
        unsigned ret;
 
-       __asm__ __volatile__("lwz%U1%X1 %0,%1; twi 0,%0,0; isync" :
-                            "=r" (ret) : "m" (*addr));
+       __asm__ __volatile__("lwz%U1%X1 %0,%1; twi 0,%0,0; isync"
+                            "=r" (ret) : "m" (*addr));
        return ret;
 }
 
 static inline void out_le32(volatile unsigned *addr, int val)
 {
-       __asm__ __volatile__("stwbrx %1,0,%2; eieio" : "=m" (*addr) :
-                            "r" (val), "r" (addr));
+       __asm__ __volatile__("stwbrx %1,0,%2; sync" : "=m" (*addr)
+                            "r" (val), "r" (addr));
 }
 
 static inline void out_be32(volatile unsigned *addr, int val)
 {
-       __asm__ __volatile__("stw%U0%X0 %1,%0; eieio" : "=m" (*addr) : "r" (val));
+       __asm__ __volatile__("stw%U0%X0 %1,%0; sync"
+                            : "=m" (*addr) : "r" (val));
 }
 
 static inline unsigned long in_le64(volatile unsigned long *addr)
@@ -323,7 +326,7 @@ static inline unsigned long in_le64(volatile unsigned long *addr)
                             "rldicl %1,%1,32,0\n"
                             "rlwimi %0,%1,8,8,31\n"
                             "rlwimi %0,%1,24,16,23\n"
-                            : "=r" (ret), "=r" (tmp) : "b" (addr) , "m" (*addr));
+                            : "=r" (ret) , "=r" (tmp) : "b" (addr) , "m" (*addr));
        return ret;
 }
 
@@ -331,12 +334,12 @@ static inline unsigned long in_be64(volatile unsigned long *addr)
 {
        unsigned long ret;
 
-       __asm__ __volatile__("ld %0,0(%1); twi 0,%0,0; isync" :
-                            "=r" (ret) : "m" (*addr));
+       __asm__ __volatile__("ld %0,0(%1); twi 0,%0,0; isync"
+                            "=r" (ret) : "m" (*addr));
        return ret;
 }
 
-static inline void out_le64(volatile unsigned long *addr, int val)
+static inline void out_le64(volatile unsigned long *addr, unsigned long val)
 {
        unsigned long tmp;
 
@@ -348,14 +351,14 @@ static inline void out_le64(volatile unsigned long *addr, int val)
                             "rldicl %1,%1,32,0\n"
                             "rlwimi %0,%1,8,8,31\n"
                             "rlwimi %0,%1,24,16,23\n"
-                            "std %0,0(%2)\n"
-                            "eieio\n"
-                            : "=r" (tmp) : "r" (val), "b" (addr) , "m" (*addr));
+                            "std %0,0(%3)\n"
+                            "sync"
+                            : "=&r" (tmp) , "=&r" (val) : "1" (val) , "b" (addr) , "m" (*addr));
 }
 
-static inline void out_be64(volatile unsigned long *addr, int val)
+static inline void out_be64(volatile unsigned long *addr, unsigned long val)
 {
-       __asm__ __volatile__("std %1,0(%0); eieio" : "=m" (*addr) : "r" (val));
+       __asm__ __volatile__("std%U0%X0 %1,%0; sync" : "=m" (*addr) : "r" (val));
 }
 
 #ifndef CONFIG_PPC_ISERIES