X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fpalacios%2Fvmm_config.c;h=25d8b23f011d37a13cfb06993e8218b6b7feeb9b;hb=fdb16aa5e99a19a91264ae84beaf77d3036548d5;hp=d97beac7513cd8c87d10a4c546150c4bb50ef141;hpb=95c3bb063747b4d70a24464d3d67e9c16799d9f9;p=palacios.git diff --git a/palacios/src/palacios/vmm_config.c b/palacios/src/palacios/vmm_config.c index d97beac..25d8b23 100644 --- a/palacios/src/palacios/vmm_config.c +++ b/palacios/src/palacios/vmm_config.c @@ -38,7 +38,6 @@ #include -#include #include "vmm_config_class.h" @@ -58,6 +57,7 @@ struct file_idx_table { static int setup_memory_map(struct v3_vm_info * vm, v3_cfg_tree_t * cfg); +static int setup_extensions(struct v3_vm_info * vm, v3_cfg_tree_t * cfg); static int setup_devices(struct v3_vm_info * vm, v3_cfg_tree_t * cfg); @@ -369,9 +369,18 @@ static int post_config_vm(struct v3_vm_info * vm, v3_cfg_tree_t * cfg) { PrintError("Setting up guest memory map failed...\n"); return -1; } - - //v3_hook_io_port(info, 1234, &IO_Read, NULL, info); - + + /* + * Initialize configured extensions + */ + if (setup_extensions(vm, cfg) == -1) { + PrintError("Failed to setup extensions\n"); + return -1; + } + + /* + * Initialize configured devices + */ if (setup_devices(vm, cfg) == -1) { PrintError("Failed to setup devices\n"); return -1; @@ -401,6 +410,11 @@ static int post_config_core(struct guest_info * info, v3_cfg_tree_t * cfg) { info->core_run_state = CORE_STOPPED; + if (v3_init_core_extensions(info) == -1) { + PrintError("Error intializing extension core states\n"); + return -1; + } + if (info->vm_info->vm_class == V3_PC_VM) { if (post_config_pc_core(info, cfg) == -1) { PrintError("PC Post configuration failure\n"); @@ -543,6 +557,7 @@ int v3_free_config(struct v3_vm_info * vm) { + static int setup_memory_map(struct v3_vm_info * vm, v3_cfg_tree_t * cfg) { v3_cfg_tree_t * mem_region = v3_cfg_subtree(v3_cfg_subtree(cfg, "memmap"), "region"); @@ -565,6 +580,24 @@ static int setup_memory_map(struct v3_vm_info * vm, v3_cfg_tree_t * cfg) { } +static int setup_extensions(struct v3_vm_info * vm, v3_cfg_tree_t * cfg) { + v3_cfg_tree_t * extension = v3_cfg_subtree(v3_cfg_subtree(cfg, "extensions"), "extension"); + + while (extension) { + char * ext_name = v3_cfg_val(extension, "name"); + + V3_Print("Configuring extension %s\n", ext_name); + + if (v3_add_extension(vm, ext_name, extension) == -1) { + PrintError("Error adding extension %s\n", ext_name); + return -1; + } + + extension = v3_cfg_next_branch(extension); + } + + return 0; +} static int setup_devices(struct v3_vm_info * vm, v3_cfg_tree_t * cfg) { @@ -591,4 +624,3 @@ static int setup_devices(struct v3_vm_info * vm, v3_cfg_tree_t * cfg) { -