/* * Copyright (c) 2017 Intel Corporation * * SPDX-License-Identifier: Apache-2.0 */ /** * @file * @brief Per-arch thread definition * * This file contains definitions for * * struct _thread_arch * struct _callee_saved * * necessary to instantiate instances of struct k_thread. */ #ifndef ZEPHYR_INCLUDE_ARCH_RISCV_THREAD_H_ #define ZEPHYR_INCLUDE_ARCH_RISCV_THREAD_H_ #ifndef _ASMLANGUAGE #include #if !defined(RV_FP_TYPE) && defined(CONFIG_FPU) && defined(CONFIG_FPU_SHARING) #ifdef CONFIG_CPU_HAS_FPU_DOUBLE_PRECISION #define RV_FP_TYPE u64_t #else #define RV_FP_TYPE u32_t #endif #endif /* * The following structure defines the list of registers that need to be * saved/restored when a cooperative context switch occurs. */ struct _callee_saved { ulong_t sp; /* Stack pointer, (x2 register) */ ulong_t s0; /* saved register/frame pointer */ ulong_t s1; /* saved register */ ulong_t s2; /* saved register */ ulong_t s3; /* saved register */ ulong_t s4; /* saved register */ ulong_t s5; /* saved register */ ulong_t s6; /* saved register */ ulong_t s7; /* saved register */ ulong_t s8; /* saved register */ ulong_t s9; /* saved register */ ulong_t s10; /* saved register */ ulong_t s11; /* saved register */ #if defined(CONFIG_FPU) && defined(CONFIG_FPU_SHARING) u32_t fcsr; /* Control and status register */ RV_FP_TYPE fs0; /* saved floating-point register */ RV_FP_TYPE fs1; /* saved floating-point register */ RV_FP_TYPE fs2; /* saved floating-point register */ RV_FP_TYPE fs3; /* saved floating-point register */ RV_FP_TYPE fs4; /* saved floating-point register */ RV_FP_TYPE fs5; /* saved floating-point register */ RV_FP_TYPE fs6; /* saved floating-point register */ RV_FP_TYPE fs7; /* saved floating-point register */ RV_FP_TYPE fs8; /* saved floating-point register */ RV_FP_TYPE fs9; /* saved floating-point register */ RV_FP_TYPE fs10; /* saved floating-point register */ RV_FP_TYPE fs11; /* saved floating-point register */ #endif }; typedef struct _callee_saved _callee_saved_t; struct _thread_arch { u32_t swap_return_value; /* Return value of z_swap() */ }; typedef struct _thread_arch _thread_arch_t; #endif /* _ASMLANGUAGE */ #endif /* ZEPHYR_INCLUDE_ARCH_RISCV_THREAD_H_ */