File Index
Files and directories
Sign in
FILE

rvv.h

File preview with syntax highlighting.

linux-6.19.14/lib/raid6/rvv.h C
 1/* SPDX-License-Identifier: GPL-2.0-or-later */
 2/*
 3 * Copyright 2024 Institute of Software, CAS.
 4 *
 5 * raid6/rvv.h
 6 *
 7 * Definitions for RISC-V RAID-6 code
 8 */
 9
10#ifdef __KERNEL__
11#include <asm/vector.h>
12#else
13#define kernel_vector_begin()
14#define kernel_vector_end()
15#include <sys/auxv.h>
16#include <asm/hwcap.h>
17#define has_vector() (getauxval(AT_HWCAP) & COMPAT_HWCAP_ISA_V)
18#endif
19
20#include <linux/raid/pq.h>
21
22static int rvv_has_vector(void)
23{
24	return has_vector();
25}
26
27#define RAID6_RVV_WRAPPER(_n)						\
28	static void raid6_rvv ## _n ## _gen_syndrome(int disks,		\
29					size_t bytes, void **ptrs)	\
30	{								\
31		void raid6_rvv ## _n  ## _gen_syndrome_real(int d,	\
32					unsigned long b, void **p);	\
33		kernel_vector_begin();					\
34		raid6_rvv ## _n ## _gen_syndrome_real(disks,		\
35				(unsigned long)bytes, ptrs);		\
36		kernel_vector_end();					\
37	}								\
38	static void raid6_rvv ## _n ## _xor_syndrome(int disks,		\
39					int start, int stop,		\
40					size_t bytes, void **ptrs)	\
41	{								\
42		void raid6_rvv ## _n  ## _xor_syndrome_real(int d,	\
43					int s1, int s2,			\
44					unsigned long b, void **p);	\
45		kernel_vector_begin();					\
46		raid6_rvv ## _n ## _xor_syndrome_real(disks,		\
47			start, stop, (unsigned long)bytes, ptrs);	\
48		kernel_vector_end();					\
49	}								\
50	struct raid6_calls const raid6_rvvx ## _n = {			\
51		raid6_rvv ## _n ## _gen_syndrome,			\
52		raid6_rvv ## _n ## _xor_syndrome,			\
53		rvv_has_vector,						\
54		"rvvx" #_n,						\
55		0							\
56	}
~/ Read-only file preview.