cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

xor_64.h (2807B)


      1/* SPDX-License-Identifier: GPL-2.0-or-later */
      2/*
      3 * include/asm/xor.h
      4 *
      5 * High speed xor_block operation for RAID4/5 utilizing the
      6 * UltraSparc Visual Instruction Set and Niagara block-init
      7 * twin-load instructions.
      8 *
      9 * Copyright (C) 1997, 1999 Jakub Jelinek (jj@ultra.linux.cz)
     10 * Copyright (C) 2006 David S. Miller <davem@davemloft.net>
     11 */
     12
     13#include <asm/spitfire.h>
     14
     15void xor_vis_2(unsigned long bytes, unsigned long * __restrict p1,
     16	       const unsigned long * __restrict p2);
     17void xor_vis_3(unsigned long bytes, unsigned long * __restrict p1,
     18	       const unsigned long * __restrict p2,
     19	       const unsigned long * __restrict p3);
     20void xor_vis_4(unsigned long bytes, unsigned long * __restrict p1,
     21	       const unsigned long * __restrict p2,
     22	       const unsigned long * __restrict p3,
     23	       const unsigned long * __restrict p4);
     24void xor_vis_5(unsigned long bytes, unsigned long * __restrict p1,
     25	       const unsigned long * __restrict p2,
     26	       const unsigned long * __restrict p3,
     27	       const unsigned long * __restrict p4,
     28	       const unsigned long * __restrict p5);
     29
     30/* XXX Ugh, write cheetah versions... -DaveM */
     31
     32static struct xor_block_template xor_block_VIS = {
     33        .name	= "VIS",
     34        .do_2	= xor_vis_2,
     35        .do_3	= xor_vis_3,
     36        .do_4	= xor_vis_4,
     37        .do_5	= xor_vis_5,
     38};
     39
     40void xor_niagara_2(unsigned long bytes, unsigned long * __restrict p1,
     41		   const unsigned long * __restrict p2);
     42void xor_niagara_3(unsigned long bytes, unsigned long * __restrict p1,
     43		   const unsigned long * __restrict p2,
     44		   const unsigned long * __restrict p3);
     45void xor_niagara_4(unsigned long bytes, unsigned long * __restrict p1,
     46		   const unsigned long * __restrict p2,
     47		   const unsigned long * __restrict p3,
     48		   const unsigned long * __restrict p4);
     49void xor_niagara_5(unsigned long bytes, unsigned long * __restrict p1,
     50		   const unsigned long * __restrict p2,
     51		   const unsigned long * __restrict p3,
     52		   const unsigned long * __restrict p4,
     53		   const unsigned long * __restrict p5);
     54
     55static struct xor_block_template xor_block_niagara = {
     56        .name	= "Niagara",
     57        .do_2	= xor_niagara_2,
     58        .do_3	= xor_niagara_3,
     59        .do_4	= xor_niagara_4,
     60        .do_5	= xor_niagara_5,
     61};
     62
     63#undef XOR_TRY_TEMPLATES
     64#define XOR_TRY_TEMPLATES				\
     65	do {						\
     66		xor_speed(&xor_block_VIS);		\
     67		xor_speed(&xor_block_niagara);		\
     68	} while (0)
     69
     70/* For VIS for everything except Niagara.  */
     71#define XOR_SELECT_TEMPLATE(FASTEST) \
     72	((tlb_type == hypervisor && \
     73	  (sun4v_chip_type == SUN4V_CHIP_NIAGARA1 || \
     74	   sun4v_chip_type == SUN4V_CHIP_NIAGARA2 || \
     75	   sun4v_chip_type == SUN4V_CHIP_NIAGARA3 || \
     76	   sun4v_chip_type == SUN4V_CHIP_NIAGARA4 || \
     77	   sun4v_chip_type == SUN4V_CHIP_NIAGARA5)) ? \
     78	 &xor_block_niagara : \
     79	 &xor_block_VIS)