struct starfive_cryp_dev *cryp = ctx->cryp;
u32 block[AES_BLOCK_32];
u32 stat;
+ int err;
int i;
+ err = starfive_aes_prepare_req(req, NULL);
+ if (err)
+ return err;
+
/*
* Write first plain/ciphertext block to start the module
* then let irq tasklet handle the rest of the data blocks.
return 0;
}
-static int starfive_aes_skcipher_prepare_req(struct crypto_engine *engine,
- void *areq)
-{
- struct skcipher_request *req =
- container_of(areq, struct skcipher_request, base);
-
- return starfive_aes_prepare_req(req, NULL);
-}
-
static int starfive_aes_init_tfm(struct crypto_skcipher *tfm)
{
struct starfive_cryp_ctx *ctx = crypto_skcipher_ctx(tfm);
sizeof(struct skcipher_request));
ctx->enginectx.op.do_one_request = starfive_aes_do_one_req;
- ctx->enginectx.op.prepare_request = starfive_aes_skcipher_prepare_req;
- ctx->enginectx.op.unprepare_request = NULL;
return 0;
}
-static void starfive_aes_exit_tfm(struct crypto_skcipher *tfm)
-{
- struct starfive_cryp_ctx *ctx = crypto_skcipher_ctx(tfm);
-
- ctx->enginectx.op.do_one_request = NULL;
- ctx->enginectx.op.prepare_request = NULL;
- ctx->enginectx.op.unprepare_request = NULL;
-}
-
static int starfive_aes_aead_do_one_req(struct crypto_engine *engine, void *areq)
{
struct aead_request *req =
struct starfive_cryp_request_ctx *rctx = ctx->rctx;
u32 block[AES_BLOCK_32];
u32 stat;
+ int err;
int i;
+ err = starfive_aes_prepare_req(NULL, req);
+ if (err)
+ return err;
+
if (!cryp->assoclen)
goto write_text;
return 0;
}
-static int starfive_aes_aead_prepare_req(struct crypto_engine *engine, void *areq)
-{
- struct aead_request *req =
- container_of(areq, struct aead_request, base);
-
- return starfive_aes_prepare_req(NULL, req);
-}
-
static int starfive_aes_aead_init_tfm(struct crypto_aead *tfm)
{
struct starfive_cryp_ctx *ctx = crypto_aead_ctx(tfm);
sizeof(struct aead_request));
ctx->enginectx.op.do_one_request = starfive_aes_aead_do_one_req;
- ctx->enginectx.op.prepare_request = starfive_aes_aead_prepare_req;
- ctx->enginectx.op.unprepare_request = NULL;
return 0;
}
{
struct starfive_cryp_ctx *ctx = crypto_aead_ctx(tfm);
- if (ctx->aead_fbk) {
- crypto_free_aead(ctx->aead_fbk);
- ctx->aead_fbk = NULL;
- }
-
- ctx->enginectx.op.do_one_request = NULL;
- ctx->enginectx.op.prepare_request = NULL;
- ctx->enginectx.op.unprepare_request = NULL;
+ crypto_free_aead(ctx->aead_fbk);
}
static int starfive_aes_crypt(struct skcipher_request *req, unsigned long flags)
static struct skcipher_alg skcipher_algs[] = {
{
.init = starfive_aes_init_tfm,
- .exit = starfive_aes_exit_tfm,
.setkey = starfive_aes_setkey,
.encrypt = starfive_aes_ecb_encrypt,
.decrypt = starfive_aes_ecb_decrypt,
},
}, {
.init = starfive_aes_init_tfm,
- .exit = starfive_aes_exit_tfm,
.setkey = starfive_aes_setkey,
.encrypt = starfive_aes_cbc_encrypt,
.decrypt = starfive_aes_cbc_decrypt,
},
}, {
.init = starfive_aes_init_tfm,
- .exit = starfive_aes_exit_tfm,
.setkey = starfive_aes_setkey,
.encrypt = starfive_aes_ctr_encrypt,
.decrypt = starfive_aes_ctr_decrypt,
},
}, {
.init = starfive_aes_init_tfm,
- .exit = starfive_aes_exit_tfm,
.setkey = starfive_aes_setkey,
.encrypt = starfive_aes_cfb_encrypt,
.decrypt = starfive_aes_cfb_decrypt,
},
}, {
.init = starfive_aes_init_tfm,
- .exit = starfive_aes_exit_tfm,
.setkey = starfive_aes_setkey,
.encrypt = starfive_aes_ofb_encrypt,
.decrypt = starfive_aes_ofb_decrypt,