int v3_hvm_ros_user_init();
int v3_hvm_ros_user_deinit();
+// by default, debugging and other log output goes to STDERR
+// you can change this here
+int v3_hvm_ros_user_set_log(FILE *log);
+// Establish function to be invoked by the VMM
+// to signal activity (basically an interrupt handler)
+// The handler can use the GPRs, but must save/restore
+// any other registers it needs itself. If it goes
+// out of its stack, it's out of luck
+int v3_hvm_ros_register_signal(void (*handler)(uint64_t), void *stack, uint64_t stack_size);
+int v3_hvm_ros_unregister_signal();
+
+// Replace the existing HRT with a new one
+// - this does not boot the new HRT
+// - the intial image is the one given in the .pal config
+int v3_hvm_ros_install_hrt_image(void *image, uint64_t size);
+
+// Reset diffent components of the HVM
+// or the entire HVM. The component immediatly reboots
+typedef enum {RESET_HRT, RESET_ROS, RESET_BOTH} reset_type;
+int v3_hvm_ros_reset(reset_type what);
+
+// Merge address spaces between
+// this ROS process and a compatible HRT
int v3_hvm_ros_merge_address_spaces();
int v3_hvm_ros_unmerge_address_spaces();
+// Reflect this ROS process's GDT into a compatible
+// HRT. This is typically necessary to run
+// code out of the ROS address space in the HRT
+int v3_hvm_ros_mirror_gdt(uint64_t fsbase, uint64_t cpu);
+int v3_hvm_ros_unmiror_gdt();
// Asynchronosus invocation of the HRT using an
// opaque pointer (typically this is a pointer
// arguments. The parallel flag indicates that
// that it will be invoked simulatneously on all
// cores.
-int v3_hvm_ros_invoke_hrt_async(void *p, int parallel);
+int v3_hvm_ros_invoke_hrt_async(void *p, int parallel);
+int v3_hvm_ros_invoke_hrt_async_nowait(void *buf, int par);
// synchronize with HRT via shared location
int v3_hvm_ros_invoke_hrt_sync(void *p, int handle_ros_events);
int v3_hvm_ros_desynchronize();
+// Handle events occuring within the HRT
+// that need to be be handled within the ROS
+struct v3_ros_event;
+int v3_hvm_handle_ros_event(struct v3_ros_event * event);
+int v3_hvm_handle_ros_event_nohcall(struct v3_ros_event * event);
+
+// Signal the ROS process from the ROS process
+// These signals usually are generated by the HRT, but
+// The ROS can also signal itself using the same mechanism
+int v3_hvm_hrt_signal_ros(uint64_t code);
#endif