xref: /openbmc/linux/arch/sparc/include/uapi/asm/swab.h (revision 6f52b16c)
16f52b16cSGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
254579826SDavid Howells #ifndef _SPARC_SWAB_H
354579826SDavid Howells #define _SPARC_SWAB_H
454579826SDavid Howells 
554579826SDavid Howells #include <linux/types.h>
654579826SDavid Howells #include <asm/asi.h>
754579826SDavid Howells 
854579826SDavid Howells #if defined(__sparc__) && defined(__arch64__)
__arch_swab16p(const __u16 * addr)954579826SDavid Howells static inline __u16 __arch_swab16p(const __u16 *addr)
1054579826SDavid Howells {
1154579826SDavid Howells 	__u16 ret;
1254579826SDavid Howells 
135a2b59d3SDavid S. Miller 	__asm__ __volatile__ ("lduha [%2] %3, %0"
1454579826SDavid Howells 			      : "=r" (ret)
155a2b59d3SDavid S. Miller 			      : "m" (*addr), "r" (addr), "i" (ASI_PL));
1654579826SDavid Howells 	return ret;
1754579826SDavid Howells }
1854579826SDavid Howells #define __arch_swab16p __arch_swab16p
1954579826SDavid Howells 
__arch_swab32p(const __u32 * addr)2054579826SDavid Howells static inline __u32 __arch_swab32p(const __u32 *addr)
2154579826SDavid Howells {
2254579826SDavid Howells 	__u32 ret;
2354579826SDavid Howells 
245a2b59d3SDavid S. Miller 	__asm__ __volatile__ ("lduwa [%2] %3, %0"
2554579826SDavid Howells 			      : "=r" (ret)
265a2b59d3SDavid S. Miller 			      : "m" (*addr), "r" (addr), "i" (ASI_PL));
2754579826SDavid Howells 	return ret;
2854579826SDavid Howells }
2954579826SDavid Howells #define __arch_swab32p __arch_swab32p
3054579826SDavid Howells 
__arch_swab64p(const __u64 * addr)3154579826SDavid Howells static inline __u64 __arch_swab64p(const __u64 *addr)
3254579826SDavid Howells {
3354579826SDavid Howells 	__u64 ret;
3454579826SDavid Howells 
355a2b59d3SDavid S. Miller 	__asm__ __volatile__ ("ldxa [%2] %3, %0"
3654579826SDavid Howells 			      : "=r" (ret)
375a2b59d3SDavid S. Miller 			      : "m" (*addr), "r" (addr), "i" (ASI_PL));
3854579826SDavid Howells 	return ret;
3954579826SDavid Howells }
4054579826SDavid Howells #define __arch_swab64p __arch_swab64p
4154579826SDavid Howells 
4254579826SDavid Howells #else
4354579826SDavid Howells #define __SWAB_64_THRU_32__
4454579826SDavid Howells #endif /* defined(__sparc__) && defined(__arch64__) */
4554579826SDavid Howells 
4654579826SDavid Howells #endif /* _SPARC_SWAB_H */
47