• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2013-2018, ARM Limited and Contributors. All rights reserved.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
7 #include <assert.h>
8 
9 #include <bl31/bl31.h>
10 #include <common/bl_common.h>
11 #include <context.h>
12 #include <lib/el3_runtime/context_mgmt.h>
13 #include <lib/el3_runtime/cpu_data.h>
14 #include <plat/common/platform.h>
15 
16 /*******************************************************************************
17  * This function returns a pointer to the most recent 'cpu_context' structure
18  * for the calling CPU that was set as the context for the specified security
19  * state. NULL is returned if no such structure has been specified.
20  ******************************************************************************/
cm_get_context(uint32_t security_state)21 void *cm_get_context(uint32_t security_state)
22 {
23 	assert(security_state <= NON_SECURE);
24 
25 	return get_cpu_data(cpu_context[security_state]);
26 }
27 
28 /*******************************************************************************
29  * This function sets the pointer to the current 'cpu_context' structure for the
30  * specified security state for the calling CPU
31  ******************************************************************************/
cm_set_context(void * context,uint32_t security_state)32 void cm_set_context(void *context, uint32_t security_state)
33 {
34 	assert(security_state <= NON_SECURE);
35 
36 	set_cpu_data(cpu_context[security_state], context);
37 }
38 
39 /*******************************************************************************
40  * This function returns a pointer to the most recent 'cpu_context' structure
41  * for the CPU identified by `cpu_idx` that was set as the context for the
42  * specified security state. NULL is returned if no such structure has been
43  * specified.
44  ******************************************************************************/
cm_get_context_by_index(unsigned int cpu_idx,unsigned int security_state)45 void *cm_get_context_by_index(unsigned int cpu_idx,
46 				unsigned int security_state)
47 {
48 	assert(sec_state_is_valid(security_state));
49 
50 	return get_cpu_data_by_index(cpu_idx, cpu_context[security_state]);
51 }
52 
53 /*******************************************************************************
54  * This function sets the pointer to the current 'cpu_context' structure for the
55  * specified security state for the CPU identified by CPU index.
56  ******************************************************************************/
cm_set_context_by_index(unsigned int cpu_idx,void * context,unsigned int security_state)57 void cm_set_context_by_index(unsigned int cpu_idx, void *context,
58 				unsigned int security_state)
59 {
60 	assert(sec_state_is_valid(security_state));
61 
62 	set_cpu_data_by_index(cpu_idx, cpu_context[security_state], context);
63 }
64