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.


fixed a number of bugs due to the update
Jack Lange [Wed, 4 Mar 2009 00:38:54 +0000 (18:38 -0600)]
palacios/build/Makefile
palacios/include/palacios/vmm.h
palacios/src/devices/vnic.c
palacios/src/palacios/svm.c
palacios/src/palacios/vmm_config.c
palacios/src/palacios/vmm_ctrl_regs.c

index 0d114cd..bf527cd 100644 (file)
@@ -320,9 +320,11 @@ DEVICES_OBJS := \
        devices/os_debug.o \
        devices/apic.o  \
        devices/io_apic.o \
-       devices/vnic.o \
        devices/vpci.o \
 
+
+#      devices/vnic.o \
+
 $(DEVICES_OBJS) :: EXTRA_CFLAGS = \
        $(JRLDEBUG) \
 
index c209185..d5f8fea 100644 (file)
@@ -24,7 +24,7 @@
 #include <palacios/vm_guest.h>
 #include <palacios/vmm_mem.h>
 #include <palacios/vmm_types.h>
-#include <devices/vnic.h>
+
 
 
 #ifdef __V3VEE__
     } while(0)                                                         \
        
 
-#define V3_REGISTER_PKT_DELIVERY(x) ({                                 \
-           int ret = 0;                                                \
-           extern struct v3_os_hooks * os_hooks;                       \
-           if ((os_hooks) && (os_hooks)->register_pkt_delivery) {      \
-               ret = (os_hooks)->register_pkt_delivery(x);             \
-           }                                                           \
-           ret;                                                        \
-       })
-
-#define V3_SEND_PKT(x, y) ({                                   \
-           int ret = 0;                                        \
-           extern struct v3_os_hooks * os_hooks;               \
-           if ((os_hooks) && (os_hooks)->ne2k_send_packet) {   \
-               ret = (os_hooks)->ne2k_send_packet(x, y);       \
-           }                                                   \
-           ret;                                                \
-       })
 
 
 #define VMM_INVALID_CPU 0
@@ -260,9 +243,7 @@ struct v3_os_hooks {
 
     void (*yield_cpu)(void);
 
-    //function by network card driver
-    int (*register_pkt_delivery)(int (*rcvd_fn)(uchar_t *packet, uint_t size));
-    int (*ne2k_send_packet)(uchar_t *packet, uint_t size);
+
  
 };
 
index dfaaf74..49bbd8b 100644 (file)
@@ -21,6 +21,9 @@
 * Virtual NE2K Network Card 
 */
 
+
+
+
 #include <devices/vnic.h>
 #include <palacios/vmm.h>
 #include <palacios/vmm_types.h>
@@ -94,44 +97,101 @@ struct vm_device *current_vnic;
 
 
 
