xref: /openbmc/linux/lib/raid6/loongarch.h (revision c900529f3d9161bfde5cca0754f83b4d3c3e0220)
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