xref: /linux/lib/raid/xor/sparc/xor-sparc64-glue.c (revision 440d6635b20037bc9ad46b20817d7b61cef0fc1b)
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  * High speed xor_block operation for RAID4/5 utilizing the
4  * UltraSparc Visual Instruction Set and Niagara block-init
5  * twin-load instructions.
6  *
7  * Copyright (C) 1997, 1999 Jakub Jelinek (jj@ultra.linux.cz)
8  * Copyright (C) 2006 David S. Miller <davem@davemloft.net>
9  */
10 
11 #include "xor_impl.h"
12 #include "xor_arch.h"
13 
14 void xor_vis_2(unsigned long bytes, unsigned long * __restrict p1,
15 	       const unsigned long * __restrict p2);
16 void xor_vis_3(unsigned long bytes, unsigned long * __restrict p1,
17 	       const unsigned long * __restrict p2,
18 	       const unsigned long * __restrict p3);
19 void xor_vis_4(unsigned long bytes, unsigned long * __restrict p1,
20 	       const unsigned long * __restrict p2,
21 	       const unsigned long * __restrict p3,
22 	       const unsigned long * __restrict p4);
23 void xor_vis_5(unsigned long bytes, unsigned long * __restrict p1,
24 	       const unsigned long * __restrict p2,
25 	       const unsigned long * __restrict p3,
26 	       const unsigned long * __restrict p4,
27 	       const unsigned long * __restrict p5);
28 
29 /* XXX Ugh, write cheetah versions... -DaveM */
30 
31 DO_XOR_BLOCKS(vis, xor_vis_2, xor_vis_3, xor_vis_4, xor_vis_5);
32 
33 struct xor_block_template xor_block_VIS = {
34         .name		= "VIS",
35 	.xor_gen	= xor_gen_vis,
36 };
37 
38 void xor_niagara_2(unsigned long bytes, unsigned long * __restrict p1,
39 		   const unsigned long * __restrict p2);
40 void xor_niagara_3(unsigned long bytes, unsigned long * __restrict p1,
41 		   const unsigned long * __restrict p2,
42 		   const unsigned long * __restrict p3);
43 void xor_niagara_4(unsigned long bytes, unsigned long * __restrict p1,
44 		   const unsigned long * __restrict p2,
45 		   const unsigned long * __restrict p3,
46 		   const unsigned long * __restrict p4);
47 void xor_niagara_5(unsigned long bytes, unsigned long * __restrict p1,
48 		   const unsigned long * __restrict p2,
49 		   const unsigned long * __restrict p3,
50 		   const unsigned long * __restrict p4,
51 		   const unsigned long * __restrict p5);
52 
53 DO_XOR_BLOCKS(niagara, xor_niagara_2, xor_niagara_3, xor_niagara_4,
54 		xor_niagara_5);
55 
56 struct xor_block_template xor_block_niagara = {
57         .name		= "Niagara",
58 	.xor_gen	= xor_gen_niagara,
59 };
60