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