2 * Copyright (c) 2013-2018, ARM Limited and Contributors. All rights reserved.
4 * SPDX-License-Identifier: BSD-3-Clause
16 /*******************************************************************************
17 * Forward declarations
18 ******************************************************************************/
19 struct entry_point_info
;
21 /*******************************************************************************
22 * Function & variable prototypes
23 ******************************************************************************/
25 void *cm_get_context_by_index(unsigned int cpu_idx
,
26 unsigned int security_state
);
27 void cm_set_context_by_index(unsigned int cpu_idx
,
29 unsigned int security_state
);
30 void *cm_get_context(uint32_t security_state
);
31 void cm_set_context(void *context
, uint32_t security_state
);
32 void cm_init_my_context(const struct entry_point_info
*ep
);
33 void cm_init_context_by_index(unsigned int cpu_idx
,
34 const struct entry_point_info
*ep
);
35 void cm_setup_context(cpu_context_t
*ctx
, const entry_point_info_t
*ep
);
36 void cm_prepare_el3_exit(uint32_t security_state
);
39 void cm_el1_sysregs_context_save(uint32_t security_state
);
40 void cm_el1_sysregs_context_restore(uint32_t security_state
);
41 void cm_set_elr_el3(uint32_t security_state
, uintptr_t entrypoint
);
42 void cm_set_elr_spsr_el3(uint32_t security_state
,
43 uintptr_t entrypoint
, uint32_t spsr
);
44 void cm_write_scr_el3_bit(uint32_t security_state
,
47 void cm_set_next_eret_context(uint32_t security_state
);
48 uint32_t cm_get_scr_el3(uint32_t security_state
);
50 /* Inline definitions */
52 /*******************************************************************************
53 * This function is used to program the context that's used for exception
54 * return. This initializes the SP_EL3 to a pointer to a 'cpu_context' set for
55 * the required security state
56 ******************************************************************************/
57 static inline void cm_set_next_context(void *context
)
63 * Check that this function is called with SP_EL0 as the stack
66 __asm__
volatile("mrs %0, SPSel\n"
69 assert(sp_mode
== MODE_SP_EL0
);
70 #endif /* ENABLE_ASSERTIONS */
72 __asm__
volatile("msr spsel, #1\n"
79 void *cm_get_next_context(void);
80 void cm_set_next_context(void *context
);
83 #endif /* CONTEXT_MGMT_H */