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

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
Loading
Loading
Loading
Loading
+293 −89

File changed.

Preview size limit exceeded, changes collapsed.

+15 −13
Original line number Diff line number Diff line
@@ -66,8 +66,12 @@
#include "key_gen.h"
#include "caamhash_desc.h"
#include <crypto/internal/engine.h>
#include <crypto/internal/hash.h>
#include <linux/dma-mapping.h>
#include <linux/err.h>
#include <linux/kernel.h>
#include <linux/slab.h>
#include <linux/string.h>

#define CAAM_CRA_PRIORITY		3000

@@ -89,7 +93,6 @@ static struct list_head hash_list;

/* ahash per-session context */
struct caam_hash_ctx {
	struct crypto_engine_ctx enginectx;
	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_fin[DESC_HASH_MAX_USED_LEN] ____cacheline_aligned;
@@ -1750,7 +1753,7 @@ static struct caam_hash_template driver_hash[] = {
struct caam_hash_alg {
	struct list_head entry;
	int alg_type;
	struct ahash_alg ahash_alg;
	struct ahash_engine_alg ahash_alg;
};

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 =
		 container_of(halg, struct ahash_alg, halg);
	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);
	/* Sizes for MDHA running digests: MD5, SHA1, 224, 256, 384, 512 */
	static const u8 runninglen[] = { HASH_MSG_LEN + MD5_DIGEST_SIZE,
@@ -1853,8 +1856,6 @@ static int caam_hash_cra_init(struct crypto_tfm *tfm)
						      sh_desc_digest) -
					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));

	/*
@@ -1887,7 +1888,7 @@ void caam_algapi_hash_exit(void)
		return;

	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);
		kfree(t_alg);
	}
@@ -1905,8 +1906,8 @@ caam_hash_alloc(struct caam_hash_template *template,
	if (!t_alg)
		return ERR_PTR(-ENOMEM);

	t_alg->ahash_alg = template->template_ahash;
	halg = &t_alg->ahash_alg;
	t_alg->ahash_alg.base = template->template_ahash;
	halg = &t_alg->ahash_alg.base;
	alg = &halg->halg.base;

	if (keyed) {
@@ -1919,7 +1920,7 @@ caam_hash_alloc(struct caam_hash_template *template,
			 template->name);
		snprintf(alg->cra_driver_name, CRYPTO_MAX_ALG_NAME, "%s",
			 template->driver_name);
		t_alg->ahash_alg.setkey = NULL;
		halg->setkey = NULL;
	}
	alg->cra_module = THIS_MODULE;
	alg->cra_init = caam_hash_cra_init;
@@ -1931,6 +1932,7 @@ caam_hash_alloc(struct caam_hash_template *template,
	alg->cra_flags = CRYPTO_ALG_ASYNC | CRYPTO_ALG_ALLOCATES_MEMORY;

	t_alg->alg_type = template->alg_type;
	t_alg->ahash_alg.op.do_one_request = ahash_do_one_req;

	return t_alg;
}
@@ -1992,10 +1994,10 @@ int caam_algapi_hash_init(struct device *ctrldev)
			continue;
		}

		err = crypto_register_ahash(&t_alg->ahash_alg);
		err = crypto_engine_register_ahash(&t_alg->ahash_alg);
		if (err) {
			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);
			kfree(t_alg);
		} else
@@ -2012,10 +2014,10 @@ int caam_algapi_hash_init(struct device *ctrldev)
			continue;
		}

		err = crypto_register_ahash(&t_alg->ahash_alg);
		err = crypto_engine_register_ahash(&t_alg->ahash_alg);
		if (err) {
			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);
			kfree(t_alg);
		} else
+12 −8
Original line number Diff line number Diff line
@@ -18,7 +18,10 @@
#include "caampkc.h"
#include <crypto/internal/engine.h>
#include <linux/dma-mapping.h>
#include <linux/err.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_PRIV_F1_LEN	(2 * CAAM_CMD_SZ + \
@@ -39,7 +42,7 @@ static u8 *zero_buffer;
static bool init_done;

struct caam_akcipher_alg {
	struct akcipher_alg akcipher;
	struct akcipher_engine_alg akcipher;
	bool registered;
};

@@ -1124,8 +1127,6 @@ static int caam_rsa_init_tfm(struct crypto_akcipher *tfm)
		return -ENOMEM;
	}

	ctx->enginectx.op.do_one_request = akcipher_do_one_req;

	return 0;
}

@@ -1142,7 +1143,7 @@ static void caam_rsa_exit_tfm(struct crypto_akcipher *tfm)
}

static struct caam_akcipher_alg caam_rsa = {
	.akcipher = {
	.akcipher.base = {
		.encrypt = caam_rsa_enc,
		.decrypt = caam_rsa_dec,
		.set_pub_key = caam_rsa_set_pub_key,
@@ -1158,7 +1159,10 @@ static struct caam_akcipher_alg caam_rsa = {
			.cra_ctxsize = sizeof(struct caam_rsa_ctx) +
				       CRYPTO_DMA_PADDING,
		},
	}
	},
	.akcipher.op = {
		.do_one_request = akcipher_do_one_req,
	},
};

/* Public Key Cryptography module initialization handler */
@@ -1196,12 +1200,12 @@ int caam_pkc_init(struct device *ctrldev)
	if (!zero_buffer)
		return -ENOMEM;

	err = crypto_register_akcipher(&caam_rsa.akcipher);
	err = crypto_engine_register_akcipher(&caam_rsa.akcipher);

	if (err) {
		kfree(zero_buffer);
		dev_warn(ctrldev, "%s alg registration failed\n",
			 caam_rsa.akcipher.base.cra_driver_name);
			 caam_rsa.akcipher.base.base.cra_driver_name);
	} else {
		init_done = true;
		caam_rsa.registered = true;
@@ -1217,7 +1221,7 @@ void caam_pkc_exit(void)
		return;

	if (caam_rsa.registered)
		crypto_unregister_akcipher(&caam_rsa.akcipher);
		crypto_engine_unregister_akcipher(&caam_rsa.akcipher);

	kfree(zero_buffer);
}
+0 −3
Original line number Diff line number Diff line
@@ -12,7 +12,6 @@
#define _PKC_DESC_H_
#include "compat.h"
#include "pdb.h"
#include <crypto/engine.h>

/**
 * caam_priv_key_form - CAAM RSA private key representation
@@ -88,13 +87,11 @@ struct caam_rsa_key {

/**
 * caam_rsa_ctx - per session context.
 * @enginectx   : crypto engine context
 * @key         : RSA key in DMA zone
 * @dev         : device structure
 * @padding_dma : dma address of padding, for adding it to the input
 */
struct caam_rsa_ctx {
	struct crypto_engine_ctx enginectx;
	struct caam_rsa_key key;
	struct device *dev;
	dma_addr_t padding_dma;