xref: /arm-trusted-firmware/include/common/ep_info.h (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu /*
2*91f16700Schasinglulu  * Copyright (c) 2017-2021, Arm Limited and Contributors. All rights reserved.
3*91f16700Schasinglulu  *
4*91f16700Schasinglulu  * SPDX-License-Identifier: BSD-3-Clause
5*91f16700Schasinglulu  */
6*91f16700Schasinglulu 
7*91f16700Schasinglulu #ifndef EP_INFO_H
8*91f16700Schasinglulu #define EP_INFO_H
9*91f16700Schasinglulu 
10*91f16700Schasinglulu #include <common/param_header.h>
11*91f16700Schasinglulu 
12*91f16700Schasinglulu #ifndef __ASSEMBLER__
13*91f16700Schasinglulu #include <stdint.h>
14*91f16700Schasinglulu #include <lib/cassert.h>
15*91f16700Schasinglulu #endif /* __ASSEMBLER__ */
16*91f16700Schasinglulu 
17*91f16700Schasinglulu #include <export/common/ep_info_exp.h>
18*91f16700Schasinglulu 
19*91f16700Schasinglulu #define SECURE		EP_SECURE
20*91f16700Schasinglulu #define NON_SECURE	EP_NON_SECURE
21*91f16700Schasinglulu #define REALM		EP_REALM
22*91f16700Schasinglulu #if ENABLE_RME
23*91f16700Schasinglulu #define sec_state_is_valid(s)	(((s) == SECURE) ||	\
24*91f16700Schasinglulu 				((s) == NON_SECURE) ||	\
25*91f16700Schasinglulu 				((s) == REALM))
26*91f16700Schasinglulu #else
27*91f16700Schasinglulu #define sec_state_is_valid(s) (((s) == SECURE) || ((s) == NON_SECURE))
28*91f16700Schasinglulu #endif
29*91f16700Schasinglulu 
30*91f16700Schasinglulu #define PARAM_EP_SECURITY_MASK	EP_SECURITY_MASK
31*91f16700Schasinglulu 
32*91f16700Schasinglulu #define NON_EXECUTABLE	EP_NON_EXECUTABLE
33*91f16700Schasinglulu #define EXECUTABLE	EP_EXECUTABLE
34*91f16700Schasinglulu 
35*91f16700Schasinglulu /* Get/set security state of an image */
36*91f16700Schasinglulu #define GET_SECURITY_STATE(x) ((x) & EP_SECURITY_MASK)
37*91f16700Schasinglulu #define SET_SECURITY_STATE(x, security) \
38*91f16700Schasinglulu 			((x) = ((x) & ~EP_SECURITY_MASK) | (security))
39*91f16700Schasinglulu 
40*91f16700Schasinglulu #ifndef __ASSEMBLER__
41*91f16700Schasinglulu 
42*91f16700Schasinglulu /*
43*91f16700Schasinglulu  * Compile time assertions related to the 'entry_point_info' structure to
44*91f16700Schasinglulu  * ensure that the assembler and the compiler view of the offsets of
45*91f16700Schasinglulu  * the structure members is the same.
46*91f16700Schasinglulu  */
47*91f16700Schasinglulu CASSERT(ENTRY_POINT_INFO_PC_OFFSET ==
48*91f16700Schasinglulu 		__builtin_offsetof(entry_point_info_t, pc), \
49*91f16700Schasinglulu 		assert_BL31_pc_offset_mismatch);
50*91f16700Schasinglulu 
51*91f16700Schasinglulu #ifndef __aarch64__
52*91f16700Schasinglulu CASSERT(ENTRY_POINT_INFO_LR_SVC_OFFSET ==
53*91f16700Schasinglulu 		__builtin_offsetof(entry_point_info_t, lr_svc),
54*91f16700Schasinglulu 		assert_entrypoint_lr_offset_error);
55*91f16700Schasinglulu #endif
56*91f16700Schasinglulu 
57*91f16700Schasinglulu CASSERT(ENTRY_POINT_INFO_ARGS_OFFSET == \
58*91f16700Schasinglulu 		__builtin_offsetof(entry_point_info_t, args), \
59*91f16700Schasinglulu 		assert_BL31_args_offset_mismatch);
60*91f16700Schasinglulu 
61*91f16700Schasinglulu CASSERT(sizeof(uintptr_t) ==
62*91f16700Schasinglulu 		__builtin_offsetof(entry_point_info_t, spsr) - \
63*91f16700Schasinglulu 		__builtin_offsetof(entry_point_info_t, pc), \
64*91f16700Schasinglulu 		assert_entrypoint_and_spsr_should_be_adjacent);
65*91f16700Schasinglulu 
66*91f16700Schasinglulu #endif /*__ASSEMBLER__*/
67*91f16700Schasinglulu 
68*91f16700Schasinglulu #endif /* EP_INFO_H */
69