X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?p=palacios.git;a=blobdiff_plain;f=palacios%2Fsrc%2Fpalacios%2Fvmm_config.c;h=886aee7f2db3b256f113fe0957fad6695da01a43;hp=ed54ab5b1dc61aba1d4ef491f4366d76343308aa;hb=0e097100a26bc43eb8964734fa43130fc4c71429;hpb=3a4e54ec208ea3589963b410d2d73292bbc4a8fe diff --git a/palacios/src/palacios/vmm_config.c b/palacios/src/palacios/vmm_config.c index ed54ab5..886aee7 100644 --- a/palacios/src/palacios/vmm_config.c +++ b/palacios/src/palacios/vmm_config.c @@ -26,11 +26,18 @@ #include #include #include +#include +#include + +#ifdef CONFIG_SYMBIOTIC +#include #ifdef CONFIG_SYMBIOTIC_SWAP #include #endif +#endif + #include #include #include @@ -42,6 +49,17 @@ #include +/* +static const char * test_cfg_xml = \ +"\n \ +2048\n\ +\n\ +\n\ +\n\ +\n\ +"; +*/ + #include @@ -72,6 +90,29 @@ static int passthrough_mem_write(addr_t guest_addr, void * src, uint_t length, v int v3_pre_config_guest(struct guest_info * info, struct v3_vm_config * config_ptr) { extern v3_cpu_arch_t v3_cpu_types[]; + + /* + { + struct v3_xml * cfg = v3_xml_parse((char *)test_cfg_xml); + struct v3_xml * devs = NULL; + struct v3_xml * tmp = NULL; + PrintError("Parsed XML COnfig %s\n", v3_xml_name(cfg)); + + PrintError("memory=%s\n", v3_xml_txt(v3_xml_child(cfg, "memory"))); + + devs = v3_xml_child(cfg, "devices"); + + for (tmp = v3_xml_child(devs, "device"); tmp; tmp = v3_xml_next(tmp)) { + PrintError("Device: %s, id=%s\n", + v3_xml_name(tmp), + v3_xml_attr(tmp, "id")); + } + v3_xml_free(cfg); + + return -1; + } + */ + // Amount of ram the Guest will have, rounded to a 4K page boundary info->mem_size = config_ptr->mem_size & ~(addr_t)0xfff; @@ -90,27 +131,17 @@ int v3_pre_config_guest(struct guest_info * info, struct v3_vm_config * config_p } #endif - v3_init_time(info); + v3_init_hypercall_map(info); v3_init_io_map(info); v3_init_msr_map(info); - v3_init_interrupt_state(info); - v3_init_exception_state(info); - v3_init_dev_mgr(info); + v3_init_cpuid_map(info); v3_init_host_events(info); - - v3_init_decoder(info); - - v3_init_hypercall_map(info); - -#ifdef CONFIG_SYMBIOTIC_SWAP - v3_init_sym_swap(info); -#endif - - - // Initialize the memory map - v3_init_shadow_map(info); + if (v3_init_shadow_map(info) == -1) { + PrintError("Could not initialize shadow map\n"); + return -1; + } if ((v3_cpu_types[info->cpu_id] == V3_SVM_REV3_CPU) && (config_ptr->enable_nested_paging == 1)) { @@ -122,6 +153,20 @@ int v3_pre_config_guest(struct guest_info * info, struct v3_vm_config * config_p info->shdw_pg_mode = SHADOW_PAGING; } +#ifdef CONFIG_SYMBIOTIC + v3_init_sym_iface(info); +#endif + + v3_init_time(info); + v3_init_interrupt_state(info); + v3_init_exception_state(info); + v3_init_dev_mgr(info); + v3_init_decoder(info); + +#ifdef CONFIG_SYMBIOTIC_SWAP + PrintDebug("initializing symbiotic swap\n"); + v3_init_sym_swap(info); +#endif if (config_ptr->schedule_freq == 0) { @@ -156,6 +201,9 @@ int v3_post_config_guest(struct guest_info * info, struct v3_vm_config * config_ return -1; } + // v3_print_io_map(info); + v3_print_msr_map(info); + info->run_state = VM_STOPPED; info->vm_regs.rdi = 0; @@ -254,7 +302,8 @@ static int setup_devices(struct guest_info * info, struct v3_vm_config * config_ if (config_ptr->enable_pci == 1) { struct ide_cfg ide_config = {"PCI", "PIIX3"}; - struct pci_passthrough_cfg pci_pt_cfg = {"PCI", "E1000", 0x8086, 0x100e}; + struct pci_passthrough_cfg pci_qemu_pt_cfg = {"PCI", "E1000", 0x8086, 0x100e}; + struct pci_passthrough_cfg pci_hw_pt_cfg = {"PCI", "E1000", 0x8086, 0x107c}; v3_create_device(info, "PCI", NULL); v3_create_device(info, "i440FX", "PCI"); @@ -265,10 +314,13 @@ static int setup_devices(struct guest_info * info, struct v3_vm_config * config_ v3_create_device(info, "LNX_VIRTIO_BLK", "PCI"); v3_create_device(info, "LNX_VIRTIO_BALLOON", "PCI"); v3_create_device(info, "SYM_SWAP", "LNX_VIRTIO_BLK"); + // v3_create_device(info, "TMP_BLK", "LNX_VIRTIO_BLK"); v3_create_device(info, "IDE", &ide_config); - v3_create_device(info, "PCI_PASSTHROUGH", &pci_pt_cfg); + v3_create_device(info, "PCI_PASSTHROUGH", &pci_qemu_pt_cfg); + v3_create_device(info, "PCI_PASSTHROUGH", &pci_hw_pt_cfg); + } else { v3_create_device(info, "IDE", NULL); @@ -311,6 +363,18 @@ static int setup_devices(struct guest_info * info, struct v3_vm_config * config_ PrintDebug("Creating NET HD\n"); v3_create_device(info, "NET-HD", &cfg); } + + } else if (config_ptr->pri_disk_type == VIRTIO) { + if (config_ptr->pri_disk_con == RAM) { + struct ram_hd_cfg cfg = {"LNX_VIRTIO_BLK", 0, 0, + (addr_t)(config_ptr->pri_disk_info.ram.data_ptr), + config_ptr->pri_disk_info.ram.size}; + + PrintDebug("Creating Virtio RAM HD\n"); + + v3_create_device(info, "RAM-HD", &cfg); + } + } }