Skip to content

Commit 03906fb

Browse files
committed
crypto: omap - Use new crypto_engine_op interface
Use the new crypto_engine_op interface where the callback is stored in the algorithm object. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
1 parent 530d7b0 commit 03906fb

5 files changed

Lines changed: 370 additions & 345 deletions

File tree

drivers/crypto/omap-aes-gcm.c

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,21 @@
77
* Copyright (c) 2016 Texas Instruments Incorporated
88
*/
99

10+
#include <crypto/aes.h>
11+
#include <crypto/engine.h>
12+
#include <crypto/gcm.h>
13+
#include <crypto/internal/aead.h>
14+
#include <crypto/scatterwalk.h>
15+
#include <crypto/skcipher.h>
1016
#include <linux/errno.h>
11-
#include <linux/scatterlist.h>
1217
#include <linux/dma-mapping.h>
1318
#include <linux/dmaengine.h>
14-
#include <linux/omap-dma.h>
1519
#include <linux/interrupt.h>
20+
#include <linux/kernel.h>
21+
#include <linux/omap-dma.h>
1622
#include <linux/pm_runtime.h>
17-
#include <crypto/aes.h>
18-
#include <crypto/gcm.h>
19-
#include <crypto/scatterwalk.h>
20-
#include <crypto/skcipher.h>
21-
#include <crypto/internal/aead.h>
23+
#include <linux/scatterlist.h>
24+
#include <linux/string.h>
2225

2326
#include "omap-crypto.h"
2427
#include "omap-aes.h"
@@ -354,7 +357,7 @@ int omap_aes_4106gcm_setauthsize(struct crypto_aead *parent,
354357
return crypto_rfc4106_check_authsize(authsize);
355358
}
356359

