xref: /linux/lib/raid/xor/powerpc/xor_vmx_glue.c (revision 440d6635b20037bc9ad46b20817d7b61cef0fc1b)
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