refactor(esp_tee): Revised the secure service ID numbering scheme

Also:
- Split the secure service table into two parts: one DRAM-resident and the
  other DROM-resident. The former holds the services invoked when the cache is
  disabled or suspended while the latter holds rest of the services.
This commit is contained in:
Laukik Hase
2025-01-15 18:27:56 +05:30
parent a745100bef
commit c4eec756f3
11 changed files with 137 additions and 115 deletions

View File

@@ -1,5 +1,5 @@
/* /*
* SPDX-FileCopyrightText: 2020-2024 Espressif Systems (Shanghai) CO LTD * SPDX-FileCopyrightText: 2020-2025 Espressif Systems (Shanghai) CO LTD
* *
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
*/ */
@@ -22,6 +22,10 @@
#include "esp_err.h" #include "esp_err.h"
#include "esp_attr.h" #include "esp_attr.h"
#if CONFIG_SECURE_ENABLE_TEE && !NON_OS_BUILD
#include "secure_service_num.h"
#endif
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
@@ -452,9 +456,9 @@ FORCE_INLINE_ATTR void esp_cpu_intr_edge_ack(int intr_num)
#ifdef __XTENSA__ #ifdef __XTENSA__
xthal_set_intclear((unsigned) (1 << intr_num)); xthal_set_intclear((unsigned) (1 << intr_num));
#else #else
#if CONFIG_SECURE_ENABLE_TEE && !ESP_TEE_BUILD #if CONFIG_SECURE_ENABLE_TEE && !NON_OS_BUILD
extern esprv_int_mgmt_t esp_tee_intr_sec_srv_cb; extern esprv_int_mgmt_t esp_tee_intr_sec_srv_cb;
esp_tee_intr_sec_srv_cb(2, TEE_INTR_EDGE_ACK_SRV_ID, intr_num); esp_tee_intr_sec_srv_cb(2, SS_RV_UTILS_INTR_EDGE_ACK, intr_num);
#else #else
rv_utils_intr_edge_ack((unsigned) intr_num); rv_utils_intr_edge_ack((unsigned) intr_num);
#endif #endif

View File

