X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fpalacios%2Fvmm_config.c;h=f917f6703ac31606faf5bb6a2a149d57fec7822a;hb=ddd8ed1df60f75104096a8b6a9996ef5f462f594;hp=a716c5ce6bb89c4942304304e61b3445ba5a180c;hpb=153204955413dcb12b2156fc80bdda6e275009b9;p=palacios.git diff --git a/palacios/src/palacios/vmm_config.c b/palacios/src/palacios/vmm_config.c index a716c5c..f917f67 100644 --- a/palacios/src/palacios/vmm_config.c +++ b/palacios/src/palacios/vmm_config.c @@ -37,6 +37,7 @@ #include #include #include +#include #include #include #include @@ -211,7 +212,8 @@ static int setup_memory_map(struct guest_info * info, struct v3_vm_config * conf static int setup_devices(struct guest_info * info, struct v3_vm_config * config_ptr) { struct vm_device * ide = NULL; - struct vm_device * ramdisk = NULL; + struct vm_device * primary_disk = NULL; + struct vm_device * secondary_disk = NULL; struct vm_device * pci = NULL; struct vm_device * northbridge = NULL; @@ -245,24 +247,70 @@ static int setup_devices(struct guest_info * info, struct v3_vm_config * config_ nvram = v3_create_nvram(ide); - if (config_ptr->use_ram_cd == 1) { - PrintDebug("Creating RAM CD\n"); - ramdisk = v3_create_ram_cd(ide, 0, 0, - (addr_t)(config_ptr->ramdisk), - config_ptr->ramdisk_size); - } else if (config_ptr->use_ram_hd == 1) { - PrintDebug("Creating Ram HD\n"); - ramdisk = v3_create_ram_hd(ide, 0, 0, - (addr_t)(config_ptr->ramdisk), - config_ptr->ramdisk_size); - } else if (config_ptr->use_net_cd == 1) { - PrintDebug("Creating NET CD\n"); - ramdisk = v3_create_net_cd(ide, 0, 0, - "172.22.0.1", 9502, - "puppy-iso"); + if (config_ptr->pri_disk_type != NONE) { + if (config_ptr->pri_disk_type == CDROM) { + if (config_ptr->pri_disk_con == RAM) { + PrintDebug("Creating RAM CD\n"); + primary_disk = v3_create_ram_cd(ide, 0, 0, + (addr_t)(config_ptr->pri_disk_info.ram.data_ptr), + config_ptr->pri_disk_info.ram.size); + } else if (config_ptr->pri_disk_con == NETWORK) { + PrintDebug("Creating NET CD\n"); + primary_disk = v3_create_net_cd(ide, 0, 0, + config_ptr->pri_disk_info.net.ip_str, + config_ptr->pri_disk_info.net.port, + config_ptr->pri_disk_info.net.disk_name); + } + } else if (config_ptr->pri_disk_type == HARDDRIVE) { + if (config_ptr->pri_disk_con == RAM) { + PrintDebug("Creating RAM HD\n"); + primary_disk = v3_create_ram_hd(ide, 0, 0, + (addr_t)(config_ptr->pri_disk_info.ram.data_ptr), + config_ptr->pri_disk_info.ram.size); + } else if (config_ptr->pri_disk_con == NETWORK) { + PrintDebug("Creating NET HD\n"); + primary_disk = v3_create_net_hd(ide, 0, 0, + config_ptr->pri_disk_info.net.ip_str, + config_ptr->pri_disk_info.net.port, + config_ptr->pri_disk_info.net.disk_name); + } + } } + + if (config_ptr->sec_disk_type != NONE) { + if (config_ptr->sec_disk_type == CDROM) { + if (config_ptr->sec_disk_con == RAM) { + PrintDebug("Creating RAM CD\n"); + secondary_disk = v3_create_ram_cd(ide, 0, 1, + (addr_t)(config_ptr->sec_disk_info.ram.data_ptr), + config_ptr->sec_disk_info.ram.size); + } else if (config_ptr->sec_disk_con == NETWORK) { + PrintDebug("Creating NET CD\n"); + secondary_disk = v3_create_net_cd(ide, 0, 1, + config_ptr->sec_disk_info.net.ip_str, + config_ptr->sec_disk_info.net.port, + config_ptr->sec_disk_info.net.disk_name); + } + } else if (config_ptr->sec_disk_type == HARDDRIVE) { + if (config_ptr->sec_disk_con == RAM) { + PrintDebug("Creating RAM HD\n"); + secondary_disk = v3_create_ram_hd(ide, 0, 1, + (addr_t)(config_ptr->sec_disk_info.ram.data_ptr), + config_ptr->sec_disk_info.ram.size); + } else if (config_ptr->sec_disk_con == NETWORK) { + PrintDebug("Creating NET HD\n"); + secondary_disk = v3_create_net_hd(ide, 0, 1, + config_ptr->sec_disk_info.net.ip_str, + config_ptr->sec_disk_info.net.port, + config_ptr->sec_disk_info.net.disk_name); + } + } + } + + + if (use_generic) { generic = configure_generic(info, config_ptr); } @@ -292,8 +340,12 @@ static int setup_devices(struct guest_info * info, struct v3_vm_config * config_ PrintDebug("Attaching IDE\n"); v3_attach_device(info, ide); - if (ramdisk != NULL) { - v3_attach_device(info, ramdisk); + if (primary_disk != NULL) { + v3_attach_device(info, primary_disk); + } + + if (secondary_disk != NULL) { + v3_attach_device(info, secondary_disk); } if (use_generic) {