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