162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 262306a36Sopenharmony_ci#ifndef _SPARC_SWAB_H 362306a36Sopenharmony_ci#define _SPARC_SWAB_H 462306a36Sopenharmony_ci 562306a36Sopenharmony_ci#include <linux/types.h> 662306a36Sopenharmony_ci#include <asm/asi.h> 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci#if defined(__sparc__) && defined(__arch64__) 962306a36Sopenharmony_cistatic inline __u16 __arch_swab16p(const __u16 *addr) 1062306a36Sopenharmony_ci{ 1162306a36Sopenharmony_ci __u16 ret; 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci __asm__ __volatile__ ("lduha [%2] %3, %0" 1462306a36Sopenharmony_ci : "=r" (ret) 1562306a36Sopenharmony_ci : "m" (*addr), "r" (addr), "i" (ASI_PL)); 1662306a36Sopenharmony_ci return ret; 1762306a36Sopenharmony_ci} 1862306a36Sopenharmony_ci#define __arch_swab16p __arch_swab16p 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_cistatic inline __u32 __arch_swab32p(const __u32 *addr) 2162306a36Sopenharmony_ci{ 2262306a36Sopenharmony_ci __u32 ret; 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci __asm__ __volatile__ ("lduwa [%2] %3, %0" 2562306a36Sopenharmony_ci : "=r" (ret) 2662306a36Sopenharmony_ci : "m" (*addr), "r" (addr), "i" (ASI_PL)); 2762306a36Sopenharmony_ci return ret; 2862306a36Sopenharmony_ci} 2962306a36Sopenharmony_ci#define __arch_swab32p __arch_swab32p 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_cistatic inline __u64 __arch_swab64p(const __u64 *addr) 3262306a36Sopenharmony_ci{ 3362306a36Sopenharmony_ci __u64 ret; 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ci __asm__ __volatile__ ("ldxa [%2] %3, %0" 3662306a36Sopenharmony_ci : "=r" (ret) 3762306a36Sopenharmony_ci : "m" (*addr), "r" (addr), "i" (ASI_PL)); 3862306a36Sopenharmony_ci return ret; 3962306a36Sopenharmony_ci} 4062306a36Sopenharmony_ci#define __arch_swab64p __arch_swab64p 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_ci#else 4362306a36Sopenharmony_ci#define __SWAB_64_THRU_32__ 4462306a36Sopenharmony_ci#endif /* defined(__sparc__) && defined(__arch64__) */ 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_ci#endif /* _SPARC_SWAB_H */ 47