Message ID | 20240212135108.549755-8-avromanov@salutedevices.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Support more Amlogic SoC families in crypto driver | expand |
On 12/02/2024 14:50, Alexey Romanov wrote: > Because that is proper place for them. In particular, > it takes less of exported symbol between compiling entities. > > Signed-off-by: Alexey Romanov <avromanov@salutedevices.com> > --- > drivers/crypto/amlogic/amlogic-gxl-cipher.c | 98 +++++++++++++++-- > drivers/crypto/amlogic/amlogic-gxl-core.c | 110 ++++---------------- > drivers/crypto/amlogic/amlogic-gxl.h | 14 +-- > 3 files changed, 119 insertions(+), 103 deletions(-) > > diff --git a/drivers/crypto/amlogic/amlogic-gxl-cipher.c b/drivers/crypto/amlogic/amlogic-gxl-cipher.c > index dc0b100c5de2..bc3092a8a2c2 100644 > --- a/drivers/crypto/amlogic/amlogic-gxl-cipher.c > +++ b/drivers/crypto/amlogic/amlogic-gxl-cipher.c > @@ -271,7 +271,7 @@ int meson_handle_cipher_request(struct crypto_engine *engine, void *areq) > return 0; > } > > -int meson_skdecrypt(struct skcipher_request *areq) > +static int meson_skdecrypt(struct skcipher_request *areq) > { > struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(areq); > struct meson_cipher_tfm_ctx *op = crypto_skcipher_ctx(tfm); > @@ -289,7 +289,7 @@ int meson_skdecrypt(struct skcipher_request *areq) > return crypto_transfer_skcipher_request_to_engine(engine, areq); > } > > -int meson_skencrypt(struct skcipher_request *areq) > +static int meson_skencrypt(struct skcipher_request *areq) > { > struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(areq); > struct meson_cipher_tfm_ctx *op = crypto_skcipher_ctx(tfm); > @@ -307,7 +307,7 @@ int meson_skencrypt(struct skcipher_request *areq) > return crypto_transfer_skcipher_request_to_engine(engine, areq); > } > > -int meson_cipher_init(struct crypto_tfm *tfm) > +static int meson_cipher_init(struct crypto_tfm *tfm) > { > struct meson_cipher_tfm_ctx *op = crypto_tfm_ctx(tfm); > struct meson_alg_template *algt; > @@ -333,7 +333,7 @@ int meson_cipher_init(struct crypto_tfm *tfm) > return 0; > } > > -void meson_cipher_exit(struct crypto_tfm *tfm) > +static void meson_cipher_exit(struct crypto_tfm *tfm) > { > struct meson_cipher_tfm_ctx *op = crypto_tfm_ctx(tfm); > > @@ -341,8 +341,8 @@ void meson_cipher_exit(struct crypto_tfm *tfm) > crypto_free_skcipher(op->fallback_tfm); > } > > -int meson_aes_setkey(struct crypto_skcipher *tfm, const u8 *key, > - unsigned int keylen) > +static int meson_aes_setkey(struct crypto_skcipher *tfm, const u8 *key, > + unsigned int keylen) > { > struct meson_cipher_tfm_ctx *op = crypto_skcipher_ctx(tfm); > struct meson_dev *mc = op->mc; > @@ -369,3 +369,89 @@ int meson_aes_setkey(struct crypto_skcipher *tfm, const u8 *key, > > return crypto_skcipher_setkey(op->fallback_tfm, key, keylen); > } > + > +static struct meson_alg_template algs[] = { > +{ > + .type = CRYPTO_ALG_TYPE_SKCIPHER, > + .blockmode = MESON_OPMODE_CBC, > + .alg.skcipher.base = { > + .base = { > + .cra_name = "cbc(aes)", > + .cra_driver_name = "cbc-aes-gxl", > + .cra_priority = 400, > + .cra_blocksize = AES_BLOCK_SIZE, > + .cra_flags = CRYPTO_ALG_TYPE_SKCIPHER | > + CRYPTO_ALG_ASYNC | CRYPTO_ALG_ALLOCATES_MEMORY | > + CRYPTO_ALG_NEED_FALLBACK, > + .cra_ctxsize = sizeof(struct meson_cipher_tfm_ctx), > + .cra_module = THIS_MODULE, > + .cra_alignmask = 0xf, > + .cra_init = meson_cipher_init, > + .cra_exit = meson_cipher_exit, > + }, > + .min_keysize = AES_MIN_KEY_SIZE, > + .max_keysize = AES_MAX_KEY_SIZE, > + .ivsize = AES_BLOCK_SIZE, > + .setkey = meson_aes_setkey, > + .encrypt = meson_skencrypt, > + .decrypt = meson_skdecrypt, > + }, > + .alg.skcipher.op = { > + .do_one_request = meson_handle_cipher_request, > + }, > +}, > +{ > + .type = CRYPTO_ALG_TYPE_SKCIPHER, > + .blockmode = MESON_OPMODE_ECB, > + .alg.skcipher.base = { > + .base = { > + .cra_name = "ecb(aes)", > + .cra_driver_name = "ecb-aes-gxl", > + .cra_priority = 400, > + .cra_blocksize = AES_BLOCK_SIZE, > + .cra_flags = CRYPTO_ALG_TYPE_SKCIPHER | > + CRYPTO_ALG_ASYNC | CRYPTO_ALG_ALLOCATES_MEMORY | > + CRYPTO_ALG_NEED_FALLBACK, > + .cra_ctxsize = sizeof(struct meson_cipher_tfm_ctx), > + .cra_module = THIS_MODULE, > + .cra_alignmask = 0xf, > + .cra_init = meson_cipher_init, > + .cra_exit = meson_cipher_exit, > + }, > + .min_keysize = AES_MIN_KEY_SIZE, > + .max_keysize = AES_MAX_KEY_SIZE, > + .setkey = meson_aes_setkey, > + .encrypt = meson_skencrypt, > + .decrypt = meson_skdecrypt, > + }, > + .alg.skcipher.op = { > + .do_one_request = meson_handle_cipher_request, > + }, > +}, > +}; > + > +int meson_cipher_register(struct meson_dev *mc) > +{ > + return meson_register_algs(mc, algs, ARRAY_SIZE(algs)); > +} > + > +void meson_cipher_unregister(struct meson_dev *mc) > +{ > + meson_unregister_algs(mc, algs, ARRAY_SIZE(algs)); > +} > + > +void meson_cipher_debugfs_show(struct seq_file *seq, void *v) > +{ > + int i; > + > + for (i = 0; i < ARRAY_SIZE(algs); i++) { > + seq_printf(seq, "%s %s %lu %lu\n", > + algs[i].alg.skcipher.base.base.cra_driver_name, > + algs[i].alg.skcipher.base.base.cra_name, > +#ifdef CONFIG_CRYPTO_DEV_AMLOGIC_GXL_DEBUG > + algs[i].stat_req, algs[i].stat_fb); > +#else > + 0ul, 0ul); > +#endif > + } > +} > diff --git a/drivers/crypto/amlogic/amlogic-gxl-core.c b/drivers/crypto/amlogic/amlogic-gxl-core.c > index f7c60ebffbc3..22ff2768b5e5 100644 > --- a/drivers/crypto/amlogic/amlogic-gxl-core.c > +++ b/drivers/crypto/amlogic/amlogic-gxl-core.c > @@ -65,66 +65,6 @@ static irqreturn_t meson_irq_handler(int irq, void *data) > return IRQ_HANDLED; > } > > -static struct meson_alg_template mc_algs[] = { > -{ > - .type = CRYPTO_ALG_TYPE_SKCIPHER, > - .blockmode = MESON_OPMODE_CBC, > - .alg.skcipher.base = { > - .base = { > - .cra_name = "cbc(aes)", > - .cra_driver_name = "cbc-aes-gxl", > - .cra_priority = 400, > - .cra_blocksize = AES_BLOCK_SIZE, > - .cra_flags = CRYPTO_ALG_TYPE_SKCIPHER | > - CRYPTO_ALG_ASYNC | CRYPTO_ALG_ALLOCATES_MEMORY | > - CRYPTO_ALG_NEED_FALLBACK, > - .cra_ctxsize = sizeof(struct meson_cipher_tfm_ctx), > - .cra_module = THIS_MODULE, > - .cra_alignmask = 0xf, > - .cra_init = meson_cipher_init, > - .cra_exit = meson_cipher_exit, > - }, > - .min_keysize = AES_MIN_KEY_SIZE, > - .max_keysize = AES_MAX_KEY_SIZE, > - .ivsize = AES_BLOCK_SIZE, > - .setkey = meson_aes_setkey, > - .encrypt = meson_skencrypt, > - .decrypt = meson_skdecrypt, > - }, > - .alg.skcipher.op = { > - .do_one_request = meson_handle_cipher_request, > - }, > -}, > -{ > - .type = CRYPTO_ALG_TYPE_SKCIPHER, > - .blockmode = MESON_OPMODE_ECB, > - .alg.skcipher.base = { > - .base = { > - .cra_name = "ecb(aes)", > - .cra_driver_name = "ecb-aes-gxl", > - .cra_priority = 400, > - .cra_blocksize = AES_BLOCK_SIZE, > - .cra_flags = CRYPTO_ALG_TYPE_SKCIPHER | > - CRYPTO_ALG_ASYNC | CRYPTO_ALG_ALLOCATES_MEMORY | > - CRYPTO_ALG_NEED_FALLBACK, > - .cra_ctxsize = sizeof(struct meson_cipher_tfm_ctx), > - .cra_module = THIS_MODULE, > - .cra_alignmask = 0xf, > - .cra_init = meson_cipher_init, > - .cra_exit = meson_cipher_exit, > - }, > - .min_keysize = AES_MIN_KEY_SIZE, > - .max_keysize = AES_MAX_KEY_SIZE, > - .setkey = meson_aes_setkey, > - .encrypt = meson_skencrypt, > - .decrypt = meson_skdecrypt, > - }, > - .alg.skcipher.op = { > - .do_one_request = meson_handle_cipher_request, > - }, > -}, > -}; > - > static int meson_debugfs_show(struct seq_file *seq, void *v) > { > struct meson_dev *mc __maybe_unused = seq->private; > @@ -138,20 +78,8 @@ static int meson_debugfs_show(struct seq_file *seq, void *v) > 0ul); > #endif > > - for (i = 0; i < ARRAY_SIZE(mc_algs); i++) { > - switch (mc_algs[i].type) { > - case CRYPTO_ALG_TYPE_SKCIPHER: > - seq_printf(seq, "%s %s %lu %lu\n", > - mc_algs[i].alg.skcipher.base.base.cra_driver_name, > - mc_algs[i].alg.skcipher.base.base.cra_name, > -#ifdef CONFIG_CRYPTO_DEV_AMLOGIC_GXL_DEBUG > - mc_algs[i].stat_req, mc_algs[i].stat_fb); > -#else > - 0ul, 0ul); > -#endif > - break; > - } > - } > + meson_cipher_debugfs_show(seq, v); > + > return 0; > } > DEFINE_SHOW_ATTRIBUTE(meson_debugfs); > @@ -228,38 +156,40 @@ static int meson_allocate_chanlist(struct meson_dev *mc) > return err; > } > > -static int meson_register_algs(struct meson_dev *mc) > +int meson_register_algs(struct meson_dev *mc, struct meson_alg_template *algs, > + unsigned int count) > { > int err, i; > > - for (i = 0; i < ARRAY_SIZE(mc_algs); i++) { > - mc_algs[i].mc = mc; > - switch (mc_algs[i].type) { > + for (i = 0; i < count; i++) { > + switch (algs[i].type) { > case CRYPTO_ALG_TYPE_SKCIPHER: > - err = crypto_engine_register_skcipher(&mc_algs[i].alg.skcipher); > + err = crypto_engine_register_skcipher(&algs[i].alg.skcipher); > if (err) { > dev_err(mc->dev, "Fail to register %s\n", > - mc_algs[i].alg.skcipher.base.base.cra_name); > - mc_algs[i].mc = NULL; > + algs[i].alg.skcipher.base.base.cra_name); > + meson_unregister_algs(mc, algs, count); > return err; > } > break; > } > + algs[i].mc = mc; > } > > return 0; > } > > -static void meson_unregister_algs(struct meson_dev *mc) > +void meson_unregister_algs(struct meson_dev *mc, struct meson_alg_template *algs, > + unsigned int count) > { > int i; > > - for (i = 0; i < ARRAY_SIZE(mc_algs); i++) { > - if (!mc_algs[i].mc) > + for (i = 0; i < count; i++) { > + if (!algs[i].mc) > continue; > - switch (mc_algs[i].type) { > + switch (algs[i].type) { > case CRYPTO_ALG_TYPE_SKCIPHER: > - crypto_engine_unregister_skcipher(&mc_algs[i].alg.skcipher); > + crypto_engine_unregister_skcipher(&algs[i].alg.skcipher); > break; > } > } > @@ -318,9 +248,9 @@ static int meson_crypto_probe(struct platform_device *pdev) > if (err) > goto error_flow; > > - err = meson_register_algs(mc); > + err = meson_cipher_register(mc); > if (err) > - goto error_alg; > + goto error_flow; > > if (IS_ENABLED(CONFIG_CRYPTO_DEV_AMLOGIC_GXL_DEBUG)) { > struct dentry *dbgfs_dir; > @@ -334,8 +264,6 @@ static int meson_crypto_probe(struct platform_device *pdev) > } > > return 0; > -error_alg: > - meson_unregister_algs(mc); > error_flow: > meson_free_chanlist(mc, mc->flow_cnt - 1); > return err; > @@ -349,7 +277,7 @@ static void meson_crypto_remove(struct platform_device *pdev) > debugfs_remove_recursive(mc->dbgfs_dir); > #endif > > - meson_unregister_algs(mc); > + meson_cipher_unregister(mc); > > meson_free_chanlist(mc, mc->flow_cnt - 1); > } > diff --git a/drivers/crypto/amlogic/amlogic-gxl.h b/drivers/crypto/amlogic/amlogic-gxl.h > index e27908992ae3..0a03e8144977 100644 > --- a/drivers/crypto/amlogic/amlogic-gxl.h > +++ b/drivers/crypto/amlogic/amlogic-gxl.h > @@ -167,10 +167,12 @@ void meson_dma_start(struct meson_dev *mc, int flow); > > int meson_enqueue(struct crypto_async_request *areq, u32 type); > > -int meson_aes_setkey(struct crypto_skcipher *tfm, const u8 *key, > - unsigned int keylen); > -int meson_cipher_init(struct crypto_tfm *tfm); > -void meson_cipher_exit(struct crypto_tfm *tfm); > -int meson_skdecrypt(struct skcipher_request *areq); > -int meson_skencrypt(struct skcipher_request *areq); > +int meson_register_algs(struct meson_dev *mc, struct meson_alg_template *algs, > + unsigned int count); > +void meson_unregister_algs(struct meson_dev *mc, struct meson_alg_template *algs, > + unsigned int count); > + > +int meson_cipher_register(struct meson_dev *mc); > +void meson_cipher_unregister(struct meson_dev *mc); > +void meson_cipher_debugfs_show(struct seq_file *seq, void *v); > int meson_handle_cipher_request(struct crypto_engine *engine, void *areq); Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
diff --git a/drivers/crypto/amlogic/amlogic-gxl-cipher.c b/drivers/crypto/amlogic/amlogic-gxl-cipher.c index dc0b100c5de2..bc3092a8a2c2 100644 --- a/drivers/crypto/amlogic/amlogic-gxl-cipher.c +++ b/drivers/crypto/amlogic/amlogic-gxl-cipher.c @@ -271,7 +271,7 @@ int meson_handle_cipher_request(struct crypto_engine *engine, void *areq) return 0; } -int meson_skdecrypt(struct skcipher_request *areq) +static int meson_skdecrypt(struct skcipher_request *areq) { struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(areq); struct meson_cipher_tfm_ctx *op = crypto_skcipher_ctx(tfm); @@ -289,7 +289,7 @@ int meson_skdecrypt(struct skcipher_request *areq) return crypto_transfer_skcipher_request_to_engine(engine, areq); } -int meson_skencrypt(struct skcipher_request *areq) +static int meson_skencrypt(struct skcipher_request *areq) { struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(areq); struct meson_cipher_tfm_ctx *op = crypto_skcipher_ctx(tfm); @@ -307,7 +307,7 @@ int meson_skencrypt(struct skcipher_request *areq) return crypto_transfer_skcipher_request_to_engine(engine, areq); } -int meson_cipher_init(struct crypto_tfm *tfm) +static int meson_cipher_init(struct crypto_tfm *tfm) { struct meson_cipher_tfm_ctx *op = crypto_tfm_ctx(tfm); struct meson_alg_template *algt; @@ -333,7 +333,7 @@ int meson_cipher_init(struct crypto_tfm *tfm) return 0; } -void meson_cipher_exit(struct crypto_tfm *tfm) +static void meson_cipher_exit(struct crypto_tfm *tfm) { struct meson_cipher_tfm_ctx *op = crypto_tfm_ctx(tfm); @@ -341,8 +341,8 @@ void meson_cipher_exit(struct crypto_tfm *tfm) crypto_free_skcipher(op->fallback_tfm); } -int meson_aes_setkey(struct crypto_skcipher *tfm, const u8 *key, - unsigned int keylen) +static int meson_aes_setkey(struct crypto_skcipher *tfm, const u8 *key, + unsigned int keylen) { struct meson_cipher_tfm_ctx *op = crypto_skcipher_ctx(tfm); struct meson_dev *mc = op->mc; @@ -369,3 +369,89 @@ int meson_aes_setkey(struct crypto_skcipher *tfm, const u8 *key, return crypto_skcipher_setkey(op->fallback_tfm, key, keylen); } + +static struct meson_alg_template algs[] = { +{ + .type = CRYPTO_ALG_TYPE_SKCIPHER, + .blockmode = MESON_OPMODE_CBC, + .alg.skcipher.base = { + .base = { + .cra_name = "cbc(aes)", + .cra_driver_name = "cbc-aes-gxl", + .cra_priority = 400, + .cra_blocksize = AES_BLOCK_SIZE, + .cra_flags = CRYPTO_ALG_TYPE_SKCIPHER | + CRYPTO_ALG_ASYNC | CRYPTO_ALG_ALLOCATES_MEMORY | + CRYPTO_ALG_NEED_FALLBACK, + .cra_ctxsize = sizeof(struct meson_cipher_tfm_ctx), + .cra_module = THIS_MODULE, + .cra_alignmask = 0xf, + .cra_init = meson_cipher_init, + .cra_exit = meson_cipher_exit, + }, + .min_keysize = AES_MIN_KEY_SIZE, + .max_keysize = AES_MAX_KEY_SIZE, + .ivsize = AES_BLOCK_SIZE, + .setkey = meson_aes_setkey, + .encrypt = meson_skencrypt, + .decrypt = meson_skdecrypt, + }, + .alg.skcipher.op = { + .do_one_request = meson_handle_cipher_request, + }, +}, +{ + .type = CRYPTO_ALG_TYPE_SKCIPHER, + .blockmode = MESON_OPMODE_ECB, + .alg.skcipher.base = { + .base = { + .cra_name = "ecb(aes)", + .cra_driver_name = "ecb-aes-gxl", + .cra_priority = 400, + .cra_blocksize = AES_BLOCK_SIZE, + .cra_flags = CRYPTO_ALG_TYPE_SKCIPHER | + CRYPTO_ALG_ASYNC | CRYPTO_ALG_ALLOCATES_MEMORY | + CRYPTO_ALG_NEED_FALLBACK, + .cra_ctxsize = sizeof(struct meson_cipher_tfm_ctx), + .cra_module = THIS_MODULE, + .cra_alignmask = 0xf, + .cra_init = meson_cipher_init, + .cra_exit = meson_cipher_exit, + }, + .min_keysize = AES_MIN_KEY_SIZE, + .max_keysize = AES_MAX_KEY_SIZE, + .setkey = meson_aes_setkey, + .encrypt = meson_skencrypt, + .decrypt = meson_skdecrypt, + }, + .alg.skcipher.op = { + .do_one_request = meson_handle_cipher_request, + }, +}, +}; + +int meson_cipher_register(struct meson_dev *mc) +{ + return meson_register_algs(mc, algs, ARRAY_SIZE(algs)); +} + +void meson_cipher_unregister(struct meson_dev *mc) +{ + meson_unregister_algs(mc, algs, ARRAY_SIZE(algs)); +} + +void meson_cipher_debugfs_show(struct seq_file *seq, void *v) +{ + int i; + + for (i = 0; i < ARRAY_SIZE(algs); i++) { + seq_printf(seq, "%s %s %lu %lu\n", + algs[i].alg.skcipher.base.base.cra_driver_name, + algs[i].alg.skcipher.base.base.cra_name, +#ifdef CONFIG_CRYPTO_DEV_AMLOGIC_GXL_DEBUG + algs[i].stat_req, algs[i].stat_fb); +#else + 0ul, 0ul); +#endif + } +} diff --git a/drivers/crypto/amlogic/amlogic-gxl-core.c b/drivers/crypto/amlogic/amlogic-gxl-core.c index f7c60ebffbc3..22ff2768b5e5 100644 --- a/drivers/crypto/amlogic/amlogic-gxl-core.c +++ b/drivers/crypto/amlogic/amlogic-gxl-core.c @@ -65,66 +65,6 @@ static irqreturn_t meson_irq_handler(int irq, void *data) return IRQ_HANDLED; } -static struct meson_alg_template mc_algs[] = { -{ - .type = CRYPTO_ALG_TYPE_SKCIPHER, - .blockmode = MESON_OPMODE_CBC, - .alg.skcipher.base = { - .base = { - .cra_name = "cbc(aes)", - .cra_driver_name = "cbc-aes-gxl", - .cra_priority = 400, - .cra_blocksize = AES_BLOCK_SIZE, - .cra_flags = CRYPTO_ALG_TYPE_SKCIPHER | - CRYPTO_ALG_ASYNC | CRYPTO_ALG_ALLOCATES_MEMORY | - CRYPTO_ALG_NEED_FALLBACK, - .cra_ctxsize = sizeof(struct meson_cipher_tfm_ctx), - .cra_module = THIS_MODULE, - .cra_alignmask = 0xf, - .cra_init = meson_cipher_init, - .cra_exit = meson_cipher_exit, - }, - .min_keysize = AES_MIN_KEY_SIZE, - .max_keysize = AES_MAX_KEY_SIZE, - .ivsize = AES_BLOCK_SIZE, - .setkey = meson_aes_setkey, - .encrypt = meson_skencrypt, - .decrypt = meson_skdecrypt, - }, - .alg.skcipher.op = { - .do_one_request = meson_handle_cipher_request, - }, -}, -{ - .type = CRYPTO_ALG_TYPE_SKCIPHER, - .blockmode = MESON_OPMODE_ECB, - .alg.skcipher.base = { - .base = { - .cra_name = "ecb(aes)", - .cra_driver_name = "ecb-aes-gxl", - .cra_priority = 400, - .cra_blocksize = AES_BLOCK_SIZE, - .cra_flags = CRYPTO_ALG_TYPE_SKCIPHER | - CRYPTO_ALG_ASYNC | CRYPTO_ALG_ALLOCATES_MEMORY | - CRYPTO_ALG_NEED_FALLBACK, - .cra_ctxsize = sizeof(struct meson_cipher_tfm_ctx), - .cra_module = THIS_MODULE, - .cra_alignmask = 0xf, - .cra_init = meson_cipher_init, - .cra_exit = meson_cipher_exit, - }, - .min_keysize = AES_MIN_KEY_SIZE, - .max_keysize = AES_MAX_KEY_SIZE, - .setkey = meson_aes_setkey, - .encrypt = meson_skencrypt, - .decrypt = meson_skdecrypt, - }, - .alg.skcipher.op = { - .do_one_request = meson_handle_cipher_request, - }, -}, -}; - static int meson_debugfs_show(struct seq_file *seq, void *v) { struct meson_dev *mc __maybe_unused = seq->private; @@ -138,20 +78,8 @@ static int meson_debugfs_show(struct seq_file *seq, void *v) 0ul); #endif - for (i = 0; i < ARRAY_SIZE(mc_algs); i++) { - switch (mc_algs[i].type) { - case CRYPTO_ALG_TYPE_SKCIPHER: - seq_printf(seq, "%s %s %lu %lu\n", - mc_algs[i].alg.skcipher.base.base.cra_driver_name, - mc_algs[i].alg.skcipher.base.base.cra_name, -#ifdef CONFIG_CRYPTO_DEV_AMLOGIC_GXL_DEBUG - mc_algs[i].stat_req, mc_algs[i].stat_fb); -#else - 0ul, 0ul); -#endif - break; - } - } + meson_cipher_debugfs_show(seq, v); + return 0; } DEFINE_SHOW_ATTRIBUTE(meson_debugfs); @@ -228,38 +156,40 @@ static int meson_allocate_chanlist(struct meson_dev *mc) return err; } -static int meson_register_algs(struct meson_dev *mc) +int meson_register_algs(struct meson_dev *mc, struct meson_alg_template *algs, + unsigned int count) { int err, i; - for (i = 0; i < ARRAY_SIZE(mc_algs); i++) { - mc_algs[i].mc = mc; - switch (mc_algs[i].type) { + for (i = 0; i < count; i++) { + switch (algs[i].type) { case CRYPTO_ALG_TYPE_SKCIPHER: - err = crypto_engine_register_skcipher(&mc_algs[i].alg.skcipher); + err = crypto_engine_register_skcipher(&algs[i].alg.skcipher); if (err) { dev_err(mc->dev, "Fail to register %s\n", - mc_algs[i].alg.skcipher.base.base.cra_name); - mc_algs[i].mc = NULL; + algs[i].alg.skcipher.base.base.cra_name); + meson_unregister_algs(mc, algs, count); return err; } break; } + algs[i].mc = mc; } return 0; } -static void meson_unregister_algs(struct meson_dev *mc) +void meson_unregister_algs(struct meson_dev *mc, struct meson_alg_template *algs, + unsigned int count) { int i; - for (i = 0; i < ARRAY_SIZE(mc_algs); i++) { - if (!mc_algs[i].mc) + for (i = 0; i < count; i++) { + if (!algs[i].mc) continue; - switch (mc_algs[i].type) { + switch (algs[i].type) { case CRYPTO_ALG_TYPE_SKCIPHER: - crypto_engine_unregister_skcipher(&mc_algs[i].alg.skcipher); + crypto_engine_unregister_skcipher(&algs[i].alg.skcipher); break; } } @@ -318,9 +248,9 @@ static int meson_crypto_probe(struct platform_device *pdev) if (err) goto error_flow; - err = meson_register_algs(mc); + err = meson_cipher_register(mc); if (err) - goto error_alg; + goto error_flow; if (IS_ENABLED(CONFIG_CRYPTO_DEV_AMLOGIC_GXL_DEBUG)) { struct dentry *dbgfs_dir; @@ -334,8 +264,6 @@ static int meson_crypto_probe(struct platform_device *pdev) } return 0; -error_alg: - meson_unregister_algs(mc); error_flow: meson_free_chanlist(mc, mc->flow_cnt - 1); return err; @@ -349,7 +277,7 @@ static void meson_crypto_remove(struct platform_device *pdev) debugfs_remove_recursive(mc->dbgfs_dir); #endif - meson_unregister_algs(mc); + meson_cipher_unregister(mc); meson_free_chanlist(mc, mc->flow_cnt - 1); } diff --git a/drivers/crypto/amlogic/amlogic-gxl.h b/drivers/crypto/amlogic/amlogic-gxl.h index e27908992ae3..0a03e8144977 100644 --- a/drivers/crypto/amlogic/amlogic-gxl.h +++ b/drivers/crypto/amlogic/amlogic-gxl.h @@ -167,10 +167,12 @@ void meson_dma_start(struct meson_dev *mc, int flow); int meson_enqueue(struct crypto_async_request *areq, u32 type); -int meson_aes_setkey(struct crypto_skcipher *tfm, const u8 *key, - unsigned int keylen); -int meson_cipher_init(struct crypto_tfm *tfm); -void meson_cipher_exit(struct crypto_tfm *tfm); -int meson_skdecrypt(struct skcipher_request *areq); -int meson_skencrypt(struct skcipher_request *areq); +int meson_register_algs(struct meson_dev *mc, struct meson_alg_template *algs, + unsigned int count); +void meson_unregister_algs(struct meson_dev *mc, struct meson_alg_template *algs, + unsigned int count); + +int meson_cipher_register(struct meson_dev *mc); +void meson_cipher_unregister(struct meson_dev *mc); +void meson_cipher_debugfs_show(struct seq_file *seq, void *v); int meson_handle_cipher_request(struct crypto_engine *engine, void *areq);
Because that is proper place for them. In particular, it takes less of exported symbol between compiling entities. Signed-off-by: Alexey Romanov <avromanov@salutedevices.com> --- drivers/crypto/amlogic/amlogic-gxl-cipher.c | 98 +++++++++++++++-- drivers/crypto/amlogic/amlogic-gxl-core.c | 110 ++++---------------- drivers/crypto/amlogic/amlogic-gxl.h | 14 +-- 3 files changed, 119 insertions(+), 103 deletions(-)