@@ -88,7 +88,7 @@ set(secure_service_tbl_parser_py
set(secure_service_gen_headers set(secure_service_gen_headers
${CONFIG_DIR}/secure_service_num.h ${CONFIG_DIR}/secure_service_dec.h ${CONFIG_DIR}/secure_service_num.h ${CONFIG_DIR}/secure_service_dec.h
${CONFIG_DIR}/secure_service.h ${CONFIG_DIR}/secure_service_int.h ${CONFIG_DIR}/secure_service_ext.h
) )
if(CONFIG_SECURE_ENABLE_TEE AND NOT esp_tee_build) if(CONFIG_SECURE_ENABLE_TEE AND NOT esp_tee_build)

View File

@@ -1,45 +1,56 @@
# SS no. API type Function Args # SS no. API type Function Args
0 custom invalid_secure_service 0 0 custom invalid_secure_service 0
1 IDF esp_rom_route_intr_matrix 3 # ID: 1-47 (47) - External memory (Flash) protection
2 IDF rv_utils_intr_enable 1 1 IDF mmu_hal_map_region 6
3 IDF rv_utils_intr_disable 1 2 IDF mmu_hal_unmap_region 3
4 IDF rv_utils_intr_set_priority 2 3 IDF mmu_hal_vaddr_to_paddr 4
5 IDF rv_utils_intr_set_type 2 4 IDF mmu_hal_paddr_to_vaddr 5
6 IDF rv_utils_intr_set_threshold 1 # Services before the ID 48 will be placed in the internal memory table,
7 IDF rv_utils_intr_edge_ack 1 # while the rest will be placed in the external memory table.
8 IDF rv_utils_intr_global_enable 0 # ID: 48-71 (24) - Interrupt Handling
9 IDF efuse_hal_chip_revision 0 48 IDF esp_rom_route_intr_matrix 3
10 IDF efuse_hal_get_chip_ver_pkg 1 49 IDF rv_utils_intr_enable 1
11 IDF efuse_hal_get_disable_wafer_version_major 0 50 IDF rv_utils_intr_disable 1
12 IDF efuse_hal_get_mac 1 51 IDF rv_utils_intr_set_priority 2
13 IDF esp_efuse_check_secure_version 1 52 IDF rv_utils_intr_set_type 2
14 IDF esp_efuse_read_field_blob 3 53 IDF rv_utils_intr_set_threshold 1
15 IDF esp_flash_encryption_enabled 0 54 IDF rv_utils_intr_edge_ack 1
16 IDF wdt_hal_init 4 55 IDF rv_utils_intr_global_enable 0
17 IDF wdt_hal_deinit 1 # ID: 72-119 (48) - HAL
18 IDF esp_aes_intr_alloc 0 72 IDF efuse_hal_chip_revision 0
19 IDF esp_aes_crypt_cbc 6 73 IDF efuse_hal_get_chip_ver_pkg 1
20 IDF esp_aes_crypt_cfb8 6 74 IDF efuse_hal_get_disable_wafer_version_major 0
21 IDF esp_aes_crypt_cfb128 7 75 IDF efuse_hal_get_mac 1
22 IDF esp_aes_crypt_ctr 7 76 IDF wdt_hal_init 4
23 IDF esp_aes_crypt_ecb 4 77 IDF wdt_hal_deinit 1
24 IDF esp_aes_crypt_ofb 6 # ID: 120-167 (48) - Crypto
25 IDF esp_sha 4 120 IDF esp_aes_intr_alloc 0
26 IDF esp_sha_dma 6 121 IDF esp_aes_crypt_cbc 6
27 IDF esp_sha_read_digest_state 2 122 IDF esp_aes_crypt_cfb8 6
28 IDF esp_sha_write_digest_state 2 123 IDF esp_aes_crypt_cfb128 7
29 IDF mmu_hal_map_region 6 124 IDF esp_aes_crypt_ctr 7
30 IDF mmu_hal_unmap_region 3 125 IDF esp_aes_crypt_ecb 4
31 IDF mmu_hal_vaddr_to_paddr 4 126 IDF esp_aes_crypt_ofb 6
32 IDF mmu_hal_paddr_to_vaddr 5 127 IDF esp_sha 4
33 custom esp_tee_ota_begin 0 128 IDF esp_sha_dma 6
34 custom esp_tee_ota_write 3 129 IDF esp_sha_read_digest_state 2
35 custom esp_tee_ota_end 0 130 IDF esp_sha_write_digest_state 2
36 custom esp_tee_sec_storage_init 0 # ID: 168-183 (16) - eFuse
37 custom esp_tee_sec_storage_gen_key 1 168 IDF esp_efuse_check_secure_version 1
38 custom esp_tee_sec_storage_get_signature 4 169 IDF esp_efuse_read_field_blob 3
39 custom esp_tee_sec_storage_get_pubkey 2 170 IDF esp_flash_encryption_enabled 0
40 custom esp_tee_sec_storage_encrypt 8 # ID: 184-249 (66) - Reserved for future use
41 custom esp_tee_sec_storage_decrypt 8 # ID: 270-293 (24) - Secure Storage
42 custom esp_tee_sec_storage_is_slot_empty 1 270 custom esp_tee_sec_storage_init 0
43 custom esp_tee_sec_storage_clear_slot 1 271 custom esp_tee_sec_storage_gen_key 2
272 custom esp_tee_sec_storage_get_signature 4
273 custom esp_tee_sec_storage_get_pubkey 2
274 custom esp_tee_sec_storage_encrypt 8
275 custom esp_tee_sec_storage_decrypt 8
276 custom esp_tee_sec_storage_is_slot_empty 1
277 custom esp_tee_sec_storage_clear_slot 1
# ID: 294-299 (6) - OTA
294 custom esp_tee_ota_begin 0
295 custom esp_tee_ota_write 3
296 custom esp_tee_ota_end 0
# ID: 300+ - User-defined

View File

@@ -5,6 +5,8 @@ import re
from typing import List from typing import List
from typing import Tuple from typing import Tuple
SEC_SRV_TABLE_SPLIT_ID = 48
def parse_services(secure_service_tbl: str) -> List[Tuple[int, str, int]]: def parse_services(secure_service_tbl: str) -> List[Tuple[int, str, int]]:
services, service_ids = [], set() services, service_ids = [], set()
@@ -37,8 +39,9 @@ extern "C" {
body = '\n'.join(f'#define SS_{name.upper()}\t{nr}' for nr, name, _ in services) body = '\n'.join(f'#define SS_{name.upper()}\t{nr}' for nr, name, _ in services)
footer = f'\n#define MAX_SECURE_SERVICES_ID\t{services[-1][0] + 1 if services else 0}\n' footer = f'\n#define MAX_SECURE_SERVICES_ID\t{services[-1][0] + 1 if services else 0}\n'
footer += f'#define SECURE_SERVICES_NUM\t{len(services)}\n\n' footer += f'#define SECURE_SERVICES_NUM\t{len(services)}\n\n'
footer += f'#define SECURE_SERVICES_SPLIT_ID\t{SEC_SRV_TABLE_SPLIT_ID}\n\n'
footer += '''typedef void (*secure_service_t)(void); footer += '''typedef void (*secure_service_t)(void);
typedef struct { int id; secure_service_t func; int nargs; } secure_service_entry_t; typedef struct { secure_service_t func; int nargs; } secure_service_entry_t;
''' '''
footer += '\n#ifdef __cplusplus\n}\n#endif\n' footer += '\n#ifdef __cplusplus\n}\n#endif\n'
with open(output_file, 'w') as f: with open(output_file, 'w') as f:
@@ -62,16 +65,22 @@ extern "C" {
f.write(header + body + footer) f.write(header + body + footer)
def generate_table(services: List[Tuple[int, str, int]], output_file: str) -> None: def generate_table_split(services: List[Tuple[int, str, int]], output_file_1: str, output_file_2: str) -> None:
header = '''/** header = '''/**
* THIS FILE WAS AUTOMATICALLY GENERATED. DO NOT EDIT! * THIS FILE WAS AUTOMATICALLY GENERATED. DO NOT EDIT!
*/ */
#pragma once #pragma once
''' '''
body = '\n'.join(f'__SECURE_SERVICE({nr}, {name}, {nargs})' for nr, name, nargs in services) services_1 = [service for service in services if service[0] < SEC_SRV_TABLE_SPLIT_ID]
with open(output_file, 'w') as f: services_2 = [service for service in services if service[0] >= SEC_SRV_TABLE_SPLIT_ID]
f.write(header + body)
body_1 = '\n'.join(f'__SECURE_SERVICE({nr}, {name}, {nargs})' for nr, name, nargs in services_1)
body_2 = '\n'.join(f'__SECURE_SERVICE({nr}, {name}, {nargs})' for nr, name, nargs in services_2)
with open(output_file_1, 'w') as f1, open(output_file_2, 'w') as f2:
f1.write(header + body_1)
f2.write(header + body_2)
def generate_wrap_list(secure_service_tbl: str) -> None: def generate_wrap_list(secure_service_tbl: str) -> None:
@@ -85,19 +94,19 @@ def main() -> None:
parser = argparse.ArgumentParser(description='Generate secure service outputs') parser = argparse.ArgumentParser(description='Generate secure service outputs')
parser.add_argument('--wrap', action='store_true', help='Generate linker wrap options') parser.add_argument('--wrap', action='store_true', help='Generate linker wrap options')
parser.add_argument('secure_service_tbl', type=str, help='Path to secure service table file') parser.add_argument('secure_service_tbl', type=str, help='Path to secure service table file')
parser.add_argument('output_files', nargs='*', help='Output files: [secure_service_num.h, secure_service_dec.h, secure_service.h]') parser.add_argument('output_files', nargs='*', help='Output files: [secure_service_num.h, secure_service_dec.h, secure_service_1.h, secure_service_2.h]')
args = parser.parse_args() args = parser.parse_args()
if args.wrap: if args.wrap:
generate_wrap_list(args.secure_service_tbl) generate_wrap_list(args.secure_service_tbl)
else: else:
if len(args.output_files) != 3: if len(args.output_files) != 4:
parser.error('Missing output header files!') parser.error('Missing output header files!')
services = parse_services(args.secure_service_tbl) services = parse_services(args.secure_service_tbl)
generate_num_header(services, args.output_files[0]) generate_num_header(services, args.output_files[0])
generate_dec_header(services, args.output_files[1]) generate_dec_header(services, args.output_files[1])
generate_table(services, args.output_files[2]) generate_table_split(services, args.output_files[2], args.output_files[3])
if __name__ == '__main__': if __name__ == '__main__':

View File

@@ -1,2 +1,2 @@
# SS no. API type Function Args # SS no. API type Function Args
101 custom esp_tee_att_generate_token 6 250 custom esp_tee_att_generate_token 6

View File

@@ -13,29 +13,21 @@
static const char *TAG = "esp_tee_sec_disp"; static const char *TAG = "esp_tee_sec_disp";
extern const secure_service_entry_t tee_secure_service_table[]; extern const secure_service_entry_t tee_sec_srv_tbl_int_mem[];
extern const secure_service_entry_t tee_sec_srv_tbl_ext_mem[];
/* ---------------------------------------------- Secure Service Dispatcher ------------------------------------------------- */ /* ---------------------------------------------- Secure Service Dispatcher ------------------------------------------------- */
const secure_service_entry_t *find_service_by_id(uint32_t id) static const secure_service_entry_t *find_service_by_id(uint32_t id)
{ {
if (id >= MAX_SECURE_SERVICES_ID) { if (id >= MAX_SECURE_SERVICES_ID) {
return NULL; return NULL;
} }
size_t left = 0; if (id < SECURE_SERVICES_SPLIT_ID) {
size_t right = SECURE_SERVICES_NUM; return &tee_sec_srv_tbl_int_mem[id];
} else {
while (left < right) { return &tee_sec_srv_tbl_ext_mem[id];
size_t mid = left + (right - left) / 2;
if (tee_secure_service_table[mid].id == id) {
return &tee_secure_service_table[mid];
} else if (tee_secure_service_table[mid].id < id) {
left = mid + 1;
} else {
right = mid;
}
} }
return NULL; return NULL;

View File

@@ -13,10 +13,20 @@
#pragma GCC diagnostic ignored "-Woverride-init" #pragma GCC diagnostic ignored "-Woverride-init"
#endif #endif
const DRAM_ATTR secure_service_entry_t tee_secure_service_table[] = { const DRAM_ATTR secure_service_entry_t tee_sec_srv_tbl_int_mem[] = {
#define __SECURE_SERVICE(NR, SYM, ARGC) { .id = NR, .func = _ss_##SYM, .nargs = ARGC }, [0 ... SECURE_SERVICES_SPLIT_ID - 1] = { .func = NULL, .nargs = 0 },
#include "secure_service.h" #define __SECURE_SERVICE(NR, SYM, ARGC) [NR] = { .func = _ss_##SYM, .nargs = ARGC },
#include "secure_service_int.h"
#undef __SECURE_SERVICE
}; };
const secure_service_entry_t tee_sec_srv_tbl_ext_mem[] = {
[0 ... MAX_SECURE_SERVICES_ID] = { .func = NULL, .nargs = 0 },
#define __SECURE_SERVICE(NR, SYM, ARGC) [NR] = { .func = _ss_##SYM, .nargs = ARGC },
#include "secure_service_ext.h"
#undef __SECURE_SERVICE
};
#ifdef __GNUC__ #ifdef __GNUC__
#pragma GCC diagnostic pop #pragma GCC diagnostic pop
#endif #endif

View File

@@ -1,18 +1,18 @@
# SS no. API type Function Args # SS no. API type Function Args
201 custom esp_tee_service_add 6 300 custom esp_tee_service_add 2
202 custom esp_tee_service_sub 6 301 custom esp_tee_service_sub 2
203 custom esp_tee_service_mul 6 302 custom esp_tee_service_mul 2
204 custom esp_tee_service_div 6 303 custom esp_tee_service_div 2
205 custom esp_tee_test_timer_init 6 304 custom esp_tee_test_timer_init 1
206 custom esp_tee_secure_int_test 6 305 custom esp_tee_secure_int_test 0
207 custom esp_tee_non_secure_int_test 6 306 custom esp_tee_non_secure_int_test 1
208 custom esp_tee_test_int_count 6 307 custom esp_tee_test_int_count 1
209 custom esp_tee_test_resv_reg1_write_violation 0 308 custom esp_tee_test_resv_reg1_write_violation 0
210 custom esp_tee_test_resv_reg1_exec_violation 0 309 custom esp_tee_test_resv_reg1_exec_violation 0
211 custom esp_tee_test_iram_reg1_write_violation 0 310 custom esp_tee_test_iram_reg1_write_violation 0
212 custom esp_tee_test_iram_reg2_write_violation 0 311 custom esp_tee_test_iram_reg2_write_violation 0
213 custom esp_tee_test_dram_reg1_exec_violation 0 312 custom esp_tee_test_dram_reg1_exec_violation 0
214 custom esp_tee_test_dram_reg2_exec_violation 0 313 custom esp_tee_test_dram_reg2_exec_violation 0
215 custom esp_tee_test_illegal_instruction 0 314 custom esp_tee_test_illegal_instruction 0
216 custom dummy_secure_service 6 315 custom dummy_secure_service 0
217 custom add_in_loop 6 316 custom add_in_loop 3

View File

@@ -1,5 +1,5 @@
/* /*
* SPDX-FileCopyrightText: 2020-2024 Espressif Systems (Shanghai) CO LTD * SPDX-FileCopyrightText: 2020-2025 Espressif Systems (Shanghai) CO LTD
* *
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
*/ */
@@ -17,6 +17,10 @@
#include "riscv/csr_pie.h" #include "riscv/csr_pie.h"
#include "sdkconfig.h" #include "sdkconfig.h"
#if CONFIG_SECURE_ENABLE_TEE && !NON_OS_BUILD
#include "secure_service_num.h"
#endif
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
@@ -28,15 +32,7 @@ extern "C" {
#define IS_PRV_M_MODE() (1UL) #define IS_PRV_M_MODE() (1UL)
#endif #endif
#if CONFIG_SECURE_ENABLE_TEE && !ESP_TEE_BUILD #if CONFIG_SECURE_ENABLE_TEE && !NON_OS_BUILD
/* [ESP-TEE] Secure service call IDs for interrupt management */
#define TEE_INTR_ENABLE_SRV_ID (2)
#define TEE_INTR_DISABLE_SRV_ID (3)
#define TEE_INTR_SET_PRIORITY_SRV_ID (4)
#define TEE_INTR_SET_TYPE_SRV_ID (5)
#define TEE_INTR_SET_THRESHOLD_SRV_ID (6)
#define TEE_INTR_EDGE_ACK_SRV_ID (7)
#define TEE_INTR_GLOBAL_EN_SRV_ID (8)
/* [ESP-TEE] Callback function for accessing interrupt management services through REE */ /* [ESP-TEE] Callback function for accessing interrupt management services through REE */
extern esprv_int_mgmt_t esp_tee_intr_sec_srv_cb; extern esprv_int_mgmt_t esp_tee_intr_sec_srv_cb;
#endif #endif
@@ -157,8 +153,8 @@ FORCE_INLINE_ATTR void rv_utils_set_xtvec(uint32_t xtvec_val)
FORCE_INLINE_ATTR void rv_utils_intr_enable(uint32_t intr_mask) FORCE_INLINE_ATTR void rv_utils_intr_enable(uint32_t intr_mask)
{ {
#if CONFIG_SECURE_ENABLE_TEE && !ESP_TEE_BUILD #if CONFIG_SECURE_ENABLE_TEE && !NON_OS_BUILD
esp_tee_intr_sec_srv_cb(2, TEE_INTR_ENABLE_SRV_ID, intr_mask); esp_tee_intr_sec_srv_cb(2, SS_RV_UTILS_INTR_ENABLE, intr_mask);
#else #else
// Disable all interrupts to make updating of the interrupt mask atomic. // Disable all interrupts to make updating of the interrupt mask atomic.
unsigned old_mstatus = RV_CLEAR_CSR(mstatus, MSTATUS_MIE); unsigned old_mstatus = RV_CLEAR_CSR(mstatus, MSTATUS_MIE);
@@ -169,8 +165,8 @@ FORCE_INLINE_ATTR void rv_utils_intr_enable(uint32_t intr_mask)
FORCE_INLINE_ATTR void rv_utils_intr_disable(uint32_t intr_mask) FORCE_INLINE_ATTR void rv_utils_intr_disable(uint32_t intr_mask)
{ {
#if CONFIG_SECURE_ENABLE_TEE && !ESP_TEE_BUILD #if CONFIG_SECURE_ENABLE_TEE && !NON_OS_BUILD
esp_tee_intr_sec_srv_cb(2, TEE_INTR_DISABLE_SRV_ID, intr_mask); esp_tee_intr_sec_srv_cb(2, SS_RV_UTILS_INTR_DISABLE, intr_mask);
#else #else
// Disable all interrupts to make updating of the interrupt mask atomic. // Disable all interrupts to make updating of the interrupt mask atomic.
unsigned old_mstatus = RV_CLEAR_CSR(mstatus, MSTATUS_MIE); unsigned old_mstatus = RV_CLEAR_CSR(mstatus, MSTATUS_MIE);
@@ -181,8 +177,8 @@ FORCE_INLINE_ATTR void rv_utils_intr_disable(uint32_t intr_mask)
FORCE_INLINE_ATTR void rv_utils_intr_global_enable(void) FORCE_INLINE_ATTR void rv_utils_intr_global_enable(void)
{ {
#if CONFIG_SECURE_ENABLE_TEE && !ESP_TEE_BUILD #if CONFIG_SECURE_ENABLE_TEE && !NON_OS_BUILD
esp_tee_intr_sec_srv_cb(1, TEE_INTR_GLOBAL_EN_SRV_ID); esp_tee_intr_sec_srv_cb(1, SS_RV_UTILS_INTR_GLOBAL_ENABLE);
#else #else
RV_SET_CSR(mstatus, MSTATUS_MIE); RV_SET_CSR(mstatus, MSTATUS_MIE);
#endif #endif
@@ -203,8 +199,8 @@ FORCE_INLINE_ATTR void rv_utils_intr_global_disable(void)
FORCE_INLINE_ATTR void rv_utils_intr_set_type(int intr_num, enum intr_type type) FORCE_INLINE_ATTR void rv_utils_intr_set_type(int intr_num, enum intr_type type)
{ {
#if CONFIG_SECURE_ENABLE_TEE && !ESP_TEE_BUILD #if CONFIG_SECURE_ENABLE_TEE && !NON_OS_BUILD
esp_tee_intr_sec_srv_cb(3, TEE_INTR_SET_TYPE_SRV_ID, intr_num, type); esp_tee_intr_sec_srv_cb(3, SS_RV_UTILS_INTR_SET_TYPE, intr_num, type);
#else #else
esprv_int_set_type(intr_num, type); esprv_int_set_type(intr_num, type);
#endif #endif
@@ -212,8 +208,8 @@ FORCE_INLINE_ATTR void rv_utils_intr_set_type(int intr_num, enum intr_type type)
FORCE_INLINE_ATTR void rv_utils_intr_set_priority(int rv_int_num, int priority) FORCE_INLINE_ATTR void rv_utils_intr_set_priority(int rv_int_num, int priority)
{ {
#if CONFIG_SECURE_ENABLE_TEE && !ESP_TEE_BUILD #if CONFIG_SECURE_ENABLE_TEE && !NON_OS_BUILD
esp_tee_intr_sec_srv_cb(3, TEE_INTR_SET_PRIORITY_SRV_ID, rv_int_num, priority); esp_tee_intr_sec_srv_cb(3, SS_RV_UTILS_INTR_SET_PRIORITY, rv_int_num, priority);
#else #else
esprv_int_set_priority(rv_int_num, priority); esprv_int_set_priority(rv_int_num, priority);
#endif #endif
@@ -221,8 +217,8 @@ FORCE_INLINE_ATTR void rv_utils_intr_set_priority(int rv_int_num, int priority)
FORCE_INLINE_ATTR void rv_utils_intr_set_threshold(int priority_threshold) FORCE_INLINE_ATTR void rv_utils_intr_set_threshold(int priority_threshold)
{ {
#if CONFIG_SECURE_ENABLE_TEE && !ESP_TEE_BUILD #if CONFIG_SECURE_ENABLE_TEE && !NON_OS_BUILD
esp_tee_intr_sec_srv_cb(2, TEE_INTR_SET_THRESHOLD_SRV_ID, priority_threshold); esp_tee_intr_sec_srv_cb(2, SS_RV_UTILS_INTR_SET_THRESHOLD, priority_threshold);
#else #else
esprv_int_set_threshold(priority_threshold); esprv_int_set_threshold(priority_threshold);
#endif #endif

View File

@@ -59,7 +59,7 @@ bool esprv_int_is_vectored(int rv_int_num)
} }
#if CONFIG_SECURE_ENABLE_TEE && !ESP_TEE_BUILD #if CONFIG_SECURE_ENABLE_TEE && !NON_OS_BUILD
DRAM_ATTR esprv_int_mgmt_t esp_tee_intr_sec_srv_cb = NULL; DRAM_ATTR esprv_int_mgmt_t esp_tee_intr_sec_srv_cb = NULL;
void esprv_int_setup_mgmt_cb(void *fptr) void esprv_int_setup_mgmt_cb(void *fptr)

View File

@@ -1,2 +1,2 @@
# SS no. API type Function Args # SS no. API type Function Args
201 custom example_sec_serv_aes_op 6 300 custom example_sec_serv_aes_op 5