xref: /optee_os/core/arch/arm/tests/ffa_lsp.c (revision ac648d8090b513a40878c7c79dee8777d1e10ca2)
1 // SPDX-License-Identifier: BSD-2-Clause
2 /*
3  * Copyright (c) 2025, Linaro Limited.
4  */
5 
6 #include <ffa.h>
7 #include <initcall.h>
8 #include <kernel/thread_spmc.h>
9 #include <sm/optee_smc.h>
10 
test_direct_req(struct thread_smc_1_2_regs * args,struct sp_session * caller_sp __unused)11 static void test_direct_req(struct thread_smc_1_2_regs *args,
12 			    struct sp_session *caller_sp __unused)
13 {
14 	uint16_t src = args->a1 >> 16;
15 	uint16_t dst = args->a1;
16 
17 	if (OPTEE_SMC_IS_64(args->a0))
18 		args->a0 = FFA_MSG_SEND_DIRECT_RESP_64;
19 	else
20 		args->a0 = FFA_MSG_SEND_DIRECT_RESP_32;
21 	args->a1 = SHIFT_U32(dst, 16) | src;
22 	args->a2 = 0;
23 	args->a3 = args->a3 + args->a4 + args->a5 + args->a6 + args->a7;
24 }
25 
26 static struct spmc_lsp_desc desc __nex_data = {
27 	.name = "Test LSP",
28 	.direct_req = test_direct_req,
29 	.properties = FFA_PART_PROP_DIRECT_REQ_RECV,
30 	/* UUID 54b5440e-a3d2-48d1-872a-7b6cbfc34855 */
31 	.uuid_words = { 0x0e44b554, 0xd148d2a3, 0x6c7b2a87, 0x5548c3bf, },
32 };
33 
lsp_init(void)34 static TEE_Result lsp_init(void)
35 {
36 	return spmc_register_lsp(&desc);
37 }
38 
39 nex_service_init_late(lsp_init);
40