1*8f3f06dfSWANG Xuerui /* SPDX-License-Identifier: GPL-2.0-or-later */ 2*8f3f06dfSWANG Xuerui /* 3*8f3f06dfSWANG Xuerui * Copyright (C) 2023 WANG Xuerui <git@xen0n.name> 4*8f3f06dfSWANG Xuerui * 5*8f3f06dfSWANG Xuerui * raid6/loongarch.h 6*8f3f06dfSWANG Xuerui * 7*8f3f06dfSWANG Xuerui * Definitions common to LoongArch RAID-6 code only 8*8f3f06dfSWANG Xuerui */ 9*8f3f06dfSWANG Xuerui 10*8f3f06dfSWANG Xuerui #ifndef _LIB_RAID6_LOONGARCH_H 11*8f3f06dfSWANG Xuerui #define _LIB_RAID6_LOONGARCH_H 12*8f3f06dfSWANG Xuerui 13*8f3f06dfSWANG Xuerui #ifdef __KERNEL__ 14*8f3f06dfSWANG Xuerui 15*8f3f06dfSWANG Xuerui #include <asm/cpu-features.h> 16*8f3f06dfSWANG Xuerui #include <asm/fpu.h> 17*8f3f06dfSWANG Xuerui 18*8f3f06dfSWANG Xuerui #else /* for user-space testing */ 19*8f3f06dfSWANG Xuerui 20*8f3f06dfSWANG Xuerui #include <sys/auxv.h> 21*8f3f06dfSWANG Xuerui 22*8f3f06dfSWANG Xuerui /* have to supply these defines for glibc 2.37- and musl */ 23*8f3f06dfSWANG Xuerui #ifndef HWCAP_LOONGARCH_LSX 24*8f3f06dfSWANG Xuerui #define HWCAP_LOONGARCH_LSX (1 << 4) 25*8f3f06dfSWANG Xuerui #endif 26*8f3f06dfSWANG Xuerui #ifndef HWCAP_LOONGARCH_LASX 27*8f3f06dfSWANG Xuerui #define HWCAP_LOONGARCH_LASX (1 << 5) 28*8f3f06dfSWANG Xuerui #endif 29*8f3f06dfSWANG Xuerui 30*8f3f06dfSWANG Xuerui #define kernel_fpu_begin() 31*8f3f06dfSWANG Xuerui #define kernel_fpu_end() 32*8f3f06dfSWANG Xuerui 33*8f3f06dfSWANG Xuerui #define cpu_has_lsx (getauxval(AT_HWCAP) & HWCAP_LOONGARCH_LSX) 34*8f3f06dfSWANG Xuerui #define cpu_has_lasx (getauxval(AT_HWCAP) & HWCAP_LOONGARCH_LASX) 35*8f3f06dfSWANG Xuerui 36*8f3f06dfSWANG Xuerui #endif /* __KERNEL__ */ 37*8f3f06dfSWANG Xuerui 38*8f3f06dfSWANG Xuerui #endif /* _LIB_RAID6_LOONGARCH_H */ 39