xref: /optee_os/core/arch/riscv/kernel/asm-defines.c (revision c98d80112d6d52b3a8b2ab403232b5265c13046b)
12727b643SMarouene Boubakri // SPDX-License-Identifier: BSD-2-Clause
22727b643SMarouene Boubakri /*
32727b643SMarouene Boubakri  * Copyright 2022-2023 NXP
42727b643SMarouene Boubakri  */
52727b643SMarouene Boubakri 
62727b643SMarouene Boubakri #include <kernel/thread.h>
72727b643SMarouene Boubakri #include <kernel/thread_private.h>
8d843ed62SMarouene Boubakri #include <gen-asm-defines.h>
9d843ed62SMarouene Boubakri #include <kernel/boot.h>
10d843ed62SMarouene Boubakri #include <mm/core_memprot.h>
11d843ed62SMarouene Boubakri #include <mm/core_mmu.h>
12d843ed62SMarouene Boubakri #include <mm/core_mmu_arch.h>
132727b643SMarouene Boubakri #include <types_ext.h>
142727b643SMarouene Boubakri 
152727b643SMarouene Boubakri DEFINES
162727b643SMarouene Boubakri {
172727b643SMarouene Boubakri 	/* struct thread_ctx */
182727b643SMarouene Boubakri 	DEFINE(THREAD_CTX_KERN_SP, offsetof(struct thread_ctx, kern_sp));
192727b643SMarouene Boubakri 	DEFINE(THREAD_CTX_STACK_VA_END, offsetof(struct thread_ctx,
202727b643SMarouene Boubakri 						 stack_va_end));
212727b643SMarouene Boubakri 	DEFINE(THREAD_CTX_SIZE, sizeof(struct thread_ctx));
222727b643SMarouene Boubakri 
232727b643SMarouene Boubakri 	/* struct thread_core_local */
242727b643SMarouene Boubakri 	DEFINE(THREAD_CORE_LOCAL_SIZE, sizeof(struct thread_core_local));
252727b643SMarouene Boubakri 	DEFINE(THREAD_CORE_LOCAL_HART_ID,
262727b643SMarouene Boubakri 	       offsetof(struct thread_core_local, hart_id));
272e27ec6cSYu-Chien Peter Lin 	DEFINE(THREAD_CORE_LOCAL_HART_INDEX,
282e27ec6cSYu-Chien Peter Lin 	       offsetof(struct thread_core_local, hart_index));
292727b643SMarouene Boubakri 	DEFINE(THREAD_CORE_LOCAL_TMP_STACK_VA_END,
302727b643SMarouene Boubakri 	       offsetof(struct thread_core_local, tmp_stack_va_end));
312727b643SMarouene Boubakri 	DEFINE(THREAD_CORE_LOCAL_CURR_THREAD,
322727b643SMarouene Boubakri 	       offsetof(struct thread_core_local, curr_thread));
332727b643SMarouene Boubakri 	DEFINE(THREAD_CORE_LOCAL_FLAGS,
342727b643SMarouene Boubakri 	       offsetof(struct thread_core_local, flags));
352727b643SMarouene Boubakri 	DEFINE(THREAD_CORE_LOCAL_ABT_STACK_VA_END,
362727b643SMarouene Boubakri 	       offsetof(struct thread_core_local, abt_stack_va_end));
374fe3a3f7SAlvin Chang 	DEFINE(THREAD_CORE_LOCAL_X0, offsetof(struct thread_core_local, x[0]));
384fe3a3f7SAlvin Chang 	DEFINE(THREAD_CORE_LOCAL_X1, offsetof(struct thread_core_local, x[1]));
392727b643SMarouene Boubakri 
402727b643SMarouene Boubakri 	DEFINE(STACK_TMP_GUARD, STACK_CANARY_SIZE / 2 + STACK_TMP_OFFS);
41b9807372SAlvin Chang 	DEFINE(__STACK_CANARY_SIZE, STACK_CANARY_SIZE);
422727b643SMarouene Boubakri 
432727b643SMarouene Boubakri 	/* struct thread_ctx_regs */
442727b643SMarouene Boubakri 	DEFINE(THREAD_CTX_REG_STATUS, offsetof(struct thread_ctx_regs, status));
4509653bcaSAlvin Chang 	DEFINE(THREAD_CTX_REG_EPC, offsetof(struct thread_ctx_regs, epc));
4609653bcaSAlvin Chang 	DEFINE(THREAD_CTX_REG_IE, offsetof(struct thread_ctx_regs, ie));
472727b643SMarouene Boubakri 	DEFINE(THREAD_CTX_REG_RA, offsetof(struct thread_ctx_regs, ra));
482727b643SMarouene Boubakri 	DEFINE(THREAD_CTX_REG_SP, offsetof(struct thread_ctx_regs, sp));
495e26ef8fSAlvin Chang 	DEFINE(THREAD_CTX_REG_GP, offsetof(struct thread_ctx_regs, gp));
505e26ef8fSAlvin Chang 	DEFINE(THREAD_CTX_REG_TP, offsetof(struct thread_ctx_regs, tp));
512727b643SMarouene Boubakri 	DEFINE(THREAD_CTX_REG_T0, offsetof(struct thread_ctx_regs, t0));
522727b643SMarouene Boubakri 	DEFINE(THREAD_CTX_REG_S0, offsetof(struct thread_ctx_regs, s0));
532727b643SMarouene Boubakri 	DEFINE(THREAD_CTX_REG_A0, offsetof(struct thread_ctx_regs, a0));
542727b643SMarouene Boubakri 	DEFINE(THREAD_CTX_REG_S2, offsetof(struct thread_ctx_regs, s2));
552727b643SMarouene Boubakri 	DEFINE(THREAD_CTX_REG_T3, offsetof(struct thread_ctx_regs, t3));
562727b643SMarouene Boubakri 	DEFINE(THREAD_CTX_REGS_SIZE, sizeof(struct thread_ctx_regs));
572727b643SMarouene Boubakri 
582727b643SMarouene Boubakri 	/* struct thread_user_mode_rec */
592727b643SMarouene Boubakri 	DEFINE(THREAD_USER_MODE_REC_CTX_REGS_PTR,
602727b643SMarouene Boubakri 	       offsetof(struct thread_user_mode_rec, ctx_regs_ptr));
619df67cd4SAlvin Chang 	DEFINE(THREAD_USER_MODE_REC_RA,
622727b643SMarouene Boubakri 	       offsetof(struct thread_user_mode_rec, x[0]));
639df67cd4SAlvin Chang 	DEFINE(THREAD_USER_MODE_REC_S0,
649df67cd4SAlvin Chang 	       offsetof(struct thread_user_mode_rec, x[1]));
659df67cd4SAlvin Chang 	DEFINE(THREAD_USER_MODE_REC_S2,
66c9c3eb4bSAlvin Chang 	       offsetof(struct thread_user_mode_rec, x[3]));
672727b643SMarouene Boubakri 	DEFINE(THREAD_USER_MODE_REC_SIZE, sizeof(struct thread_user_mode_rec));
682727b643SMarouene Boubakri 
695e26ef8fSAlvin Chang 	/* struct thread_abort_regs */
705e26ef8fSAlvin Chang 	DEFINE(THREAD_ABT_REG_RA, offsetof(struct thread_abort_regs, ra));
715e26ef8fSAlvin Chang 	DEFINE(THREAD_ABT_REG_SP, offsetof(struct thread_abort_regs, sp));
725e26ef8fSAlvin Chang 	DEFINE(THREAD_ABT_REG_GP, offsetof(struct thread_abort_regs, gp));
735e26ef8fSAlvin Chang 	DEFINE(THREAD_ABT_REG_TP, offsetof(struct thread_abort_regs, tp));
745e26ef8fSAlvin Chang 	DEFINE(THREAD_ABT_REG_T0, offsetof(struct thread_abort_regs, t0));
755e26ef8fSAlvin Chang 	DEFINE(THREAD_ABT_REG_S0, offsetof(struct thread_abort_regs, s0));
765e26ef8fSAlvin Chang 	DEFINE(THREAD_ABT_REG_A0, offsetof(struct thread_abort_regs, a0));
775e26ef8fSAlvin Chang 	DEFINE(THREAD_ABT_REG_S2, offsetof(struct thread_abort_regs, s2));
785e26ef8fSAlvin Chang 	DEFINE(THREAD_ABT_REG_T3, offsetof(struct thread_abort_regs, t3));
795e26ef8fSAlvin Chang 	DEFINE(THREAD_ABT_REG_EPC, offsetof(struct thread_abort_regs, epc));
805e26ef8fSAlvin Chang 	DEFINE(THREAD_ABT_REG_STATUS,
815e26ef8fSAlvin Chang 	       offsetof(struct thread_abort_regs, status));
825e26ef8fSAlvin Chang 	DEFINE(THREAD_ABT_REG_IE, offsetof(struct thread_abort_regs, ie));
835e26ef8fSAlvin Chang 	DEFINE(THREAD_ABT_REG_CAUSE, offsetof(struct thread_abort_regs, cause));
845e26ef8fSAlvin Chang 	DEFINE(THREAD_ABT_REG_TVAL, offsetof(struct thread_abort_regs, tval));
855e26ef8fSAlvin Chang 	DEFINE(THREAD_ABT_REGS_SIZE, sizeof(struct thread_abort_regs));
862727b643SMarouene Boubakri 
872727b643SMarouene Boubakri 	/* struct thread_scall_regs */
882727b643SMarouene Boubakri 	DEFINE(THREAD_SCALL_REG_RA, offsetof(struct thread_scall_regs, ra));
892727b643SMarouene Boubakri 	DEFINE(THREAD_SCALL_REG_SP, offsetof(struct thread_scall_regs, sp));
905e26ef8fSAlvin Chang 	DEFINE(THREAD_SCALL_REG_GP, offsetof(struct thread_scall_regs, gp));
915e26ef8fSAlvin Chang 	DEFINE(THREAD_SCALL_REG_TP, offsetof(struct thread_scall_regs, tp));
925e26ef8fSAlvin Chang 	DEFINE(THREAD_SCALL_REG_T0, offsetof(struct thread_scall_regs, t0));
932727b643SMarouene Boubakri 	DEFINE(THREAD_SCALL_REG_A0, offsetof(struct thread_scall_regs, a0));
945e26ef8fSAlvin Chang 	DEFINE(THREAD_SCALL_REG_T3, offsetof(struct thread_scall_regs, t3));
955e26ef8fSAlvin Chang 	DEFINE(THREAD_SCALL_REG_EPC, offsetof(struct thread_scall_regs, epc));
965e26ef8fSAlvin Chang 	DEFINE(THREAD_SCALL_REG_STATUS,
975e26ef8fSAlvin Chang 	       offsetof(struct thread_scall_regs, status));
985e26ef8fSAlvin Chang 	DEFINE(THREAD_SCALL_REG_IE, offsetof(struct thread_scall_regs, ie));
992727b643SMarouene Boubakri 	DEFINE(THREAD_SCALL_REGS_SIZE, sizeof(struct thread_scall_regs));
100d843ed62SMarouene Boubakri 
101d843ed62SMarouene Boubakri 	/* struct core_mmu_config */
102d843ed62SMarouene Boubakri 	DEFINE(CORE_MMU_CONFIG_SIZE, sizeof(struct core_mmu_config));
103d843ed62SMarouene Boubakri 	DEFINE(CORE_MMU_CONFIG_SATP,
1044c4387dcSAlvin Chang 	       offsetof(struct core_mmu_config, satp[0]));
1054c4387dcSAlvin Chang 	DEFINE(CORE_MMU_CONFIG_SATP_SIZE, sizeof(unsigned long));
106*c98d8011SYu-Chien Peter Lin 	DEFINE(CORE_MMU_CONFIG_MAP_OFFSET,
107*c98d8011SYu-Chien Peter Lin 	       offsetof(struct core_mmu_config, map_offset));
1080cbfd093SAlvin Chang 
1090cbfd093SAlvin Chang 	/* struct thread_abi_args */
1100cbfd093SAlvin Chang 	DEFINE(THREAD_ABI_ARGS_A0, offsetof(struct thread_abi_args, a0));
1110cbfd093SAlvin Chang 	DEFINE(THREAD_ABI_ARGS_SIZE, sizeof(struct thread_abi_args));
1122727b643SMarouene Boubakri }
113