1 /* 2 * Copyright (c) 2023, Arm Limited and Contributors. All rights reserved. 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 */ 6 7 #ifndef TS_RPC_ABI_H 8 #define TS_RPC_ABI_H 9 10 #include "rpc_uuid.h" 11 #include <stdbool.h> 12 #include <stddef.h> 13 #include <stdint.h> 14 15 #ifdef __cplusplus 16 extern "C" { 17 #endif 18 19 /** 20 * @brief Trusted-services RPC ABI function 21 * 22 * This file contains getters and setters for TS ABI fields. They handle the five arg registers of 23 * the FF-A direct messages and extract or insert fields of suitable types. 24 */ 25 26 #define TS_RPC_ABI_FLAG_FAST_CALL (0x01) 27 28 #define TS_RPC_ABI_MANAGEMENT_OPCODE_VERSION (0) 29 #define TS_RPC_ABI_MANAGEMENT_OPCODE_MEMORY_RETRIEVE (1) 30 #define TS_RPC_ABI_MANAGEMENT_OPCODE_MEMORY_RELINQUISH (2) 31 #define TS_RPC_ABI_MANAGEMENT_OPCODE_INTERFACE_ID_QUERY (3) 32 33 #define TS_RPC_ABI_VERSION_V1 (1) 34 35 uint8_t ts_rpc_abi_get_flags(const uint32_t regs[5]); 36 void ts_rpc_abi_set_flags(uint32_t regs[5], uint8_t flags); 37 38 uint8_t ts_rpc_abi_get_interface_id(const uint32_t regs[5]); 39 void ts_rpc_abi_set_interface_id(uint32_t regs[5], uint8_t interface_id); 40 41 bool ts_rpc_abi_is_management_interface_id(const uint32_t regs[5]); 42 void ts_rpc_abi_set_management_interface_id(uint32_t regs[5]); 43 44 uint16_t ts_rpc_abi_get_opcode(const uint32_t regs[5]); 45 void ts_rpc_abi_set_opcode(uint32_t regs[5], uint16_t interface_id); 46 47 void ts_rpc_abi_copy_control_reg(uint32_t response_regs[5], const uint32_t request_regs[5]); 48 49 uint32_t ts_rpc_abi_get_version(const uint32_t regs[5]); 50 void ts_rpc_abi_set_version(uint32_t regs[5], uint32_t version); 51 52 uint64_t ts_rpc_abi_get_memory_handle(const uint32_t regs[5]); 53 void ts_rpc_abi_set_memory_handle(uint32_t regs[5], uint64_t handle); 54 55 uint64_t ts_rpc_abi_get_memory_tag(const uint32_t regs[5]); 56 void ts_rpc_abi_set_memory_tag(uint32_t regs[5], uint64_t tag); 57 58 uint32_t ts_rpc_abi_get_rpc_status(const uint32_t regs[5]); 59 void ts_rpc_abi_set_rpc_status(uint32_t regs[5], uint32_t status); 60 61 uint32_t ts_rpc_abi_get_service_status(const uint32_t regs[5]); 62 void ts_rpc_abi_set_service_status(uint32_t regs[5], uint32_t status); 63 64 void ts_rpc_abi_get_uuid(const uint32_t regs[5], struct rpc_uuid *uuid); 65 void ts_rpc_abi_set_uuid(uint32_t regs[5], const struct rpc_uuid *uuid); 66 67 uint8_t ts_rpc_abi_get_queried_interface_id(const uint32_t regs[5]); 68 void ts_rpc_abi_set_queried_interface_id(uint32_t regs[5], uint8_t interface_id); 69 70 uint32_t ts_rpc_abi_get_request_length(const uint32_t regs[5]); 71 void ts_rpc_abi_set_request_length(uint32_t regs[5], uint32_t length); 72 73 uint32_t ts_rpc_abi_get_client_id(const uint32_t regs[5]); 74 void ts_rpc_abi_set_client_id(uint32_t regs[5], uint32_t client_id); 75 76 uint32_t ts_rpc_abi_get_response_length(const uint32_t regs[5]); 77 void ts_rpc_abi_set_response_length(uint32_t regs[5], uint32_t length); 78 79 #ifdef __cplusplus 80 } 81 #endif 82 83 #endif /* TS_RPC_ABI_H */ 84