X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=include%2Fasm-ppc64%2Fio.h;h=f6262bad7084790e0294822c82bf53077bb3f542;hb=9213980e6a70d8473e0ffd4b39ab5b6caaba9ff5;hp=ac409a04aa11f7c8a69b367b29a3ffe3984ff128;hpb=c449269f45c2cdf53af08c8d0af37472f66539d9;p=linux-2.6.git diff --git a/include/asm-ppc64/io.h b/include/asm-ppc64/io.h index ac409a04a..f6262bad7 100644 --- a/include/asm-ppc64/io.h +++ b/include/asm-ppc64/io.h @@ -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