summaryrefslogtreecommitdiff
path: root/drivers/mxc/security/sahara2/fsl_shw_rand.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/mxc/security/sahara2/fsl_shw_rand.c')
-rw-r--r--drivers/mxc/security/sahara2/fsl_shw_rand.c96
1 files changed, 96 insertions, 0 deletions
diff --git a/drivers/mxc/security/sahara2/fsl_shw_rand.c b/drivers/mxc/security/sahara2/fsl_shw_rand.c
new file mode 100644
index 000000000000..69999c3272f3
--- /dev/null
+++ b/drivers/mxc/security/sahara2/fsl_shw_rand.c
@@ -0,0 +1,96 @@
+/*
+ * Copyright (C) 2004-2010 Freescale Semiconductor, Inc. All Rights Reserved.
+ */
+
+/*
+ * The code contained herein is licensed under the GNU General Public
+ * License. You may obtain a copy of the GNU General Public License
+ * Version 2 or later at the following locations:
+ *
+ * http://www.opensource.org/licenses/gpl-license.html
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+/*!
+ * @file fsl_shw_rand.c
+ *
+ * This file implements Random Number Generation functions of the FSL SHW API
+ * for Sahara.
+ */
+
+#include "sahara.h"
+#include "sf_util.h"
+
+#ifdef __KERNEL__
+EXPORT_SYMBOL(fsl_shw_get_random);
+#endif
+
+/* REQ-S2LRD-PINTFC-API-BASIC-RNG-002 */
+/*!
+ * Get a random number
+ *
+ *
+ * @param user_ctx
+ * @param length
+ * @param data
+ *
+ * @return A return code of type #fsl_shw_return_t.
+ */
+fsl_shw_return_t fsl_shw_get_random(fsl_shw_uco_t * user_ctx,
+ uint32_t length, uint8_t * data)
+{
+ SAH_SF_DCLS;
+
+ /* perform a sanity check on the uco */
+ ret = sah_validate_uco(user_ctx);
+ if (ret != FSL_RETURN_OK_S) {
+ goto out;
+ }
+
+ header = SAH_HDR_RNG_GENERATE; /* Desc. #18 */
+ DESC_OUT_OUT(header, length, data, 0, NULL);
+
+ SAH_SF_EXECUTE();
+
+ out:
+ SAH_SF_DESC_CLEAN();
+
+ return ret;
+}
+
+#ifdef __KERNEL__
+EXPORT_SYMBOL(fsl_shw_add_entropy);
+#endif
+
+/*!
+ * Add entropy to a random number generator
+
+ * @param user_ctx
+ * @param length
+ * @param data
+ *
+ * @return A return code of type #fsl_shw_return_t.
+ */
+fsl_shw_return_t fsl_shw_add_entropy(fsl_shw_uco_t * user_ctx,
+ uint32_t length, uint8_t * data)
+{
+ SAH_SF_DCLS;
+
+ /* perform a sanity check on the uco */
+ ret = sah_validate_uco(user_ctx);
+ if (ret != FSL_RETURN_OK_S) {
+ goto out;
+ }
+
+ header = SAH_HDR_RNG_GENERATE; /* Desc. #18 */
+
+ /* create descriptor #18. Generate random data */
+ DESC_IN_IN(header, 0, NULL, length, data)
+
+ SAH_SF_EXECUTE();
+
+ out:
+ SAH_SF_DESC_CLEAN();
+
+ return ret;
+}