os_hooks.free = &VMM_Free;
os_hooks.vaddr_to_paddr = &Identity;
os_hooks.paddr_to_vaddr = &Identity;
-
+ os_hooks.hook_interrupt = &hook_irq_stub;
+ os_hooks.ack_irq = &ack_irq;
// DumpGDT();
Init_VMM(&os_hooks, &vmm_ops);
region_start += reg->length;
}
- add_shadow_region_passthrough(&vm_info, 0xc0000, 0xc8000, 0xc0000);
+ //
add_shadow_region_passthrough(&vm_info, 0x0, 0xa0000, (addr_t)Allocate_VMM_Pages(160));
add_shadow_region_passthrough(&vm_info, 0xa0000, 0xc0000, 0xa0000);
- if (add_shadow_region_passthrough(&vm_info, 0xc8000, 0xf0000, (addr_t)Allocate_VMM_Pages(40)) == -1) {
- PrintDebug("Error adding shadow region\n");
+
+
+ if (1) {
+ add_shadow_region_passthrough(&vm_info, 0xc7000, 0xc8000, (addr_t)Allocate_VMM_Pages(1));
+ if (add_shadow_region_passthrough(&vm_info, 0xc8000, 0xf0000, (addr_t)Allocate_VMM_Pages(40)) == -1) {
+ PrintDebug("Error adding shadow region\n");
+ }
+ } else {
+ add_shadow_region_passthrough(&vm_info, 0xc0000, 0xc8000, 0xc0000);
+ add_shadow_region_passthrough(&vm_info, 0xc8000, 0xf0000, 0xc8000);
}
hook_io_port(&(vm_info.io_map), 0x403, &IO_Read, &IO_Write_to_Serial, NULL);
{
- //struct vm_device * nvram = create_nvram();
+ struct vm_device * nvram = create_nvram();
//struct vm_device * timer = create_timer();
struct vm_device * pic = create_pic();
- //attach_device(&(vm_info), nvram);
+ attach_device(&(vm_info), nvram);
//attach_device(&(vm_info), timer);
attach_device(&(vm_info), pic);
PrintDebugDevMgr(&(vm_info.dev_mgr));
-
-
-
}
-
hook_irq(&vm_info, 6);
+ hook_irq(&vm_info, 14);
+ hook_irq(&vm_info, 15);
vm_info.rip = 0xfff0;
vm_info.vm_regs.rsp = 0x0;