/** @file OP-TEE specific header file. Copyright (c) 2018, Linaro Ltd. All rights reserved.
Copyright (c) 2021, Arm Limited. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef OPTEE_LIB_H_ #define OPTEE_LIB_H_ /* * The 'Trusted OS Call UID' is supposed to return the following UUID for * OP-TEE OS. This is a 128-bit value. */ #define OPTEE_OS_UID0 0x384fb3e0 #define OPTEE_OS_UID1 0xe7f811e3 #define OPTEE_OS_UID2 0xaf630002 #define OPTEE_OS_UID3 0xa5d5c51b #define OPTEE_MESSAGE_ATTRIBUTE_TYPE_NONE 0x0 #define OPTEE_MESSAGE_ATTRIBUTE_TYPE_VALUE_INPUT 0x1 #define OPTEE_MESSAGE_ATTRIBUTE_TYPE_VALUE_OUTPUT 0x2 #define OPTEE_MESSAGE_ATTRIBUTE_TYPE_VALUE_INOUT 0x3 #define OPTEE_MESSAGE_ATTRIBUTE_TYPE_MEMORY_INPUT 0x9 #define OPTEE_MESSAGE_ATTRIBUTE_TYPE_MEMORY_OUTPUT 0xa #define OPTEE_MESSAGE_ATTRIBUTE_TYPE_MEMORY_INOUT 0xb #define OPTEE_MESSAGE_ATTRIBUTE_TYPE_MASK 0xff #define OPTEE_SUCCESS 0x00000000 #define OPTEE_ORIGIN_COMMUNICATION 0x00000002 #define OPTEE_ERROR_COMMUNICATION 0xFFFF000E typedef struct { UINT64 BufferAddress; UINT64 Size; UINT64 SharedMemoryReference; } OPTEE_MESSAGE_PARAM_MEMORY; typedef struct { UINT64 A; UINT64 B; UINT64 C; } OPTEE_MESSAGE_PARAM_VALUE; typedef union { OPTEE_MESSAGE_PARAM_MEMORY Memory; OPTEE_MESSAGE_PARAM_VALUE Value; } OPTEE_MESSAGE_PARAM_UNION; typedef struct { UINT64 Attribute; OPTEE_MESSAGE_PARAM_UNION Union; } OPTEE_MESSAGE_PARAM; #define OPTEE_MAX_CALL_PARAMS 4 typedef struct { UINT32 Command; UINT32 Function; UINT32 Session; UINT32 CancelId; UINT32 Pad; UINT32 Return; UINT32 ReturnOrigin; UINT32 NumParams; // NumParams tells the actual number of element in Params OPTEE_MESSAGE_PARAM Params[OPTEE_MAX_CALL_PARAMS]; } OPTEE_MESSAGE_ARG; typedef struct { EFI_GUID Uuid; // [in] GUID/UUID of the Trusted Application UINT32 Session; // [out] Session id UINT32 Return; // [out] Return value UINT32 ReturnOrigin; // [out] Origin of the return value } OPTEE_OPEN_SESSION_ARG; typedef struct { UINT32 Function; // [in] Trusted Application function, specific to the TA UINT32 Session; // [in] Session id UINT32 Return; // [out] Return value UINT32 ReturnOrigin; // [out] Origin of the return value OPTEE_MESSAGE_PARAM Params[OPTEE_MAX_CALL_PARAMS]; // Params for function to be invoked } OPTEE_INVOKE_FUNCTION_ARG; BOOLEAN EFIAPI IsOpteePresent ( VOID ); EFI_STATUS EFIAPI OpteeInit ( VOID ); EFI_STATUS EFIAPI OpteeOpenSession ( IN OUT OPTEE_OPEN_SESSION_ARG *OpenSessionArg ); EFI_STATUS EFIAPI OpteeCloseSession ( IN UINT32 Session ); EFI_STATUS EFIAPI OpteeInvokeFunction ( IN OUT OPTEE_INVOKE_FUNCTION_ARG *InvokeFunctionArg ); #endif // OPTEE_LIB_H_