crypto: sl3516 - 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>
This commit is contained in:
parent
623814c040
commit
67b7702c5b
|
@ -8,13 +8,17 @@
|
|||
* ECB mode.
|
||||
*/
|
||||
|
||||
#include <linux/crypto.h>
|
||||
#include <crypto/engine.h>
|
||||
#include <crypto/internal/skcipher.h>
|
||||
#include <crypto/scatterwalk.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/pm_runtime.h>
|
||||
#include <crypto/scatterwalk.h>
|
||||
#include <crypto/internal/skcipher.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/string.h>
|
||||
#include "sl3516-ce.h"
|
||||
|
||||
/* sl3516_ce_need_fallback - check if a request can be handled by the CE */
|
||||
|
@ -105,7 +109,7 @@ static int sl3516_ce_cipher_fallback(struct skcipher_request *areq)
|
|||
struct sl3516_ce_alg_template *algt;
|
||||
int err;
|
||||
|
||||
algt = container_of(alg, struct sl3516_ce_alg_template, alg.skcipher);
|
||||
algt = container_of(alg, struct sl3516_ce_alg_template, alg.skcipher.base);
|
||||
algt->stat_fb++;
|
||||
|
||||
skcipher_request_set_tfm(&rctx->fallback_req, op->fallback_tfm);
|
||||
|
@ -136,7 +140,7 @@ static int sl3516_ce_cipher(struct skcipher_request *areq)
|
|||
int err = 0;
|
||||
int i;
|
||||
|
||||
algt = container_of(alg, struct sl3516_ce_alg_template, alg.skcipher);
|
||||
algt = container_of(alg, struct sl3516_ce_alg_template, alg.skcipher.base);
|
||||
|
||||
dev_dbg(ce->dev, "%s %s %u %x IV(%p %u) key=%u\n", __func__,
|
||||
crypto_tfm_alg_name(areq->base.tfm),
|
||||
|
@ -258,7 +262,7 @@ theend:
|
|||
return err;
|
||||
}
|
||||
|
||||
static int sl3516_ce_handle_cipher_request(struct crypto_engine *engine, void *areq)
|
||||
int sl3516_ce_handle_cipher_request(struct crypto_engine *engine, void *areq)
|
||||
{
|
||||
int err;
|
||||
struct skcipher_request *breq = container_of(areq, struct skcipher_request, base);
|
||||
|
@ -318,7 +322,7 @@ int sl3516_ce_cipher_init(struct crypto_tfm *tfm)
|
|||
|
||||
memset(op, 0, sizeof(struct sl3516_ce_cipher_tfm_ctx));
|
||||
|
||||
algt = container_of(alg, struct sl3516_ce_alg_template, alg.skcipher);
|
||||
algt = container_of(alg, struct sl3516_ce_alg_template, alg.skcipher.base);
|
||||
op->ce = algt->ce;
|
||||
|
||||
op->fallback_tfm = crypto_alloc_skcipher(name, 0, CRYPTO_ALG_NEED_FALLBACK);
|
||||
|
@ -335,8 +339,6 @@ int sl3516_ce_cipher_init(struct crypto_tfm *tfm)
|
|||
crypto_tfm_alg_driver_name(&sktfm->base),
|
||||
crypto_tfm_alg_driver_name(crypto_skcipher_tfm(op->fallback_tfm)));
|
||||
|
||||
op->enginectx.op.do_one_request = sl3516_ce_handle_cipher_request;
|
||||
|
||||
err = pm_runtime_get_sync(op->ce->dev);
|
||||
if (err < 0)
|
||||
goto error_pm;
|
||||
|
|
|
@ -6,22 +6,25 @@
|
|||
*
|
||||
* Core file which registers crypto algorithms supported by the CryptoEngine
|
||||
*/
|
||||
|
||||
#include <crypto/engine.h>
|
||||
#include <crypto/internal/rng.h>
|
||||
#include <crypto/internal/skcipher.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/crypto.h>
|
||||
#include <linux/debugfs.h>
|
||||
#include <linux/dev_printk.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_device.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/pm_runtime.h>
|
||||
#include <linux/reset.h>
|
||||
#include <crypto/internal/rng.h>
|
||||
#include <crypto/internal/skcipher.h>
|
||||
|
||||
#include "sl3516-ce.h"
|
||||
|
||||
|
@ -217,7 +220,7 @@ static struct sl3516_ce_alg_template ce_algs[] = {
|
|||
{
|
||||
.type = CRYPTO_ALG_TYPE_SKCIPHER,
|
||||
.mode = ECB_AES,
|
||||
.alg.skcipher = {
|
||||
.alg.skcipher.base = {
|
||||
.base = {
|
||||
.cra_name = "ecb(aes)",
|
||||
.cra_driver_name = "ecb-aes-sl3516",
|
||||
|
@ -236,11 +239,13 @@ static struct sl3516_ce_alg_template ce_algs[] = {
|
|||
.setkey = sl3516_ce_aes_setkey,
|
||||
.encrypt = sl3516_ce_skencrypt,
|
||||
.decrypt = sl3516_ce_skdecrypt,
|
||||
}
|
||||
},
|
||||
.alg.skcipher.op = {
|
||||
.do_one_request = sl3516_ce_handle_cipher_request,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
#ifdef CONFIG_CRYPTO_DEV_SL3516_DEBUG
|
||||
static int sl3516_ce_debugfs_show(struct seq_file *seq, void *v)
|
||||
{
|
||||
struct sl3516_ce_dev *ce = seq->private;
|
||||
|
@ -264,8 +269,8 @@ static int sl3516_ce_debugfs_show(struct seq_file *seq, void *v)
|
|||
switch (ce_algs[i].type) {
|
||||
case CRYPTO_ALG_TYPE_SKCIPHER:
|
||||
seq_printf(seq, "%s %s reqs=%lu fallback=%lu\n",
|
||||
ce_algs[i].alg.skcipher.base.cra_driver_name,
|
||||
ce_algs[i].alg.skcipher.base.cra_name,
|
||||
ce_algs[i].alg.skcipher.base.base.cra_driver_name,
|
||||
ce_algs[i].alg.skcipher.base.base.cra_name,
|
||||
ce_algs[i].stat_req, ce_algs[i].stat_fb);
|
||||
break;
|
||||
}
|
||||
|
@ -274,7 +279,6 @@ static int sl3516_ce_debugfs_show(struct seq_file *seq, void *v)
|
|||
}
|
||||
|
||||
DEFINE_SHOW_ATTRIBUTE(sl3516_ce_debugfs);
|
||||
#endif
|
||||
|
||||
static int sl3516_ce_register_algs(struct sl3516_ce_dev *ce)
|
||||
{
|
||||
|
@ -286,11 +290,11 @@ static int sl3516_ce_register_algs(struct sl3516_ce_dev *ce)
|
|||
switch (ce_algs[i].type) {
|
||||
case CRYPTO_ALG_TYPE_SKCIPHER:
|
||||
dev_info(ce->dev, "DEBUG: Register %s\n",
|
||||
ce_algs[i].alg.skcipher.base.cra_name);
|
||||
err = crypto_register_skcipher(&ce_algs[i].alg.skcipher);
|
||||
ce_algs[i].alg.skcipher.base.base.cra_name);
|
||||
err = crypto_engine_register_skcipher(&ce_algs[i].alg.skcipher);
|
||||
if (err) {
|
||||
dev_err(ce->dev, "Fail to register %s\n",
|
||||
ce_algs[i].alg.skcipher.base.cra_name);
|
||||
ce_algs[i].alg.skcipher.base.base.cra_name);
|
||||
ce_algs[i].ce = NULL;
|
||||
return err;
|
||||
}
|
||||
|
@ -313,8 +317,8 @@ static void sl3516_ce_unregister_algs(struct sl3516_ce_dev *ce)
|
|||
switch (ce_algs[i].type) {
|
||||
case CRYPTO_ALG_TYPE_SKCIPHER:
|
||||
dev_info(ce->dev, "Unregister %d %s\n", i,
|
||||
ce_algs[i].alg.skcipher.base.cra_name);
|
||||
crypto_unregister_skcipher(&ce_algs[i].alg.skcipher);
|
||||
ce_algs[i].alg.skcipher.base.base.cra_name);
|
||||
crypto_engine_unregister_skcipher(&ce_algs[i].alg.skcipher);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -473,13 +477,20 @@ static int sl3516_ce_probe(struct platform_device *pdev)
|
|||
|
||||
pm_runtime_put_sync(ce->dev);
|
||||
|
||||
if (IS_ENABLED(CONFIG_CRYPTO_DEV_SL3516_DEBUG)) {
|
||||
struct dentry *dbgfs_dir __maybe_unused;
|
||||
struct dentry *dbgfs_stats __maybe_unused;
|
||||
|
||||
/* Ignore error of debugfs */
|
||||
dbgfs_dir = debugfs_create_dir("sl3516", NULL);
|
||||
dbgfs_stats = debugfs_create_file("stats", 0444,
|
||||
dbgfs_dir, ce,
|
||||
&sl3516_ce_debugfs_fops);
|
||||
#ifdef CONFIG_CRYPTO_DEV_SL3516_DEBUG
|
||||
/* Ignore error of debugfs */
|
||||
ce->dbgfs_dir = debugfs_create_dir("sl3516", NULL);
|
||||
ce->dbgfs_stats = debugfs_create_file("stats", 0444,
|
||||
ce->dbgfs_dir, ce,
|
||||
&sl3516_ce_debugfs_fops);
|
||||
ce->dbgfs_dir = dbgfs_dir;
|
||||
ce->dbgfs_stats = dbgfs_stats;
|
||||
#endif
|
||||
}
|
||||
|
||||
return 0;
|
||||
error_pmuse:
|
||||
|
|
|
@ -17,7 +17,6 @@
|
|||
#include <crypto/engine.h>
|
||||
#include <crypto/scatterwalk.h>
|
||||
#include <crypto/skcipher.h>
|
||||
#include <linux/crypto.h>
|
||||
#include <linux/debugfs.h>
|
||||
#include <linux/hw_random.h>
|
||||
|
||||
|
@ -292,16 +291,12 @@ struct sl3516_ce_cipher_req_ctx {
|
|||
|
||||
/*
|
||||
* struct sl3516_ce_cipher_tfm_ctx - context for a skcipher TFM
|
||||
* @enginectx: crypto_engine used by this TFM
|
||||
* @key: pointer to key data
|
||||
* @keylen: len of the key
|
||||
* @ce: pointer to the private data of driver handling this TFM
|
||||
* @fallback_tfm: pointer to the fallback TFM
|
||||
*
|
||||
* enginectx must be the first element
|
||||
*/
|
||||
struct sl3516_ce_cipher_tfm_ctx {
|
||||
struct crypto_engine_ctx enginectx;
|
||||
u32 *key;
|
||||
u32 keylen;
|
||||
struct sl3516_ce_dev *ce;
|
||||
|
@ -324,7 +319,7 @@ struct sl3516_ce_alg_template {
|
|||
u32 mode;
|
||||
struct sl3516_ce_dev *ce;
|
||||
union {
|
||||
struct skcipher_alg skcipher;
|
||||
struct skcipher_engine_alg skcipher;
|
||||
} alg;
|
||||
unsigned long stat_req;
|
||||
unsigned long stat_fb;
|
||||
|
@ -345,3 +340,4 @@ int sl3516_ce_run_task(struct sl3516_ce_dev *ce,
|
|||
|
||||
int sl3516_ce_rng_register(struct sl3516_ce_dev *ce);
|
||||
void sl3516_ce_rng_unregister(struct sl3516_ce_dev *ce);
|
||||
int sl3516_ce_handle_cipher_request(struct crypto_engine *engine, void *areq);
|
||||
|
|
Loading…
Reference in New Issue