]> git.proxmox.com Git - mirror_edk2.git/blob - ArmPkg/Include/Library/OpteeLib.h
ArmPkg/ArmSvcLib: Return x4-x7 in output parameters
[mirror_edk2.git] / ArmPkg / Include / Library / OpteeLib.h
1 /** @file
2 OP-TEE specific header file.
3
4 Copyright (c) 2018, Linaro Ltd. All rights reserved.<BR>
5
6 SPDX-License-Identifier: BSD-2-Clause-Patent
7
8 **/
9
10 #ifndef _OPTEE_H_
11 #define _OPTEE_H_
12
13 /*
14 * The 'Trusted OS Call UID' is supposed to return the following UUID for
15 * OP-TEE OS. This is a 128-bit value.
16 */
17 #define OPTEE_OS_UID0 0x384fb3e0
18 #define OPTEE_OS_UID1 0xe7f811e3
19 #define OPTEE_OS_UID2 0xaf630002
20 #define OPTEE_OS_UID3 0xa5d5c51b
21
22 #define OPTEE_MESSAGE_ATTRIBUTE_TYPE_NONE 0x0
23 #define OPTEE_MESSAGE_ATTRIBUTE_TYPE_VALUE_INPUT 0x1
24 #define OPTEE_MESSAGE_ATTRIBUTE_TYPE_VALUE_OUTPUT 0x2
25 #define OPTEE_MESSAGE_ATTRIBUTE_TYPE_VALUE_INOUT 0x3
26 #define OPTEE_MESSAGE_ATTRIBUTE_TYPE_MEMORY_INPUT 0x9
27 #define OPTEE_MESSAGE_ATTRIBUTE_TYPE_MEMORY_OUTPUT 0xa
28 #define OPTEE_MESSAGE_ATTRIBUTE_TYPE_MEMORY_INOUT 0xb
29
30 #define OPTEE_MESSAGE_ATTRIBUTE_TYPE_MASK 0xff
31
32 #define OPTEE_SUCCESS 0x00000000
33 #define OPTEE_ORIGIN_COMMUNICATION 0x00000002
34 #define OPTEE_ERROR_COMMUNICATION 0xFFFF000E
35
36 typedef struct {
37 UINT64 BufferAddress;
38 UINT64 Size;
39 UINT64 SharedMemoryReference;
40 } OPTEE_MESSAGE_PARAM_MEMORY;
41
42 typedef struct {
43 UINT64 A;
44 UINT64 B;
45 UINT64 C;
46 } OPTEE_MESSAGE_PARAM_VALUE;
47
48 typedef struct {
49 UINT64 Attribute;
50 union {
51 OPTEE_MESSAGE_PARAM_MEMORY Memory;
52 OPTEE_MESSAGE_PARAM_VALUE Value;
53 } Union;
54 } OPTEE_MESSAGE_PARAM;
55
56 #define OPTEE_MAX_CALL_PARAMS 4
57
58 typedef struct {
59 UINT32 Command;
60 UINT32 Function;
61 UINT32 Session;
62 UINT32 CancelId;
63 UINT32 Pad;
64 UINT32 Return;
65 UINT32 ReturnOrigin;
66 UINT32 NumParams;
67
68 // NumParams tells the actual number of element in Params
69 OPTEE_MESSAGE_PARAM Params[OPTEE_MAX_CALL_PARAMS];
70 } OPTEE_MESSAGE_ARG;
71
72 typedef struct {
73 EFI_GUID Uuid; // [in] GUID/UUID of the Trusted Application
74 UINT32 Session; // [out] Session id
75 UINT32 Return; // [out] Return value
76 UINT32 ReturnOrigin; // [out] Origin of the return value
77 } OPTEE_OPEN_SESSION_ARG;
78
79 typedef struct {
80 UINT32 Function; // [in] Trusted Application function, specific to the TA
81 UINT32 Session; // [in] Session id
82 UINT32 Return; // [out] Return value
83 UINT32 ReturnOrigin; // [out] Origin of the return value
84 OPTEE_MESSAGE_PARAM Params[OPTEE_MAX_CALL_PARAMS]; // Params for function to be invoked
85 } OPTEE_INVOKE_FUNCTION_ARG;
86
87 BOOLEAN
88 EFIAPI
89 IsOpteePresent (
90 VOID
91 );
92
93 EFI_STATUS
94 EFIAPI
95 OpteeInit (
96 VOID
97 );
98
99 EFI_STATUS
100 EFIAPI
101 OpteeOpenSession (
102 IN OUT OPTEE_OPEN_SESSION_ARG *OpenSessionArg
103 );
104
105 EFI_STATUS
106 EFIAPI
107 OpteeCloseSession (
108 IN UINT32 Session
109 );
110
111 EFI_STATUS
112 EFIAPI
113 OpteeInvokeFunction (
114 IN OUT OPTEE_INVOKE_FUNCTION_ARG *InvokeFunctionArg
115 );
116
117 #endif