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.


changed configuration structure for block devices
Jack Lange [Wed, 8 Jul 2009 22:26:23 +0000 (17:26 -0500)]
palacios/include/palacios/vmm.h
palacios/src/palacios/vmm_config.c

index 92ba208..065021e 100644 (file)
@@ -268,6 +268,23 @@ struct v3_os_hooks {
 };
 
 
+
+typedef enum {NONE, HARDDRIVE, CDROM} v3_disk_type_t;
+typedef enum {RAM, NETWORK} v3_disk_connection_t;
+
+union v3_disk_info {
+    struct {
+       void * data_ptr;
+       int size;
+    } ram;
+
+    struct {
+       char * ip_str;
+       int port;
+       char * disk_name;
+    } net;
+};
+
 struct v3_vm_config {
     void * rombios;
     int rombios_size;
@@ -279,19 +296,18 @@ struct v3_vm_config {
     // so we can specify maximum physical address size
     // (We're screwed if we want to do 32 bit host/64 bit guest)
 
-
     int enable_profiling;
     int enable_nested_paging;
 
     int enable_pci;
-    
-    int use_ram_cd;
-    int use_ram_hd;
-    int use_net_cd;
-    int use_net_hd;
-
-    void * ramdisk;
-    int ramdisk_size;
+
+    v3_disk_type_t pri_disk_type;
+    v3_disk_connection_t pri_disk_con;
+    union v3_disk_info pri_disk_info;
+   
+    v3_disk_type_t sec_disk_type;
+    v3_disk_connection_t sec_disk_con;
+    union v3_disk_info sec_disk_info;
 };
 
 
index a716c5c..f917f67 100644 (file)
@@ -37,6 +37,7 @@
 #include <devices/ram_cd.h>
 #include <devices/net_cd.h>
 #include <devices/ram_hd.h>
+#include <devices/net_hd.h>
 #include <devices/bochs_debug.h>
 #include <devices/os_debug.h>
 #include <devices/apic.h>
@@ -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) {