0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013 #include <asm/spitfire.h>
0014
0015 void xor_vis_2(unsigned long bytes, unsigned long * __restrict p1,
0016 const unsigned long * __restrict p2);
0017 void xor_vis_3(unsigned long bytes, unsigned long * __restrict p1,
0018 const unsigned long * __restrict p2,
0019 const unsigned long * __restrict p3);
0020 void xor_vis_4(unsigned long bytes, unsigned long * __restrict p1,
0021 const unsigned long * __restrict p2,
0022 const unsigned long * __restrict p3,
0023 const unsigned long * __restrict p4);
0024 void xor_vis_5(unsigned long bytes, unsigned long * __restrict p1,
0025 const unsigned long * __restrict p2,
0026 const unsigned long * __restrict p3,
0027 const unsigned long * __restrict p4,
0028 const unsigned long * __restrict p5);
0029
0030
0031
0032 static struct xor_block_template xor_block_VIS = {
0033 .name = "VIS",
0034 .do_2 = xor_vis_2,
0035 .do_3 = xor_vis_3,
0036 .do_4 = xor_vis_4,
0037 .do_5 = xor_vis_5,
0038 };
0039
0040 void xor_niagara_2(unsigned long bytes, unsigned long * __restrict p1,
0041 const unsigned long * __restrict p2);
0042 void xor_niagara_3(unsigned long bytes, unsigned long * __restrict p1,
0043 const unsigned long * __restrict p2,
0044 const unsigned long * __restrict p3);
0045 void xor_niagara_4(unsigned long bytes, unsigned long * __restrict p1,
0046 const unsigned long * __restrict p2,
0047 const unsigned long * __restrict p3,
0048 const unsigned long * __restrict p4);
0049 void xor_niagara_5(unsigned long bytes, unsigned long * __restrict p1,
0050 const unsigned long * __restrict p2,
0051 const unsigned long * __restrict p3,
0052 const unsigned long * __restrict p4,
0053 const unsigned long * __restrict p5);
0054
0055 static struct xor_block_template xor_block_niagara = {
0056 .name = "Niagara",
0057 .do_2 = xor_niagara_2,
0058 .do_3 = xor_niagara_3,
0059 .do_4 = xor_niagara_4,
0060 .do_5 = xor_niagara_5,
0061 };
0062
0063 #undef XOR_TRY_TEMPLATES
0064 #define XOR_TRY_TEMPLATES \
0065 do { \
0066 xor_speed(&xor_block_VIS); \
0067 xor_speed(&xor_block_niagara); \
0068 } while (0)
0069
0070
0071 #define XOR_SELECT_TEMPLATE(FASTEST) \
0072 ((tlb_type == hypervisor && \
0073 (sun4v_chip_type == SUN4V_CHIP_NIAGARA1 || \
0074 sun4v_chip_type == SUN4V_CHIP_NIAGARA2 || \
0075 sun4v_chip_type == SUN4V_CHIP_NIAGARA3 || \
0076 sun4v_chip_type == SUN4V_CHIP_NIAGARA4 || \
0077 sun4v_chip_type == SUN4V_CHIP_NIAGARA5)) ? \
0078 &xor_block_niagara : \
0079 &xor_block_VIS)