kconfig: use pkg-config for ncurses detection
[akaros.git] / kern / arch / riscv / trap.h
1 #pragma once
2
3 #ifdef __riscv64
4 # define SIZEOF_HW_TRAPFRAME (36*8)
5 #else
6 # define SIZEOF_HW_TRAPFRAME (36*4)
7 #endif
8
9 #ifndef __ASSEMBLER__
10
11 #ifndef ROS_KERN_TRAP_H
12 #error "Do not include include arch/trap.h directly"
13 #endif
14
15 #include <ros/trapframe.h>
16 #include <arch/arch.h>
17
18 /* Kernel message interrupt vector.  ignored, for the most part */
19 #define I_KERNEL_MSG 255
20 #warning "make sure this poke vector is okay"
21 /* this is for an ipi that just wakes a core, but has no handler (for now) */
22 #define I_POKE_CORE 254
23 #define I_POKE_GUEST 253
24
25 static inline bool in_kernel(struct hw_trapframe *hw_tf)
26 {
27         return hw_tf->sr & SR_PS;
28 }
29
30 static inline void __attribute__((always_inline))
31 set_stack_pointer(uintptr_t sp)
32 {
33         asm volatile("move sp, %0" : : "r"(sp) : "memory");
34 }
35
36 static inline void __attribute__((always_inline))
37 set_frame_pointer(uintptr_t fp)
38 {
39         #warning "brho is just guessing here."
40         asm volatile("move fp, %0" : : "r"(fp) : "memory");
41 }
42
43 void handle_trap(struct hw_trapframe *hw_tf);
44 int emulate_fpu(struct hw_trapframe *hw_tf);
45
46 static inline bool arch_ctx_is_partial(struct user_context *ctx)
47 {
48         return FALSE;
49 }
50
51 static inline void arch_finalize_ctx(struct user_context *ctx)
52 {
53 }
54
55 #endif