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