xref: /linux/lib/raid/xor/riscv/xor-glue.c (revision 440d6635b20037bc9ad46b20817d7b61cef0fc1b)
15265d55bSChristoph Hellwig // SPDX-License-Identifier: GPL-2.0-or-later
25265d55bSChristoph Hellwig /*
35265d55bSChristoph Hellwig  * Copyright (C) 2021 SiFive
45265d55bSChristoph Hellwig  */
55265d55bSChristoph Hellwig 
65265d55bSChristoph Hellwig #include <asm/vector.h>
75265d55bSChristoph Hellwig #include <asm/switch_to.h>
85265d55bSChristoph Hellwig #include <asm/asm-prototypes.h>
9e20043b4SChristoph Hellwig #include "xor_impl.h"
10e20043b4SChristoph Hellwig #include "xor_arch.h"
115265d55bSChristoph Hellwig 
12*80dcf0a7SChristoph Hellwig DO_XOR_BLOCKS(vector_inner, xor_regs_2_, xor_regs_3_, xor_regs_4_, xor_regs_5_);
135265d55bSChristoph Hellwig 
14*80dcf0a7SChristoph Hellwig static void xor_gen_vector(void *dest, void **srcs, unsigned int src_cnt,
15*80dcf0a7SChristoph Hellwig 		unsigned int bytes)
165265d55bSChristoph Hellwig {
175265d55bSChristoph Hellwig 	kernel_vector_begin();
18*80dcf0a7SChristoph Hellwig 	xor_gen_vector_inner(dest, srcs, src_cnt, bytes);
195265d55bSChristoph Hellwig 	kernel_vector_end();
205265d55bSChristoph Hellwig }
215265d55bSChristoph Hellwig 
225265d55bSChristoph Hellwig struct xor_block_template xor_block_rvv = {
235265d55bSChristoph Hellwig 	.name		= "rvv",
24*80dcf0a7SChristoph Hellwig 	.xor_gen	= xor_gen_vector,
255265d55bSChristoph Hellwig };
26