diff options
author | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2012-01-17 18:34:26 -0500 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2012-01-25 21:35:49 -0500 |
commit | 4b004346feab6b431f3e1f89ef692e3a4186fdfd (patch) | |
tree | 3d61e7d5ce736f80d473368288e4456fc9e3cf24 /crypto/algapi.c | |
parent | b85a088f15f2070b7180735a231012843a5ac96c (diff) |
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 'crypto/algapi.c')
-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 9d4a9fe913f8..056571b85445 100644 --- a/crypto/algapi.c +++ b/crypto/algapi.c | |||
@@ -405,6 +405,41 @@ int crypto_unregister_alg(struct crypto_alg *alg) | |||
405 | } | 405 | } |
406 | EXPORT_SYMBOL_GPL(crypto_unregister_alg); | 406 | EXPORT_SYMBOL_GPL(crypto_unregister_alg); |
407 | 407 | ||
408 | int crypto_register_algs(struct crypto_alg *algs, int count) | ||
409 | { | ||
410 | int i, ret; | ||
411 | |||
412 | for (i = 0; i < count; i++) { | ||
413 | ret = crypto_register_alg(&algs[i]); | ||
414 | if (ret) | ||
415 | goto err; | ||
416 | } | ||
417 | |||
418 | return 0; | ||
419 | |||
420 | err: | ||
421 | for (--i; i >= 0; --i) | ||
422 | crypto_unregister_alg(&algs[i]); | ||
423 | |||
424 | return ret; | ||
425 | } | ||
426 | EXPORT_SYMBOL_GPL(crypto_register_algs); | ||
427 | |||
428 | int crypto_unregister_algs(struct crypto_alg *algs, int count) | ||
429 | { | ||
430 | int i, ret; | ||
431 | |||
432 | for (i = 0; i < count; i++) { | ||
433 | ret = crypto_unregister_alg(&algs[i]); | ||
434 | if (ret) | ||
435 | pr_err("Failed to unregister %s %s: %d\n", | ||
436 | algs[i].cra_driver_name, algs[i].cra_name, ret); | ||
437 | } | ||
438 | |||
439 | return 0; | ||
440 | } | ||
441 | EXPORT_SYMBOL_GPL(crypto_unregister_algs); | ||
442 | |||
408 | int crypto_register_template(struct crypto_template *tmpl) | 443 | int crypto_register_template(struct crypto_template *tmpl) |
409 | { | 444 | { |
410 | struct crypto_template *q; | 445 | struct crypto_template *q; |