xref: /rk3399_ARM-atf/services/std_svc/rmmd/rmmd_private.h (revision 77c2775323a5ff8b77230f05c0cc57f830e9f153)
1*77c27753SZelalem Aweke /*
2*77c27753SZelalem Aweke  * Copyright (c) 2021, ARM Limited and Contributors. All rights reserved.
3*77c27753SZelalem Aweke  *
4*77c27753SZelalem Aweke  * SPDX-License-Identifier: BSD-3-Clause
5*77c27753SZelalem Aweke  */
6*77c27753SZelalem Aweke 
7*77c27753SZelalem Aweke #ifndef RMMD_PRIVATE_H
8*77c27753SZelalem Aweke #define RMMD_PRIVATE_H
9*77c27753SZelalem Aweke 
10*77c27753SZelalem Aweke #include <context.h>
11*77c27753SZelalem Aweke 
12*77c27753SZelalem Aweke /*******************************************************************************
13*77c27753SZelalem Aweke  * Constants that allow assembler code to preserve callee-saved registers of the
14*77c27753SZelalem Aweke  * C runtime context while performing a security state switch.
15*77c27753SZelalem Aweke  ******************************************************************************/
16*77c27753SZelalem Aweke #define RMMD_C_RT_CTX_X19		0x0
17*77c27753SZelalem Aweke #define RMMD_C_RT_CTX_X20		0x8
18*77c27753SZelalem Aweke #define RMMD_C_RT_CTX_X21		0x10
19*77c27753SZelalem Aweke #define RMMD_C_RT_CTX_X22		0x18
20*77c27753SZelalem Aweke #define RMMD_C_RT_CTX_X23		0x20
21*77c27753SZelalem Aweke #define RMMD_C_RT_CTX_X24		0x28
22*77c27753SZelalem Aweke #define RMMD_C_RT_CTX_X25		0x30
23*77c27753SZelalem Aweke #define RMMD_C_RT_CTX_X26		0x38
24*77c27753SZelalem Aweke #define RMMD_C_RT_CTX_X27		0x40
25*77c27753SZelalem Aweke #define RMMD_C_RT_CTX_X28		0x48
26*77c27753SZelalem Aweke #define RMMD_C_RT_CTX_X29		0x50
27*77c27753SZelalem Aweke #define RMMD_C_RT_CTX_X30		0x58
28*77c27753SZelalem Aweke 
29*77c27753SZelalem Aweke #define RMMD_C_RT_CTX_SIZE		0x60
30*77c27753SZelalem Aweke #define RMMD_C_RT_CTX_ENTRIES		(RMMD_C_RT_CTX_SIZE >> DWORD_SHIFT)
31*77c27753SZelalem Aweke 
32*77c27753SZelalem Aweke #ifndef __ASSEMBLER__
33*77c27753SZelalem Aweke #include <stdint.h>
34*77c27753SZelalem Aweke #include <services/rmi_svc.h>
35*77c27753SZelalem Aweke 
36*77c27753SZelalem Aweke typedef enum rmm_state {
37*77c27753SZelalem Aweke 	RMM_STATE_RESET = 0,
38*77c27753SZelalem Aweke 	RMM_STATE_IDLE
39*77c27753SZelalem Aweke } rmm_state_t;
40*77c27753SZelalem Aweke 
41*77c27753SZelalem Aweke /*
42*77c27753SZelalem Aweke  * Data structure used by the RMM dispatcher (RMMD) in EL3 to track context of
43*77c27753SZelalem Aweke  * the RMM at R-EL2.
44*77c27753SZelalem Aweke  */
45*77c27753SZelalem Aweke typedef struct rmmd_rmm_context {
46*77c27753SZelalem Aweke 	uint64_t c_rt_ctx;
47*77c27753SZelalem Aweke 	cpu_context_t cpu_ctx;
48*77c27753SZelalem Aweke 	rmm_state_t state;
49*77c27753SZelalem Aweke } rmmd_rmm_context_t;
50*77c27753SZelalem Aweke 
51*77c27753SZelalem Aweke /* Functions used to enter/exit the RMM synchronously */
52*77c27753SZelalem Aweke uint64_t rmmd_rmm_sync_entry(rmmd_rmm_context_t *ctx);
53*77c27753SZelalem Aweke __dead2 void rmmd_rmm_sync_exit(uint64_t rc);
54*77c27753SZelalem Aweke 
55*77c27753SZelalem Aweke /* Assembly helpers */
56*77c27753SZelalem Aweke uint64_t rmmd_rmm_enter(uint64_t *c_rt_ctx);
57*77c27753SZelalem Aweke void __dead2 rmmd_rmm_exit(uint64_t c_rt_ctx, uint64_t ret);
58*77c27753SZelalem Aweke 
59*77c27753SZelalem Aweke /* Reference to PM ops for the RMMD */
60*77c27753SZelalem Aweke extern const spd_pm_ops_t rmmd_pm;
61*77c27753SZelalem Aweke 
62*77c27753SZelalem Aweke #endif /* __ASSEMBLER__ */
63*77c27753SZelalem Aweke 
64*77c27753SZelalem Aweke #endif /* RMMD_PRIVATE_H */
65