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