357-
static int omap_aes_gcm_crypt_req(struct crypto_engine *engine, void *areq)
360+
int omap_aes_gcm_crypt_req(struct crypto_engine *engine, void *areq)
358361
{
359362
struct aead_request *req = container_of(areq, struct aead_request,
360363
base);
@@ -379,10 +382,6 @@ static int omap_aes_gcm_crypt_req(struct crypto_engine *engine, void *areq)
379382

380383
int omap_aes_gcm_cra_init(struct crypto_aead *tfm)
381384
{
382-
struct omap_aes_ctx *ctx = crypto_aead_ctx(tfm);
383-
384-
ctx->enginectx.op.do_one_request = omap_aes_gcm_crypt_req;
385-
386385
crypto_aead_set_reqsize(tfm, sizeof(struct omap_aes_reqctx));
387386

388387
return 0;

drivers/crypto/omap-aes.c

Lines changed: 115 additions & 101 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
#include <linux/platform_device.h>
3434
#include <linux/pm_runtime.h>
3535
#include <linux/scatterlist.h>
36+
#include <linux/string.h>
3637

3738
#include "omap-crypto.h"
3839
#include "omap-aes.h"
@@ -638,8 +639,6 @@ static int omap_aes_init_tfm(struct crypto_skcipher *tfm)
638639
crypto_skcipher_set_reqsize(tfm, sizeof(struct omap_aes_reqctx) +
639640
crypto_skcipher_reqsize(blk));
640641

641-
ctx->enginectx.op.do_one_request = omap_aes_crypt_req;
642-
643642
return 0;
644643
}
645644

@@ -655,68 +654,77 @@ static void omap_aes_exit_tfm(struct crypto_skcipher *tfm)
655654

656655
/* ********************** ALGS ************************************ */
657656

658-
static struct skcipher_alg algs_ecb_cbc[] = {
657+
static struct skcipher_engine_alg algs_ecb_cbc[] = {
659658
{
660-
.base.cra_name = "ecb(aes)",
661-
.base.cra_driver_name = "ecb-aes-omap",
662-
.base.cra_priority = 300,
663-
.base.cra_flags = CRYPTO_ALG_KERN_DRIVER_ONLY |
664-
CRYPTO_ALG_ASYNC |
665-
CRYPTO_ALG_NEED_FALLBACK,
666-
.base.cra_blocksize = AES_BLOCK_SIZE,
667-
.base.cra_ctxsize = sizeof(struct omap_aes_ctx),
668-
.base.cra_module = THIS_MODULE,
669-
670-
.min_keysize = AES_MIN_KEY_SIZE,
671-
.max_keysize = AES_MAX_KEY_SIZE,
672-
.setkey = omap_aes_setkey,
673-
.encrypt = omap_aes_ecb_encrypt,
674-
.decrypt = omap_aes_ecb_decrypt,
675-
.init = omap_aes_init_tfm,
676-
.exit = omap_aes_exit_tfm,
659+
.base = {
660+
.base.cra_name = "ecb(aes)",
661+
.base.cra_driver_name = "ecb-aes-omap",
662+
.base.cra_priority = 300,
663+
.base.cra_flags = CRYPTO_ALG_KERN_DRIVER_ONLY |
664+
CRYPTO_ALG_ASYNC |
665+
CRYPTO_ALG_NEED_FALLBACK,
666+
.base.cra_blocksize = AES_BLOCK_SIZE,
667+
.base.cra_ctxsize = sizeof(struct omap_aes_ctx),
668+
.base.cra_module = THIS_MODULE,
669+
670+
.min_keysize = AES_MIN_KEY_SIZE,
671+
.max_keysize = AES_MAX_KEY_SIZE,
672+
.setkey = omap_aes_setkey,
673+
.encrypt = omap_aes_ecb_encrypt,
674+
.decrypt = omap_aes_ecb_decrypt,
675+
.init = omap_aes_init_tfm,
676+
.exit = omap_aes_exit_tfm,
677+
},
678+
.op.do_one_request = omap_aes_crypt_req,
677679
},
678680
{
679-
.base.cra_name = "cbc(aes)",
680-
.base.cra_driver_name = "cbc-aes-omap",
681-
.base.cra_priority = 300,
682-
.base.cra_flags = CRYPTO_ALG_KERN_DRIVER_ONLY |
683-
CRYPTO_ALG_ASYNC |
684-
CRYPTO_ALG_NEED_FALLBACK,
685-
.base.cra_blocksize = AES_BLOCK_SIZE,
686-
.base.cra_ctxsize = sizeof(struct omap_aes_ctx),
687-
.base.cra_module = THIS_MODULE,
688-
689-
.min_keysize = AES_MIN_KEY_SIZE,
690-
.max_keysize = AES_MAX_KEY_SIZE,
691-
.ivsize = AES_BLOCK_SIZE,
692-
.setkey = omap_aes_setkey,
693-
.encrypt = omap_aes_cbc_encrypt,
694-
.decrypt = omap_aes_cbc_decrypt,
695-
.init = omap_aes_init_tfm,
696-
.exit = omap_aes_exit_tfm,
681+
.base = {
682+
.base.cra_name = "cbc(aes)",
683+
.base.cra_driver_name = "cbc-aes-omap",
684+
.base.cra_priority = 300,
685+
.base.cra_flags = CRYPTO_ALG_KERN_DRIVER_ONLY |
686+
CRYPTO_ALG_ASYNC |
687+
CRYPTO_ALG_NEED_FALLBACK,
688+
.base.cra_blocksize = AES_BLOCK_SIZE,
689+
.base.cra_ctxsize = sizeof(struct omap_aes_ctx),
690+
.base.cra_module = THIS_MODULE,
691+
692+
.min_keysize = AES_MIN_KEY_SIZE,
693+
.max_keysize = AES_MAX_KEY_SIZE,
694+
.ivsize = AES_BLOCK_SIZE,
695+
.setkey = omap_aes_setkey,
696+
.encrypt = omap_aes_cbc_encrypt,
697+
.decrypt = omap_aes_cbc_decrypt,
698+
.init = omap_aes_init_tfm,
699+
.exit = omap_aes_exit_tfm,
700+
},
701+
.op.do_one_request = omap_aes_crypt_req,
697702
}
698703
};
699704

700-
static struct skcipher_alg algs_ctr[] = {
705+
static struct skcipher_engine_alg algs_ctr[] = {
701706
{
702-
.base.cra_name = "ctr(aes)",
703-
.base.cra_driver_name = "ctr-aes-omap",
704-
.base.cra_priority = 300,
705-
.base.cra_flags = CRYPTO_ALG_KERN_DRIVER_ONLY |
706-
CRYPTO_ALG_ASYNC |
707-
CRYPTO_ALG_NEED_FALLBACK,
708-
.base.cra_blocksize = 1,
709-
.base.cra_ctxsize = sizeof(struct omap_aes_ctx),
710-
.base.cra_module = THIS_MODULE,
711-
712-
.min_keysize = AES_MIN_KEY_SIZE,
713-
.max_keysize = AES_MAX_KEY_SIZE,
714-
.ivsize = AES_BLOCK_SIZE,
715-
.setkey = omap_aes_setkey,
716-
.encrypt = omap_aes_ctr_encrypt,
717-
.decrypt = omap_aes_ctr_decrypt,
718-
.init = omap_aes_init_tfm,
719-
.exit = omap_aes_exit_tfm,
707+
.base = {
708+
.base.cra_name = "ctr(aes)",
709+
.base.cra_driver_name = "ctr-aes-omap",
710+
.base.cra_priority = 300,
711+
.base.cra_flags = CRYPTO_ALG_KERN_DRIVER_ONLY |
712+
CRYPTO_ALG_ASYNC |
713+
CRYPTO_ALG_NEED_FALLBACK,
714+
.base.cra_blocksize = 1,
715+
.base.cra_ctxsize = sizeof(struct omap_aes_ctx),
716+
.base.cra_module = THIS_MODULE,
717+
718+
.min_keysize = AES_MIN_KEY_SIZE,
719+
.max_keysize = AES_MAX_KEY_SIZE,
720+
.ivsize = AES_BLOCK_SIZE,
721+
.setkey = omap_aes_setkey,
722+
.encrypt = omap_aes_ctr_encrypt,
723+
.decrypt = omap_aes_ctr_decrypt,
724+
.init = omap_aes_init_tfm,
725+
.exit = omap_aes_exit_tfm,
726+
},
727+
.op.do_one_request = omap_aes_crypt_req,
720728
}
721729
};
722730

@@ -727,46 +735,52 @@ static struct omap_aes_algs_info omap_aes_algs_info_ecb_cbc[] = {
727735
},
728736
};
729737

730-
static struct aead_alg algs_aead_gcm[] = {
738+
static struct aead_engine_alg algs_aead_gcm[] = {
731739
{
732740
.base = {
733-
.cra_name = "gcm(aes)",
734-
.cra_driver_name = "gcm-aes-omap",
735-
.cra_priority = 300,
736-
.cra_flags = CRYPTO_ALG_ASYNC |
737-
CRYPTO_ALG_KERN_DRIVER_ONLY,
738-
.cra_blocksize = 1,
739-
.cra_ctxsize = sizeof(struct omap_aes_gcm_ctx),
740-
.cra_alignmask = 0xf,
741-
.cra_module = THIS_MODULE,
741+
.base = {
742+
.cra_name = "gcm(aes)",
743+
.cra_driver_name = "gcm-aes-omap",
744+
.cra_priority = 300,
745+
.cra_flags = CRYPTO_ALG_ASYNC |
746+
CRYPTO_ALG_KERN_DRIVER_ONLY,
747+
.cra_blocksize = 1,
748+
.cra_ctxsize = sizeof(struct omap_aes_gcm_ctx),
749+
.cra_alignmask = 0xf,
750+
.cra_module = THIS_MODULE,
751+
},
752+
.init = omap_aes_gcm_cra_init,
753+
.ivsize = GCM_AES_IV_SIZE,
754+
.maxauthsize = AES_BLOCK_SIZE,
755+
.setkey = omap_aes_gcm_setkey,
756+
.setauthsize = omap_aes_gcm_setauthsize,
757+
.encrypt = omap_aes_gcm_encrypt,
758+
.decrypt = omap_aes_gcm_decrypt,
742759
},
743-
.init = omap_aes_gcm_cra_init,
744-
.ivsize = GCM_AES_IV_SIZE,
745-
.maxauthsize = AES_BLOCK_SIZE,
746-
.setkey = omap_aes_gcm_setkey,
747-
.setauthsize = omap_aes_gcm_setauthsize,
748-
.encrypt = omap_aes_gcm_encrypt,
749-
.decrypt = omap_aes_gcm_decrypt,
760+
.op.do_one_request = omap_aes_gcm_crypt_req,
750761
},
751762
{
752763
.base = {
753-
.cra_name = "rfc4106(gcm(aes))",
754-
.cra_driver_name = "rfc4106-gcm-aes-omap",
755-
.cra_priority = 300,
756-
.cra_flags = CRYPTO_ALG_ASYNC |
757-
CRYPTO_ALG_KERN_DRIVER_ONLY,
758-
.cra_blocksize = 1,
759-
.cra_ctxsize = sizeof(struct omap_aes_gcm_ctx),
760-
.cra_alignmask = 0xf,
761-
.cra_module = THIS_MODULE,
764+
.base = {
765+
.cra_name = "rfc4106(gcm(aes))",
766+
.cra_driver_name = "rfc4106-gcm-aes-omap",
767+
.cra_priority = 300,
768+
.cra_flags = CRYPTO_ALG_ASYNC |
769+
CRYPTO_ALG_KERN_DRIVER_ONLY,
770+
.cra_blocksize = 1,
771+
.cra_ctxsize = sizeof(struct omap_aes_gcm_ctx),
772+
.cra_alignmask = 0xf,
773+
.cra_module = THIS_MODULE,
774+
},
775+
.init = omap_aes_gcm_cra_init,
776+
.maxauthsize = AES_BLOCK_SIZE,
777+
.ivsize = GCM_RFC4106_IV_SIZE,
778+
.setkey = omap_aes_4106gcm_setkey,
779+
.setauthsize = omap_aes_4106gcm_setauthsize,
780+
.encrypt = omap_aes_4106gcm_encrypt,
781+
.decrypt = omap_aes_4106gcm_decrypt,
762782
},
763-
.init = omap_aes_gcm_cra_init,
764-
.maxauthsize = AES_BLOCK_SIZE,
765-
.ivsize = GCM_RFC4106_IV_SIZE,
766-
.setkey = omap_aes_4106gcm_setkey,
767-
.setauthsize = omap_aes_4106gcm_setauthsize,
768-
.encrypt = omap_aes_4106gcm_encrypt,
769-
.decrypt = omap_aes_4106gcm_decrypt,
783+
.op.do_one_request = omap_aes_gcm_crypt_req,
770784
},
771785
};
772786

@@ -1088,8 +1102,8 @@ static int omap_aes_probe(struct platform_device *pdev)
10881102
{
10891103
struct device *dev = &pdev->dev;
10901104
struct omap_aes_dev *dd;
1091-
struct skcipher_alg *algp;
1092-
struct aead_alg *aalg;
1105+
struct skcipher_engine_alg *algp;
1106+
struct aead_engine_alg *aalg;
10931107
struct resource res;
10941108
int err = -ENOMEM, i, j, irq = -1;
10951109
u32 reg;
@@ -1182,9 +1196,9 @@ static int omap_aes_probe(struct platform_device *pdev)
11821196
for (j = 0; j < dd->pdata->algs_info[i].size; j++) {
11831197
algp = &dd->pdata->algs_info[i].algs_list[j];
11841198

1185-
pr_debug("reg alg: %s\n", algp->base.cra_name);
1199+
pr_debug("reg alg: %s\n", algp->base.base.cra_name);
11861200

1187-
err = crypto_register_skcipher(algp);
1201+
err = crypto_engine_register_skcipher(algp);
11881202
if (err)
11891203
goto err_algs;
11901204

@@ -1198,9 +1212,9 @@ static int omap_aes_probe(struct platform_device *pdev)
11981212
for (i = 0; i < dd->pdata->aead_algs_info->size; i++) {
11991213
aalg = &dd->pdata->aead_algs_info->algs_list[i];
12001214

1201-
pr_debug("reg alg: %s\n", aalg->base.cra_name);
1215+
pr_debug("reg alg: %s\n", aalg->base.base.cra_name);
12021216

1203-
err = crypto_register_aead(aalg);
1217+
err = crypto_engine_register_aead(aalg);
12041218
if (err)
12051219
goto err_aead_algs;
12061220

@@ -1218,12 +1232,12 @@ static int omap_aes_probe(struct platform_device *pdev)
12181232
err_aead_algs:
12191233
for (i = dd->pdata->aead_algs_info->registered - 1; i >= 0; i--) {
12201234
aalg = &dd->pdata->aead_algs_info->algs_list[i];
1221-
crypto_unregister_aead(aalg);
1235+
crypto_engine_unregister_aead(aalg);
12221236
}
12231237
err_algs:
12241238
for (i = dd->pdata->algs_info_size - 1; i >= 0; i--)
12251239
for (j = dd->pdata->algs_info[i].registered - 1; j >= 0; j--)
1226-
crypto_unregister_skcipher(
1240+
crypto_engine_unregister_skcipher(
12271241
&dd->pdata->algs_info[i].algs_list[j]);
12281242

12291243
err_engine:
@@ -1245,7 +1259,7 @@ static int omap_aes_probe(struct platform_device *pdev)
12451259
static int omap_aes_remove(struct platform_device *pdev)
12461260
{
12471261
struct omap_aes_dev *dd = platform_get_drvdata(pdev);
1248-
struct aead_alg *aalg;
1262+
struct aead_engine_alg *aalg;
12491263
int i, j;
12501264

12511265
spin_lock_bh(&list_lock);
@@ -1254,14 +1268,14 @@ static int omap_aes_remove(struct platform_device *pdev)
12541268

12551269
for (i = dd->pdata->algs_info_size - 1; i >= 0; i--)
12561270
for (j = dd->pdata->algs_info[i].registered - 1; j >= 0; j--) {
1257-
crypto_unregister_skcipher(
1271+
crypto_engine_unregister_skcipher(
12581272
&dd->pdata->algs_info[i].algs_list[j]);
12591273
dd->pdata->algs_info[i].registered--;
12601274
}
12611275

12621276
for (i = dd->pdata->aead_algs_info->registered - 1; i >= 0; i--) {
12631277
aalg = &dd->pdata->aead_algs_info->algs_list[i];
1264-
crypto_unregister_aead(aalg);
1278+
crypto_engine_unregister_aead(aalg);
12651279
dd->pdata->aead_algs_info->registered--;
12661280
}
12671281

0 commit comments

Comments
 (0)