Fault reflection and blocking page faults (XCC)
[akaros.git] / kern / arch / riscv / ros / trapframe.h
index 23092eb..57a4e9c 100644 (file)
@@ -1,21 +1,35 @@
-#ifndef ROS_INCLUDE_ARCH_TRAPFRAME_H
-#define ROS_INCLUDE_ARCH_TRAPFRAME_H
+#ifndef ROS_INC_ARCH_TRAPFRAME_H
+#define ROS_INC_ARCH_TRAPFRAME_H
+
+#ifndef ROS_INC_TRAPFRAME_H
+#error "Do not include include ros/arch/trapframe.h directly"
+#endif
 
 #include <ros/common.h>
 #include <stdint.h>
 
-typedef struct trapframe
+struct hw_trapframe
 {
   uintptr_t gpr[32];
   uintptr_t sr;
   uintptr_t epc;
   uintptr_t badvaddr;
   long cause;
-} trapframe_t;
+};
+
+struct sw_trapframe {
+       /* TODO */
+};
+
+#define GPR_RA 1
+#define GPR_SP 14
+#define GPR_A0 18
+#define GPR_A1 19
 
-/* TODO: consider using a user-space specific trapframe, since they don't need
- * all of this information.  Will do that eventually, but til then: */
-#define user_trapframe trapframe
+#error "fix this #define"
+/* this is an error flag, reflected back in faults.  similar to flags that say
+ * if a PF was a write fault, read fault, or user fault. */
+#define PF_VMR_BACKED (1 << 31)
 
 typedef struct ancillary_state
 {
@@ -23,4 +37,4 @@ typedef struct ancillary_state
        uint32_t fsr;
 } ancillary_state_t;
 
-#endif /* !ROS_INCLUDE_ARCH_TRAPFRAME_H */
+#endif /* ROS_INC_ARCH_TRAPFRAME_H */