X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?p=palacios.git;a=blobdiff_plain;f=guest%2Flinux%2Fhvm-ros%2Fv3_hvm_ros_user.h;fp=guest%2Flinux%2Fhvm-ros%2Fv3_hvm_ros_user.h;h=6ac99a7a45bb11b2c46dbe6dac07ff1e9d9070a7;hp=de3b2e1f1b8cb5ca9b712367db34d449b8b2af79;hb=15b65ca6d546fbd03cdd7ae72830555e0263e538;hpb=d85300ed95766164d14a7f3b6c1c681b8b9a9c52 diff --git a/guest/linux/hvm-ros/v3_hvm_ros_user.h b/guest/linux/hvm-ros/v3_hvm_ros_user.h index de3b2e1..6ac99a7 100644 --- a/guest/linux/hvm-ros/v3_hvm_ros_user.h +++ b/guest/linux/hvm-ros/v3_hvm_ros_user.h @@ -12,6 +12,10 @@ 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 @@ -25,13 +29,21 @@ int v3_hvm_ros_unregister_signal(); // - 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 @@ -39,7 +51,8 @@ int v3_hvm_ros_unmerge_address_spaces(); // 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 @@ -50,8 +63,15 @@ int v3_hvm_ros_synchronize(); int v3_hvm_ros_invoke_hrt_sync(void *p, int handle_ros_events); int v3_hvm_ros_desynchronize(); -// Signal the HRT from the ROS -// The ROS can call this too, but it shouldn't be necesary +// 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