xref: /linux/lib/raid/xor/sparc/xor-sparc64-glue.c (revision 440d6635b20037bc9ad46b20817d7b61cef0fc1b)
17f963623SChristoph Hellwig // SPDX-License-Identifier: GPL-2.0-or-later
27f963623SChristoph Hellwig /*
37f963623SChristoph Hellwig  * High speed xor_block operation for RAID4/5 utilizing the
47f963623SChristoph Hellwig  * UltraSparc Visual Instruction Set and Niagara block-init
57f963623SChristoph Hellwig  * twin-load instructions.
67f963623SChristoph Hellwig  *
77f963623SChristoph Hellwig  * Copyright (C) 1997, 1999 Jakub Jelinek (jj@ultra.linux.cz)
87f963623SChristoph Hellwig  * Copyright (C) 2006 David S. Miller <davem@davemloft.net>
97f963623SChristoph Hellwig  */
107f963623SChristoph Hellwig 
11e20043b4SChristoph Hellwig #include "xor_impl.h"
12e20043b4SChristoph Hellwig #include "xor_arch.h"
137f963623SChristoph Hellwig 
147f963623SChristoph Hellwig void xor_vis_2(unsigned long bytes, unsigned long * __restrict p1,
157f963623SChristoph Hellwig 	       const unsigned long * __restrict p2);
167f963623SChristoph Hellwig void xor_vis_3(unsigned long bytes, unsigned long * __restrict p1,
177f963623SChristoph Hellwig 	       const unsigned long * __restrict p2,
187f963623SChristoph Hellwig 	       const unsigned long * __restrict p3);
197f963623SChristoph Hellwig void xor_vis_4(unsigned long bytes, unsigned long * __restrict p1,
207f963623SChristoph Hellwig 	       const unsigned long * __restrict p2,
217f963623SChristoph Hellwig 	       const unsigned long * __restrict p3,
227f963623SChristoph Hellwig 	       const unsigned long * __restrict p4);
237f963623SChristoph Hellwig void xor_vis_5(unsigned long bytes, unsigned long * __restrict p1,
247f963623SChristoph Hellwig 	       const unsigned long * __restrict p2,
257f963623SChristoph Hellwig 	       const unsigned long * __restrict p3,
267f963623SChristoph Hellwig 	       const unsigned long * __restrict p4,
277f963623SChristoph Hellwig 	       const unsigned long * __restrict p5);
287f963623SChristoph Hellwig 
297f963623SChristoph Hellwig /* XXX Ugh, write cheetah versions... -DaveM */
307f963623SChristoph Hellwig 
31*80dcf0a7SChristoph Hellwig DO_XOR_BLOCKS(vis, xor_vis_2, xor_vis_3, xor_vis_4, xor_vis_5);
32*80dcf0a7SChristoph Hellwig 
337f963623SChristoph Hellwig struct xor_block_template xor_block_VIS = {
347f963623SChristoph Hellwig         .name		= "VIS",
35*80dcf0a7SChristoph Hellwig 	.xor_gen	= xor_gen_vis,
367f963623SChristoph Hellwig };
377f963623SChristoph Hellwig 
387f963623SChristoph Hellwig void xor_niagara_2(unsigned long bytes, unsigned long * __restrict p1,
397f963623SChristoph Hellwig 		   const unsigned long * __restrict p2);
407f963623SChristoph Hellwig void xor_niagara_3(unsigned long bytes, unsigned long * __restrict p1,
417f963623SChristoph Hellwig 		   const unsigned long * __restrict p2,
427f963623SChristoph Hellwig 		   const unsigned long * __restrict p3);
437f963623SChristoph Hellwig void xor_niagara_4(unsigned long bytes, unsigned long * __restrict p1,
447f963623SChristoph Hellwig 		   const unsigned long * __restrict p2,
457f963623SChristoph Hellwig 		   const unsigned long * __restrict p3,
467f963623SChristoph Hellwig 		   const unsigned long * __restrict p4);
477f963623SChristoph Hellwig void xor_niagara_5(unsigned long bytes, unsigned long * __restrict p1,
487f963623SChristoph Hellwig 		   const unsigned long * __restrict p2,
497f963623SChristoph Hellwig 		   const unsigned long * __restrict p3,
507f963623SChristoph Hellwig 		   const unsigned long * __restrict p4,
517f963623SChristoph Hellwig 		   const unsigned long * __restrict p5);
527f963623SChristoph Hellwig 
53*80dcf0a7SChristoph Hellwig DO_XOR_BLOCKS(niagara, xor_niagara_2, xor_niagara_3, xor_niagara_4,
54*80dcf0a7SChristoph Hellwig 		xor_niagara_5);
55*80dcf0a7SChristoph Hellwig 
567f963623SChristoph Hellwig struct xor_block_template xor_block_niagara = {
577f963623SChristoph Hellwig         .name		= "Niagara",
58*80dcf0a7SChristoph Hellwig 	.xor_gen	= xor_gen_niagara,
597f963623SChristoph Hellwig };
60