|
@@ -213,6 +213,23 @@ static struct sun4i_ss_alg_template ss_algs[] = {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
},
|
|
|
|
+#ifdef CONFIG_CRYPTO_DEV_SUN4I_SS_PRNG
|
|
|
|
+{
|
|
|
|
+ .type = CRYPTO_ALG_TYPE_RNG,
|
|
|
|
+ .alg.rng = {
|
|
|
|
+ .base = {
|
|
|
|
+ .cra_name = "stdrng",
|
|
|
|
+ .cra_driver_name = "sun4i_ss_rng",
|
|
|
|
+ .cra_priority = 300,
|
|
|
|
+ .cra_ctxsize = 0,
|
|
|
|
+ .cra_module = THIS_MODULE,
|
|
|
|
+ },
|
|
|
|
+ .generate = sun4i_ss_prng_generate,
|
|
|
|
+ .seed = sun4i_ss_prng_seed,
|
|
|
|
+ .seedsize = SS_SEED_LEN / BITS_PER_BYTE,
|
|
|
|
+ }
|
|
|
|
+},
|
|
|
|
+#endif
|
|
};
|
|
};
|
|
|
|
|
|
static int sun4i_ss_probe(struct platform_device *pdev)
|
|
static int sun4i_ss_probe(struct platform_device *pdev)
|
|
@@ -355,6 +372,13 @@ static int sun4i_ss_probe(struct platform_device *pdev)
|
|
goto error_alg;
|
|
goto error_alg;
|
|
}
|
|
}
|
|
break;
|
|
break;
|
|
|
|
+ case CRYPTO_ALG_TYPE_RNG:
|
|
|
|
+ err = crypto_register_rng(&ss_algs[i].alg.rng);
|
|
|
|
+ if (err) {
|
|
|
|
+ dev_err(ss->dev, "Fail to register %s\n",
|
|
|
|
+ ss_algs[i].alg.rng.base.cra_name);
|
|
|
|
+ }
|
|
|
|
+ break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
platform_set_drvdata(pdev, ss);
|
|
platform_set_drvdata(pdev, ss);
|
|
@@ -369,6 +393,9 @@ error_alg:
|
|
case CRYPTO_ALG_TYPE_AHASH:
|
|
case CRYPTO_ALG_TYPE_AHASH:
|
|
crypto_unregister_ahash(&ss_algs[i].alg.hash);
|
|
crypto_unregister_ahash(&ss_algs[i].alg.hash);
|
|
break;
|
|
break;
|
|
|
|
+ case CRYPTO_ALG_TYPE_RNG:
|
|
|
|
+ crypto_unregister_rng(&ss_algs[i].alg.rng);
|
|
|
|
+ break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (ss->reset)
|
|
if (ss->reset)
|
|
@@ -393,6 +420,9 @@ static int sun4i_ss_remove(struct platform_device *pdev)
|
|
case CRYPTO_ALG_TYPE_AHASH:
|
|
case CRYPTO_ALG_TYPE_AHASH:
|
|
crypto_unregister_ahash(&ss_algs[i].alg.hash);
|
|
crypto_unregister_ahash(&ss_algs[i].alg.hash);
|
|
break;
|
|
break;
|
|
|
|
+ case CRYPTO_ALG_TYPE_RNG:
|
|
|
|
+ crypto_unregister_rng(&ss_algs[i].alg.rng);
|
|
|
|
+ break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|