crypto: fix crypto_engine_ctx build error

struct crypto_engine_ctx removed in k6.6 hence use
conftest helper based macro to select updated data types

Bug 4346767

Signed-off-by: Bitan Biswas <bbiswas@nvidia.com>
Change-Id: Iaf565c4ef74fdd87ea0020b369bc3d882d32326e
Signed-off-by: Akhil R <akhilrajeev@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/3176823
Reviewed-by: svcacv <svcacv@nvidia.com>
GVS: buildbot_gerritrpt <buildbot_gerritrpt@nvidia.com>
Reviewed-by: Laxman Dewangan <ldewangan@nvidia.com>
This commit is contained in:
Bitan Biswas
2023-10-10 01:45:29 +00:00
committed by mobile promotions
parent abb0a027b2
commit cba663d0db
3 changed files with 295 additions and 21 deletions

View File

@@ -4,6 +4,8 @@
* Crypto driver to handle block cipher algorithms using NVIDIA Security Engine. * Crypto driver to handle block cipher algorithms using NVIDIA Security Engine.
*/ */
#include <nvidia/conftest.h>
#include <linux/clk.h> #include <linux/clk.h>
#include <linux/dma-mapping.h> #include <linux/dma-mapping.h>
#include <linux/module.h> #include <linux/module.h>
@@ -23,7 +25,9 @@
#include "tegra-se.h" #include "tegra-se.h"
struct tegra_aes_ctx { struct tegra_aes_ctx {
#ifndef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
struct crypto_engine_ctx enginectx; struct crypto_engine_ctx enginectx;
#endif
struct tegra_se *se; struct tegra_se *se;
u32 alg; u32 alg;
u32 ivsize; u32 ivsize;
@@ -41,7 +45,9 @@ struct tegra_aes_reqctx {
}; };
struct tegra_aead_ctx { struct tegra_aead_ctx {
#ifndef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
struct crypto_engine_ctx enginectx; struct crypto_engine_ctx enginectx;
#endif
struct tegra_se *se; struct tegra_se *se;
unsigned int authsize; unsigned int authsize;
u32 alg; u32 alg;
@@ -66,7 +72,9 @@ struct tegra_aead_reqctx {
}; };
struct tegra_cmac_ctx { struct tegra_cmac_ctx {
#ifndef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
struct crypto_engine_ctx enginectx; struct crypto_engine_ctx enginectx;
#endif
struct tegra_se *se; struct tegra_se *se;
unsigned int alg; unsigned int alg;
u32 key_id; u32 key_id;
@@ -306,7 +314,11 @@ static int tegra_aes_cra_init(struct crypto_skcipher *tfm)
const char *algname; const char *algname;
int ret; int ret;
#ifdef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
se_alg = container_of(alg, struct tegra_se_alg, alg.skcipher.base);
#else
se_alg = container_of(alg, struct tegra_se_alg, alg.skcipher); se_alg = container_of(alg, struct tegra_se_alg, alg.skcipher);
#endif
crypto_skcipher_set_reqsize(tfm, sizeof(struct tegra_aes_reqctx)); crypto_skcipher_set_reqsize(tfm, sizeof(struct tegra_aes_reqctx));
@@ -324,9 +336,11 @@ static int tegra_aes_cra_init(struct crypto_skcipher *tfm)
ctx->alg = ret; ctx->alg = ret;
#ifndef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
ctx->enginectx.op.prepare_request = NULL; ctx->enginectx.op.prepare_request = NULL;
ctx->enginectx.op.unprepare_request = NULL; ctx->enginectx.op.unprepare_request = NULL;
ctx->enginectx.op.do_one_request = tegra_aes_do_one_req; ctx->enginectx.op.do_one_request = tegra_aes_do_one_req;
#endif
return 0; return 0;
} }
@@ -468,6 +482,9 @@ static int tegra_aes_decrypt(struct skcipher_request *req)
static struct tegra_se_alg tegra_aes_algs[] = { static struct tegra_se_alg tegra_aes_algs[] = {
{ {
.alg.skcipher = { .alg.skcipher = {
#ifdef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
.base = {
#endif
.init = tegra_aes_cra_init, .init = tegra_aes_cra_init,
.exit = tegra_aes_cra_exit, .exit = tegra_aes_cra_exit,
.setkey = tegra_aes_setkey, .setkey = tegra_aes_setkey,
@@ -486,9 +503,16 @@ static struct tegra_se_alg tegra_aes_algs[] = {
.cra_alignmask = 0xf, .cra_alignmask = 0xf,
.cra_module = THIS_MODULE, .cra_module = THIS_MODULE,
}, },
#ifdef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
},
.op.do_one_request = tegra_aes_do_one_req,
#endif
} }
}, { }, {
.alg.skcipher = { .alg.skcipher = {
#ifdef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
.base = {
#endif
.init = tegra_aes_cra_init, .init = tegra_aes_cra_init,
.exit = tegra_aes_cra_exit, .exit = tegra_aes_cra_exit,
.setkey = tegra_aes_setkey, .setkey = tegra_aes_setkey,
@@ -506,9 +530,16 @@ static struct tegra_se_alg tegra_aes_algs[] = {
.cra_alignmask = 0xf, .cra_alignmask = 0xf,
.cra_module = THIS_MODULE, .cra_module = THIS_MODULE,
}, },
#ifdef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
},
.op.do_one_request = tegra_aes_do_one_req,
#endif
} }
}, { }, {
.alg.skcipher = { .alg.skcipher = {
#ifdef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
.base = {
#endif
.init = tegra_aes_cra_init, .init = tegra_aes_cra_init,
.exit = tegra_aes_cra_exit, .exit = tegra_aes_cra_exit,
.setkey = tegra_aes_setkey, .setkey = tegra_aes_setkey,
@@ -527,9 +558,16 @@ static struct tegra_se_alg tegra_aes_algs[] = {
.cra_alignmask = 0xf, .cra_alignmask = 0xf,
.cra_module = THIS_MODULE, .cra_module = THIS_MODULE,
}, },
#ifdef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
},
.op.do_one_request = tegra_aes_do_one_req,
#endif
} }
}, { }, {
.alg.skcipher = { .alg.skcipher = {
#ifdef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
.base = {
#endif
.init = tegra_aes_cra_init, .init = tegra_aes_cra_init,
.exit = tegra_aes_cra_exit, .exit = tegra_aes_cra_exit,
.setkey = tegra_xts_setkey, .setkey = tegra_xts_setkey,
@@ -547,6 +585,10 @@ static struct tegra_se_alg tegra_aes_algs[] = {
.cra_alignmask = (__alignof__(u64) - 1), .cra_alignmask = (__alignof__(u64) - 1),
.cra_module = THIS_MODULE, .cra_module = THIS_MODULE,
}, },
#ifdef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
},
.op.do_one_request = tegra_aes_do_one_req,
#endif
} }
}, },
}; };
@@ -1280,7 +1322,11 @@ static int tegra_ccm_cra_init(struct crypto_aead *tfm)
algname = crypto_tfm_alg_name(&tfm->base); algname = crypto_tfm_alg_name(&tfm->base);
#ifdef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
se_alg = container_of(alg, struct tegra_se_alg, alg.aead.base);
#else
se_alg = container_of(alg, struct tegra_se_alg, alg.aead); se_alg = container_of(alg, struct tegra_se_alg, alg.aead);
#endif
crypto_aead_set_reqsize(tfm, sizeof(struct tegra_aead_reqctx)); crypto_aead_set_reqsize(tfm, sizeof(struct tegra_aead_reqctx));
@@ -1295,9 +1341,11 @@ static int tegra_ccm_cra_init(struct crypto_aead *tfm)
ctx->alg = ret; ctx->alg = ret;
#ifndef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
ctx->enginectx.op.prepare_request = NULL; ctx->enginectx.op.prepare_request = NULL;
ctx->enginectx.op.unprepare_request = NULL; ctx->enginectx.op.unprepare_request = NULL;
ctx->enginectx.op.do_one_request = tegra_ccm_do_one_req; ctx->enginectx.op.do_one_request = tegra_ccm_do_one_req;
#endif
return 0; return 0;
} }
@@ -1312,7 +1360,11 @@ static int tegra_gcm_cra_init(struct crypto_aead *tfm)
algname = crypto_tfm_alg_name(&tfm->base); algname = crypto_tfm_alg_name(&tfm->base);
#ifdef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
se_alg = container_of(alg, struct tegra_se_alg, alg.aead.base);
#else
se_alg = container_of(alg, struct tegra_se_alg, alg.aead); se_alg = container_of(alg, struct tegra_se_alg, alg.aead);
#endif
crypto_aead_set_reqsize(tfm, sizeof(struct tegra_aead_reqctx)); crypto_aead_set_reqsize(tfm, sizeof(struct tegra_aead_reqctx));
@@ -1327,10 +1379,11 @@ static int tegra_gcm_cra_init(struct crypto_aead *tfm)
ctx->alg = ret; ctx->alg = ret;
#ifndef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
ctx->enginectx.op.prepare_request = NULL; ctx->enginectx.op.prepare_request = NULL;
ctx->enginectx.op.unprepare_request = NULL; ctx->enginectx.op.unprepare_request = NULL;
ctx->enginectx.op.do_one_request = tegra_gcm_do_one_req; ctx->enginectx.op.do_one_request = tegra_gcm_do_one_req;
#endif
return 0; return 0;
} }
@@ -1650,7 +1703,11 @@ static int tegra_cmac_cra_init(struct crypto_tfm *tfm)
int ret; int ret;
algname = crypto_tfm_alg_name(tfm); algname = crypto_tfm_alg_name(tfm);
#ifdef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
se_alg = container_of(alg, struct tegra_se_alg, alg.ahash.base);
#else
se_alg = container_of(alg, struct tegra_se_alg, alg.ahash); se_alg = container_of(alg, struct tegra_se_alg, alg.ahash);
#endif
crypto_ahash_set_reqsize(ahash_tfm, sizeof(struct tegra_cmac_reqctx)); crypto_ahash_set_reqsize(ahash_tfm, sizeof(struct tegra_cmac_reqctx));
@@ -1665,9 +1722,11 @@ static int tegra_cmac_cra_init(struct crypto_tfm *tfm)
ctx->alg = ret; ctx->alg = ret;
#ifndef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
ctx->enginectx.op.prepare_request = NULL; ctx->enginectx.op.prepare_request = NULL;
ctx->enginectx.op.unprepare_request = NULL; ctx->enginectx.op.unprepare_request = NULL;
ctx->enginectx.op.do_one_request = tegra_cmac_do_one_req; ctx->enginectx.op.do_one_request = tegra_cmac_do_one_req;
#endif
tegra_cmac_init_fallback(ahash_tfm, ctx, algname); tegra_cmac_init_fallback(ahash_tfm, ctx, algname);
@@ -1807,6 +1866,9 @@ static int tegra_cmac_import(struct ahash_request *req, const void *in)
static struct tegra_se_alg tegra_aead_algs[] = { static struct tegra_se_alg tegra_aead_algs[] = {
{ {
.alg.aead = { .alg.aead = {
#ifdef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
.base = {
#endif
.init = tegra_gcm_cra_init, .init = tegra_gcm_cra_init,
.exit = tegra_aead_cra_exit, .exit = tegra_aead_cra_exit,
.setkey = tegra_aead_setkey, .setkey = tegra_aead_setkey,
@@ -1824,9 +1886,16 @@ static struct tegra_se_alg tegra_aead_algs[] = {
.cra_alignmask = 0xf, .cra_alignmask = 0xf,
.cra_module = THIS_MODULE, .cra_module = THIS_MODULE,
}, },
#ifdef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
},
.op.do_one_request = tegra_gcm_do_one_req,
#endif
} }
}, { }, {
.alg.aead = { .alg.aead = {
#ifdef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
.base = {
#endif
.init = tegra_ccm_cra_init, .init = tegra_ccm_cra_init,
.exit = tegra_aead_cra_exit, .exit = tegra_aead_cra_exit,
.setkey = tegra_aead_setkey, .setkey = tegra_aead_setkey,
@@ -1845,6 +1914,10 @@ static struct tegra_se_alg tegra_aead_algs[] = {
.cra_alignmask = 0xf, .cra_alignmask = 0xf,
.cra_module = THIS_MODULE, .cra_module = THIS_MODULE,
}, },
#ifdef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
},
.op.do_one_request = tegra_ccm_do_one_req,
#endif
} }
} }
}; };
@@ -1852,6 +1925,9 @@ static struct tegra_se_alg tegra_aead_algs[] = {
static struct tegra_se_alg tegra_cmac_algs[] = { static struct tegra_se_alg tegra_cmac_algs[] = {
{ {
.alg.ahash = { .alg.ahash = {
#ifdef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
.base = {
#endif
.init = tegra_cmac_init, .init = tegra_cmac_init,
.setkey = tegra_cmac_setkey, .setkey = tegra_cmac_setkey,
.update = tegra_cmac_update, .update = tegra_cmac_update,
@@ -1873,11 +1949,79 @@ static struct tegra_se_alg tegra_cmac_algs[] = {
.cra_module = THIS_MODULE, .cra_module = THIS_MODULE,
.cra_init = tegra_cmac_cra_init, .cra_init = tegra_cmac_cra_init,
.cra_exit = tegra_cmac_cra_exit, .cra_exit = tegra_cmac_cra_exit,
} },
#ifdef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
},
.op.do_one_request = tegra_cmac_do_one_req,
#endif
} }
} }
}; };
#ifdef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
int tegra_init_aes(struct tegra_se *se)
{
struct aead_engine_alg *aead_alg;
struct ahash_engine_alg *ahash_alg;
struct skcipher_engine_alg *sk_alg;
int i, ret;
se->manifest = tegra_aes_kac_manifest;
for (i = 0; i < ARRAY_SIZE(tegra_aes_algs); i++) {
sk_alg = &tegra_aes_algs[i].alg.skcipher;
tegra_aes_algs[i].se_dev = se;
ret = CRYPTO_REGISTER(skcipher, sk_alg);
if (ret) {
dev_err(se->dev, "failed to register %s\n",
sk_alg->base.base.cra_name);
goto err_aes;
}
}
for (i = 0; i < ARRAY_SIZE(tegra_aead_algs); i++) {
aead_alg = &tegra_aead_algs[i].alg.aead;
tegra_aead_algs[i].se_dev = se;
ret = CRYPTO_REGISTER(aead, aead_alg);
if (ret) {
dev_err(se->dev, "failed to register %s\n",
aead_alg->base.base.cra_name);
goto err_aead;
}
}
for (i = 0; i < ARRAY_SIZE(tegra_cmac_algs); i++) {
ahash_alg = &tegra_cmac_algs[i].alg.ahash;
tegra_cmac_algs[i].se_dev = se;
ret = CRYPTO_REGISTER(ahash, ahash_alg);
if (ret) {
dev_err(se->dev, "failed to register %s\n",
ahash_alg->base.halg.base.cra_name);
goto err_cmac;
}
}
return 0;
err_cmac:
for (--i; i >= 0; i--)
CRYPTO_UNREGISTER(ahash, &tegra_cmac_algs[i].alg.ahash);
i = ARRAY_SIZE(tegra_aead_algs);
err_aead:
for (--i; i >= 0; i--)
CRYPTO_UNREGISTER(aead, &tegra_aead_algs[i].alg.aead);
i = ARRAY_SIZE(tegra_aes_algs);
err_aes:
for (--i; i >= 0; i--)
CRYPTO_UNREGISTER(skcipher, &tegra_aes_algs[i].alg.skcipher);
return ret;
}
#else
int tegra_init_aes(struct tegra_se *se) int tegra_init_aes(struct tegra_se *se)
{ {
struct aead_alg *aead_alg; struct aead_alg *aead_alg;
@@ -1890,8 +2034,7 @@ int tegra_init_aes(struct tegra_se *se)
for (i = 0; i < ARRAY_SIZE(tegra_aes_algs); i++) { for (i = 0; i < ARRAY_SIZE(tegra_aes_algs); i++) {
sk_alg = &tegra_aes_algs[i].alg.skcipher; sk_alg = &tegra_aes_algs[i].alg.skcipher;
tegra_aes_algs[i].se_dev = se; tegra_aes_algs[i].se_dev = se;
ret = CRYPTO_REGISTER(skcipher, sk_alg);
ret = crypto_register_skcipher(sk_alg);
if (ret) { if (ret) {
dev_err(se->dev, "failed to register %s\n", dev_err(se->dev, "failed to register %s\n",
sk_alg->base.cra_name); sk_alg->base.cra_name);
@@ -1902,8 +2045,7 @@ int tegra_init_aes(struct tegra_se *se)
for (i = 0; i < ARRAY_SIZE(tegra_aead_algs); i++) { for (i = 0; i < ARRAY_SIZE(tegra_aead_algs); i++) {
aead_alg = &tegra_aead_algs[i].alg.aead; aead_alg = &tegra_aead_algs[i].alg.aead;
tegra_aead_algs[i].se_dev = se; tegra_aead_algs[i].se_dev = se;
ret = CRYPTO_REGISTER(aead, aead_alg);
ret = crypto_register_aead(aead_alg);
if (ret) { if (ret) {
dev_err(se->dev, "failed to register %s\n", dev_err(se->dev, "failed to register %s\n",
aead_alg->base.cra_name); aead_alg->base.cra_name);
@@ -1914,8 +2056,7 @@ int tegra_init_aes(struct tegra_se *se)
for (i = 0; i < ARRAY_SIZE(tegra_cmac_algs); i++) { for (i = 0; i < ARRAY_SIZE(tegra_cmac_algs); i++) {
ahash_alg = &tegra_cmac_algs[i].alg.ahash; ahash_alg = &tegra_cmac_algs[i].alg.ahash;
tegra_cmac_algs[i].se_dev = se; tegra_cmac_algs[i].se_dev = se;
ret = CRYPTO_REGISTER(ahash, ahash_alg);
ret = crypto_register_ahash(ahash_alg);
if (ret) { if (ret) {
dev_err(se->dev, "failed to register %s\n", dev_err(se->dev, "failed to register %s\n",
ahash_alg->halg.base.cra_name); ahash_alg->halg.base.cra_name);
@@ -1926,32 +2067,34 @@ int tegra_init_aes(struct tegra_se *se)
return 0; return 0;
err_cmac: err_cmac:
while (i--) for (--i; i >= 0; i--)
crypto_unregister_ahash(&tegra_cmac_algs[i].alg.ahash); CRYPTO_UNREGISTER(ahash, &tegra_cmac_algs[i].alg.ahash);
i = ARRAY_SIZE(tegra_aead_algs); i = ARRAY_SIZE(tegra_aead_algs);
err_aead: err_aead:
while (i--) for (--i; i >= 0; i--)
crypto_unregister_aead(&tegra_aead_algs[i].alg.aead); CRYPTO_UNREGISTER(aead, &tegra_aead_algs[i].alg.aead);
i = ARRAY_SIZE(tegra_aes_algs); i = ARRAY_SIZE(tegra_aes_algs);
err_aes: err_aes:
while (i--) for (--i; i >= 0; i--)
crypto_unregister_skcipher(&tegra_aes_algs[i].alg.skcipher); CRYPTO_UNREGISTER(skcipher, &tegra_aes_algs[i].alg.skcipher);
return ret; return ret;
} }
#endif
void tegra_deinit_aes(struct tegra_se *se) void tegra_deinit_aes(struct tegra_se *se)
{ {
int i; int i;
for (i = 0; i < ARRAY_SIZE(tegra_aes_algs); i++) for (i = 0; i < ARRAY_SIZE(tegra_aes_algs); i++)
crypto_unregister_skcipher(&tegra_aes_algs[i].alg.skcipher); CRYPTO_UNREGISTER(skcipher, &tegra_aes_algs[i].alg.skcipher);
for (i = 0; i < ARRAY_SIZE(tegra_aead_algs); i++) for (i = 0; i < ARRAY_SIZE(tegra_aead_algs); i++)
crypto_unregister_aead(&tegra_aead_algs[i].alg.aead); CRYPTO_UNREGISTER(aead, &tegra_aead_algs[i].alg.aead);
for (i = 0; i < ARRAY_SIZE(tegra_cmac_algs); i++) for (i = 0; i < ARRAY_SIZE(tegra_cmac_algs); i++)
crypto_unregister_ahash(&tegra_cmac_algs[i].alg.ahash); CRYPTO_UNREGISTER(ahash, &tegra_cmac_algs[i].alg.ahash);
} }

View File

@@ -4,6 +4,7 @@
* Crypto driver to handle HASH algorithms using NVIDIA Security Engine. * Crypto driver to handle HASH algorithms using NVIDIA Security Engine.
*/ */
#include <nvidia/conftest.h>
#include <linux/clk.h> #include <linux/clk.h>
#include <linux/dma-mapping.h> #include <linux/dma-mapping.h>
#include <linux/module.h> #include <linux/module.h>
@@ -22,7 +23,9 @@
#include "tegra-se.h" #include "tegra-se.h"
struct tegra_sha_ctx { struct tegra_sha_ctx {
#ifndef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
struct crypto_engine_ctx enginectx; struct crypto_engine_ctx enginectx;
#endif
struct tegra_se *se; struct tegra_se *se;
unsigned int alg; unsigned int alg;
bool fallback; bool fallback;
@@ -466,7 +469,11 @@ static int tegra_sha_cra_init(struct crypto_tfm *tfm)
int ret; int ret;
algname = crypto_tfm_alg_name(tfm); algname = crypto_tfm_alg_name(tfm);
#ifdef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
se_alg = container_of(alg, struct tegra_se_alg, alg.ahash.base);
#else
se_alg = container_of(alg, struct tegra_se_alg, alg.ahash); se_alg = container_of(alg, struct tegra_se_alg, alg.ahash);
#endif
crypto_ahash_set_reqsize(ahash_tfm, sizeof(struct tegra_sha_reqctx)); crypto_ahash_set_reqsize(ahash_tfm, sizeof(struct tegra_sha_reqctx));
@@ -485,9 +492,11 @@ static int tegra_sha_cra_init(struct crypto_tfm *tfm)
ctx->alg = ret; ctx->alg = ret;
#ifndef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
ctx->enginectx.op.prepare_request = NULL; ctx->enginectx.op.prepare_request = NULL;
ctx->enginectx.op.unprepare_request = NULL; ctx->enginectx.op.unprepare_request = NULL;
ctx->enginectx.op.do_one_request = tegra_sha_do_one_req; ctx->enginectx.op.do_one_request = tegra_sha_do_one_req;
#endif
return 0; return 0;
} }
@@ -661,6 +670,9 @@ static int tegra_sha_import(struct ahash_request *req, const void *in)
static struct tegra_se_alg tegra_hash_algs[] = { static struct tegra_se_alg tegra_hash_algs[] = {
{ {
.alg.ahash = { .alg.ahash = {
#ifdef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
.base = {
#endif
.init = tegra_sha_init, .init = tegra_sha_init,
.update = tegra_sha_update, .update = tegra_sha_update,
.final = tegra_sha_final, .final = tegra_sha_final,
@@ -682,9 +694,16 @@ static struct tegra_se_alg tegra_hash_algs[] = {
.cra_init = tegra_sha_cra_init, .cra_init = tegra_sha_cra_init,
.cra_exit = tegra_sha_cra_exit, .cra_exit = tegra_sha_cra_exit,
} }
#ifdef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
},
.op.do_one_request = tegra_sha_do_one_req,
#endif
} }
}, { }, {
.alg.ahash = { .alg.ahash = {
#ifdef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
.base = {
#endif
.init = tegra_sha_init, .init = tegra_sha_init,
.update = tegra_sha_update, .update = tegra_sha_update,
.final = tegra_sha_final, .final = tegra_sha_final,
@@ -706,9 +725,16 @@ static struct tegra_se_alg tegra_hash_algs[] = {
.cra_init = tegra_sha_cra_init, .cra_init = tegra_sha_cra_init,
.cra_exit = tegra_sha_cra_exit, .cra_exit = tegra_sha_cra_exit,
} }
#ifdef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
},
.op.do_one_request = tegra_sha_do_one_req,
#endif
} }
}, { }, {
.alg.ahash = { .alg.ahash = {
#ifdef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
.base = {
#endif
.init = tegra_sha_init, .init = tegra_sha_init,
.update = tegra_sha_update, .update = tegra_sha_update,
.final = tegra_sha_final, .final = tegra_sha_final,
@@ -730,9 +756,16 @@ static struct tegra_se_alg tegra_hash_algs[] = {
.cra_init = tegra_sha_cra_init, .cra_init = tegra_sha_cra_init,
.cra_exit = tegra_sha_cra_exit, .cra_exit = tegra_sha_cra_exit,
} }
#ifdef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
},
.op.do_one_request = tegra_sha_do_one_req,
#endif
} }
}, { }, {
.alg.ahash = { .alg.ahash = {
#ifdef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
.base = {
#endif
.init = tegra_sha_init, .init = tegra_sha_init,
.update = tegra_sha_update, .update = tegra_sha_update,
.final = tegra_sha_final, .final = tegra_sha_final,
@@ -754,9 +787,16 @@ static struct tegra_se_alg tegra_hash_algs[] = {
.cra_init = tegra_sha_cra_init, .cra_init = tegra_sha_cra_init,
.cra_exit = tegra_sha_cra_exit, .cra_exit = tegra_sha_cra_exit,
} }
#ifdef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
},
.op.do_one_request = tegra_sha_do_one_req,
#endif
} }
}, { }, {
.alg.ahash = { .alg.ahash = {
#ifdef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
.base = {
#endif
.init = tegra_sha_init, .init = tegra_sha_init,
.update = tegra_sha_update, .update = tegra_sha_update,
.final = tegra_sha_final, .final = tegra_sha_final,
@@ -778,9 +818,16 @@ static struct tegra_se_alg tegra_hash_algs[] = {
.cra_init = tegra_sha_cra_init, .cra_init = tegra_sha_cra_init,
.cra_exit = tegra_sha_cra_exit, .cra_exit = tegra_sha_cra_exit,
} }
#ifdef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
},
.op.do_one_request = tegra_sha_do_one_req,
#endif
} }
}, { }, {
.alg.ahash = { .alg.ahash = {
#ifdef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
.base = {
#endif
.init = tegra_sha_init, .init = tegra_sha_init,
.update = tegra_sha_update, .update = tegra_sha_update,
.final = tegra_sha_final, .final = tegra_sha_final,
@@ -802,9 +849,16 @@ static struct tegra_se_alg tegra_hash_algs[] = {
.cra_init = tegra_sha_cra_init, .cra_init = tegra_sha_cra_init,
.cra_exit = tegra_sha_cra_exit, .cra_exit = tegra_sha_cra_exit,
} }
#ifdef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
},
.op.do_one_request = tegra_sha_do_one_req,
#endif
} }
}, { }, {
.alg.ahash = { .alg.ahash = {
#ifdef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
.base = {
#endif
.init = tegra_sha_init, .init = tegra_sha_init,
.update = tegra_sha_update, .update = tegra_sha_update,
.final = tegra_sha_final, .final = tegra_sha_final,
@@ -826,9 +880,16 @@ static struct tegra_se_alg tegra_hash_algs[] = {
.cra_init = tegra_sha_cra_init, .cra_init = tegra_sha_cra_init,
.cra_exit = tegra_sha_cra_exit, .cra_exit = tegra_sha_cra_exit,
} }
#ifdef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
},
.op.do_one_request = tegra_sha_do_one_req,
#endif
} }
}, { }, {
.alg.ahash = { .alg.ahash = {
#ifdef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
.base = {
#endif
.init = tegra_sha_init, .init = tegra_sha_init,
.update = tegra_sha_update, .update = tegra_sha_update,
.final = tegra_sha_final, .final = tegra_sha_final,
@@ -850,9 +911,16 @@ static struct tegra_se_alg tegra_hash_algs[] = {
.cra_init = tegra_sha_cra_init, .cra_init = tegra_sha_cra_init,
.cra_exit = tegra_sha_cra_exit, .cra_exit = tegra_sha_cra_exit,
} }
#ifdef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
},
.op.do_one_request = tegra_sha_do_one_req,
#endif
} }
}, { }, {
.alg.ahash = { .alg.ahash = {
#ifdef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
.base = {
#endif
.init = tegra_sha_init, .init = tegra_sha_init,
.update = tegra_sha_update, .update = tegra_sha_update,
.final = tegra_sha_final, .final = tegra_sha_final,
@@ -874,10 +942,17 @@ static struct tegra_se_alg tegra_hash_algs[] = {
.cra_init = tegra_sha_cra_init, .cra_init = tegra_sha_cra_init,
.cra_exit = tegra_sha_cra_exit, .cra_exit = tegra_sha_cra_exit,
} }
#ifdef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
},
.op.do_one_request = tegra_sha_do_one_req,
#endif
} }
}, { }, {
.alg_base = "sha224", .alg_base = "sha224",
.alg.ahash = { .alg.ahash = {
#ifdef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
.base = {
#endif
.init = tegra_sha_init, .init = tegra_sha_init,
.update = tegra_sha_update, .update = tegra_sha_update,
.final = tegra_sha_final, .final = tegra_sha_final,
@@ -900,10 +975,17 @@ static struct tegra_se_alg tegra_hash_algs[] = {
.cra_init = tegra_sha_cra_init, .cra_init = tegra_sha_cra_init,
.cra_exit = tegra_sha_cra_exit, .cra_exit = tegra_sha_cra_exit,
} }
#ifdef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
},
.op.do_one_request = tegra_sha_do_one_req,
#endif
} }
}, { }, {
.alg_base = "sha256", .alg_base = "sha256",
.alg.ahash = { .alg.ahash = {
#ifdef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
.base = {
#endif
.init = tegra_sha_init, .init = tegra_sha_init,
.update = tegra_sha_update, .update = tegra_sha_update,
.final = tegra_sha_final, .final = tegra_sha_final,
@@ -926,10 +1008,17 @@ static struct tegra_se_alg tegra_hash_algs[] = {
.cra_init = tegra_sha_cra_init, .cra_init = tegra_sha_cra_init,
.cra_exit = tegra_sha_cra_exit, .cra_exit = tegra_sha_cra_exit,
} }
#ifdef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
},
.op.do_one_request = tegra_sha_do_one_req,
#endif
} }
}, { }, {
.alg_base = "sha384", .alg_base = "sha384",
.alg.ahash = { .alg.ahash = {
#ifdef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
.base = {
#endif
.init = tegra_sha_init, .init = tegra_sha_init,
.update = tegra_sha_update, .update = tegra_sha_update,
.final = tegra_sha_final, .final = tegra_sha_final,
@@ -952,10 +1041,17 @@ static struct tegra_se_alg tegra_hash_algs[] = {
.cra_init = tegra_sha_cra_init, .cra_init = tegra_sha_cra_init,
.cra_exit = tegra_sha_cra_exit, .cra_exit = tegra_sha_cra_exit,
} }
#ifdef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
},
.op.do_one_request = tegra_sha_do_one_req,
#endif
} }
}, { }, {
.alg_base = "sha512", .alg_base = "sha512",
.alg.ahash = { .alg.ahash = {
#ifdef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
.base = {
#endif
.init = tegra_sha_init, .init = tegra_sha_init,
.update = tegra_sha_update, .update = tegra_sha_update,
.final = tegra_sha_final, .final = tegra_sha_final,
@@ -978,6 +1074,10 @@ static struct tegra_se_alg tegra_hash_algs[] = {
.cra_init = tegra_sha_cra_init, .cra_init = tegra_sha_cra_init,
.cra_exit = tegra_sha_cra_exit, .cra_exit = tegra_sha_cra_exit,
} }
#ifdef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
},
.op.do_one_request = tegra_sha_do_one_req,
#endif
} }
} }
}; };
@@ -1017,7 +1117,11 @@ static int tegra_hash_kac_manifest(u32 user, u32 alg, u32 keylen)
int tegra_init_hash(struct tegra_se *se) int tegra_init_hash(struct tegra_se *se)
{ {
#ifdef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
struct ahash_engine_alg *alg;
#else
struct ahash_alg *alg; struct ahash_alg *alg;
#endif
int i, ret; int i, ret;
se->manifest = tegra_hash_kac_manifest; se->manifest = tegra_hash_kac_manifest;
@@ -1026,10 +1130,15 @@ int tegra_init_hash(struct tegra_se *se)
tegra_hash_algs[i].se_dev = se; tegra_hash_algs[i].se_dev = se;
alg = &tegra_hash_algs[i].alg.ahash; alg = &tegra_hash_algs[i].alg.ahash;
ret = crypto_register_ahash(alg); ret = CRYPTO_REGISTER(ahash, alg);
if (ret) { if (ret) {
#ifdef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
dev_err(se->dev, "failed to register %s\n",
alg->base.halg.base.cra_name);
#else
dev_err(se->dev, "failed to register %s\n", dev_err(se->dev, "failed to register %s\n",
alg->halg.base.cra_name); alg->halg.base.cra_name);
#endif
goto sha_err; goto sha_err;
} }
} }
@@ -1037,8 +1146,8 @@ int tegra_init_hash(struct tegra_se *se)
return 0; return 0;
sha_err: sha_err:
while (i--) for (--i; i >= 0; i--)
crypto_unregister_ahash(&tegra_hash_algs[i].alg.ahash); CRYPTO_UNREGISTER(ahash, &tegra_hash_algs[i].alg.ahash);
return ret; return ret;
} }
@@ -1048,5 +1157,5 @@ void tegra_deinit_hash(struct tegra_se *se)
int i; int i;
for (i = 0; i < ARRAY_SIZE(tegra_hash_algs); i++) for (i = 0; i < ARRAY_SIZE(tegra_hash_algs); i++)
crypto_unregister_ahash(&tegra_hash_algs[i].alg.ahash); CRYPTO_UNREGISTER(ahash, &tegra_hash_algs[i].alg.ahash);
} }