+static int vnic_mem_write(struct nic_context * nic_state, 
+                         uint32_t addr,
+                         void * src, uint_t length) {
+    
+    PrintDebug("wmem addr: %x val: %x\n", addr, val);
+
+    if ((addr < NE2K_PMEM_START) || (addr > NE2K_MEM_SIZE))
 
-/* 
- * Host/Network byte conversion functions
- * TODO: These are not compiler safe
- * TODO: consistent names would be nice...
- */
+    switch (length) {
+       case 1: {
+           uchar_t val = *(uchar_t *)src;
+           
+       }
+       case 2:
+       case 4:
+    }
 
-static inline uint16_t cpu2le16(uint16_t val) {
-    uint16_t p = 0;
-    uchar_t * p1 = (uchar_t *)&p;
+}
 
-    p1[0] = val;
-    p1[1] = val >> 8;
 
-    return p;
+static void vnic_mem_writeb(struct nic_context * nic_state, 
+                           uint32_t addr,
+                           uint32_t val) {
+    uchar_t tmp = (uchar_t) (val & 0x000000ff);
+
+    if ( (addr < 32) || 
+        ((addr >= NE2K_PMEM_START && addr) < NE2K_MEM_SIZE) ) {
+        nic_state->mem[addr] = tmp;
+    }
+
+    PrintDebug("wmem addr: %x val: %x\n", addr, val);
 }
 
+static void vnic_mem_writew(struct nic_context * nic_state, 
+                           uint32_t addr,
+                           uint32_t val) {
 
-static inline uint32_t cpu2le32(uint32_t val) {
-    uint32_t p = 0;
-    uchar_t * p1 = (uchar_t *)&p;
+    addr &= ~1; //XXX: check exact behaviour if not even
 
-    p1[0] = val;
-    p1[1] = val >> 8;
-    p1[2] = val >> 16;
-    p1[3] = val >> 24;
+    if ( (addr < 32) ||
+        ((addr >= NE2K_PMEM_START && addr) < NE2K_MEM_SIZE)) {
+        *(ushort_t *)(nic_state->mem + addr) = cpu2le16(val);
+    }
 
-    return p;
+    PrintDebug("wmem addr: %x val: %x\n", addr, val);
 }
 
-static inline uint16_t le16_to_cpu(const uint16_t * p) {
-    const uchar_t * p1 = (const uchar_t *)p;
-    return p1[0] | (p1[1] << 8);
+static void vnic_mem_writel(struct nic_context * nic_state,
+                           uint32_t addr,
+                           uint32_t val) {
+    addr &= ~1; // XXX: check exact behaviour if not even
+
+    if ( (addr < 32) ||
+        ( (addr >= NE2K_PMEM_START) && (addr < NE2K_MEM_SIZE) ) ) {
+        *(uint32_t *)(nic_state->mem + addr) = cpu2le32(val);
+    }
+    
+    PrintDebug("wmem addr: %x val: %x\n", addr, val);
+}
+
+static uchar_t vnic_mem_readb(struct nic_context * nic_state, uint32_t addr) {
+    PrintDebug("rmem addr: %x\n", addr);
+       
+    if ( (addr < 32) ||
+        ( (addr >= NE2K_PMEM_START) && (addr < NE2K_MEM_SIZE)) ) {
+        return nic_state->mem[addr];
+    } else {
+        return 0xff;
+    }
+}
+
+static ushort_t vnic_mem_readw(struct nic_context * nic_state, uint32_t addr) {
+    PrintDebug("rmem addr: %x\n", addr);
+       
+    addr &= ~1; //XXX: check exact behaviour if not even 
+
+    if ( (addr < 32) ||
+         ( (addr >= NE2K_PMEM_START) && (addr < NE2K_MEM_SIZE))) {
+        return (ushort_t)le16_to_cpu((ushort_t *)(nic_state->mem + addr));
+    } else {
+        return 0xffff;
+    }
 }
 
-static inline uint32_t le32_to_cpu(const uint32_t *p) {
-    const uchar_t * p1 = (const uchar_t *)p;
-    return p1[0] | (p1[1] << 8) | (p1[2] << 16) | (p1[3] << 24);
+static uint32_t vnic_mem_readl(struct nic_context * nic_state, uint32_t addr) {
+    PrintDebug("rmem addr: %x\n", addr);
+
+    addr &= ~1; //XXX: check exact behaviour if not even
+
+    if ( (addr < 32) ||
+         ( (addr >= NE2K_PMEM_START && addr < NE2K_MEM_SIZE))) {
+        return (uint32_t)le32_to_cpu((uint32_t *)(nic_state->mem + addr));
+    } else {
+        return 0xffffffff;
+    }
 }
 
 
@@ -744,81 +804,6 @@ static int vnic_ioport_read(ushort_t port, void * dst, uint_t length, struct vm_
 
 
 
-static void vnic_mem_writeb(struct nic_context * nic_state, 
-                           uint32_t addr,
-                           uint32_t val) {
-    uchar_t tmp = (uchar_t) (val & 0x000000ff);
-
-    if ( (addr < 32) || 
-        ((addr >= NE2K_PMEM_START && addr) < NE2K_MEM_SIZE) ) {
-        nic_state->mem[addr] = tmp;
-    }
-
-    PrintDebug("wmem addr: %x val: %x\n", addr, val);
-}
-
-static void vnic_mem_writew(struct nic_context * nic_state, 
-                           uint32_t addr,
-                           uint32_t val) {
-
-    addr &= ~1; //XXX: check exact behaviour if not even
-
-    if ( (addr < 32) ||
-        ((addr >= NE2K_PMEM_START && addr) < NE2K_MEM_SIZE)) {
-        *(ushort_t *)(nic_state->mem + addr) = cpu2le16(val);
-    }
-
-    PrintDebug("wmem addr: %x val: %x\n", addr, val);
-}
-
-static void vnic_mem_writel(struct nic_context * nic_state,
-                           uint32_t addr,
-                           uint32_t val) {
-    addr &= ~1; // XXX: check exact behaviour if not even
-
-    if ( (addr < 32) ||
-        ( (addr >= NE2K_PMEM_START) && (addr < NE2K_MEM_SIZE) ) ) {
-        *(uint32_t *)(nic_state->mem + addr) = cpu2le32(val);
-    }
-    
-    PrintDebug("wmem addr: %x val: %x\n", addr, val);
-}
-
-static uchar_t vnic_mem_readb(struct nic_context * nic_state, uint32_t addr) {
-    PrintDebug("rmem addr: %x\n", addr);
-       
-    if ( (addr < 32) ||
-        ( (addr >= NE2K_PMEM_START) && (addr < NE2K_MEM_SIZE)) ) {
-        return nic_state->mem[addr];
-    } else {
-        return 0xff;
-    }
-}
-
-static ushort_t vnic_mem_readw(struct nic_context * nic_state, uint32_t addr) {
-    PrintDebug("rmem addr: %x\n", addr);
-       
-    addr &= ~1; //XXX: check exact behaviour if not even 
-    if ( (addr < 32) ||
-         ( (addr >= NE2K_PMEM_START) && (addr < NE2K_MEM_SIZE))) {
-        return (ushort_t)le16_to_cpu((ushort_t *)(nic_state->mem + addr));
-    } else {
-        return 0xffff;
-    }
-}
-
-static uint32_t vnic_mem_readl(struct nic_context * nic_state, uint32_t addr) {
-    PrintDebug("rmem addr: %x\n", addr);
-
-    addr &= ~1; //XXX: check exact behaviour if not even
-
-    if ( (addr < 32) ||
-         ( (addr >= NE2K_PMEM_START && addr < NE2K_MEM_SIZE))) {
-        return (uint32_t)le32_to_cpu((uint32_t *)(nic_state->mem + addr));
-    } else {
-        return 0xffffffff;
-    }
-}
 
 static void vnic_dma_update(struct vm_device * dev, int len) {         
     struct nic_context *nic_state = (struct nic_context *)dev->private_data;
index fed5fae..377fc44 100644 (file)
@@ -279,7 +279,7 @@ static void Init_VMCB_BIOS(vmcb_t * vmcb, struct guest_info *vm_info) {
        PrintDebug("NP_Enable at 0x%p\n", (void *)&(ctrl_area->NP_ENABLE));
        
        // Set the Nested Page Table pointer
-       vm_info->direct_map_pt = ((addr_t)create_passthrough_pts_32(vm_info) & ~0xfff);
+       vm_info->direct_map_pt = ((addr_t)v3_create_direct_passthrough_pts(vm_info) & ~0xfff);
        ctrl_area->N_CR3 = vm_info->direct_map_pt;
        
        //   ctrl_area->N_CR3 = Get_CR3();
index f5ca663..cab9d9e 100644 (file)
@@ -266,7 +266,7 @@ static int setup_devices(struct guest_info * info, struct v3_vm_config * config_
     if (use_ramdisk) {
        PrintDebug("Creating Ramdisk\n");
        ramdisk = v3_create_ramdisk();
-       cdrom = v3_create_cdrom(ramdisk, config_ptr->ramdisk, config_ptr->ramdisk_size); 
+       cdrom = v3_create_cdrom(ramdisk, config_ptr->ramdisk, config_ptr->ramdisk_size);
     }
     
     
index 8966ee7..e36b2fe 100644 (file)
@@ -23,7 +23,7 @@
 #include <palacios/vmm_decoder.h>
 #include <palacios/vm_guest_mem.h>
 #include <palacios/vmm_ctrl_regs.h>
-
+#include <palacios/vmm_direct_paging.h>
 
 #ifndef DEBUG_CTRL_REGS
 #undef PrintDebug
@@ -473,7 +473,7 @@ int v3_handle_cr4_write(struct guest_info * info) {
                    delete_page_tables_32((pde32_t *)V3_VAddr((void *)(info->direct_map_pt)));
                    
                    // create 32 bit PAE direct map page table
-                   info->direct_map_pt = (addr_t)V3_PAddr(create_passthrough_pts_32PAE(info));
+                   info->direct_map_pt = (addr_t)V3_PAddr((void *)v3_create_direct_passthrough_pts(info));
                    
                    // reset cr3 to new page tables
                    info->ctrl_regs.cr3 = *(addr_t*)&(info->direct_map_pt);