VSF Documented
rv_generic.h
Go to the documentation of this file.
1/*****************************************************************************
2 * Copyright(C)2009-2022 by VSF Team *
3 * *
4 * Licensed under the Apache License, Version 2.0 (the "License"); *
5 * you may not use this file except in compliance with the License. *
6 * You may obtain a copy of the License at *
7 * *
8 * http://www.apache.org/licenses/LICENSE-2.0 *
9 * *
10 * Unless required by applicable law or agreed to in writing, software *
11 * distributed under the License is distributed on an "AS IS" BASIS, *
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
13 * See the License for the specific language governing permissions and *
14 * limitations under the License. *
15 * *
16 ****************************************************************************/
17
18#ifndef __RV_GENERIC_H__
19#define __RV_GENERIC_H__
20
21/*============================ INCLUDES ======================================*/
22
23#include "hal/vsf_hal_cfg.h"
24
25#define __VSF_HEADER_ONLY_SHOW_ARCH_INFO__
26#include "hal/driver/driver.h"
27#undef __VSF_HEADER_ONLY_SHOW_ARCH_INFO__
28
29#ifdef __cplusplus
30extern "C" {
31#endif
32
33/*============================ MACROS ========================================*/
34
35#ifndef __BYTE_ORDER
36# define __BYTE_ORDER __LITTLE_ENDIAN
37#endif
38
39#ifndef __VSF_ARCH_SYSTIMER_BITS
40# define __VSF_ARCH_SYSTIMER_BITS 64
41#endif
42
43// software interrupt provided by arch
44#ifndef VSF_ARCH_SWI_NUM
45# define VSF_ARCH_SWI_NUM 0
46#endif
47
48// callstack trace is disabled on RiscV by default.
49// To use callstack trace, please add -fno-omit-frame-pointer to compile options
50#ifndef VSF_ARCH_CFG_CALLSTACK_TRACE
51# define VSF_ARCH_CFG_CALLSTACK_TRACE DISABLED
52#endif
53
54/*============================ MACROFIED FUNCTIONS ===========================*/
55
56#define vsf_arch_wakeup()
57
58/*============================ TYPES =========================================*/
59
60#if VSF_SYSTIMER_CFG_IMPL_MODE != VSF_SYSTIMER_CFG_IMPL_NONE
61# if VSF_SYSTIMER_CFG_IMPL_MODE == VSF_SYSTIMER_IMPL_TICK_MODE
64# else
66# endif
67#endif
69
70/*============================ GLOBAL VARIABLES ==============================*/
71/*============================ LOCAL VARIABLES ===============================*/
72/*============================ PROTOTYPES ====================================*/
73
74static VSF_CAL_ALWAYS_INLINE vsf_gint_state_t vsf_get_interrupt(void)
75{
76 vsf_gint_state_t result;
77 __asm volatile("csrr %0, mstatus" : "=r"(result) : );
78 return result;
79}
80
81static VSF_CAL_ALWAYS_INLINE vsf_gint_state_t vsf_set_interrupt(vsf_gint_state_t level)
82{
83 vsf_gint_state_t result;
84 __asm volatile("csrrs %0, mstatus, %1" : "=r"(result) : "r"(level));
85 return result & 8;
86}
87
88static VSF_CAL_ALWAYS_INLINE vsf_gint_state_t vsf_disable_interrupt(void)
89{
90 vsf_gint_state_t result;
91 __asm volatile("csrrci %0, mstatus, 8" : "=r"(result) :);
92 return result & 8;
93}
94
95static VSF_CAL_ALWAYS_INLINE vsf_gint_state_t vsf_enable_interrupt(void)
96{
97 vsf_gint_state_t result;
98 __asm volatile("csrrsi %0, mstatus, 8" : "=r"(result) :);
99 return result & 8;
100}
101
102static VSF_CAL_ALWAYS_INLINE void vsf_arch_sleep(uint_fast32_t mode)
103{
104 __asm volatile("wfi" : :);
105}
106
107static VSF_CAL_ALWAYS_INLINE void vsf_arch_set_stack(uintptr_t stack, uint32_t stack_size)
108{
109 __asm volatile("mv sp, %0" : : "r"(stack) : );
110}
111
112static VSF_CAL_ALWAYS_INLINE uintptr_t vsf_arch_get_stack(void)
113{
114 uintptr_t result;
115 __asm volatile("mv %0, sp" : "=r"(result) : );
116 return result;
117}
118
119#if VSF_ARCH_CFG_CALLSTACK_TRACE == ENABLED
121extern uint_fast16_t vsf_arch_get_callstack(uintptr_t sp, uintptr_t *callstack, uint_fast16_t callstack_num);
122#endif
123
124#ifdef __cplusplus
125}
126#endif
127
128#endif
129/* EOF */
130
vsf_gint_state_t vsf_disable_interrupt(void)
Definition arm9_generic.c:176
vsf_gint_state_t vsf_get_interrupt(void)
Definition arm9_generic.c:164
void vsf_arch_sleep(uint32_t mode)
Definition arm9_generic.c:193
vsf_gint_state_t vsf_enable_interrupt(void)
Definition arm9_generic.c:181
vsf_gint_state_t vsf_set_interrupt(vsf_gint_state_t level)
Definition arm9_generic.c:169
bool
Definition type.h:60
uint64_t vsf_systimer_tick_t
Definition cortex_a_generic.h:70
int32_t vsf_systimer_tick_signed_t
Definition mcs51_generic.h:55
uint32_t vsf_gint_state_t
Definition rv_generic.h:68
void vsf_arch_add_text_region(vsf_arch_text_region_t *region)
Definition cortex_m_generic.c:582
uint_fast16_t vsf_arch_get_callstack(uintptr_t sp, uintptr_t *callstack, uint_fast16_t callstack_num)
Definition cortex_m_generic.c:592
uint32_t uintptr_t
Definition stdint.h:38
unsigned uint32_t
Definition stdint.h:9
int int32_t
Definition stdint.h:8
unsigned int uint_fast32_t
Definition stdint.h:27
unsigned long long uint64_t
Definition stdint.h:11
unsigned short uint_fast16_t
Definition stdint.h:25
Definition vsf_arch_abstraction.h:67
Generated from commit: vsfteam/vsf@85be636