123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- /* SPDX-License-Identifier: GPL-2.0 */
- /*
- * Shared crypto simd helpers
- */
- #ifndef _CRYPTO_INTERNAL_SIMD_H
- #define _CRYPTO_INTERNAL_SIMD_H
- #include <linux/percpu.h>
- #include <linux/types.h>
- /* skcipher support */
- struct simd_skcipher_alg;
- struct skcipher_alg;
- struct simd_skcipher_alg *simd_skcipher_create_compat(const char *algname,
- const char *drvname,
- const char *basename);
- struct simd_skcipher_alg *simd_skcipher_create(const char *algname,
- const char *basename);
- void simd_skcipher_free(struct simd_skcipher_alg *alg);
- int simd_register_skciphers_compat(struct skcipher_alg *algs, int count,
- struct simd_skcipher_alg **simd_algs);
- void simd_unregister_skciphers(struct skcipher_alg *algs, int count,
- struct simd_skcipher_alg **simd_algs);
- /* AEAD support */
- struct simd_aead_alg;
- struct aead_alg;
- struct simd_aead_alg *simd_aead_create_compat(const char *algname,
- const char *drvname,
- const char *basename);
- struct simd_aead_alg *simd_aead_create(const char *algname,
- const char *basename);
- void simd_aead_free(struct simd_aead_alg *alg);
- int simd_register_aeads_compat(struct aead_alg *algs, int count,
- struct simd_aead_alg **simd_algs);
- void simd_unregister_aeads(struct aead_alg *algs, int count,
- struct simd_aead_alg **simd_algs);
- /*
- * crypto_simd_usable() - is it allowed at this time to use SIMD instructions or
- * access the SIMD register file?
- *
- * This delegates to may_use_simd(), except that this also returns false if SIMD
- * in crypto code has been temporarily disabled on this CPU by the crypto
- * self-tests, in order to test the no-SIMD fallback code. This override is
- * currently limited to configurations where the extra self-tests are enabled,
- * because it might be a bit too invasive to be part of the regular self-tests.
- *
- * This is a macro so that <asm/simd.h>, which some architectures don't have,
- * doesn't have to be included directly here.
- */
- #ifdef CONFIG_CRYPTO_MANAGER_EXTRA_TESTS
- DECLARE_PER_CPU(bool, crypto_simd_disabled_for_test);
- #define crypto_simd_usable() \
- (may_use_simd() && !this_cpu_read(crypto_simd_disabled_for_test))
- #else
- #define crypto_simd_usable() may_use_simd()
- #endif
- #endif /* _CRYPTO_INTERNAL_SIMD_H */
|