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