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.


Virtual Console
Steven Jaconette [Mon, 17 Aug 2009 19:44:54 +0000 (14:44 -0500)]
palacios/src/devices/Kconfig
palacios/src/devices/Makefile
palacios/src/palacios/vmm_config.c
palacios/src/palacios/vmm_emulator.c

index 76d8187..2f5e959 100644 (file)
@@ -259,4 +259,11 @@ config SYM_SWAP
        help 
          Includes the symbiotic ram based swap disk
 
+config VIDEO
+       bool "VIDEO"
+       default y
+       depends on PCI && EXPERIMENTAL
+       help
+         Includes the Virtual Video Card Device
+
 endmenu
index 44c4b91..1d6b0df 100644 (file)
@@ -22,3 +22,5 @@ obj-$(CONFIG_NE2K) += ne2k.o
 
 obj-$(CONFIG_NET_CD) += net_cd.o 
 obj-$(CONFIG_NET_HD) += net_hd.o 
+
+obj-$(CONFIG_VIDEO) += video.o
index 701449f..921633f 100644 (file)
@@ -35,6 +35,8 @@
 #include <devices/ram_hd.h>
 #include <devices/net_hd.h>
 
+#include <devices/video.h>
+
 
 #include <palacios/vmm_host_events.h>
 
@@ -50,7 +52,7 @@ static int configure_generic(struct guest_info * info, struct v3_vm_config * con
 
 
 
-
+#ifndef VIDEO
 static int passthrough_mem_write(addr_t guest_addr, void * src, uint_t length, void * priv_data) {
 
     return length;
@@ -60,7 +62,7 @@ static int passthrough_mem_write(addr_t guest_addr, void * src, uint_t length, v
     
     return length;
 }
-
+#endif
 
 int v3_pre_config_guest(struct guest_info * info, struct v3_vm_config * config_ptr) {
    extern v3_cpu_arch_t v3_cpu_type;
@@ -161,6 +163,8 @@ int v3_post_config_guest(struct guest_info * info, struct v3_vm_config * config_
  * We need to make sure the memory map extends to cover it
  */
 static int setup_memory_map(struct guest_info * info, struct v3_vm_config * config_ptr) {
+
+#ifndef VIDEO
     PrintDebug("Setting up memory map (memory size=%dMB)\n", (uint_t)(info->mem_size / (1024 * 1024)));
     
     // VGA frame buffer
@@ -172,6 +176,7 @@ static int setup_memory_map(struct guest_info * info, struct v3_vm_config * conf
     } else {
        v3_hook_write_mem(info, 0xa0000, 0xc0000, 0xa0000,  passthrough_mem_write, NULL);
     }
+#endif
 
 #define VGABIOS_START 0x000c0000
 #define ROMBIOS_START 0x000f0000
@@ -239,6 +244,7 @@ static int setup_devices(struct guest_info * info, struct v3_vm_config * config_
        v3_create_device(info, "LNX_VIRTIO_BALLOON", "PCI");
        v3_create_device(info, "SYM_SWAP", "LNX_VIRTIO_BLK");
 
+       v3_create_device(info, "VIDEO", "PCI");
 
        v3_create_device(info, "IDE", &ide_config);
     } else {
@@ -427,7 +433,7 @@ static int configure_generic(struct guest_info * info, struct v3_vm_config * con
 
 #endif
 
-#if 1
+#ifndef VIDEO
 
     // Monitor graphics card operations
     
index 5fb9226..f80aade 100644 (file)
@@ -48,8 +48,11 @@ static int emulate_string_write_op(struct guest_info * info, struct x86_instr *
        return -1;
     }
   
-    emulation_length = ( (dec_instr->str_op_length  < (0x1000 - PAGE_OFFSET_4KB(write_gva))) ? 
+    /*emulation_length = ( (dec_instr->str_op_length  < (0x1000 - PAGE_OFFSET_4KB(write_gva))) ? 
                         dec_instr->str_op_length :
+                        (0x1000 - PAGE_OFFSET_4KB(write_gva)));*/
+     emulation_length = ( (dec_instr->str_op_length * (dec_instr->dst_operand.size)  < (0x1000 - PAGE_OFFSET_4KB(write_gva))) ? 
+                        dec_instr->str_op_length * dec_instr->dst_operand.size :
                         (0x1000 - PAGE_OFFSET_4KB(write_gva)));
   
     /* ** Fix emulation length so that it doesn't overrun over the src page either ** */