diff --git a/services/std_svc/spm_mm/aarch64/spm_helpers.S b/services/std_svc/spm_mm/aarch64/spm_helpers.S index aa35811..2c3aaf7 100644 --- a/services/std_svc/spm_mm/aarch64/spm_helpers.S +++ b/services/std_svc/spm_mm/aarch64/spm_helpers.S @@ -1,11 +1,11 @@ /* - * Copyright (c) 2017, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2017-2019, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ #include -#include "../spm_private.h" +#include "../spm_mm_private.h" .global spm_secure_partition_enter .global spm_secure_partition_exit diff --git a/services/std_svc/spm_mm/spm_main.c b/services/std_svc/spm_mm/spm_main.c index 433e335..14c0038 100644 --- a/services/std_svc/spm_mm/spm_main.c +++ b/services/std_svc/spm_mm/spm_main.c @@ -22,7 +22,7 @@ #include #include -#include "spm_private.h" +#include "spm_mm_private.h" /******************************************************************************* * Secure Partition context information. diff --git a/services/std_svc/spm_mm/spm_mm_private.h b/services/std_svc/spm_mm/spm_mm_private.h new file mode 100644 index 0000000..45b4789 --- /dev/null +++ b/services/std_svc/spm_mm/spm_mm_private.h @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2017-2019, ARM Limited and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef SPM_MM_PRIVATE_H +#define SPM_MM_PRIVATE_H + +#include + +/******************************************************************************* + * Constants that allow assembler code to preserve callee-saved registers of the + * C runtime context while performing a security state switch. + ******************************************************************************/ +#define SP_C_RT_CTX_X19 0x0 +#define SP_C_RT_CTX_X20 0x8 +#define SP_C_RT_CTX_X21 0x10 +#define SP_C_RT_CTX_X22 0x18 +#define SP_C_RT_CTX_X23 0x20 +#define SP_C_RT_CTX_X24 0x28 +#define SP_C_RT_CTX_X25 0x30 +#define SP_C_RT_CTX_X26 0x38 +#define SP_C_RT_CTX_X27 0x40 +#define SP_C_RT_CTX_X28 0x48 +#define SP_C_RT_CTX_X29 0x50 +#define SP_C_RT_CTX_X30 0x58 + +#define SP_C_RT_CTX_SIZE 0x60 +#define SP_C_RT_CTX_ENTRIES (SP_C_RT_CTX_SIZE >> DWORD_SHIFT) + +#ifndef __ASSEMBLER__ + +#include + +#include +#include + +typedef enum sp_state { + SP_STATE_RESET = 0, + SP_STATE_IDLE, + SP_STATE_BUSY +} sp_state_t; + +typedef struct sp_context { + uint64_t c_rt_ctx; + cpu_context_t cpu_ctx; + xlat_ctx_t *xlat_ctx_handle; + + sp_state_t state; + spinlock_t state_lock; +} sp_context_t; + +/* Assembly helpers */ +uint64_t spm_secure_partition_enter(uint64_t *c_rt_ctx); +void __dead2 spm_secure_partition_exit(uint64_t c_rt_ctx, uint64_t ret); + +void spm_sp_setup(sp_context_t *sp_ctx); + +xlat_ctx_t *spm_get_sp_xlat_context(void); + +int32_t spm_memory_attributes_get_smc_handler(sp_context_t *sp_ctx, + uintptr_t base_va); +int spm_memory_attributes_set_smc_handler(sp_context_t *sp_ctx, + u_register_t page_address, + u_register_t pages_count, + u_register_t smc_attributes); + +#endif /* __ASSEMBLER__ */ + +#endif /* SPM_MM_PRIVATE_H */ diff --git a/services/std_svc/spm_mm/spm_private.h b/services/std_svc/spm_mm/spm_private.h deleted file mode 100644 index ba94a4d..0000000 --- a/services/std_svc/spm_mm/spm_private.h +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (c) 2017-2018, ARM Limited and Contributors. All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -#ifndef SPM_PRIVATE_H -#define SPM_PRIVATE_H - -#include - -/******************************************************************************* - * Constants that allow assembler code to preserve callee-saved registers of the - * C runtime context while performing a security state switch. - ******************************************************************************/ -#define SP_C_RT_CTX_X19 0x0 -#define SP_C_RT_CTX_X20 0x8 -#define SP_C_RT_CTX_X21 0x10 -#define SP_C_RT_CTX_X22 0x18 -#define SP_C_RT_CTX_X23 0x20 -#define SP_C_RT_CTX_X24 0x28 -#define SP_C_RT_CTX_X25 0x30 -#define SP_C_RT_CTX_X26 0x38 -#define SP_C_RT_CTX_X27 0x40 -#define SP_C_RT_CTX_X28 0x48 -#define SP_C_RT_CTX_X29 0x50 -#define SP_C_RT_CTX_X30 0x58 - -#define SP_C_RT_CTX_SIZE 0x60 -#define SP_C_RT_CTX_ENTRIES (SP_C_RT_CTX_SIZE >> DWORD_SHIFT) - -#ifndef __ASSEMBLER__ - -#include - -#include -#include - -typedef enum sp_state { - SP_STATE_RESET = 0, - SP_STATE_IDLE, - SP_STATE_BUSY -} sp_state_t; - -typedef struct sp_context { - uint64_t c_rt_ctx; - cpu_context_t cpu_ctx; - xlat_ctx_t *xlat_ctx_handle; - - sp_state_t state; - spinlock_t state_lock; -} sp_context_t; - -/* Assembly helpers */ -uint64_t spm_secure_partition_enter(uint64_t *c_rt_ctx); -void __dead2 spm_secure_partition_exit(uint64_t c_rt_ctx, uint64_t ret); - -void spm_sp_setup(sp_context_t *sp_ctx); - -xlat_ctx_t *spm_get_sp_xlat_context(void); - -int32_t spm_memory_attributes_get_smc_handler(sp_context_t *sp_ctx, - uintptr_t base_va); -int spm_memory_attributes_set_smc_handler(sp_context_t *sp_ctx, - u_register_t page_address, - u_register_t pages_count, - u_register_t smc_attributes); - -#endif /* __ASSEMBLER__ */ - -#endif /* SPM_PRIVATE_H */ diff --git a/services/std_svc/spm_mm/spm_setup.c b/services/std_svc/spm_mm/spm_setup.c index 7d03eb5..2ef35b7 100644 --- a/services/std_svc/spm_mm/spm_setup.c +++ b/services/std_svc/spm_mm/spm_setup.c @@ -18,7 +18,7 @@ #include #include -#include "spm_private.h" +#include "spm_mm_private.h" #include "spm_shim_private.h" /* Setup context of the Secure Partition */ diff --git a/services/std_svc/spm_mm/spm_xlat.c b/services/std_svc/spm_mm/spm_xlat.c index 0c2399c..45fc704 100644 --- a/services/std_svc/spm_mm/spm_xlat.c +++ b/services/std_svc/spm_mm/spm_xlat.c @@ -14,7 +14,7 @@ #include #include -#include "spm_private.h" +#include "spm_mm_private.h" #include "spm_shim_private.h" /* Place translation tables by default along with the ones used by BL31. */