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
/*
 * (C) Copyright 2017 Rockchip Electronics Co., Ltd
 *
 * SPDX-License-Identifier:     GPL-2.0+
 */
 
#ifndef TEESMC_V2_H
#define TEESMC_V2_H
 
#define OPTEE_SMC_CALL_WITH_ARG_V2 0x32000004
 
struct optee_msg_param_tmem_v2 {
   uint64_t buf_ptr;
   uint64_t size;
   uint64_t shm_ref;
};
 
struct optee_msg_param_rmem_v2 {
   uint64_t offs;
   uint64_t size;
   uint64_t shm_ref;
};
 
struct optee_msg_param_value_v2 {
   uint64_t a;
   uint64_t b;
   uint64_t c;
};
 
struct optee_msg_param_v2 {
   uint64_t attr;
   union {
       struct optee_msg_param_tmem_v2 memref;
       struct optee_msg_param_rmem_v2 rmem;
       struct optee_msg_param_value_v2 value;
   } u;
};
 
struct optee_msg_arg_v2 {
   uint32_t cmd;
   uint32_t ta_func;
   uint32_t session;
   uint32_t cancel_id;
   uint32_t pad;
   uint32_t ret;
   uint32_t ret_origin;
   uint32_t num_params;
 
   /* num_params tells the actual number of element in params */
   struct optee_msg_param_v2 params[];
};
 
typedef struct optee_msg_arg_v2        t_teesmc32_arg;
typedef struct optee_msg_param_v2      t_teesmc32_param;
 
#define TEESMC32_GET_ARG_SIZE(num_params) \
   (sizeof(struct optee_msg_arg_v2) + \
    sizeof(struct optee_msg_param_v2) * (num_params))
 
#define TEESMC32_GET_PARAMS(x) \
   (struct optee_msg_param_v2 *)(((struct optee_msg_arg_v2 *)(x)) + 1)
 
#define OPTEE_MSG_ATTR_TYPE_NONE_V2        0x0
#define OPTEE_MSG_ATTR_TYPE_VALUE_INPUT_V2        0x1
#define OPTEE_MSG_ATTR_TYPE_VALUE_OUTPUT_V2        0x2
#define OPTEE_MSG_ATTR_TYPE_VALUE_INOUT_V2        0x3
#define OPTEE_MSG_ATTR_TYPE_RMEM_INPUT_V2        0x5
#define OPTEE_MSG_ATTR_TYPE_RMEM_OUTPUT_V2        0x6
#define OPTEE_MSG_ATTR_TYPE_RMEM_INOUT_V2        0x7
#define OPTEE_MSG_ATTR_TYPE_TMEM_INPUT_V2        0x9
#define OPTEE_MSG_ATTR_TYPE_TMEM_OUTPUT_V2        0xa
#define OPTEE_MSG_ATTR_TYPE_TMEM_INOUT_V2        0xb
 
#define OPTEE_MSG_ATTR_META_V2            (1 << (8))
 
#define OPTEE_MSG_RPC_CMD_SHM_ALLOC_V2    6
#define OPTEE_MSG_RPC_CMD_SHM_FREE_V2    7
 
#define OPTEE_MSG_RPC_CMD_LOAD_TA_V2    0
 
#define OPTEE_MSG_RPC_CMD_RPMB_V2        1
 
#define OPTEE_MSG_RPC_CMD_FS_V2        2
 
#define OPTEE_SMC_32_V2            0
#define OPTEE_SMC_64_V2            0x40000000
#define OPTEE_SMC_FAST_CALL_V2        0x80000000
#define OPTEE_SMC_STD_CALL_V2        0
 
#define OPTEE_SMC_OWNER_MASK_V2        0x3F
#define OPTEE_SMC_OWNER_SHIFT_V2        24
 
#define OPTEE_SMC_FUNC_MASK_V2        0xFFFF
 
#define OPTEE_SMC_OWNER_TRUSTED_OS_V2    50
#define OPTEE_SMC_OWNER_TRUSTED_OS_API    63
 
#define OPTEE_SMC_FUNCID_GET_SHM_CONFIG_V2    7
#define OPTEE_SMC_GET_SHM_CONFIG_V2 \
   OPTEE_SMC_FAST_CALL_VAL_V2(OPTEE_SMC_FUNCID_GET_SHM_CONFIG_V2)
 
 
/* Secure world is built with virtualization support */
#define OPTEE_SMC_SEC_CAP_VIRTUALIZATION    (1 << 3)
 
#define OPTEE_SMC_FUNCID_EXCHANGE_CAPABILITIES    9
#define OPTEE_SMC_EXCHANGE_CAPABILITIES \
   OPTEE_SMC_FAST_CALL_VAL_V2(OPTEE_SMC_FUNCID_EXCHANGE_CAPABILITIES)
 
#define OPTEE_SMC_FUNCID_VM_CREATED    13
#define OPTEE_SMC_VM_CREATED \
   OPTEE_SMC_FAST_CALL_VAL_V2(OPTEE_SMC_FUNCID_VM_CREATED)
 
#define OPTEE_SMC_FUNCID_VM_DESTROYED    14
#define OPTEE_SMC_VM_DESTROYED \
   OPTEE_SMC_FAST_CALL_VAL_V2(OPTEE_SMC_FUNCID_VM_DESTROYED)
 
#define OPTEE_SMC_FUNCID_CALLS_REVISION    0xFF03
#define OPTEE_SMC_CALLS_REVISION \
   OPTEE_SMC_CALL_VAL_V2(OPTEE_SMC_32_V2, OPTEE_SMC_FAST_CALL_V2, \
                 OPTEE_SMC_OWNER_TRUSTED_OS_API, \
                 OPTEE_SMC_FUNCID_CALLS_REVISION)
 
#define OPTEE_SMC_FAST_CALL_VAL_V2(func_num) \
   OPTEE_SMC_CALL_VAL_V2(OPTEE_SMC_32_V2, OPTEE_SMC_FAST_CALL_V2, \
              OPTEE_SMC_OWNER_TRUSTED_OS_V2, (func_num))
 
#define OPTEE_SMC_CALL_VAL_V2(type, calling_convention, owner, func_num) \
           ((type) | (calling_convention) | \
           (((owner) & OPTEE_SMC_OWNER_MASK_V2) << \
               OPTEE_SMC_OWNER_SHIFT_V2) |\
           ((func_num) & OPTEE_SMC_FUNC_MASK_V2))
 
#endif /* TEESMC_V2_H */