View File

@@ -349,6 +349,22 @@
#define SHA_UPDATE BIT(1) #define SHA_UPDATE BIT(1)
#define SHA_FINAL BIT(2) #define SHA_FINAL BIT(2)
#ifdef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
#define CRYPTO_REGISTER(alg, x) \
crypto_engine_register_##alg(x)
#else
#define CRYPTO_REGISTER(alg, x) \
crypto_register_##alg(x)
#endif
#ifdef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
#define CRYPTO_UNREGISTER(alg, x) \
crypto_engine_unregister_##alg(x)
#else
#define CRYPTO_UNREGISTER(alg, x) \
crypto_unregister_##alg(x)
#endif
/* Security Engine operation modes */ /* Security Engine operation modes */
enum se_aes_alg { enum se_aes_alg {
SE_ALG_CBC, /* Cipher Block Chaining (CBC) mode */ SE_ALG_CBC, /* Cipher Block Chaining (CBC) mode */
@@ -386,9 +402,15 @@ struct tegra_se_alg {
const char *alg_base; const char *alg_base;
union { union {
#ifndef NV_CONFTEST_REMOVE_STRUCT_CRYPTO_ENGINE_CTX
struct skcipher_alg skcipher; struct skcipher_alg skcipher;
struct aead_alg aead; struct aead_alg aead;
struct ahash_alg ahash; struct ahash_alg ahash;
#else
struct skcipher_engine_alg skcipher;
struct aead_engine_alg aead;
struct ahash_engine_alg ahash;
#endif
} alg; } alg;
}; };