diff options
author | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2012-01-17 23:34:26 +0000 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2012-01-26 13:35:49 +1100 |
commit | 48dfcf4fa1bec183fec32be0a52f7bbd82338acd (patch) | |
tree | f605ba448bcbad5ab7440cf22301f2df2cec95e4 | |
parent | 9338f479733f0a2895f53277eb1e9a546e26f791 (diff) | |
download | linux-crypto-48dfcf4fa1bec183fec32be0a52f7bbd82338acd.tar.gz linux-crypto-48dfcf4fa1bec183fec32be0a52f7bbd82338acd.zip |
crypto: Add bulk algorithm registration interface
Hardware crypto engines frequently need to register a selection of
different algorithms with the core. Simplify their code slightly,
especially the error handling, by providing functions to register a
number of algorithms in a single call.
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to '')
-rw-r--r-- | crypto/algapi.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/crypto/algapi.c b/crypto/algapi.c index 9d4a9fe9..056571b8 100644 --- a/crypto/algapi.c +++ b/crypto/algapi.c @@ -405,6 +405,41 @@ int crypto_unregister_alg(struct crypto_alg *alg) } EXPORT_SYMBOL_GPL(crypto_unregister_alg); +int crypto_register_algs(struct crypto_alg *algs, int count) +{ + int i, ret; + + for (i = 0; i < count; i++) { + ret = crypto_register_alg(&algs[i]); + if (ret) + goto err; + } + + return 0; + +err: + for (--i; i >= 0; --i) + crypto_unregister_alg(&algs[i]); + + return ret; +} +EXPORT_SYMBOL_GPL(crypto_register_algs); + +int crypto_unregister_algs(struct crypto_alg *algs, int count) +{ + int i, ret; + + for (i = 0; i < count; i++) { + ret = crypto_unregister_alg(&algs[i]); + if (ret) + pr_err("Failed to unregister %s %s: %d\n", + algs[i].cra_driver_name, algs[i].cra_name, ret); + } + + return 0; +} +EXPORT_SYMBOL_GPL(crypto_unregister_algs); + int crypto_register_template(struct crypto_template *tmpl) { struct crypto_template *q; |