powerpc: use the new byteorder headers
PATCH 15/23 powerpc: use the new byteorder headers
--- arch/powerpc/include/asm/byteorder.h | 49 ++++++++++++--------------------- 1 files changed, 18 insertions(+), 31 deletions(-)
arch/powerpc/include/asm/byteorder.h +18 -31
@@ -11,36 +11,43 @@#include <asm/types.h> #include <linux/compiler.h> -#ifdef __GNUC__ -#ifdef __KERNEL__ +#define __BIG_ENDIAN -static __inline__ __u16 ld_le16(const volatile __u16 *addr) +#ifndef __powerpc64__ +# define __SWAB_64_THRU_32__ +#endif + +static inline __u16 __arch_swab16p (const volatile __u16 *addr) {__u16 val; __asm__ __volatile__ ("lhbrx %0,0,%1" :"=r" (val) :"r" (addr),"m" (*addr));return val; } +#define __arch_swab16p __arch_swab16p -static __inline__ void st_le16(volatile __u16 *addr, const __u16 val) +static inline void __arch_swab16s (volatile __u16 *addr,const __u16 val) { __asm__ __volatile__ ("sthbrx %1,0,%2" :"=m" (*addr) :"r" (val),"r" (addr)); } +#define __arch_swab16s __arch_swab16s -static __inline__ __u32 ld_le32(const volatile __u32 *addr) +static inline __u32 __arch_swab32p (const volatile __u32 *addr) {__u32 val; __asm__ __volatile__ ("lwbrx %0,0,%1" :"=r" (val) :"r" (addr),"m" (*addr));return val; } +#define __arch_swab32p __arch_swab32p -static __inline__ void st_le32(volatile __u32 *addr, const __u32 val) +static inline void __arch_swab32s (volatile __u32 *addr,const __u32 val) { __asm__ __volatile__ ("stwbrx %1,0,%2" :"=m" (*addr) :"r" (val),"r" (addr)); } +#define __arch_swab32s __arch_swab32s -static __inline__ __attribute_const__ __u16 ___arch__swab16(__u16 value) +static inline __attribute_const__ __u16 __arch_swab16(__u16 value) {__u16 result;
@@ -49,8 +56,9 @@ static __inline__ __attribute_const__ __u16 ___arch__swab16(__u16 value) : "r" (value), "0" (value >> 8));return result; } +#define __arch_swab16 __arch_swab16 -static __inline__ __attribute_const__ __u32 ___arch__swab32(__u32 value) +static inline __attribute_const__ __u32 __arch_swab32(__u32 value) {__u32 result;
@@ -61,29 +69,8 @@ static __inline__ __attribute_const__ __u32 ___arch__swab32(__u32 value) : "r" (value), "0" (value >> 24)); return result; } +#define __arch_swab32 __arch_swab32 -#define __arch__swab16 (x) ___arch__swab16(x) -#define __arch__swab32 (x) ___arch__swab32(x) - -/* The same, but returns converted value from the location pointer by addr. */ -#define __arch__swab16p (addr) ld_le16(addr) -#define __arch__swab32p (addr) ld_le32(addr) - -/* The same, but do the conversion in situ, ie. put the value back to addr. */ -#define __arch__swab16s (addr) st_le16(addr,*addr) -#define __arch__swab32s (addr) st_le32(addr,*addr) - -#endif /* __KERNEL__ */ - -#ifndef __STRICT_ANSI__ -#define __BYTEORDER_HAS_U64__ -#ifndef __powerpc64__ -#define __SWAB_64_THRU_32__ -#endif /* __powerpc64__ */ -#endif /* __STRICT_ANSI__ */ - -#endif /* __GNUC__ */ - -#include <linux/byteorder/big_endian.h> +#include <linux/byteorder.h> #endif /* _ASM_POWERPC_BYTEORDER_H */
Signature · 1 line
1.6.0.274.g8aacc
Quoted 1 line · Harvey Harrison
-static
__inline____u16ld_le16(const volatile __u16 *addr)
...
Quoted 1 line
-static
__inline__voidst_le16(volatile __u16 *addr, const __u16 val)
...
Quoted 1 line
-static
__inline____u32ld_le32(const volatile __u32 *addr)
...
Quoted 1 line
-static
__inline__voidst_le32(volatile __u32 *addr, const __u32 val)
NAK. Several powerpc-specific drivers use these things that you are removing, so you just broke those drivers.
Paul.
---
Paul, this preserves the ld_le16, ld_le32, st_le16, st_le32
The ld_* versions are synonyms for le16_to_cpup, le32_to_cpup, I can prepare a drivers patch to move over to that if you wish. The st_ versions are another implementation of the aligned-byteswapping helpers that usb and others have as well, perhaps once arches have moved to the new byteorder helpers, the storing helpers can be consolidated there as well.
Thoughts?
arch/powerpc/include/asm/byteorder.h | 43 ++++++++++++--------------------- 1 files changed, 16 insertions(+), 27 deletions(-)
arch/powerpc/include/asm/byteorder.h +16 -27
@@ -11,36 +11,41 @@#include <asm/types.h> #include <linux/compiler.h> -#ifdef __GNUC__ -#ifdef __KERNEL__ +#define __BIG_ENDIAN -static __inline__ __u16 ld_le16(const volatile __u16 *addr) +#ifndef __powerpc64__ +#define __SWAB_64_THRU_32__ +#endif /* __powerpc64__ */ + +static inline __u16 __arch_swab16p (const volatile __u16 *addr) {__u16 val; __asm__ __volatile__ ("lhbrx %0,0,%1" :"=r" (val) :"r" (addr),"m" (*addr));return val; } +#define __arch_swab16p __arch_swab16pstatic __inline__void st_le16 (volatile __u16 *addr,const __u16 val) { __asm__ __volatile__ ("sthbrx %1,0,%2" :"=m" (*addr) :"r" (val),"r" (addr)); } -static __inline__ __u32 ld_le32(const volatile __u32 *addr) +static inline __u32 __arch_swab32p (const volatile __u32 *addr) {__u32 val; __asm__ __volatile__ ("lwbrx %0,0,%1" :"=r" (val) :"r" (addr),"m" (*addr));return val; } +#define __arch_swab32p __arch_swab32pstatic __inline__void st_le32 (volatile __u32 *addr,const __u32 val) { __asm__ __volatile__ ("stwbrx %1,0,%2" :"=m" (*addr) :"r" (val),"r" (addr)); } -static __inline__ __attribute_const__ __u16 ___arch__swab16(__u16 value) +static inline __attribute_const__ __u16 __arch_swab16(__u16 value) {__u16 result;
@@ -49,8 +54,9 @@ static __inline__ __attribute_const__ __u16 ___arch__swab16(__u16 value) : "r" (value), "0" (value >> 8));return result; } +#define __arch_swab16 __arch_swab16 -static __inline__ __attribute_const__ __u32 ___arch__swab32(__u32 value) +static inline __attribute_const__ __u32 __arch_swab32(__u32 value) {__u32 result;
@@ -61,29 +67,12 @@ static __inline__ __attribute_const__ __u32 ___arch__swab32(__u32 value) : "r" (value), "0" (value >> 24)); return result; } - -#define __arch__swab16 (x) ___arch__swab16(x) -#define __arch__swab32 (x) ___arch__swab32(x) +#define __arch_swab32 __arch_swab32/* The same, but returns converted value from the location pointer by addr. */ -#define __arch__swab16p (addr) ld_le16(addr) -#define __arch__swab32p (addr) ld_le32(addr) - -/* The same, but do the conversion in situ, ie. put the value back to addr. */ -#define __arch__swab16s (addr) st_le16(addr,*addr) -#define __arch__swab32s (addr) st_le32(addr,*addr) - -#endif /* __KERNEL__ */ - -#ifndef __STRICT_ANSI__ -#define __BYTEORDER_HAS_U64__ -#ifndef __powerpc64__ -#define __SWAB_64_THRU_32__ -#endif /* __powerpc64__ */ -#endif /* __STRICT_ANSI__ */ - -#endif /* __GNUC__ */ +#define ld_le16 (addr) __arch_swab16p(addr) +#define ld_le32 (addr) __arch_swab32p(addr) -#include <linux/byteorder/big_endian.h> +#include <linux/byteorder.h> #endif /* _ASM_POWERPC_BYTEORDER_H */
Signature · 1 line
1.6.0.284.ga408