Ken Liu | 91d44da | 2018-09-20 22:42:31 +0800 | [diff] [blame] | 1 | /* |
Summer Qin | 1056d1c | 2022-10-19 16:07:15 +0800 | [diff] [blame] | 2 | * Copyright (c) 2018-2022, Arm Limited. All rights reserved. |
Ken Liu | 91d44da | 2018-09-20 22:42:31 +0800 | [diff] [blame] | 3 | * |
4 | * SPDX-License-Identifier: BSD-3-Clause | ||||
5 | * | ||||
6 | */ | ||||
7 | #ifndef __TFM_UTILS_H__ | ||||
8 | #define __TFM_UTILS_H__ | ||||
9 | |||||
Summer Qin | 8321492 | 2020-06-22 15:07:08 +0800 | [diff] [blame] | 10 | #include <stdbool.h> |
Ken Liu | 8fb61f1 | 2021-12-14 08:32:10 +0800 | [diff] [blame] | 11 | #include <string.h> |
Jimmy Brisson | a9052d7 | 2021-06-21 11:46:45 -0500 | [diff] [blame] | 12 | #include "tfm_spm_log.h" |
Edison Ai | 93dabfd | 2019-12-03 13:44:45 +0800 | [diff] [blame] | 13 | |
14 | /* | ||||
15 | * CPU spin here. | ||||
16 | * Note: this function is used to handle PROGRAMMER ERROR. | ||||
17 | */ | ||||
Edison Ai | 9059ea0 | 2019-11-28 13:46:14 +0800 | [diff] [blame] | 18 | void tfm_core_panic(void); |
Ken Liu | 91d44da | 2018-09-20 22:42:31 +0800 | [diff] [blame] | 19 | |
Summer Qin | 1056d1c | 2022-10-19 16:07:15 +0800 | [diff] [blame] | 20 | /* SPM assert */ |
Ken Liu | f250b8b | 2019-12-27 16:31:24 +0800 | [diff] [blame] | 21 | #ifndef NDEBUG |
Summer Qin | 1056d1c | 2022-10-19 16:07:15 +0800 | [diff] [blame] | 22 | #define SPM_ASSERT(cond) \ |
23 | do { \ | ||||
24 | if (!(cond)) { \ | ||||
25 | SPMLOG_INFMSG("Assert:"); \ | ||||
26 | SPMLOG_INFMSG(__func__); \ | ||||
27 | SPMLOG_INFMSGVAL(",", __LINE__); \ | ||||
28 | while (1) \ | ||||
29 | ; \ | ||||
30 | } \ | ||||
Ken Liu | 91d44da | 2018-09-20 22:42:31 +0800 | [diff] [blame] | 31 | } while (0) |
Ken Liu | f250b8b | 2019-12-27 16:31:24 +0800 | [diff] [blame] | 32 | #else |
Summer Qin | 1056d1c | 2022-10-19 16:07:15 +0800 | [diff] [blame] | 33 | #define SPM_ASSERT(cond) |
Ken Liu | f250b8b | 2019-12-27 16:31:24 +0800 | [diff] [blame] | 34 | #endif |
Ken Liu | 91d44da | 2018-09-20 22:42:31 +0800 | [diff] [blame] | 35 | |
Edison Ai | 1e5822f | 2018-09-21 14:56:08 +0800 | [diff] [blame] | 36 | /* Get container structure start address from member */ |
Ken Liu | c25558c | 2021-05-20 15:31:28 +0800 | [diff] [blame] | 37 | #define TO_CONTAINER(ptr, type, member) \ |
Edison Ai | 1e5822f | 2018-09-21 14:56:08 +0800 | [diff] [blame] | 38 | (type *)((unsigned long)(ptr) - offsetof(type, member)) |
39 | |||||
Antonio de Angelis | fa5d460 | 2021-06-09 16:11:11 +0100 | [diff] [blame] | 40 | /* FixMe: Replace ERROR_MSG() in platform code with a suitable API */ |
41 | #define ERROR_MSG(msg) SPMLOG_ERRMSG(msg "\r\n") | ||||
Summer Qin | 8321492 | 2020-06-22 15:07:08 +0800 | [diff] [blame] | 42 | |
Ken Liu | d4d6a5b | 2021-10-27 19:28:26 +0800 | [diff] [blame] | 43 | /* Stringify preprocessors, no leading underscore. ('STRINGIFY') */ |
44 | #define STRINGIFY_EXPAND(x) #x | ||||
45 | #define M2S(m) STRINGIFY_EXPAND(m) | ||||
Kevin Peng | 300c68d | 2021-08-12 17:40:17 +0800 | [diff] [blame] | 46 | |
Ken Liu | 8fb61f1 | 2021-12-14 08:32:10 +0800 | [diff] [blame] | 47 | /* Runtime memory operations forwarding */ |
Raef Coles | 2ed4c5d | 2022-11-21 13:02:43 +0000 | [diff] [blame] | 48 | #ifndef spm_memcpy |
Ken Liu | 8fb61f1 | 2021-12-14 08:32:10 +0800 | [diff] [blame] | 49 | #define spm_memcpy memcpy |
Raef Coles | 2ed4c5d | 2022-11-21 13:02:43 +0000 | [diff] [blame] | 50 | #endif /* spm_memcpy */ |
51 | |||||
52 | #ifndef spm_memset | ||||
Ken Liu | 8fb61f1 | 2021-12-14 08:32:10 +0800 | [diff] [blame] | 53 | #define spm_memset memset |
Raef Coles | 2ed4c5d | 2022-11-21 13:02:43 +0000 | [diff] [blame] | 54 | #endif /* spm_memset */ |
Ken Liu | 8fb61f1 | 2021-12-14 08:32:10 +0800 | [diff] [blame] | 55 | |
Ken Liu | f250b8b | 2019-12-27 16:31:24 +0800 | [diff] [blame] | 56 | #endif /* __TFM_UTILS_H__ */ |