xref: /linux/lib/raid/xor/loongarch/xor_simd_glue.c (revision 440d6635b20037bc9ad46b20817d7b61cef0fc1b)
1033bee3eSChristoph Hellwig // SPDX-License-Identifier: GPL-2.0-or-later
2033bee3eSChristoph Hellwig /*
3033bee3eSChristoph Hellwig  * LoongArch SIMD XOR operations
4033bee3eSChristoph Hellwig  *
5033bee3eSChristoph Hellwig  * Copyright (C) 2023 WANG Xuerui <git@xen0n.name>
6033bee3eSChristoph Hellwig  */
7033bee3eSChristoph Hellwig 
8033bee3eSChristoph Hellwig #include <linux/sched.h>
9033bee3eSChristoph Hellwig #include <asm/fpu.h>
10e20043b4SChristoph Hellwig #include "xor_impl.h"
11e20043b4SChristoph Hellwig #include "xor_arch.h"
12033bee3eSChristoph Hellwig #include "xor_simd.h"
13033bee3eSChristoph Hellwig 
14033bee3eSChristoph Hellwig #define MAKE_XOR_GLUES(flavor)							\
15*80dcf0a7SChristoph Hellwig DO_XOR_BLOCKS(flavor##_inner, __xor_##flavor##_2, __xor_##flavor##_3,		\
16*80dcf0a7SChristoph Hellwig 		__xor_##flavor##_4, __xor_##flavor##_5);			\
17*80dcf0a7SChristoph Hellwig 										\
18*80dcf0a7SChristoph Hellwig static void xor_gen_##flavor(void *dest, void **srcs, unsigned int src_cnt,	\
19*80dcf0a7SChristoph Hellwig 		unsigned int bytes)						\
20*80dcf0a7SChristoph Hellwig {										\
21*80dcf0a7SChristoph Hellwig 	kernel_fpu_begin();							\
22*80dcf0a7SChristoph Hellwig 	xor_gen_##flavor##_inner(dest, srcs, src_cnt, bytes);			\
23*80dcf0a7SChristoph Hellwig 	kernel_fpu_end();							\
24*80dcf0a7SChristoph Hellwig }										\
25033bee3eSChristoph Hellwig 										\
26033bee3eSChristoph Hellwig struct xor_block_template xor_block_##flavor = {				\
27033bee3eSChristoph Hellwig 	.name		= __stringify(flavor),					\
28*80dcf0a7SChristoph Hellwig 	.xor_gen	= xor_gen_##flavor					\
29033bee3eSChristoph Hellwig }
30033bee3eSChristoph Hellwig 
31033bee3eSChristoph Hellwig #ifdef CONFIG_CPU_HAS_LSX
32033bee3eSChristoph Hellwig MAKE_XOR_GLUES(lsx);
33033bee3eSChristoph Hellwig #endif /* CONFIG_CPU_HAS_LSX */
34033bee3eSChristoph Hellwig 
35033bee3eSChristoph Hellwig #ifdef CONFIG_CPU_HAS_LASX
36033bee3eSChristoph Hellwig MAKE_XOR_GLUES(lasx);
37033bee3eSChristoph Hellwig #endif /* CONFIG_CPU_HAS_LASX */
38