#include <palacios/vmm_debug.h>
#include <palacios/vmm_msr.h>
#include <palacios/vmm_decoder.h>
+#include <palacios/vmm_profiler.h>
+#include <palacios/vmm_mem.h>
+#include <palacios/vmm_hypercall.h>
+
#include <devices/serial.h>
#include <devices/keyboard.h>
#include <devices/ramdisk.h>
#include <devices/cdrom.h>
#include <devices/bochs_debug.h>
+#include <devices/os_debug.h>
+#include <devices/apic.h>
+#include <devices/io_apic.h>
+
#include <palacios/vmm_host_events.h>
// Initialize the subsystem data strutures
v3_init_time(info);
- v3_init_vmm_io_map(info);
+ v3_init_io_map(info);
v3_init_msr_map(info);
v3_init_interrupt_state(info);
v3_init_dev_mgr(info);
v3_init_host_events(info);
v3_init_decoder(info);
+
+ v3_init_shadow_map(info);
+
+ v3_init_hypercall_map(info);
- init_shadow_map(info);
if (v3_cpu_type == V3_SVM_REV3_CPU) {
info->shdw_pg_mode = NESTED_PAGING;
setup_devices(info, config_ptr);
+
+ if (config_ptr->enable_profiling) {
+ info->enable_profiler = 1;
+ v3_init_profiler(info);
+ } else {
+ info->enable_profiler = 0;
+ }
+
//v3_hook_io_port(info, 1234, &IO_Read, NULL, info);
// Setup initial cpu register state
PrintDebug("Layout Region %d bytes\n", config_ptr->rombios_size);
memcpy(V3_VAddr(guest_mem), config_ptr->rombios, config_ptr->rombios_size);
- add_shadow_region_passthrough(info, ROMBIOS_START, ROMBIOS_START + (num_pages * PAGE_SIZE), (addr_t)guest_mem);
+ v3_add_shadow_mem(info, ROMBIOS_START, ROMBIOS_START + (num_pages * PAGE_SIZE) - 1, (addr_t)guest_mem);
PrintDebug("Adding Shadow Region (0x%p-0x%p) -> 0x%p\n",
(void *)ROMBIOS_START,
PrintDebug("Layout Region %d bytes\n", config_ptr->vgabios_size);
memcpy(V3_VAddr(guest_mem), config_ptr->vgabios, config_ptr->vgabios_size);
- add_shadow_region_passthrough(info, VGABIOS_START, VGABIOS_START + (num_pages * PAGE_SIZE), (addr_t)guest_mem);
+ v3_add_shadow_mem(info, VGABIOS_START, VGABIOS_START + (num_pages * PAGE_SIZE) - 1, (addr_t)guest_mem);
PrintDebug("Adding Shadow Region (0x%p-0x%p) -> 0x%p\n",
(void *)VGABIOS_START,
}
//
- add_shadow_region_passthrough(info, 0x0, 0xa0000, (addr_t)V3_AllocPages(160));
+ v3_add_shadow_mem(info, 0x0, 0x9ffff, (addr_t)V3_AllocPages(160));
- if (0) {
- add_shadow_region_passthrough(info, 0xa0000, 0xc0000, 0xa0000);
+ if (1) {
+ v3_add_shadow_mem(info, 0xa0000, 0xbffff, 0xa0000);
} else {
- v3_hook_write_mem(info, 0xa0000, 0xc0000, 0xa0000, passthrough_mem_write, NULL);
+ v3_hook_write_mem(info, 0xa0000, 0xbffff, 0xa0000, passthrough_mem_write, NULL);
}
// TEMP
//add_shadow_region_passthrough(info, 0xc0000, 0xc8000, 0xc0000);
if (1) {
- add_shadow_region_passthrough(info, 0xc7000, 0xc8000, (addr_t)V3_AllocPages(1));
- if (add_shadow_region_passthrough(info, 0xc8000, 0xf0000, (addr_t)V3_AllocPages(40)) == -1) {
+ v3_add_shadow_mem(info, 0xc7000, 0xc8000, (addr_t)V3_AllocPages(1));
+ if (v3_add_shadow_mem(info, 0xc8000, 0xf0000, (addr_t)V3_AllocPages(40)) == -1) {
PrintDebug("Error adding shadow region\n");
}
} else {
- add_shadow_region_passthrough(info, 0xc0000, 0xc8000, 0xc0000);
- add_shadow_region_passthrough(info, 0xc8000, 0xf0000, 0xc8000);
+ v3_add_shadow_mem(info, 0xc0000, 0xc8000, 0xc0000);
+ v3_add_shadow_mem(info, 0xc8000, 0xf0000, 0xc8000);
}
if (1) {
- add_shadow_region_passthrough(info, 0x100000, 0x1000000, (addr_t)V3_AllocPages(4096));
+ v3_add_shadow_mem(info, 0x100000, 0x1000000, (addr_t)V3_AllocPages(4096));
} else {
/* MEMORY HOOK TEST */
- add_shadow_region_passthrough(info, 0x100000, 0xa00000, (addr_t)V3_AllocPages(2304));
+ v3_add_shadow_mem(info, 0x100000, 0xa00000, (addr_t)V3_AllocPages(2304));
v3_hook_write_mem(info, 0xa00000, 0xa01000, (addr_t)V3_AllocPages(1), passthrough_mem_write, NULL);
- add_shadow_region_passthrough(info, 0xa01000, 0x1000000, (addr_t)V3_AllocPages(1791));
+ v3_add_shadow_mem(info, 0xa01000, 0x1000000, (addr_t)V3_AllocPages(1791));
}
- add_shadow_region_passthrough(info, 0x1000000, 0x8000000, (addr_t)V3_AllocPages(32768));
+ v3_add_shadow_mem(info, 0x1000000, 0x8000000, (addr_t)V3_AllocPages(32768));
// test - give linux accesss to PCI space - PAD
- add_shadow_region_passthrough(info, 0xc0000000,0xffffffff,0xc0000000);
+ //v3_add_shadow_mem(info, 0xc0000000,0xffffffff,0xc0000000);
- print_shadow_map(&(info->mem_map));
+ print_shadow_map(info);
return 0;
}
struct vm_device * keyboard = v3_create_keyboard();
struct vm_device * pit = v3_create_pit();
struct vm_device * bochs_debug = v3_create_bochs_debug();
+ struct vm_device * os_debug = v3_create_os_debug();
+ struct vm_device * apic = v3_create_apic();
+ struct vm_device * ioapic = v3_create_io_apic(apic);
//struct vm_device * serial = v3_create_serial();
struct vm_device * generic = NULL;
v3_attach_device(info, keyboard);
// v3_attach_device(info, serial);
v3_attach_device(info, bochs_debug);
+ v3_attach_device(info, os_debug);
+
+ v3_attach_device(info, apic);
+ v3_attach_device(info, ioapic);
if (use_ramdisk) {
v3_attach_device(info, ramdisk);