xref: /optee_os/core/arch/riscv/kernel/asm-defines.c (revision 12fc37711783247b0d05fdc271ef007f4930767b)
1 // SPDX-License-Identifier: BSD-2-Clause
2 /*
3  * Copyright 2022-2023 NXP
4  */
5 
6 #include <gen-asm-defines.h>
7 #include <kernel/thread.h>
8 #include <kernel/thread_private.h>
9 #include <types_ext.h>
10 
11 DEFINES
12 {
13 	/* struct thread_ctx */
14 	DEFINE(THREAD_CTX_KERN_SP, offsetof(struct thread_ctx, kern_sp));
15 	DEFINE(THREAD_CTX_STACK_VA_END, offsetof(struct thread_ctx,
16 						 stack_va_end));
17 	DEFINE(THREAD_CTX_SIZE, sizeof(struct thread_ctx));
18 
19 	/* struct thread_core_local */
20 	DEFINE(THREAD_CORE_LOCAL_SIZE, sizeof(struct thread_core_local));
21 	DEFINE(THREAD_CORE_LOCAL_HART_ID,
22 	       offsetof(struct thread_core_local, hart_id));
23 	DEFINE(THREAD_CORE_LOCAL_TMP_STACK_VA_END,
24 	       offsetof(struct thread_core_local, tmp_stack_va_end));
25 	DEFINE(THREAD_CORE_LOCAL_CURR_THREAD,
26 	       offsetof(struct thread_core_local, curr_thread));
27 	DEFINE(THREAD_CORE_LOCAL_FLAGS,
28 	       offsetof(struct thread_core_local, flags));
29 	DEFINE(THREAD_CORE_LOCAL_ABT_STACK_VA_END,
30 	       offsetof(struct thread_core_local, abt_stack_va_end));
31 	DEFINE(THREAD_CORE_LOCAL_X10, offsetof(struct thread_core_local, x[0]));
32 
33 	DEFINE(STACK_TMP_GUARD, STACK_CANARY_SIZE / 2 + STACK_TMP_OFFS);
34 
35 	/* struct thread_ctx_regs */
36 	DEFINE(THREAD_CTX_REG_STATUS, offsetof(struct thread_ctx_regs, status));
37 	DEFINE(THREAD_CTX_REG_RA, offsetof(struct thread_ctx_regs, ra));
38 	DEFINE(THREAD_CTX_REG_SP, offsetof(struct thread_ctx_regs, sp));
39 	DEFINE(THREAD_CTX_REG_T0, offsetof(struct thread_ctx_regs, t0));
40 	DEFINE(THREAD_CTX_REG_S0, offsetof(struct thread_ctx_regs, s0));
41 	DEFINE(THREAD_CTX_REG_A0, offsetof(struct thread_ctx_regs, a0));
42 	DEFINE(THREAD_CTX_REG_S2, offsetof(struct thread_ctx_regs, s2));
43 	DEFINE(THREAD_CTX_REG_T3, offsetof(struct thread_ctx_regs, t3));
44 	DEFINE(THREAD_CTX_REGS_SIZE, sizeof(struct thread_ctx_regs));
45 
46 	/* struct thread_user_mode_rec */
47 	DEFINE(THREAD_USER_MODE_REC_CTX_REGS_PTR,
48 	       offsetof(struct thread_user_mode_rec, ctx_regs_ptr));
49 	DEFINE(THREAD_USER_MODE_REC_X1,
50 	       offsetof(struct thread_user_mode_rec, x[0]));
51 	DEFINE(THREAD_USER_MODE_REC_X8,
52 	       offsetof(struct thread_user_mode_rec, x[4]));
53 	DEFINE(THREAD_USER_MODE_REC_X18,
54 	       offsetof(struct thread_user_mode_rec, x[6]));
55 	DEFINE(THREAD_USER_MODE_REC_SIZE, sizeof(struct thread_user_mode_rec));
56 
57 	/* struct thread_trap_regs */
58 	DEFINE(THREAD_TRAP_REG_SP, offsetof(struct thread_trap_regs, sp));
59 	DEFINE(THREAD_TRAP_REG_RA, offsetof(struct thread_trap_regs, ra));
60 	DEFINE(THREAD_TRAP_REG_GP, offsetof(struct thread_trap_regs, gp));
61 	DEFINE(THREAD_TRAP_REG_TP, offsetof(struct thread_trap_regs, tp));
62 	DEFINE(THREAD_TRAP_REG_T0, offsetof(struct thread_trap_regs, t0));
63 	DEFINE(THREAD_TRAP_REG_A0, offsetof(struct thread_trap_regs, a0));
64 	DEFINE(THREAD_TRAP_REG_T3, offsetof(struct thread_trap_regs, t3));
65 	DEFINE(THREAD_TRAP_REG_EPC, offsetof(struct thread_trap_regs, epc));
66 	DEFINE(THREAD_TRAP_REG_STATUS,
67 	       offsetof(struct thread_trap_regs, status));
68 	DEFINE(THREAD_TRAP_REGS_SIZE, sizeof(struct thread_trap_regs));
69 
70 	/* struct thread_scall_regs */
71 	DEFINE(THREAD_SCALL_REG_STATUS,
72 	       offsetof(struct thread_scall_regs, status));
73 	DEFINE(THREAD_SCALL_REG_RA, offsetof(struct thread_scall_regs, ra));
74 	DEFINE(THREAD_SCALL_REG_SP, offsetof(struct thread_scall_regs, sp));
75 	DEFINE(THREAD_SCALL_REG_A0, offsetof(struct thread_scall_regs, a0));
76 	DEFINE(THREAD_SCALL_REGS_SIZE, sizeof(struct thread_scall_regs));
77 }
78