hc
2025-02-14 bbb9540dc49f70f6b703d1c8d1b85fa5f602d86e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
/*
 * Copyright 2017, Rockchip Electronics Co., Ltd
 * hisping lin, <hisping.lin@rock-chips.com>
 *
 * SPDX-License-Identifier:    GPL-2.0+
 */
#ifndef TEESMC_OPTEE_H
#define TEESMC_OPTEE_H
 
#include <optee_include/tee_base_types.h>
 
#define TEESMC_OPTEE_RETURN_NOTAVAIL    0x5700
 
/*
 * Get Shared Memory Config
 *
 * Returns the Secure/Non-secure shared memory config.
 *
 * Call register usage:
 * r0    SMC Function ID, TEESMC32_OPTEE_FASTCALL_GET_SHM_CONFIG
 * r1-6    Not used
 * r7    Hypervisor Client ID register
 *
 * Have config return register usage:
 * r0    TEESMC_RETURN_OK
 * r1    Physical address of start of SHM
 * r2    Size of of SHM
 * r3    1 if SHM is cached, 0 if uncached.
 * r4-7    Preserved
 *
 * Not available register usage:
 * r0    TEESMC_OPTEE_RETURN_NOTAVAIL
 * r1-3 Not used
 * r4-7    Preserved
 */
#define TEESMC_OPTEE_FUNCID_GET_SHM_CONFIG    0x5700
#define TEESMC32_OPTEE_FASTCALL_GET_SHM_CONFIG \
   TEESMC_CALL_VAL(TEESMC_32, TEESMC_FAST_CALL, TEESMC_OWNER_TRUSTED_OS, \
           TEESMC_OPTEE_FUNCID_GET_SHM_CONFIG)
 
/*
 * Configures L2CC mutex
 *
 * Disables, enables usage of L2CC mutex. Returns or sets physical address
 * of L2CC mutex.
 *
 * Call register usage:
 * r0    SMC Function ID, TEESMC32_OPTEE_FASTCALL_L2CC_MUTEX
 * r1    TEESMC_OPTEE_L2CC_MUTEX_GET_ADDR Get physical address of mutex
 *    TEESMC_OPTEE_L2CC_MUTEX_SET_ADDR Set physical address of mutex
 *    TEESMC_OPTEE_L2CC_MUTEX_ENABLE     Enable usage of mutex
 *    TEESMC_OPTEE_L2CC_MUTEX_DISABLE     Disable usage of mutex
 * r2    if r1 == TEESMC_OPTEE_L2CC_MUTEX_SET_ADDR, physical address of mutex
 * r3-6    Not used
 * r7    Hypervisor Client ID register
 *
 * Have config return register usage:
 * r0    TEESMC_RETURN_OK
 * r1    Preserved
 * r2    if r1 == 0, physical address of L2CC mutex
 * r3-7    Preserved
 *
 * Error return register usage:
 * r0    TEESMC_OPTEE_RETURN_NOTAVAIL    Physical address not available
 *    TEESMC_RETURN_EBADADDR        Bad supplied physical address
 *    TEESMC_RETURN_EBADCMD        Unsupported value in r1
 * r1-7    Preserved
 */
#define TEESMC_OPTEE_L2CC_MUTEX_GET_ADDR    0
#define TEESMC_OPTEE_L2CC_MUTEX_SET_ADDR    1
#define TEESMC_OPTEE_L2CC_MUTEX_ENABLE    2
#define TEESMC_OPTEE_L2CC_MUTEX_DISABLE    3
#define TEESMC_OPTEE_FUNCID_L2CC_MUTEX    0x5701
#define TEESMC32_OPTEE_FASTCALL_L2CC_MUTEX \
   TEESMC_CALL_VAL(TEESMC_32, TEESMC_FAST_CALL, TEESMC_OWNER_TRUSTED_OS, \
           TEESMC_OPTEE_FUNCID_L2CC_MUTEX)
 
/*
 * Allocate payload memory for RPC parameter passing.
 *
 * "Call" register usage:
 * r0/x0    This value, TEESMC_RETURN_OPTEE_RPC_ALLOC_PAYLOAD
 * r1/x1    Size in bytes of required payload memory
 * r2/x2    Not used
 * r3-7/x3-7    Resume information, must be preserved
 *
 * "Return" register usage:
 * r0/x0    SMC Function ID, TEESMC32_CALL_RETURN_FROM_RPC if it was an
 *        AArch32 SMC return or TEESMC64_CALL_RETURN_FROM_RPC for
 *        AArch64 SMC return
 * r1/x1    Physical pointer to allocated payload memory, 0 if size
 *        was 0 or if memory can't be allocated
 * r2/x2    Shared memory cookie used when freeing the memory
 * r3-7/x3-7    Preserved
 */
#define TEESMC_OPTEE_RPC_FUNC_ALLOC_PAYLOAD    0x5700
#define TEESMC_RETURN_OPTEE_RPC_ALLOC_PAYLOAD    \
       TEESMC_RPC_VAL(TEESMC_OPTEE_RPC_FUNC_ALLOC_PAYLOAD)
 
 
/*
 * Free memory previously allocated by TEESMC_RETURN_OPTEE_RPC_ALLOC_PAYLOAD
 *
 * "Call" register usage:
 * r0/x0    This value, TEESMC_RETURN_OPTEE_RPC_FREE_PAYLOAD
 * r1/x1    Shared memory cookie belonging to this payload memory
 * r2-7/x2-7    Resume information, must be preserved
 *
 * "Return" register usage:
 * r0/x0    SMC Function ID, TEESMC32_CALL_RETURN_FROM_RPC if it was an
 *        AArch32 SMC return or TEESMC64_CALL_RETURN_FROM_RPC for
 *        AArch64 SMC return
 * r2-7/x2-7    Preserved
 */
#define TEESMC_OPTEE_RPC_FUNC_FREE_PAYLOAD        0x5701
#define TEESMC_RETURN_OPTEE_RPC_FREE_PAYLOAD    \
       TEESMC_RPC_VAL(TEESMC_OPTEE_RPC_FUNC_FREE_PAYLOAD)
 
/*
 * Overriding default UID of the API since the it has OP-TEE extensions
 * 384fb3e0-e7f8-11e3-af63-0002a5d5c51b : Only 32 bit calls are supported
 * 384fb3e0-e7f8-11e3-af63-0002a5d5c51c : Both 32 and 64 bit calls are supported
 */
#define TEESMC_OPTEE_UID_R0        0x384fb3e0
#define TEESMC_OPTEE_UID_R1        0xe7f811e3
#define TEESMC_OPTEE_UID_R2        0xaf630002
#define TEESMC_OPTEE_UID32_R3        0xa5d5c51b
#define TEESMC_OPTEE_UID64_R3        0xa5d5c51c
 
#define TEESMC_OPTEE_REVISION_MAJOR    1
#define TEESMC_OPTEE_REVISION_MINOR    0
 
/*
 * UUID for OP-TEE
 * 486178e0-e7f8-11e3-bc5e-0002a5d5c51b
 */
#define TEESMC_OS_OPTEE_UUID_R0        0x486178e0
#define TEESMC_OS_OPTEE_UUID_R1        0xe7f811e3
#define TEESMC_OS_OPTEE_UUID_R2        0xbc5e0002
#define TEESMC_OS_OPTEE_UUID_R3        0xa5d5c51b
 
#define TEESMC_OS_OPTEE_REVISION_MAJOR    1
#define TEESMC_OS_OPTEE_REVISION_MINOR    0
 
#endif /*TEESMC_OPTEE_H*/