Use fprintf() for printing user TFs
[akaros.git] / user / parlib / include / parlib / vcore.h
index 02bbab5..c0be1de 100644 (file)
@@ -6,6 +6,7 @@
 #include <string.h>
 #include <parlib/timing.h>
 #include <parlib/common.h>
+#include <stdio.h>
 
 __BEGIN_DECLS
 
@@ -25,11 +26,14 @@ extern void exit (int __status) __THROW __attribute__ ((__noreturn__));
 #define TRANSITION_STACK_SIZE (TRANSITION_STACK_PAGES*PGSIZE)
 
 /* Defined in vcore.c */
-extern void vcore_entry();
+void __attribute__((noreturn)) vcore_entry(void);
 extern __thread bool __vcore_context;
 extern __thread int __vcoreid;
 extern __thread struct syscall __vcore_one_sysc;       /* see sys_change_vcore */
 
+/* Arch specific entry from the kernel */
+void __attribute__((noreturn)) __kernel_vcore_entry(void);
+
 /* Vcore API functions */
 static inline uint32_t max_vcores(void);
 static inline uint32_t num_vcores(void);
@@ -50,7 +54,8 @@ static inline uint64_t vcore_account_resume_nsec(uint32_t vcoreid);
 static inline uint64_t vcore_account_total_nsec(uint32_t vcoreid);
 void vcore_lib_init(void);
 void vcore_change_to_m(void);
-int vcore_request(long nr_new_vcores);
+void vcore_request_more(long nr_new_vcores);
+void vcore_request_total(long nr_vcores_wanted);
 void vcore_yield(bool preempt_pending);
 void vcore_reenter(void (*entry_func)(void));
 void enable_notifs(uint32_t vcoreid);
@@ -60,8 +65,10 @@ void ensure_vcore_runs(uint32_t vcoreid);
 void cpu_relax_vc(uint32_t vcoreid);
 uint32_t get_vcoreid(void);
 bool check_vcoreid(const char *str, uint32_t vcoreid);
-void print_hw_tf(struct hw_trapframe *tf);
-void print_sw_tf(struct sw_trapframe *sw_tf);
+void __attribute__((noreturn)) vcore_yield_or_restart(void);
+void fprintf_hw_tf(FILE *f, struct hw_trapframe *hw_tf);
+void fprintf_sw_tf(FILE *f, struct sw_trapframe *sw_tf);
+void fprintf_vm_tf(FILE *f, struct vm_trapframe *vm_tf);
 void print_user_context(struct user_context *ctx);
 
 /* This works so long as we don't dlopen parlib (which we never do) */