1 /*
2  * Copyright (c) 2021-2023, Arm Limited and Contributors. All rights reserved.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
7 #ifndef SME_H
8 #define SME_H
9 
10 #include <stdbool.h>
11 #include <context.h>
12 
13 /*
14  * Maximum value of LEN field in SMCR_ELx. This is different than the maximum
15  * supported value which is platform dependent. In the first version of SME the
16  * LEN field is limited to 4 bits but will be expanded in future iterations.
17  * To support different versions, the code that discovers the supported vector
18  * lengths will write the max value into SMCR_ELx then read it back to see how
19  * many bits are implemented.
20  */
21 #define SME_SMCR_LEN_MAX	U(0x1FF)
22 
23 #if ENABLE_SME_FOR_NS
24 void sme_init_el3(void);
25 void sme_init_el2_unused(void);
26 void sme_enable(cpu_context_t *context);
27 void sme_disable(cpu_context_t *context);
28 void sme_enable_per_world(per_world_context_t *per_world_ctx);
29 void sme_disable_per_world(per_world_context_t *per_world_ctx);
30 #else
sme_init_el3(void)31 static inline void sme_init_el3(void)
32 {
33 }
sme_init_el2_unused(void)34 static inline void sme_init_el2_unused(void)
35 {
36 }
sme_enable(cpu_context_t * context)37 static inline void sme_enable(cpu_context_t *context)
38 {
39 }
sme_disable(cpu_context_t * context)40 static inline void sme_disable(cpu_context_t *context)
41 {
42 }
sme_enable_per_world(per_world_context_t * per_world_ctx)43 static inline void sme_enable_per_world(per_world_context_t *per_world_ctx)
44 {
45 }
sme_disable_per_world(per_world_context_t * per_world_ctx)46 static inline void sme_disable_per_world(per_world_context_t *per_world_ctx)
47 {
48 }
49 #endif /* ENABLE_SME_FOR_NS */
50 
51 #endif /* SME_H */
52