From: Steven Jaconette Date: Mon, 17 Aug 2009 19:44:54 +0000 (-0500) Subject: Virtual Console X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?p=palacios.git;a=commitdiff_plain;h=46b8faf02be8ec628db5683bc6fdb55e72344c18 Virtual Console --- diff --git a/palacios/src/devices/Kconfig b/palacios/src/devices/Kconfig index 76d8187..2f5e959 100644 --- a/palacios/src/devices/Kconfig +++ b/palacios/src/devices/Kconfig @@ -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 diff --git a/palacios/src/devices/Makefile b/palacios/src/devices/Makefile index 44c4b91..1d6b0df 100644 --- a/palacios/src/devices/Makefile +++ b/palacios/src/devices/Makefile @@ -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 diff --git a/palacios/src/palacios/vmm_config.c b/palacios/src/palacios/vmm_config.c index 701449f..921633f 100644 --- a/palacios/src/palacios/vmm_config.c +++ b/palacios/src/palacios/vmm_config.c @@ -35,6 +35,8 @@ #include #include +#include + #include @@ -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 diff --git a/palacios/src/palacios/vmm_emulator.c b/palacios/src/palacios/vmm_emulator.c index 5fb9226..f80aade 100644 --- a/palacios/src/palacios/vmm_emulator.c +++ b/palacios/src/palacios/vmm_emulator.c @@ -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 ** */