1 // SPDX-License-Identifier: BSD-2-Clause
2 /*
3  * Copyright (c) 2020, Open Mobile Platform LLC
4  */
5 
6 #include <assert.h>
7 #include <tee_internal_api.h>
8 #include <tee_internal_api_extensions.h>
9 
10 /* This TA header */
11 #include <plugin_ta.h>
12 
13 #include <string.h>
14 #include <stdint.h>
15 
TA_CreateEntryPoint(void)16 TEE_Result TA_CreateEntryPoint(void)
17 {
18 	return TEE_SUCCESS;
19 }
20 
TA_DestroyEntryPoint(void)21 void TA_DestroyEntryPoint(void)
22 {
23 }
24 
TA_OpenSessionEntryPoint(uint32_t param_types,TEE_Param __maybe_unused params[4],void __maybe_unused ** sess_ctx)25 TEE_Result TA_OpenSessionEntryPoint(uint32_t param_types,
26 				    TEE_Param __maybe_unused params[4],
27 				    void __maybe_unused **sess_ctx)
28 {
29 	uint32_t exp_param_types =
30 		TEE_PARAM_TYPES(TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE,
31 				TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE);
32 
33 	if (param_types != exp_param_types)
34 		return TEE_ERROR_BAD_PARAMETERS;
35 
36 	return TEE_SUCCESS;
37 }
38 
TA_CloseSessionEntryPoint(void __unused * sess_ctx)39 void TA_CloseSessionEntryPoint(void __unused *sess_ctx)
40 {
41 }
42 
syslog_plugin_ping(void)43 static TEE_Result syslog_plugin_ping(void)
44 {
45 	int n = 0;
46 	TEE_Result res = TEE_SUCCESS;
47 	static uint32_t inc_var = 0;
48 	char log_str[64] = { 0 };
49 	TEE_UUID syslog_uuid = SYSLOG_PLUGIN_UUID;
50 
51 	n = snprintf(log_str, sizeof(log_str), "Hello, plugin! value = 0x%x",
52 		     inc_var++);
53 	if (n > (int)sizeof(log_str))
54 		return TEE_ERROR_GENERIC;
55 
56 	IMSG("Push syslog plugin string \"%s\"", log_str);
57 
58 	res = tee_invoke_supp_plugin(&syslog_uuid, TO_SYSLOG_CMD, LOG_INFO,
59 				     log_str, n, NULL);
60 	if (res)
61 		EMSG("invoke plugin failed with code 0x%x", res);
62 
63 	return res;
64 }
65 
TA_InvokeCommandEntryPoint(void __unused * sess_ctx,uint32_t cmd_id,uint32_t param_types,TEE_Param __unused params[4])66 TEE_Result TA_InvokeCommandEntryPoint(void __unused *sess_ctx,
67 				      uint32_t cmd_id, uint32_t param_types,
68 				      TEE_Param __unused params[4])
69 {
70 	uint32_t exp_param_types =
71 		TEE_PARAM_TYPES(TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE,
72 				TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE);
73 
74 	if (param_types != exp_param_types)
75 		return TEE_ERROR_BAD_PARAMETERS;
76 
77 	switch (cmd_id) {
78 	case PLUGIN_TA_PING:
79 		return syslog_plugin_ping();
80 	default:
81 		return TEE_ERROR_NOT_SUPPORTED;
82 	}
83 }
84