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 11 static void test_direct_req(struct thread_smc_1_2_regs *args) 12 { 13 uint16_t src = args->a1 >> 16; 14 uint16_t dst = args->a1; 15 16 if (OPTEE_SMC_IS_64(args->a0)) 17 args->a0 = FFA_MSG_SEND_DIRECT_RESP_64; 18 else 19 args->a0 = FFA_MSG_SEND_DIRECT_RESP_32; 20 args->a1 = SHIFT_U32(dst, 16) | src; 21 args->a2 = 0; 22 args->a3 = args->a3 + args->a4 + args->a5 + args->a6 + args->a7; 23 } 24 25 static struct spmc_lsp_desc desc __nex_data = { 26 .name = "Test LSP", 27 .direct_req = test_direct_req, 28 .properties = FFA_PART_PROP_DIRECT_REQ_RECV, 29 /* UUID 54b5440e-a3d2-48d1-872a-7b6cbfc34855 */ 30 .uuid_words = { 0x0e44b554, 0xd148d2a3, 0x6c7b2a87, 0x5548c3bf, }, 31 }; 32 33 static TEE_Result lsp_init(void) 34 { 35 return spmc_register_lsp(&desc); 36 } 37 38 nex_service_init_late(lsp_init); 39