struct v3_host_events host_event_hooks;
- v3_vm_cpu_mode_t cpu_mode;
- v3_vm_mem_mode_t mem_mode;
+ v3_cpu_mode_t cpu_mode;
+ v3_mem_mode_t mem_mode;
uint_t addr_width;
uint_t v3_get_addr_width(struct guest_info * info);
-v3_vm_cpu_mode_t v3_get_cpu_mode(struct guest_info * info);
-v3_vm_mem_mode_t v3_get_mem_mode(struct guest_info * info);
+v3_cpu_mode_t v3_get_cpu_mode(struct guest_info * info);
+v3_mem_mode_t v3_get_mem_mode(struct guest_info * info);
-const uchar_t * v3_cpu_mode_to_str(v3_vm_cpu_mode_t mode);
-const uchar_t * v3_mem_mode_to_str(v3_vm_mem_mode_t mode);
+const uchar_t * v3_cpu_mode_to_str(v3_cpu_mode_t mode);
+const uchar_t * v3_mem_mode_to_str(v3_mem_mode_t mode);
void v3_print_segments(struct guest_info * info);
typedef enum {VM_RUNNING, VM_STOPPED, VM_SUSPENDED, VM_ERROR, VM_EMULATING} v3_vm_operating_mode_t;
-typedef enum {REAL, /*UNREAL,*/ PROTECTED, PROTECTED_PAE, LONG, LONG_32_COMPAT, LONG_16_COMPAT} v3_vm_cpu_mode_t;
-typedef enum {PHYSICAL_MEM, VIRTUAL_MEM} v3_vm_mem_mode_t;
+typedef enum {REAL, /*UNREAL,*/ PROTECTED, PROTECTED_PAE, LONG, LONG_32_COMPAT, LONG_16_COMPAT} v3_cpu_mode_t;
+typedef enum {PHYSICAL_MEM, VIRTUAL_MEM} v3_mem_mode_t;
#include <palacios/vmcb.h>
-v3_vm_cpu_mode_t v3_get_cpu_mode(struct guest_info * info) {
+v3_cpu_mode_t v3_get_cpu_mode(struct guest_info * info) {
struct cr0_32 * cr0;
struct efer_64 * efer;
struct cr4_32 * cr4 = (struct cr4_32 *)&(info->ctrl_regs.cr4);
static const uchar_t LONG_32_COMPAT_STR[] = "32bit Compat";
static const uchar_t LONG_16_COMPAT_STR[] = "16bit Compat";
-const uchar_t * v3_cpu_mode_to_str(v3_vm_cpu_mode_t mode) {
+const uchar_t * v3_cpu_mode_to_str(v3_cpu_mode_t mode) {
switch (mode) {
case REAL:
return REAL_STR;
}
}
-v3_vm_mem_mode_t v3_get_mem_mode(struct guest_info * info) {
+v3_mem_mode_t v3_get_mem_mode(struct guest_info * info) {
struct cr0_32 * cr0;
if (info->shdw_pg_mode == SHADOW_PAGING) {
static const uchar_t PHYS_MEM_STR[] = "Physical Memory";
static const uchar_t VIRT_MEM_STR[] = "Virtual Memory";
-const uchar_t * v3_mem_mode_to_str(v3_vm_mem_mode_t mode) {
+const uchar_t * v3_mem_mode_to_str(v3_mem_mode_t mode) {
switch (mode) {
case PHYSICAL_MEM:
return PHYS_MEM_STR;
int ret;
int flush_tlb=0;
struct x86_instr dec_instr;
- v3_vm_cpu_mode_t cpu_mode = v3_get_cpu_mode(info);
+ v3_cpu_mode_t cpu_mode = v3_get_cpu_mode(info);
if (info->mem_mode == PHYSICAL_MEM) {
ret = read_guest_pa_memory(info, get_addr_linear(info, info->rip, &(info->segments.cs)), 15, instr);
}
int v3_reset_passthrough_pts(struct guest_info * info) {
- v3_vm_cpu_mode_t mode = v3_get_cpu_mode(info);
+ v3_cpu_mode_t mode = v3_get_cpu_mode(info);
// Delete the old direct map page tables
switch(mode) {
int v3_handle_passthrough_pagefault(struct guest_info * info, addr_t fault_addr, pf_error_t error_code) {
- v3_vm_cpu_mode_t mode = v3_get_cpu_mode(info);
+ v3_cpu_mode_t mode = v3_get_cpu_mode(info);
switch(mode) {
case REAL:
int v3_handle_nested_pagefault(struct guest_info * info, addr_t fault_addr, pf_error_t error_code) {
// THIS IS VERY BAD
- v3_vm_cpu_mode_t mode = LONG;
+ v3_cpu_mode_t mode = LONG;
PrintDebug("Nested PageFault: fault_addr=%p, error_code=%u\n",(void*)fault_addr, *(uint_t *)&error_code);
}
int v3_invalidate_passthrough_addr(struct guest_info * info, addr_t inv_addr) {
- v3_vm_cpu_mode_t mode = v3_get_cpu_mode(info);
+ v3_cpu_mode_t mode = v3_get_cpu_mode(info);
switch(mode) {
case REAL:
int v3_invalidate_nested_addr(struct guest_info * info, addr_t inv_addr) {
- v3_vm_cpu_mode_t mode = LONG;
+ v3_cpu_mode_t mode = LONG;
switch(mode) {
case REAL:
// flush virtual page tables
// 3 cases shadow, shadow passthrough, and nested
if (info->shdw_pg_mode == SHADOW_PAGING) {
- v3_vm_mem_mode_t mem_mode = v3_get_mem_mode(info);
+ v3_mem_mode_t mem_mode = v3_get_mem_mode(info);
if (mem_mode == PHYSICAL_MEM) {
addr_t cur_addr;
// flush virtual page tables
// 3 cases shadow, shadow passthrough, and nested
if (info->shdw_pg_mode == SHADOW_PAGING) {
- v3_vm_mem_mode_t mem_mode = v3_get_mem_mode(info);
+ v3_mem_mode_t mem_mode = v3_get_mem_mode(info);
if (mem_mode == PHYSICAL_MEM) {
addr_t cur_addr;