All local system calls are asynchronous (XCC)
[akaros.git] / kern / include / trap.h
index 05ca4d2..c45afce 100644 (file)
@@ -47,6 +47,11 @@ void restore_fp_state(struct ancillary_state *silly);
 void set_stack_top(uintptr_t stacktop);
 uintptr_t get_stack_top(void);
 
+/* It's important that this is inline and that tf is not a stack variable */
+static inline void save_kernel_tf(struct trapframe *tf)
+                   __attribute__((always_inline));
+void pop_kernel_tf(struct trapframe *tf) __attribute__((noreturn));
+
 /* Kernel messages.  Each arch implements them in their own way.  Both should be
  * guaranteeing in-order delivery.  Kept here in trap.h, since sparc is using
  * trap.h for KMs.  Eventually, both arches will use the same implementation.
@@ -85,6 +90,6 @@ typedef struct kernel_message NTPTV(a0t) NTPTV(a1t) NTPTV(a2t) kernel_message_t;
 
 uint32_t send_kernel_message(uint32_t dst, amr_t pc, TV(a0t) arg0, TV(a1t) arg1,
                              TV(a2t) arg2, int type);
-void process_routine_kmsg(void);
+void process_routine_kmsg(struct trapframe *tf);
 
 #endif /* ROS_KERN_TRAP_H */