Commit 623814c0 authored by Herbert Xu's avatar Herbert Xu

crypto: caam - 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: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent d33a6a3f
This diff is collapsed.
...@@ -66,8 +66,12 @@ ...@@ -66,8 +66,12 @@
#include "key_gen.h" #include "key_gen.h"
#include "caamhash_desc.h" #include "caamhash_desc.h"
#include <crypto/internal/engine.h> #include <crypto/internal/engine.h>
#include <crypto/internal/hash.h>
#include <linux/dma-mapping.h> #include <linux/dma-mapping.h>
#include <linux/err.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/slab.h>
#include <linux/string.h>
#define CAAM_CRA_PRIORITY 3000 #define CAAM_CRA_PRIORITY 3000
...@@ -89,7 +93,6 @@ static struct list_head hash_list; ...@@ -89,7 +93,6 @@ static struct list_head hash_list;
/* ahash per-session context */ /* ahash per-session context */
struct caam_hash_ctx { struct caam_hash_ctx {
struct crypto_engine_ctx enginectx;
u32 sh_desc_update[DESC_HASH_MAX_USED_LEN] ____cacheline_aligned; u32 sh_desc_update[DESC_HASH_MAX_USED_LEN] ____cacheline_aligned;
u32 sh_desc_update_first[DESC_HASH_MAX_USED_LEN] ____cacheline_aligned; u32 sh_desc_update_first[DESC_HASH_MAX_USED_LEN] ____cacheline_aligned;
u32 sh_desc_fin[DESC_HASH_MAX_USED_LEN] ____cacheline_aligned; u32 sh_desc_fin[DESC_HASH_MAX_USED_LEN] ____cacheline_aligned;
...@@ -1750,7 +1753,7 @@ static struct caam_hash_template driver_hash[] = { ...@@ -1750,7 +1753,7 @@ static struct caam_hash_template driver_hash[] = {
struct caam_hash_alg { struct caam_hash_alg {
struct list_head entry; struct list_head entry;
int alg_type; int alg_type;
struct ahash_alg ahash_alg; struct ahash_engine_alg ahash_alg;
}; };
static int caam_hash_cra_init(struct crypto_tfm *tfm) static int caam_hash_cra_init(struct crypto_tfm *tfm)
...@@ -1762,7 +1765,7 @@ static int caam_hash_cra_init(struct crypto_tfm *tfm) ...@@ -1762,7 +1765,7 @@ static int caam_hash_cra_init(struct crypto_tfm *tfm)
struct ahash_alg *alg = struct ahash_alg *alg =
container_of(halg, struct ahash_alg, halg); container_of(halg, struct ahash_alg, halg);
struct caam_hash_alg *caam_hash = struct caam_hash_alg *caam_hash =
container_of(alg, struct caam_hash_alg, ahash_alg); container_of(alg, struct caam_hash_alg, ahash_alg.base);
struct caam_hash_ctx *ctx = crypto_ahash_ctx_dma(ahash); struct caam_hash_ctx *ctx = crypto_ahash_ctx_dma(ahash);
/* Sizes for MDHA running digests: MD5, SHA1, 224, 256, 384, 512 */ /* Sizes for MDHA running digests: MD5, SHA1, 224, 256, 384, 512 */
static const u8 runninglen[] = { HASH_MSG_LEN + MD5_DIGEST_SIZE, static const u8 runninglen[] = { HASH_MSG_LEN + MD5_DIGEST_SIZE,
...@@ -1853,8 +1856,6 @@ static int caam_hash_cra_init(struct crypto_tfm *tfm) ...@@ -1853,8 +1856,6 @@ static int caam_hash_cra_init(struct crypto_tfm *tfm)
sh_desc_digest) - sh_desc_digest) -
sh_desc_update_offset; sh_desc_update_offset;
ctx->enginectx.op.do_one_request = ahash_do_one_req;
crypto_ahash_set_reqsize_dma(ahash, sizeof(struct caam_hash_state)); crypto_ahash_set_reqsize_dma(ahash, sizeof(struct caam_hash_state));
/* /*
...@@ -1887,7 +1888,7 @@ void caam_algapi_hash_exit(void) ...@@ -1887,7 +1888,7 @@ void caam_algapi_hash_exit(void)
return; return;
list_for_each_entry_safe(t_alg, n, &hash_list, entry) { list_for_each_entry_safe(t_alg, n, &hash_list, entry) {
crypto_unregister_ahash(&t_alg->ahash_alg); crypto_engine_unregister_ahash(&t_alg->ahash_alg);
list_del(&t_alg->entry); list_del(&t_alg->entry);
kfree(t_alg); kfree(t_alg);
} }
...@@ -1905,8 +1906,8 @@ caam_hash_alloc(struct caam_hash_template *template, ...@@ -1905,8 +1906,8 @@ caam_hash_alloc(struct caam_hash_template *template,
if (!t_alg) if (!t_alg)
return ERR_PTR(-ENOMEM); return ERR_PTR(-ENOMEM);
t_alg->ahash_alg = template->template_ahash; t_alg->ahash_alg.base = template->template_ahash;
halg = &t_alg->ahash_alg; halg = &t_alg->ahash_alg.base;
alg = &halg->halg.base; alg = &halg->halg.base;
if (keyed) { if (keyed) {
...@@ -1919,7 +1920,7 @@ caam_hash_alloc(struct caam_hash_template *template, ...@@ -1919,7 +1920,7 @@ caam_hash_alloc(struct caam_hash_template *template,
template->name); template->name);
snprintf(alg->cra_driver_name, CRYPTO_MAX_ALG_NAME, "%s", snprintf(alg->cra_driver_name, CRYPTO_MAX_ALG_NAME, "%s",
template->driver_name); template->driver_name);
t_alg->ahash_alg.setkey = NULL; halg->setkey = NULL;
} }
alg->cra_module = THIS_MODULE; alg->cra_module = THIS_MODULE;
alg->cra_init = caam_hash_cra_init; alg->cra_init = caam_hash_cra_init;
...@@ -1931,6 +1932,7 @@ caam_hash_alloc(struct caam_hash_template *template, ...@@ -1931,6 +1932,7 @@ caam_hash_alloc(struct caam_hash_template *template,
alg->cra_flags = CRYPTO_ALG_ASYNC | CRYPTO_ALG_ALLOCATES_MEMORY; alg->cra_flags = CRYPTO_ALG_ASYNC | CRYPTO_ALG_ALLOCATES_MEMORY;
t_alg->alg_type = template->alg_type; t_alg->alg_type = template->alg_type;
t_alg->ahash_alg.op.do_one_request = ahash_do_one_req;
return t_alg; return t_alg;
} }
...@@ -1992,10 +1994,10 @@ int caam_algapi_hash_init(struct device *ctrldev) ...@@ -1992,10 +1994,10 @@ int caam_algapi_hash_init(struct device *ctrldev)
continue; continue;
} }
err = crypto_register_ahash(&t_alg->ahash_alg); err = crypto_engine_register_ahash(&t_alg->ahash_alg);
if (err) { if (err) {
pr_warn("%s alg registration failed: %d\n", pr_warn("%s alg registration failed: %d\n",
t_alg->ahash_alg.halg.base.cra_driver_name, t_alg->ahash_alg.base.halg.base.cra_driver_name,
err); err);
kfree(t_alg); kfree(t_alg);
} else } else
...@@ -2012,10 +2014,10 @@ int caam_algapi_hash_init(struct device *ctrldev) ...@@ -2012,10 +2014,10 @@ int caam_algapi_hash_init(struct device *ctrldev)
continue; continue;
} }
err = crypto_register_ahash(&t_alg->ahash_alg); err = crypto_engine_register_ahash(&t_alg->ahash_alg);
if (err) { if (err) {
pr_warn("%s alg registration failed: %d\n", pr_warn("%s alg registration failed: %d\n",
t_alg->ahash_alg.halg.base.cra_driver_name, t_alg->ahash_alg.base.halg.base.cra_driver_name,
err); err);
kfree(t_alg); kfree(t_alg);
} else } else
......
...@@ -18,7 +18,10 @@ ...@@ -18,7 +18,10 @@
#include "caampkc.h" #include "caampkc.h"
#include <crypto/internal/engine.h> #include <crypto/internal/engine.h>
#include <linux/dma-mapping.h> #include <linux/dma-mapping.h>
#include <linux/err.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/slab.h>
#include <linux/string.h>
#define DESC_RSA_PUB_LEN (2 * CAAM_CMD_SZ + SIZEOF_RSA_PUB_PDB) #define DESC_RSA_PUB_LEN (2 * CAAM_CMD_SZ + SIZEOF_RSA_PUB_PDB)
#define DESC_RSA_PRIV_F1_LEN (2 * CAAM_CMD_SZ + \ #define DESC_RSA_PRIV_F1_LEN (2 * CAAM_CMD_SZ + \
...@@ -39,7 +42,7 @@ static u8 *zero_buffer; ...@@ -39,7 +42,7 @@ static u8 *zero_buffer;
static bool init_done; static bool init_done;
struct caam_akcipher_alg { struct caam_akcipher_alg {
struct akcipher_alg akcipher; struct akcipher_engine_alg akcipher;
bool registered; bool registered;
}; };
...@@ -1124,8 +1127,6 @@ static int caam_rsa_init_tfm(struct crypto_akcipher *tfm) ...@@ -1124,8 +1127,6 @@ static int caam_rsa_init_tfm(struct crypto_akcipher *tfm)
return -ENOMEM; return -ENOMEM;
} }
ctx->enginectx.op.do_one_request = akcipher_do_one_req;
return 0; return 0;
} }
...@@ -1142,7 +1143,7 @@ static void caam_rsa_exit_tfm(struct crypto_akcipher *tfm) ...@@ -1142,7 +1143,7 @@ static void caam_rsa_exit_tfm(struct crypto_akcipher *tfm)
} }
static struct caam_akcipher_alg caam_rsa = { static struct caam_akcipher_alg caam_rsa = {
.akcipher = { .akcipher.base = {
.encrypt = caam_rsa_enc, .encrypt = caam_rsa_enc,
.decrypt = caam_rsa_dec, .decrypt = caam_rsa_dec,
.set_pub_key = caam_rsa_set_pub_key, .set_pub_key = caam_rsa_set_pub_key,
...@@ -1158,7 +1159,10 @@ static struct caam_akcipher_alg caam_rsa = { ...@@ -1158,7 +1159,10 @@ static struct caam_akcipher_alg caam_rsa = {
.cra_ctxsize = sizeof(struct caam_rsa_ctx) + .cra_ctxsize = sizeof(struct caam_rsa_ctx) +
CRYPTO_DMA_PADDING, CRYPTO_DMA_PADDING,
}, },
} },
.akcipher.op = {
.do_one_request = akcipher_do_one_req,
},
}; };
/* Public Key Cryptography module initialization handler */ /* Public Key Cryptography module initialization handler */
...@@ -1196,12 +1200,12 @@ int caam_pkc_init(struct device *ctrldev) ...@@ -1196,12 +1200,12 @@ int caam_pkc_init(struct device *ctrldev)
if (!zero_buffer) if (!zero_buffer)
return -ENOMEM; return -ENOMEM;
err = crypto_register_akcipher(&caam_rsa.akcipher); err = crypto_engine_register_akcipher(&caam_rsa.akcipher);
if (err) { if (err) {
kfree(zero_buffer); kfree(zero_buffer);
dev_warn(ctrldev, "%s alg registration failed\n", dev_warn(ctrldev, "%s alg registration failed\n",
caam_rsa.akcipher.base.cra_driver_name); caam_rsa.akcipher.base.base.cra_driver_name);
} else { } else {
init_done = true; init_done = true;
caam_rsa.registered = true; caam_rsa.registered = true;
...@@ -1217,7 +1221,7 @@ void caam_pkc_exit(void) ...@@ -1217,7 +1221,7 @@ void caam_pkc_exit(void)
return; return;
if (caam_rsa.registered) if (caam_rsa.registered)
crypto_unregister_akcipher(&caam_rsa.akcipher); crypto_engine_unregister_akcipher(&caam_rsa.akcipher);
kfree(zero_buffer); kfree(zero_buffer);
} }
...@@ -12,7 +12,6 @@ ...@@ -12,7 +12,6 @@
#define _PKC_DESC_H_ #define _PKC_DESC_H_
#include "compat.h" #include "compat.h"
#include "pdb.h" #include "pdb.h"
#include <crypto/engine.h>
/** /**
* caam_priv_key_form - CAAM RSA private key representation * caam_priv_key_form - CAAM RSA private key representation
...@@ -88,13 +87,11 @@ struct caam_rsa_key { ...@@ -88,13 +87,11 @@ struct caam_rsa_key {
/** /**
* caam_rsa_ctx - per session context. * caam_rsa_ctx - per session context.
* @enginectx : crypto engine context
* @key : RSA key in DMA zone * @key : RSA key in DMA zone
* @dev : device structure * @dev : device structure
* @padding_dma : dma address of padding, for adding it to the input * @padding_dma : dma address of padding, for adding it to the input
*/ */
struct caam_rsa_ctx { struct caam_rsa_ctx {
struct crypto_engine_ctx enginectx;
struct caam_rsa_key key; struct caam_rsa_key key;
struct device *dev; struct device *dev;
dma_addr_t padding_dma; dma_addr_t padding_dma;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment