xref: /rk3399_ARM-atf/include/export/common/ep_info_exp.h (revision 57bf6057721306d1ad1af1122a831789ded92885)
1*57bf6057SJulius Werner /*
2*57bf6057SJulius Werner  * Copyright (c) 2019, ARM Limited and Contributors. All rights reserved.
3*57bf6057SJulius Werner  *
4*57bf6057SJulius Werner  * SPDX-License-Identifier: BSD-3-Clause
5*57bf6057SJulius Werner  */
6*57bf6057SJulius Werner 
7*57bf6057SJulius Werner #ifndef ARM_TRUSTED_FIRMWARE_EXPORT_COMMON_EP_INFO_EXP_H
8*57bf6057SJulius Werner #define ARM_TRUSTED_FIRMWARE_EXPORT_COMMON_EP_INFO_EXP_H
9*57bf6057SJulius Werner 
10*57bf6057SJulius Werner /* EXPORT HEADER -- See include/export/README for details! -- EXPORT HEADER */
11*57bf6057SJulius Werner 
12*57bf6057SJulius Werner #include "../lib/utils_def_exp.h"
13*57bf6057SJulius Werner #include "param_header_exp.h"
14*57bf6057SJulius Werner 
15*57bf6057SJulius Werner /*******************************************************************************
16*57bf6057SJulius Werner  * Constants that allow assembler code to access members of and the
17*57bf6057SJulius Werner  * 'entry_point_info' structure at their correct offsets.
18*57bf6057SJulius Werner  ******************************************************************************/
19*57bf6057SJulius Werner #define ENTRY_POINT_INFO_PC_OFFSET	U(0x08)
20*57bf6057SJulius Werner #ifdef __aarch64__
21*57bf6057SJulius Werner #define ENTRY_POINT_INFO_ARGS_OFFSET	U(0x18)
22*57bf6057SJulius Werner #else
23*57bf6057SJulius Werner #define ENTRY_POINT_INFO_LR_SVC_OFFSET	U(0x10)
24*57bf6057SJulius Werner #define ENTRY_POINT_INFO_ARGS_OFFSET	U(0x14)
25*57bf6057SJulius Werner #endif
26*57bf6057SJulius Werner 
27*57bf6057SJulius Werner /* Security state of the image. */
28*57bf6057SJulius Werner #define EP_SECURITY_MASK	U(0x1)
29*57bf6057SJulius Werner #define EP_SECURITY_SHIFT	U(0)
30*57bf6057SJulius Werner #define EP_SECURE		U(0x0)
31*57bf6057SJulius Werner #define EP_NON_SECURE		U(0x1)
32*57bf6057SJulius Werner 
33*57bf6057SJulius Werner /* Endianness of the image. */
34*57bf6057SJulius Werner #define EP_EE_MASK		U(0x2)
35*57bf6057SJulius Werner #define EP_EE_SHIFT		U(1)
36*57bf6057SJulius Werner #define EP_EE_LITTLE		U(0x0)
37*57bf6057SJulius Werner #define EP_EE_BIG		U(0x2)
38*57bf6057SJulius Werner #define EP_GET_EE(x)		((x) & EP_EE_MASK)
39*57bf6057SJulius Werner #define EP_SET_EE(x, ee)	((x) = ((x) & ~EP_EE_MASK) | (ee))
40*57bf6057SJulius Werner 
41*57bf6057SJulius Werner /* Enable or disable access to the secure timer from secure images. */
42*57bf6057SJulius Werner #define EP_ST_MASK		U(0x4)
43*57bf6057SJulius Werner #define EP_ST_SHIFT		U(2)
44*57bf6057SJulius Werner #define EP_ST_DISABLE		U(0x0)
45*57bf6057SJulius Werner #define EP_ST_ENABLE		U(0x4)
46*57bf6057SJulius Werner #define EP_GET_ST(x)		((x) & EP_ST_MASK)
47*57bf6057SJulius Werner #define EP_SET_ST(x, ee)	((x) = ((x) & ~EP_ST_MASK) | (ee))
48*57bf6057SJulius Werner 
49*57bf6057SJulius Werner /* Determine if an image is executable or not. */
50*57bf6057SJulius Werner #define EP_EXE_MASK		U(0x8)
51*57bf6057SJulius Werner #define EP_EXE_SHIFT		U(3)
52*57bf6057SJulius Werner #define EP_NON_EXECUTABLE	U(0x0)
53*57bf6057SJulius Werner #define EP_EXECUTABLE		U(0x8)
54*57bf6057SJulius Werner #define EP_GET_EXE(x)		((x) & EP_EXE_MASK)
55*57bf6057SJulius Werner #define EP_SET_EXE(x, ee)	((x) = ((x) & ~EP_EXE_MASK) | (ee))
56*57bf6057SJulius Werner 
57*57bf6057SJulius Werner /* Flag to indicate the first image that is executed. */
58*57bf6057SJulius Werner #define EP_FIRST_EXE_MASK	U(0x10)
59*57bf6057SJulius Werner #define EP_FIRST_EXE_SHIFT	U(4)
60*57bf6057SJulius Werner #define EP_FIRST_EXE		U(0x10)
61*57bf6057SJulius Werner #define EP_GET_FIRST_EXE(x)	((x) & EP_FIRST_EXE_MASK)
62*57bf6057SJulius Werner #define EP_SET_FIRST_EXE(x, ee)	((x) = ((x) & ~EP_FIRST_EXE_MASK) | (ee))
63*57bf6057SJulius Werner 
64*57bf6057SJulius Werner #ifndef __ASSEMBLER__
65*57bf6057SJulius Werner 
66*57bf6057SJulius Werner typedef struct aapcs64_params {
67*57bf6057SJulius Werner 	uint64_t arg0;
68*57bf6057SJulius Werner 	uint64_t arg1;
69*57bf6057SJulius Werner 	uint64_t arg2;
70*57bf6057SJulius Werner 	uint64_t arg3;
71*57bf6057SJulius Werner 	uint64_t arg4;
72*57bf6057SJulius Werner 	uint64_t arg5;
73*57bf6057SJulius Werner 	uint64_t arg6;
74*57bf6057SJulius Werner 	uint64_t arg7;
75*57bf6057SJulius Werner } aapcs64_params_t;
76*57bf6057SJulius Werner 
77*57bf6057SJulius Werner typedef struct aapcs32_params {
78*57bf6057SJulius Werner 	uint32_t arg0;
79*57bf6057SJulius Werner 	uint32_t arg1;
80*57bf6057SJulius Werner 	uint32_t arg2;
81*57bf6057SJulius Werner 	uint32_t arg3;
82*57bf6057SJulius Werner } aapcs32_params_t;
83*57bf6057SJulius Werner 
84*57bf6057SJulius Werner /*****************************************************************************
85*57bf6057SJulius Werner  * This structure represents the superset of information needed while
86*57bf6057SJulius Werner  * switching exception levels. The only two mechanisms to do so are
87*57bf6057SJulius Werner  * ERET & SMC. Security state is indicated using bit zero of header
88*57bf6057SJulius Werner  * attribute
89*57bf6057SJulius Werner  * NOTE: BL1 expects entrypoint followed by spsr at an offset from the start
90*57bf6057SJulius Werner  * of this structure defined by the macro `ENTRY_POINT_INFO_PC_OFFSET` while
91*57bf6057SJulius Werner  * processing SMC to jump to BL31.
92*57bf6057SJulius Werner  *****************************************************************************/
93*57bf6057SJulius Werner typedef struct entry_point_info {
94*57bf6057SJulius Werner 	param_header_t h;
95*57bf6057SJulius Werner 	uintptr_t pc;
96*57bf6057SJulius Werner 	uint32_t spsr;
97*57bf6057SJulius Werner #ifdef __aarch64__
98*57bf6057SJulius Werner 	aapcs64_params_t args;
99*57bf6057SJulius Werner #else
100*57bf6057SJulius Werner 	uintptr_t lr_svc;
101*57bf6057SJulius Werner 	aapcs32_params_t args;
102*57bf6057SJulius Werner #endif
103*57bf6057SJulius Werner } entry_point_info_t;
104*57bf6057SJulius Werner 
105*57bf6057SJulius Werner #endif /*__ASSEMBLER__*/
106*57bf6057SJulius Werner 
107*57bf6057SJulius Werner #endif /* ARM_TRUSTED_FIRMWARE_EXPORT_COMMON_EP_INFO_EXP_H */
108