[PATCH 15/29] crypto: talitos/hash - Use macro for algorithm definitions

From: Paul Louvel

Date: Thu May 28 2026 - 05:16:52 EST


Replace the repetitive struct initializer entries in hash_driver_algs[]
with preprocessor macros (TALITOS_HASH_ALG, TALITOS_HMAC_HASH_ALG).

Remove the function pointer assignments (init_tfm, exit_tfm, init, update,
final, finup, digest, export, import).

The HMAC setkey assignment, previously done by comparing the algorithm
name at runtime, is now handled by passing ahash_setkey directly through
the TALITOS_HMAC_HASH_ALG macro variant.

Signed-off-by: Paul Louvel <paul.louvel@xxxxxxxxxxx>
---
drivers/crypto/talitos/talitos-hash.c | 392 +++++++++-------------------------
1 file changed, 104 insertions(+), 288 deletions(-)

diff --git a/drivers/crypto/talitos/talitos-hash.c b/drivers/crypto/talitos/talitos-hash.c
index f7f6f01cfddf..9e6d849c3123 100644
--- a/drivers/crypto/talitos/talitos-hash.c
+++ b/drivers/crypto/talitos/talitos-hash.c
@@ -551,283 +551,111 @@ static void talitos_cra_exit_ahash(struct crypto_ahash *tfm)
talitos_cra_exit(crypto_ahash_tfm(tfm));
}

