| /* 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 */ |