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