Redefines PTE present vs mapped
[akaros.git] / kern / arch / riscv / riscv.h
index 19a7d51..9bdb660 100644 (file)
@@ -6,39 +6,50 @@
 static __inline void
 lcr3(uintptr_t val)
 {
-  mtpcr(PCR_PTBR, val);
+       mtpcr(PCR_PTBR, val);
 }
 
 static __inline uintptr_t
 rcr3(void)
 {
-  return mfpcr(PCR_PTBR);
+       return mfpcr(PCR_PTBR);
 }
 
 static __inline uintptr_t
 read_pc(void)
 {
-  uintptr_t pc;
-       asm ("rdnpc %0" : "=r"(pc));
-  return pc;
+       uintptr_t pc;
+       asm ("rdpc %0" : "=r"(pc));
+       return pc;
 }
 
-static __inline uintptr_t
-num_cores(void)
+static inline uintptr_t
+read_bp(void)
+{
+       /* frame pointer.  yes, read_bp is a shitty name.  i'll change all of them
+        * to read_fp when you read this and implement the function.  =) */
+       return 0;
+}
+
+static __inline void
+send_ipi(uint32_t who, uint8_t vector)
 {
-       return mfpcr(PCR_NUMCORES);
+       mtpcr(PCR_SEND_IPI, who);
 }
 
 static __inline void
-send_ipi(uint32_t who)
+send_broadcast_ipi(uint8_t vector)
 {
-       mtpcr(PCR_IPI, who);
+#warning "broadcast ipi?"
+       /* num_cpus might not be visible here */
+       for (int i = 0; i < num_cpus; i++)
+               send_ipi(i, vector);
 }
 
 static __inline void
 clear_ipi()
 {
-       mfpcr(PCR_IPI);
+       mtpcr(PCR_CLR_IPI, 0);
 }
 
 #endif