xref: /optee_os/core/pta/scp03.c (revision cb1b1ecd336abb5c3cca92eb702f2a794b023e40)
1*cb1b1ecdSJorge Ramirez-Ortiz // SPDX-License-Identifier: BSD-3-Clause
2*cb1b1ecdSJorge Ramirez-Ortiz /*
3*cb1b1ecdSJorge Ramirez-Ortiz  * Copyright (C) Foundries Ltd. 2020 - All Rights Reserved
4*cb1b1ecdSJorge Ramirez-Ortiz  * Author: Jorge Ramirez <jorge@foundries.io>
5*cb1b1ecdSJorge Ramirez-Ortiz  */
6*cb1b1ecdSJorge Ramirez-Ortiz 
7*cb1b1ecdSJorge Ramirez-Ortiz #include <crypto/crypto.h>
8*cb1b1ecdSJorge Ramirez-Ortiz #include <kernel/pseudo_ta.h>
9*cb1b1ecdSJorge Ramirez-Ortiz #include <scp03_pta.h>
10*cb1b1ecdSJorge Ramirez-Ortiz 
11*cb1b1ecdSJorge Ramirez-Ortiz #define PTA_NAME "scp03.pta"
12*cb1b1ecdSJorge Ramirez-Ortiz 
13*cb1b1ecdSJorge Ramirez-Ortiz static TEE_Result invoke_command(void *pSessionContext __unused,
14*cb1b1ecdSJorge Ramirez-Ortiz 				 uint32_t nCommandID, uint32_t pt,
15*cb1b1ecdSJorge Ramirez-Ortiz 				 TEE_Param params[TEE_NUM_PARAMS])
16*cb1b1ecdSJorge Ramirez-Ortiz {
17*cb1b1ecdSJorge Ramirez-Ortiz 	const uint32_t exp_pt = TEE_PARAM_TYPES(TEE_PARAM_TYPE_VALUE_INPUT,
18*cb1b1ecdSJorge Ramirez-Ortiz 						TEE_PARAM_TYPE_NONE,
19*cb1b1ecdSJorge Ramirez-Ortiz 						TEE_PARAM_TYPE_NONE,
20*cb1b1ecdSJorge Ramirez-Ortiz 						TEE_PARAM_TYPE_NONE);
21*cb1b1ecdSJorge Ramirez-Ortiz 
22*cb1b1ecdSJorge Ramirez-Ortiz 	FMSG("command entry point for pseudo-TA \"%s\"", PTA_NAME);
23*cb1b1ecdSJorge Ramirez-Ortiz 
24*cb1b1ecdSJorge Ramirez-Ortiz 	if (pt != exp_pt)
25*cb1b1ecdSJorge Ramirez-Ortiz 		return TEE_ERROR_BAD_PARAMETERS;
26*cb1b1ecdSJorge Ramirez-Ortiz 
27*cb1b1ecdSJorge Ramirez-Ortiz 	switch (nCommandID) {
28*cb1b1ecdSJorge Ramirez-Ortiz 	case PTA_CMD_ENABLE_SCP03:
29*cb1b1ecdSJorge Ramirez-Ortiz 		return crypto_enable_scp03(params[0].value.a);
30*cb1b1ecdSJorge Ramirez-Ortiz 	default:
31*cb1b1ecdSJorge Ramirez-Ortiz 		break;
32*cb1b1ecdSJorge Ramirez-Ortiz 	}
33*cb1b1ecdSJorge Ramirez-Ortiz 
34*cb1b1ecdSJorge Ramirez-Ortiz 	return TEE_ERROR_NOT_IMPLEMENTED;
35*cb1b1ecdSJorge Ramirez-Ortiz }
36*cb1b1ecdSJorge Ramirez-Ortiz 
37*cb1b1ecdSJorge Ramirez-Ortiz pseudo_ta_register(.uuid = PTA_SCP03_UUID, .name = PTA_NAME,
38*cb1b1ecdSJorge Ramirez-Ortiz 		   .flags = PTA_DEFAULT_FLAGS,
39*cb1b1ecdSJorge Ramirez-Ortiz 		   .invoke_command_entry_point = invoke_command);
40