blob: 2f05421f79f5453ea212e4f88e271188aba1445d [file] [log] [blame]
Igor Opaniuk7ddaa782018-05-25 15:14:05 +03001// SPDX-License-Identifier: BSD-2-Clause
2/*
3 * Copyright (c) 2018, Linaro Limited
4 */
5
6#include <tee_internal_api.h>
7
8#include "seed_rng_taf.h"
9
10TEE_Result seed_rng_pool(uint32_t param_types, TEE_Param params[4])
11{
12 static const TEE_UUID system_uuid = PTA_SYSTEM_UUID;
13 TEE_TASessionHandle sess = TEE_HANDLE_NULL;
Etienne Carriere102092e2019-03-28 15:24:22 +010014 TEE_Result res = TEE_ERROR_GENERIC;
15 uint32_t ret_orig = 0;
Igor Opaniuk7ddaa782018-05-25 15:14:05 +030016
17 if (param_types !=
18 TEE_PARAM_TYPES(TEE_PARAM_TYPE_MEMREF_INPUT,
19 TEE_PARAM_TYPE_NONE,
20 TEE_PARAM_TYPE_NONE,
21 TEE_PARAM_TYPE_NONE)) {
22 return TEE_ERROR_BAD_PARAMETERS;
23 }
24
25 if (!params[0].memref.size)
26 return TEE_ERROR_BAD_PARAMETERS;
27
Cedric Augere668b3f2019-09-11 13:41:21 +020028 res = TEE_OpenTASession(&system_uuid, TEE_TIMEOUT_INFINITE, 0, NULL,
29 &sess, &ret_orig);
Igor Opaniuk7ddaa782018-05-25 15:14:05 +030030 if (res != TEE_SUCCESS) {
31 EMSG("TEE_OpenTASession failed");
32 goto cleanup_return;
33 }
34
Cedric Augere668b3f2019-09-11 13:41:21 +020035 res = TEE_InvokeTACommand(sess, TEE_TIMEOUT_INFINITE,
36 PTA_SYSTEM_ADD_RNG_ENTROPY,
Igor Opaniuk7ddaa782018-05-25 15:14:05 +030037 param_types, params, &ret_orig);
38 if (res != TEE_SUCCESS) {
39 EMSG("TEE_InvokeTACommand failed");
40 goto cleanup_return;
41 }
42
Igor Opaniuk7ddaa782018-05-25 15:14:05 +030043cleanup_return:
44 TEE_CloseTASession(sess);
45 return res;
46}