Palacios Public Git Repository

To checkout Palacios execute

  git clone http://v3vee.org/palacios/palacios.web/palacios.git
This will give you the master branch. You probably want the devel branch or one of the release branches. To switch to the devel branch, simply execute
  cd palacios
  git checkout --track -b devel origin/devel
The other branches are similar.


Extensions to HVM ROS userspace library corresponding to HVM enhancements
[palacios.git] / guest / linux / hvm-ros / v3_hvm_ros_user.h
index de3b2e1..6ac99a7 100644 (file)
 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