-static struct talitos_alg_template hash_driver_algs[] = {
- { .type = CRYPTO_ALG_TYPE_AHASH,
- .alg.hash = {
- .halg.digestsize = MD5_DIGEST_SIZE,
- .halg.statesize = sizeof(struct talitos_export_state),
- .halg.base = {
- .cra_name = "md5",
- .cra_driver_name = "md5-talitos",
- .cra_blocksize = MD5_HMAC_BLOCK_SIZE,
- .cra_reqsize = sizeof(struct talitos_ahash_req_ctx),
- .cra_flags = CRYPTO_ALG_ASYNC |
- CRYPTO_ALG_ALLOCATES_MEMORY |
- CRYPTO_ALG_KERN_DRIVER_ONLY |
- CRYPTO_AHASH_ALG_BLOCK_ONLY |
- CRYPTO_AHASH_ALG_FINAL_NONZERO,
- .cra_priority = TALITOS_CRA_PRIORITY,
- .cra_ctxsize = sizeof(struct talitos_ctx),
- .cra_module = THIS_MODULE,
- }
- },
- .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
- DESC_HDR_SEL0_MDEUA |
- DESC_HDR_MODE0_MDEU_MD5,
- },
- { .type = CRYPTO_ALG_TYPE_AHASH,
- .alg.hash = {
- .halg.digestsize = SHA1_DIGEST_SIZE,
- .halg.statesize = sizeof(struct talitos_export_state),
- .halg.base = {
- .cra_name = "sha1",
- .cra_driver_name = "sha1-talitos",
- .cra_blocksize = SHA1_BLOCK_SIZE,
- .cra_reqsize = sizeof(struct talitos_ahash_req_ctx),
- .cra_flags = CRYPTO_ALG_ASYNC |
- CRYPTO_ALG_ALLOCATES_MEMORY |
- CRYPTO_ALG_KERN_DRIVER_ONLY |
- CRYPTO_AHASH_ALG_BLOCK_ONLY |
- CRYPTO_AHASH_ALG_FINAL_NONZERO,
- .cra_priority = TALITOS_CRA_PRIORITY,
- .cra_ctxsize = sizeof(struct talitos_ctx),
- .cra_module = THIS_MODULE,
- }
- },
- .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
- DESC_HDR_SEL0_MDEUA |
- DESC_HDR_MODE0_MDEU_SHA1,
- },
- { .type = CRYPTO_ALG_TYPE_AHASH,
- .alg.hash = {
- .halg.digestsize = SHA224_DIGEST_SIZE,
- .halg.statesize = sizeof(struct talitos_export_state),
- .halg.base = {
- .cra_name = "sha224",
- .cra_driver_name = "sha224-talitos",
- .cra_blocksize = SHA224_BLOCK_SIZE,
- .cra_reqsize = sizeof(struct talitos_ahash_req_ctx),
- .cra_flags = CRYPTO_ALG_ASYNC |
- CRYPTO_ALG_ALLOCATES_MEMORY |
- CRYPTO_ALG_KERN_DRIVER_ONLY |
- CRYPTO_AHASH_ALG_BLOCK_ONLY |
- CRYPTO_AHASH_ALG_FINAL_NONZERO,
- .cra_priority = TALITOS_CRA_PRIORITY,
- .cra_ctxsize = sizeof(struct talitos_ctx),
- .cra_module = THIS_MODULE,
- }
- },
- .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
- DESC_HDR_SEL0_MDEUA |
- DESC_HDR_MODE0_MDEU_SHA224,
- },
- { .type = CRYPTO_ALG_TYPE_AHASH,
- .alg.hash = {
- .halg.digestsize = SHA256_DIGEST_SIZE,
- .halg.statesize = sizeof(struct talitos_export_state),
- .halg.base = {
- .cra_name = "sha256",
- .cra_driver_name = "sha256-talitos",
- .cra_blocksize = SHA256_BLOCK_SIZE,
- .cra_reqsize = sizeof(struct talitos_ahash_req_ctx),
- .cra_flags = CRYPTO_ALG_ASYNC |
- CRYPTO_ALG_ALLOCATES_MEMORY |
- CRYPTO_ALG_KERN_DRIVER_ONLY |
- CRYPTO_AHASH_ALG_BLOCK_ONLY |
- CRYPTO_AHASH_ALG_FINAL_NONZERO,
- .cra_priority = TALITOS_CRA_PRIORITY,
- .cra_ctxsize = sizeof(struct talitos_ctx),
- .cra_module = THIS_MODULE,
- }
- },
- .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
- DESC_HDR_SEL0_MDEUA |
- DESC_HDR_MODE0_MDEU_SHA256,
- },
- { .type = CRYPTO_ALG_TYPE_AHASH,
- .alg.hash = {
- .halg.digestsize = SHA384_DIGEST_SIZE,
- .halg.statesize = sizeof(struct talitos_export_state),
- .halg.base = {
- .cra_name = "sha384",
- .cra_driver_name = "sha384-talitos",
- .cra_blocksize = SHA384_BLOCK_SIZE,
- .cra_reqsize = sizeof(struct talitos_ahash_req_ctx),
- .cra_flags = CRYPTO_ALG_ASYNC |
- CRYPTO_ALG_ALLOCATES_MEMORY |
- CRYPTO_ALG_KERN_DRIVER_ONLY |
- CRYPTO_AHASH_ALG_BLOCK_ONLY |
- CRYPTO_AHASH_ALG_FINAL_NONZERO,
- .cra_priority = TALITOS_CRA_PRIORITY,
- .cra_ctxsize = sizeof(struct talitos_ctx),
- .cra_module = THIS_MODULE,
- }
- },
- .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
- DESC_HDR_SEL0_MDEUB |
- DESC_HDR_MODE0_MDEUB_SHA384,
- },
- { .type = CRYPTO_ALG_TYPE_AHASH,
- .alg.hash = {
- .halg.digestsize = SHA512_DIGEST_SIZE,
- .halg.statesize = sizeof(struct talitos_export_state),
- .halg.base = {
- .cra_name = "sha512",
- .cra_driver_name = "sha512-talitos",
- .cra_blocksize = SHA512_BLOCK_SIZE,
- .cra_reqsize = sizeof(struct talitos_ahash_req_ctx),
- .cra_flags = CRYPTO_ALG_ASYNC |
- CRYPTO_ALG_ALLOCATES_MEMORY |
- CRYPTO_ALG_KERN_DRIVER_ONLY |
- CRYPTO_AHASH_ALG_BLOCK_ONLY |
- CRYPTO_AHASH_ALG_FINAL_NONZERO,
- .cra_priority = TALITOS_CRA_PRIORITY,
- .cra_ctxsize = sizeof(struct talitos_ctx),
- .cra_module = THIS_MODULE,
- }
- },
- .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
- DESC_HDR_SEL0_MDEUB |
- DESC_HDR_MODE0_MDEUB_SHA512,
- },
- { .type = CRYPTO_ALG_TYPE_AHASH,
- .alg.hash = {
- .halg.digestsize = MD5_DIGEST_SIZE,
- .halg.statesize = sizeof(struct talitos_export_state),
- .halg.base = {
- .cra_name = "hmac(md5)",
- .cra_driver_name = "hmac-md5-talitos",
- .cra_blocksize = MD5_HMAC_BLOCK_SIZE,
- .cra_reqsize = sizeof(struct talitos_ahash_req_ctx),
- .cra_flags = CRYPTO_ALG_ASYNC |
- CRYPTO_ALG_ALLOCATES_MEMORY |
- CRYPTO_ALG_KERN_DRIVER_ONLY |
- CRYPTO_AHASH_ALG_BLOCK_ONLY |
- CRYPTO_AHASH_ALG_FINAL_NONZERO,
- .cra_priority = TALITOS_CRA_PRIORITY,
- .cra_ctxsize = sizeof(struct talitos_ctx),
- .cra_module = THIS_MODULE,
- }
- },
- .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
- DESC_HDR_SEL0_MDEUA |
- DESC_HDR_MODE0_MDEU_MD5,
- },
- { .type = CRYPTO_ALG_TYPE_AHASH,
- .alg.hash = {
- .halg.digestsize = SHA1_DIGEST_SIZE,
- .halg.statesize = sizeof(struct talitos_export_state),
- .halg.base = {
- .cra_name = "hmac(sha1)",
- .cra_driver_name = "hmac-sha1-talitos",
- .cra_blocksize = SHA1_BLOCK_SIZE,
- .cra_reqsize = sizeof(struct talitos_ahash_req_ctx),
- .cra_flags = CRYPTO_ALG_ASYNC |
- CRYPTO_ALG_ALLOCATES_MEMORY |
- CRYPTO_ALG_KERN_DRIVER_ONLY |
- CRYPTO_AHASH_ALG_BLOCK_ONLY |
- CRYPTO_AHASH_ALG_FINAL_NONZERO,
- .cra_priority = TALITOS_CRA_PRIORITY,
- .cra_ctxsize = sizeof(struct talitos_ctx),
- .cra_module = THIS_MODULE,
- }
- },
- .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
- DESC_HDR_SEL0_MDEUA |
- DESC_HDR_MODE0_MDEU_SHA1,
- },
- { .type = CRYPTO_ALG_TYPE_AHASH,
- .alg.hash = {
- .halg.digestsize = SHA224_DIGEST_SIZE,
- .halg.statesize = sizeof(struct talitos_export_state),
- .halg.base = {
- .cra_name = "hmac(sha224)",
- .cra_driver_name = "hmac-sha224-talitos",
- .cra_blocksize = SHA224_BLOCK_SIZE,
- .cra_reqsize = sizeof(struct talitos_ahash_req_ctx),
- .cra_flags = CRYPTO_ALG_ASYNC |
- CRYPTO_ALG_ALLOCATES_MEMORY |
- CRYPTO_ALG_KERN_DRIVER_ONLY |
- CRYPTO_AHASH_ALG_BLOCK_ONLY |
- CRYPTO_AHASH_ALG_FINAL_NONZERO,
- .cra_priority = TALITOS_CRA_PRIORITY,
- .cra_ctxsize = sizeof(struct talitos_ctx),
- .cra_module = THIS_MODULE,
- }
- },
- .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
- DESC_HDR_SEL0_MDEUA |
- DESC_HDR_MODE0_MDEU_SHA224,
- },
- { .type = CRYPTO_ALG_TYPE_AHASH,
- .alg.hash = {
- .halg.digestsize = SHA256_DIGEST_SIZE,
- .halg.statesize = sizeof(struct talitos_export_state),
- .halg.base = {
- .cra_name = "hmac(sha256)",
- .cra_driver_name = "hmac-sha256-talitos",
- .cra_blocksize = SHA256_BLOCK_SIZE,
- .cra_reqsize = sizeof(struct talitos_ahash_req_ctx),
- .cra_flags = CRYPTO_ALG_ASYNC |
- CRYPTO_ALG_ALLOCATES_MEMORY |
- CRYPTO_ALG_KERN_DRIVER_ONLY |
- CRYPTO_AHASH_ALG_BLOCK_ONLY |
- CRYPTO_AHASH_ALG_FINAL_NONZERO,
- .cra_priority = TALITOS_CRA_PRIORITY,
- .cra_ctxsize = sizeof(struct talitos_ctx),
- .cra_module = THIS_MODULE,
- }
- },
- .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
- DESC_HDR_SEL0_MDEUA |
- DESC_HDR_MODE0_MDEU_SHA256,
- },
- { .type = CRYPTO_ALG_TYPE_AHASH,
- .alg.hash = {
- .halg.digestsize = SHA384_DIGEST_SIZE,
- .halg.statesize = sizeof(struct talitos_export_state),
- .halg.base = {
- .cra_name = "hmac(sha384)",
- .cra_driver_name = "hmac-sha384-talitos",
- .cra_blocksize = SHA384_BLOCK_SIZE,
- .cra_reqsize = sizeof(struct talitos_ahash_req_ctx),
- .cra_flags = CRYPTO_ALG_ASYNC |
- CRYPTO_ALG_ALLOCATES_MEMORY |
- CRYPTO_ALG_KERN_DRIVER_ONLY |
- CRYPTO_AHASH_ALG_BLOCK_ONLY |
- CRYPTO_AHASH_ALG_FINAL_NONZERO,
- .cra_priority = TALITOS_CRA_PRIORITY,
- .cra_ctxsize = sizeof(struct talitos_ctx),
- .cra_module = THIS_MODULE,
- }
- },
- .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
- DESC_HDR_SEL0_MDEUB |
- DESC_HDR_MODE0_MDEUB_SHA384,
- },
- { .type = CRYPTO_ALG_TYPE_AHASH,
- .alg.hash = {
- .halg.digestsize = SHA512_DIGEST_SIZE,
- .halg.statesize = sizeof(struct talitos_export_state),
- .halg.base = {
- .cra_name = "hmac(sha512)",
- .cra_driver_name = "hmac-sha512-talitos",
- .cra_blocksize = SHA512_BLOCK_SIZE,
- .cra_reqsize = sizeof(struct talitos_ahash_req_ctx),
- .cra_flags = CRYPTO_ALG_ASYNC |
- CRYPTO_ALG_ALLOCATES_MEMORY |
- CRYPTO_ALG_KERN_DRIVER_ONLY |
- CRYPTO_AHASH_ALG_BLOCK_ONLY |
- CRYPTO_AHASH_ALG_FINAL_NONZERO,
- .cra_priority = TALITOS_CRA_PRIORITY,
- .cra_ctxsize = sizeof(struct talitos_ctx),
- .cra_module = THIS_MODULE,
- }
- },
- .desc_hdr_template = DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
- DESC_HDR_SEL0_MDEUB |
- DESC_HDR_MODE0_MDEUB_SHA512,
+#define TALITOS_HASH_ALG_COMMON(name, digest_size, block_size, template, \
+ set_key) \
+ { \
+ .type = CRYPTO_ALG_TYPE_AHASH, \
+ .alg.hash = { \
+ .init_tfm = talitos_cra_init_ahash, \
+ .exit_tfm = talitos_cra_exit_ahash, \
+ .init = ahash_init, \
+ .update = ahash_update, \
+ .final = ahash_final, \
+ .finup = ahash_finup, \
+ .digest = ahash_digest, \
+ .setkey = set_key, \
+ .import = ahash_import, \
+ .export = ahash_export, \
+ .halg.digestsize = digest_size, \
+ .halg.statesize = sizeof(struct talitos_export_state), \
+ .halg.base = { \
+ .cra_name = name, \
+ .cra_driver_name = name"-talitos", \
+ .cra_blocksize = block_size, \
+ .cra_reqsize = sizeof(struct talitos_ahash_req_ctx), \
+ .cra_flags = CRYPTO_ALG_ASYNC | \
+ CRYPTO_ALG_ALLOCATES_MEMORY | \
+ CRYPTO_ALG_KERN_DRIVER_ONLY | \
+ CRYPTO_AHASH_ALG_BLOCK_ONLY | \
+ CRYPTO_AHASH_ALG_FINAL_NONZERO, \
+ .cra_priority = TALITOS_CRA_PRIORITY, \
+ .cra_ctxsize = sizeof(struct talitos_ctx), \
+ .cra_module = THIS_MODULE, \
+ }, \
+ }, \
+ .desc_hdr_template = template, \
}
+
+#define TALITOS_HASH_ALG(name, digest_size, block_size, desc_hdr_template) \
+ TALITOS_HASH_ALG_COMMON(name, digest_size, block_size, \
+ desc_hdr_template, NULL)
+
+#define TALITOS_HMAC_HASH_ALG(name, digest_size, block_size, \
+ desc_hdr_template) \
+ TALITOS_HASH_ALG_COMMON("hmac(" name ")", digest_size, block_size, \
+ desc_hdr_template, ahash_setkey)
+
+static struct talitos_alg_template hash_driver_algs[] = {
+ TALITOS_HASH_ALG("md5", MD5_DIGEST_SIZE, MD5_HMAC_BLOCK_SIZE,
+ DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
+ DESC_HDR_SEL0_MDEUA | DESC_HDR_MODE0_MDEU_MD5),
+
+ TALITOS_HASH_ALG("sha1", SHA1_DIGEST_SIZE, SHA1_BLOCK_SIZE,
+ DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
+ DESC_HDR_SEL0_MDEUA |
+ DESC_HDR_MODE0_MDEU_SHA1),
+
+ TALITOS_HASH_ALG("sha224", SHA224_DIGEST_SIZE, SHA224_BLOCK_SIZE,
+ DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
+ DESC_HDR_SEL0_MDEUA |
+ DESC_HDR_MODE0_MDEU_SHA224),
+
+ TALITOS_HASH_ALG("sha256", SHA256_DIGEST_SIZE, SHA256_BLOCK_SIZE,
+ DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
+ DESC_HDR_SEL0_MDEUA |
+ DESC_HDR_MODE0_MDEU_SHA256),
+
+ TALITOS_HASH_ALG("sha384", SHA384_DIGEST_SIZE, SHA384_BLOCK_SIZE,
+ DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
+ DESC_HDR_SEL0_MDEUB |
+ DESC_HDR_MODE0_MDEUB_SHA384),
+
+ TALITOS_HASH_ALG("sha512", SHA512_DIGEST_SIZE, SHA512_BLOCK_SIZE,
+ DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
+ DESC_HDR_SEL0_MDEUB |
+ DESC_HDR_MODE0_MDEUB_SHA512),
+
+ /* HMAC */
+
+ TALITOS_HMAC_HASH_ALG("md5", MD5_DIGEST_SIZE, MD5_HMAC_BLOCK_SIZE,
+ DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
+ DESC_HDR_SEL0_MDEUA |
+ DESC_HDR_MODE0_MDEU_MD5),
+
+ TALITOS_HMAC_HASH_ALG("sha1", SHA1_DIGEST_SIZE, SHA1_BLOCK_SIZE,
+ DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
+ DESC_HDR_SEL0_MDEUA |
+ DESC_HDR_MODE0_MDEU_SHA1),
+
+ TALITOS_HMAC_HASH_ALG("sha224", SHA224_DIGEST_SIZE, SHA224_BLOCK_SIZE,
+ DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
+ DESC_HDR_SEL0_MDEUA |
+ DESC_HDR_MODE0_MDEU_SHA224),
+
+ TALITOS_HMAC_HASH_ALG("sha256", SHA256_DIGEST_SIZE, SHA256_BLOCK_SIZE,
+ DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
+ DESC_HDR_SEL0_MDEUA |
+ DESC_HDR_MODE0_MDEU_SHA256),
+
+ TALITOS_HMAC_HASH_ALG("sha384", SHA384_DIGEST_SIZE, SHA384_BLOCK_SIZE,
+ DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
+ DESC_HDR_SEL0_MDEUB |
+ DESC_HDR_MODE0_MDEUB_SHA384),
+
+ TALITOS_HMAC_HASH_ALG("sha512", SHA512_DIGEST_SIZE, SHA512_BLOCK_SIZE,
+ DESC_HDR_TYPE_COMMON_NONSNOOP_NO_AFEU |
+ DESC_HDR_SEL0_MDEUB |
+ DESC_HDR_MODE0_MDEUB_SHA512),
};

int talitos_register_hash(struct device *dev)
@@ -846,18 +674,6 @@ int talitos_register_hash(struct device *dev)
ahash_alg = &hash_driver_algs[i].alg.hash;
alg = &ahash_alg->halg.base;

- ahash_alg->init_tfm = talitos_cra_init_ahash;
- ahash_alg->exit_tfm = talitos_cra_exit_ahash;
- ahash_alg->init = ahash_init;
- ahash_alg->update = ahash_update;
- ahash_alg->final = ahash_final;
- ahash_alg->finup = ahash_finup;
- ahash_alg->digest = ahash_digest;
- if (!strncmp(alg->cra_name, "hmac", 4))
- ahash_alg->setkey = ahash_setkey;
- ahash_alg->import = ahash_import;
- ahash_alg->export = ahash_export;
-
if (!(priv->features & TALITOS_FTR_HMAC_OK) &&
!strncmp(alg->cra_name, "hmac", 4)) {
/* not supported */

--
2.54.0