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