xref: /linux/lib/raid/raid6/riscv/rvv.h (revision 2e05544060b9fef5d4d0e0172944e6956c55080f)
13626738bSChristoph Hellwig /* SPDX-License-Identifier: GPL-2.0-or-later */
23626738bSChristoph Hellwig /*
33626738bSChristoph Hellwig  * Copyright 2024 Institute of Software, CAS.
43626738bSChristoph Hellwig  *
53626738bSChristoph Hellwig  * Definitions for RISC-V RAID-6 code
63626738bSChristoph Hellwig  */
73626738bSChristoph Hellwig 
83626738bSChristoph Hellwig #include <asm/vector.h>
9*769d603fSChristoph Hellwig #include "algos.h"
103626738bSChristoph Hellwig 
113626738bSChristoph Hellwig #define RAID6_RVV_WRAPPER(_n)						\
123626738bSChristoph Hellwig 	static void raid6_rvv ## _n ## _gen_syndrome(int disks,		\
133626738bSChristoph Hellwig 					size_t bytes, void **ptrs)	\
143626738bSChristoph Hellwig 	{								\
153626738bSChristoph Hellwig 		void raid6_rvv ## _n  ## _gen_syndrome_real(int d,	\
163626738bSChristoph Hellwig 					unsigned long b, void **p);	\
173626738bSChristoph Hellwig 		kernel_vector_begin();					\
183626738bSChristoph Hellwig 		raid6_rvv ## _n ## _gen_syndrome_real(disks,		\
193626738bSChristoph Hellwig 				(unsigned long)bytes, ptrs);		\
203626738bSChristoph Hellwig 		kernel_vector_end();					\
213626738bSChristoph Hellwig 	}								\
223626738bSChristoph Hellwig 	static void raid6_rvv ## _n ## _xor_syndrome(int disks,		\
233626738bSChristoph Hellwig 					int start, int stop,		\
243626738bSChristoph Hellwig 					size_t bytes, void **ptrs)	\
253626738bSChristoph Hellwig 	{								\
263626738bSChristoph Hellwig 		void raid6_rvv ## _n  ## _xor_syndrome_real(int d,	\
273626738bSChristoph Hellwig 					int s1, int s2,			\
283626738bSChristoph Hellwig 					unsigned long b, void **p);	\
293626738bSChristoph Hellwig 		kernel_vector_begin();					\
303626738bSChristoph Hellwig 		raid6_rvv ## _n ## _xor_syndrome_real(disks,		\
313626738bSChristoph Hellwig 			start, stop, (unsigned long)bytes, ptrs);	\
323626738bSChristoph Hellwig 		kernel_vector_end();					\
333626738bSChristoph Hellwig 	}								\
343626738bSChristoph Hellwig 	struct raid6_calls const raid6_rvvx ## _n = {			\
357e91f76aSChristoph Hellwig 		.gen_syndrome	= raid6_rvv ## _n ## _gen_syndrome,	\
367e91f76aSChristoph Hellwig 		.xor_syndrome	= raid6_rvv ## _n ## _xor_syndrome,	\
377e91f76aSChristoph Hellwig 		.name		= "rvvx" #_n,				\
383626738bSChristoph Hellwig 	}
39