crypto: caam - Use new crypto_engine_op interface
[platform/kernel/linux-starfive.git] / drivers / crypto / caam / caamhash.c
index 9ef2538..290c850 100644 (file)
 #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