Warning clean up
[akaros.git] / kern / arch / riscv / riscv.h
1 #ifndef ROS_INC_RISCV_H
2 #define ROS_INC_RISCV_H
3
4 #include <arch/pcr.h>
5
6 static __inline void
7 lcr3(uintptr_t val)
8 {
9         mtpcr(PCR_PTBR, val);
10 }
11
12 static __inline uintptr_t
13 rcr3(void)
14 {
15         return mfpcr(PCR_PTBR);
16 }
17
18 static __inline uintptr_t
19 read_pc(void)
20 {
21         uintptr_t pc;
22         asm ("rdpc %0" : "=r"(pc));
23         return pc;
24 }
25
26 static inline uintptr_t
27 read_bp(void)
28 {
29         /* frame pointer.  yes, read_bp is a shitty name.  i'll change all of them
30          * to read_fp when you read this and implement the function.  =) */
31         return 0;
32 }
33
34 static __inline void
35 send_ipi(uint32_t who, uint8_t vector)
36 {
37         mtpcr(PCR_SEND_IPI, who);
38 }
39
40 static __inline void
41 send_broadcast_ipi(uint8_t vector)
42 {
43 #warning "broadcast ipi?"
44         /* num_cpus might not be visible here */
45         for (int i = 0; i < num_cpus; i++)
46                 send_ipi(i, vector);
47 }
48
49 static __inline void
50 clear_ipi()
51 {
52         mtpcr(PCR_CLR_IPI, 0);
53 }
54
55 #endif