13f276cecSChristoph Hellwig // SPDX-License-Identifier: GPL-2.0-or-later 23f276cecSChristoph Hellwig /* 33f276cecSChristoph Hellwig * Altivec XOR operations 43f276cecSChristoph Hellwig * 53f276cecSChristoph Hellwig * Copyright 2017 IBM Corp. 63f276cecSChristoph Hellwig */ 73f276cecSChristoph Hellwig 83f276cecSChristoph Hellwig #include <linux/preempt.h> 93f276cecSChristoph Hellwig #include <linux/sched.h> 103f276cecSChristoph Hellwig #include <asm/switch_to.h> 11e20043b4SChristoph Hellwig #include "xor_impl.h" 12e20043b4SChristoph Hellwig #include "xor_arch.h" 133f276cecSChristoph Hellwig #include "xor_vmx.h" 143f276cecSChristoph Hellwig 15*80dcf0a7SChristoph Hellwig static void xor_gen_altivec(void *dest, void **srcs, unsigned int src_cnt, 16*80dcf0a7SChristoph Hellwig unsigned int bytes) 173f276cecSChristoph Hellwig { 183f276cecSChristoph Hellwig preempt_disable(); 193f276cecSChristoph Hellwig enable_kernel_altivec(); 20*80dcf0a7SChristoph Hellwig xor_gen_altivec_inner(dest, srcs, src_cnt, bytes); 213f276cecSChristoph Hellwig disable_kernel_altivec(); 223f276cecSChristoph Hellwig preempt_enable(); 233f276cecSChristoph Hellwig } 243f276cecSChristoph Hellwig 253f276cecSChristoph Hellwig struct xor_block_template xor_block_altivec = { 263f276cecSChristoph Hellwig .name = "altivec", 27*80dcf0a7SChristoph Hellwig .xor_gen = xor_gen_altivec, 283f276cecSChristoph Hellwig }; 29