1 /* SPDX-License-Identifier: GPL-2.0 */
3 * Shared crypto simd helpers
6 #ifndef _CRYPTO_INTERNAL_SIMD_H
7 #define _CRYPTO_INTERNAL_SIMD_H
9 #include <linux/percpu.h>
10 #include <linux/types.h>
12 /* skcipher support */
14 struct simd_skcipher_alg
;
17 struct simd_skcipher_alg
*simd_skcipher_create_compat(struct skcipher_alg
*ialg
,
20 const char *basename
);
21 void simd_skcipher_free(struct simd_skcipher_alg
*alg
);
23 int simd_register_skciphers_compat(struct skcipher_alg
*algs
, int count
,
24 struct simd_skcipher_alg
**simd_algs
);
26 void simd_unregister_skciphers(struct skcipher_alg
*algs
, int count
,
27 struct simd_skcipher_alg
**simd_algs
);
34 int simd_register_aeads_compat(struct aead_alg
*algs
, int count
,
35 struct simd_aead_alg
**simd_algs
);
37 void simd_unregister_aeads(struct aead_alg
*algs
, int count
,
38 struct simd_aead_alg
**simd_algs
);
41 * crypto_simd_usable() - is it allowed at this time to use SIMD instructions or
42 * access the SIMD register file?
44 * This delegates to may_use_simd(), except that this also returns false if SIMD
45 * in crypto code has been temporarily disabled on this CPU by the crypto
46 * self-tests, in order to test the no-SIMD fallback code. This override is
47 * currently limited to configurations where the extra self-tests are enabled,
48 * because it might be a bit too invasive to be part of the regular self-tests.
50 * This is a macro so that <asm/simd.h>, which some architectures don't have,
51 * doesn't have to be included directly here.
53 #ifdef CONFIG_CRYPTO_MANAGER_EXTRA_TESTS
54 DECLARE_PER_CPU(bool, crypto_simd_disabled_for_test
);
55 #define crypto_simd_usable() \
56 (may_use_simd() && !this_cpu_read(crypto_simd_disabled_for_test))
58 #define crypto_simd_usable() may_use_simd()
61 #endif /* _CRYPTO_INTERNAL_SIMD_H */