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