// SPDX-License-Identifier: BSD-2-Clause
|
/*
|
* Copyright (c) 2018, Linaro Limited
|
*/
|
|
#include <tee_internal_api.h>
|
|
#include "seed_rng_taf.h"
|
|
TEE_Result seed_rng_pool(uint32_t param_types, TEE_Param params[4])
|
{
|
static const TEE_UUID system_uuid = PTA_SYSTEM_UUID;
|
TEE_TASessionHandle sess = TEE_HANDLE_NULL;
|
TEE_Result res = TEE_ERROR_GENERIC;
|
uint32_t ret_orig = 0;
|
|
if (param_types !=
|
TEE_PARAM_TYPES(TEE_PARAM_TYPE_MEMREF_INPUT,
|
TEE_PARAM_TYPE_NONE,
|
TEE_PARAM_TYPE_NONE,
|
TEE_PARAM_TYPE_NONE)) {
|
return TEE_ERROR_BAD_PARAMETERS;
|
}
|
|
if (!params[0].memref.size)
|
return TEE_ERROR_BAD_PARAMETERS;
|
|
res = TEE_OpenTASession(&system_uuid, TEE_TIMEOUT_INFINITE, 0, NULL,
|
&sess, &ret_orig);
|
if (res != TEE_SUCCESS) {
|
EMSG("TEE_OpenTASession failed");
|
goto cleanup_return;
|
}
|
|
res = TEE_InvokeTACommand(sess, TEE_TIMEOUT_INFINITE,
|
PTA_SYSTEM_ADD_RNG_ENTROPY,
|
param_types, params, &ret_orig);
|
if (res != TEE_SUCCESS) {
|
EMSG("TEE_InvokeTACommand failed");
|
goto cleanup_return;
|
}
|
|
cleanup_return:
|
TEE_CloseTASession(sess);
|
return res;
|
}
|