xref: /optee_os/core/arch/riscv/kernel/asm-defines.c (revision 273a583ea99627ff3b8ccbbaedbdacecd0909b2e)
1 // SPDX-License-Identifier: BSD-2-Clause
2 /*
3  * Copyright 2022-2023 NXP
4  */
5 
6 #include <kernel/thread.h>
7 #include <kernel/thread_private.h>
8 #include <gen-asm-defines.h>
9 #include <kernel/boot.h>
10 #include <mm/core_memprot.h>
11 #include <mm/core_mmu.h>
12 #include <mm/core_mmu_arch.h>
13 #include <types_ext.h>
14 
15 DEFINES
16 {
17 	/* struct thread_ctx */
18 	DEFINE(THREAD_CTX_KERN_SP, offsetof(struct thread_ctx, kern_sp));
19 	DEFINE(THREAD_CTX_STACK_VA_END, offsetof(struct thread_ctx,
20 						 stack_va_end));
21 	DEFINE(THREAD_CTX_SIZE, sizeof(struct thread_ctx));
22 
23 	/* struct thread_core_local */
24 	DEFINE(THREAD_CORE_LOCAL_SIZE, sizeof(struct thread_core_local));
25 	DEFINE(THREAD_CORE_LOCAL_HART_ID,
26 	       offsetof(struct thread_core_local, hart_id));
27 	DEFINE(THREAD_CORE_LOCAL_HART_INDEX,
28 	       offsetof(struct thread_core_local, hart_index));
29 	DEFINE(THREAD_CORE_LOCAL_TMP_STACK_VA_END,
30 	       offsetof(struct thread_core_local, tmp_stack_va_end));
31 	DEFINE(THREAD_CORE_LOCAL_CURR_THREAD,
32 	       offsetof(struct thread_core_local, curr_thread));
33 	DEFINE(THREAD_CORE_LOCAL_FLAGS,
34 	       offsetof(struct thread_core_local, flags));
35 	DEFINE(THREAD_CORE_LOCAL_ABT_STACK_VA_END,
36 	       offsetof(struct thread_core_local, abt_stack_va_end));
37 	DEFINE(THREAD_CORE_LOCAL_X0, offsetof(struct thread_core_local, x[0]));
38 	DEFINE(THREAD_CORE_LOCAL_X1, offsetof(struct thread_core_local, x[1]));
39 
40 	DEFINE(STACK_TMP_GUARD, STACK_CANARY_SIZE / 2 + STACK_TMP_OFFS);
41 	DEFINE(__STACK_CANARY_SIZE, STACK_CANARY_SIZE);
42 
43 	/* struct thread_ctx_regs */
44 	DEFINE(THREAD_CTX_REG_STATUS, offsetof(struct thread_ctx_regs, status));
45 	DEFINE(THREAD_CTX_REG_EPC, offsetof(struct thread_ctx_regs, epc));
46 	DEFINE(THREAD_CTX_REG_IE, offsetof(struct thread_ctx_regs, ie));
47 	DEFINE(THREAD_CTX_REG_RA, offsetof(struct thread_ctx_regs, ra));
48 	DEFINE(THREAD_CTX_REG_SP, offsetof(struct thread_ctx_regs, sp));
49 	DEFINE(THREAD_CTX_REG_GP, offsetof(struct thread_ctx_regs, gp));
50 	DEFINE(THREAD_CTX_REG_TP, offsetof(struct thread_ctx_regs, tp));
51 	DEFINE(THREAD_CTX_REG_T0, offsetof(struct thread_ctx_regs, t0));
52 	DEFINE(THREAD_CTX_REG_S0, offsetof(struct thread_ctx_regs, s0));
53 	DEFINE(THREAD_CTX_REG_A0, offsetof(struct thread_ctx_regs, a0));
54 	DEFINE(THREAD_CTX_REG_S2, offsetof(struct thread_ctx_regs, s2));
55 	DEFINE(THREAD_CTX_REG_T3, offsetof(struct thread_ctx_regs, t3));
56 	DEFINE(THREAD_CTX_REGS_SIZE, sizeof(struct thread_ctx_regs));
57 
58 	/* struct thread_user_mode_rec */
59 	DEFINE(THREAD_USER_MODE_REC_CTX_REGS_PTR,
60 	       offsetof(struct thread_user_mode_rec, ctx_regs_ptr));
61 	DEFINE(THREAD_USER_MODE_REC_RA,
62 	       offsetof(struct thread_user_mode_rec, x[0]));
63 	DEFINE(THREAD_USER_MODE_REC_S0,
64 	       offsetof(struct thread_user_mode_rec, x[1]));
65 	DEFINE(THREAD_USER_MODE_REC_S2,
66 	       offsetof(struct thread_user_mode_rec, x[3]));
67 	DEFINE(THREAD_USER_MODE_REC_SIZE, sizeof(struct thread_user_mode_rec));
68 
69 	/* struct thread_abort_regs */
70 	DEFINE(THREAD_ABT_REG_RA, offsetof(struct thread_abort_regs, ra));
71 	DEFINE(THREAD_ABT_REG_SP, offsetof(struct thread_abort_regs, sp));
72 	DEFINE(THREAD_ABT_REG_GP, offsetof(struct thread_abort_regs, gp));
73 	DEFINE(THREAD_ABT_REG_TP, offsetof(struct thread_abort_regs, tp));
74 	DEFINE(THREAD_ABT_REG_T0, offsetof(struct thread_abort_regs, t0));
75 	DEFINE(THREAD_ABT_REG_S0, offsetof(struct thread_abort_regs, s0));
76 	DEFINE(THREAD_ABT_REG_A0, offsetof(struct thread_abort_regs, a0));
77 	DEFINE(THREAD_ABT_REG_S2, offsetof(struct thread_abort_regs, s2));
78 	DEFINE(THREAD_ABT_REG_T3, offsetof(struct thread_abort_regs, t3));
79 	DEFINE(THREAD_ABT_REG_EPC, offsetof(struct thread_abort_regs, epc));
80 	DEFINE(THREAD_ABT_REG_STATUS,
81 	       offsetof(struct thread_abort_regs, status));
82 	DEFINE(THREAD_ABT_REG_IE, offsetof(struct thread_abort_regs, ie));
83 	DEFINE(THREAD_ABT_REG_CAUSE, offsetof(struct thread_abort_regs, cause));
84 	DEFINE(THREAD_ABT_REG_TVAL, offsetof(struct thread_abort_regs, tval));
85 	DEFINE(THREAD_ABT_REGS_SIZE, sizeof(struct thread_abort_regs));
86 
87 	/* struct thread_scall_regs */
88 	DEFINE(THREAD_SCALL_REG_RA, offsetof(struct thread_scall_regs, ra));
89 	DEFINE(THREAD_SCALL_REG_SP, offsetof(struct thread_scall_regs, sp));
90 	DEFINE(THREAD_SCALL_REG_GP, offsetof(struct thread_scall_regs, gp));
91 	DEFINE(THREAD_SCALL_REG_TP, offsetof(struct thread_scall_regs, tp));
92 	DEFINE(THREAD_SCALL_REG_T0, offsetof(struct thread_scall_regs, t0));
93 	DEFINE(THREAD_SCALL_REG_A0, offsetof(struct thread_scall_regs, a0));
94 	DEFINE(THREAD_SCALL_REG_T3, offsetof(struct thread_scall_regs, t3));
95 	DEFINE(THREAD_SCALL_REG_EPC, offsetof(struct thread_scall_regs, epc));
96 	DEFINE(THREAD_SCALL_REG_STATUS,
97 	       offsetof(struct thread_scall_regs, status));
98 	DEFINE(THREAD_SCALL_REG_IE, offsetof(struct thread_scall_regs, ie));
99 	DEFINE(THREAD_SCALL_REGS_SIZE, sizeof(struct thread_scall_regs));
100 
101 	/* struct core_mmu_config */
102 	DEFINE(CORE_MMU_CONFIG_SIZE, sizeof(struct core_mmu_config));
103 	DEFINE(CORE_MMU_CONFIG_SATP,
104 	       offsetof(struct core_mmu_config, satp[0]));
105 	DEFINE(CORE_MMU_CONFIG_SATP_SIZE, sizeof(unsigned long));
106 	DEFINE(CORE_MMU_CONFIG_MAP_OFFSET,
107 	       offsetof(struct core_mmu_config, map_offset));
108 
109 	/* struct thread_abi_args */
110 	DEFINE(THREAD_ABI_ARGS_A0, offsetof(struct thread_abi_args, a0));
111 	DEFINE(THREAD_ABI_ARGS_SIZE, sizeof(struct thread_abi_args));
112 }
113