Compare commits

...
Sign in to create a new pull request.

1 commit

Author SHA1 Message Date
109c97f4a3 Yet more VMX state init 2025-03-16 16:26:17 +01:00
2 changed files with 16 additions and 0 deletions

View file

@ -20,6 +20,12 @@
#define HOST_GS_SELECTOR 0x0C0A #define HOST_GS_SELECTOR 0x0C0A
#define HOST_TR_SELECTOR 0x0C0C #define HOST_TR_SELECTOR 0x0C0C
#define IO_BITMAP_ADDRESS_A 0x2000
#define IO_BITMAP_ADDRESS_B 0x2002
#define MSR_BITMAP_ADDRESS 0x2004
#define VM_EXIT_MSR_STORE_ADDRESS 0x2006
#define VM_EXIT_MSR_LOAD_ADDRESS 0x2008
#define VMCS_LINK_POINTER 0x2800 #define VMCS_LINK_POINTER 0x2800
#define GUEST_IA32_DEBUGCTL 0x2802 #define GUEST_IA32_DEBUGCTL 0x2802
#define GUEST_IA32_PAT 0x2804 #define GUEST_IA32_PAT 0x2804

View file

@ -207,8 +207,12 @@ vintel_init_host(void)
// Set GDT and IDT // Set GDT and IDT
checked_vmwrite(HOST_GDTR_BASE, (uintptr_t)pv->host_gdtr.base); checked_vmwrite(HOST_GDTR_BASE, (uintptr_t)pv->host_gdtr.base);
checked_vmwrite(HOST_IDTR_BASE, (uintptr_t)pv->host_idtr.base); checked_vmwrite(HOST_IDTR_BASE, (uintptr_t)pv->host_idtr.base);
checked_vmwrite(HOST_FS_BASE, 0);
checked_vmwrite(HOST_GS_BASE, 0);
checked_vmwrite(HOST_TR_BASE, 0); // TODO proper value
// Dummy sysenter & sysexit values // Dummy sysenter & sysexit values
checked_vmwrite(HOST_SYSENTER_CS, 0x08);
checked_vmwrite(HOST_SYSENTER_ESP, 0x4000); checked_vmwrite(HOST_SYSENTER_ESP, 0x4000);
checked_vmwrite(HOST_SYSENTER_EIP, 0x4000); checked_vmwrite(HOST_SYSENTER_EIP, 0x4000);
} }
@ -275,6 +279,12 @@ vintel_enable(void)
checked_vmwrite(VM_EXIT_CONTROLS, exitControls); checked_vmwrite(VM_EXIT_CONTROLS, exitControls);
AsciiPrint("VM_EXIT_CONTROLS: %lx\n", exitControls); AsciiPrint("VM_EXIT_CONTROLS: %lx\n", exitControls);
checked_vmwrite(IO_BITMAP_ADDRESS_A, 0);
checked_vmwrite(IO_BITMAP_ADDRESS_B, 0);
checked_vmwrite(MSR_BITMAP_ADDRESS, 0);
checked_vmwrite(VM_EXIT_MSR_STORE_ADDRESS, 0);
checked_vmwrite(VM_EXIT_MSR_LOAD_ADDRESS, 0);
checked_vmwrite(VM_ENTRY_MSR_LOAD_COUNT, 0); checked_vmwrite(VM_ENTRY_MSR_LOAD_COUNT, 0);
checked_vmwrite(VM_ENTRY_INTR_INFO_FIELD, 0); checked_vmwrite(VM_ENTRY_INTR_INFO_FIELD, 0);
checked_vmwrite(VM_EXIT_MSR_STORE_COUNT, 0); checked_vmwrite(VM_EXIT_MSR_STORE_COUNT, 0);