/* Gets the base address needed for a Page Table entry */
-/* Deprecate these :*/
-/*
- #define PD32_BASE_ADDR(x) (((uint_t)x) >> 12)
- #define PT32_BASE_ADDR(x) (((uint_t)x) >> 12)
- #define PD32_4MB_BASE_ADDR(x) (((uint_t)x) >> 22)
-
- #define PML4E64_BASE_ADDR(x) (((ullong_t)x) >> 12)
- #define PDPE64_BASE_ADDR(x) (((ullong_t)x) >> 12)
- #define PDE64_BASE_ADDR(x) (((ullong_t)x) >> 12)
- #define PTE64_BASE_ADDR(x) (((ullong_t)x) >> 12)
-
- // Accessor functions for the page table structures
- #define PDE32_T_ADDR(x) (((x).pt_base_addr) << 12)
- #define PTE32_T_ADDR(x) (((x).page_base_addr) << 12)
- #define PDE32_4MB_T_ADDR(x) (((x).page_base_addr) << 22)
-*/
-/* Replace The above with these... */
#define PAGE_BASE_ADDR(x) ((x) >> 12)
#define PAGE_BASE_ADDR_4KB(x) ((x) >> 12)
#define PAGE_BASE_ADDR_2MB(x) ((x) >> 21)
#define BASE_TO_PAGE_ADDR_1GB(x) (((addr_t)x) << 30)
/* *** */
-/* Deprecated */
-/*
- #define PT32_PAGE_OFFSET(x) (((uint_t)x) & 0xfff)
- #define PD32_4MB_PAGE_OFFSET(x) (((uint_t)x) & 0x003fffff)
-
- #define PT32_PAGE_ADDR(x) (((uint_t)x) & 0xfffff000)
- #define PD32_4MB_PAGE_ADDR(x) (((uint_t)x) & 0xffc00000)
-
- #define PT32_PAGE_POWER 12
- #define PAGE_ALIGNED_ADDR(x) (((uint_t) (x)) >> 12)
- //#define PAGE_ADDR(x) (PAGE_ALIGNED_ADDR(x) << 12)
- #define PAGE_POWER 12
- #define PAGE_SIZE 4096
-*/
-/* use these instead */
+
#define PAGE_OFFSET(x) ((x) & 0xfff)
#define PAGE_OFFSET_4KB(x) ((x) & 0xfff)
#define PAGE_OFFSET_2MB(x) ((x) & 0x1fffff)
/* Page Table Flag Values */
#define PT32_HOOK 0x1
-#define PT32_GUEST_PT 0x2
+#define V3_LARGE_PG 0x2
int v3_translate_guest_pt_32pae(struct guest_info * info, v3_reg_t guest_cr3, addr_t vaddr, addr_t * paddr);
int v3_translate_guest_pt_64(struct guest_info * info, v3_reg_t guest_cr3, addr_t vaddr, addr_t * paddr);
-int v3_translate_host_pt_32(v3_reg_t host_cr3, addr_t vaddr, addr_t * paddr);
-int v3_translate_host_pt_32pae(v3_reg_t host_cr3, addr_t vaddr, addr_t * paddr);
-int v3_translate_host_pt_64(v3_reg_t host_cr3, addr_t vaddr, addr_t * paddr);
+int v3_translate_host_pt_32(struct guest_info * info, v3_reg_t host_cr3, addr_t vaddr, addr_t * paddr);
+int v3_translate_host_pt_32pae(struct guest_info * info, v3_reg_t host_cr3, addr_t vaddr, addr_t * paddr);
+int v3_translate_host_pt_64(struct guest_info * info, v3_reg_t host_cr3, addr_t vaddr, addr_t * paddr);
-int v3_find_host_pt_32_page(v3_reg_t host_cr3, page_type_t type, addr_t vaddr, addr_t * page_addr);
-int v3_find_host_pt_32pae_page(v3_reg_t host_cr3, page_type_t type, addr_t vaddr, addr_t * page_addr);
-int v3_find_host_pt_64_page(v3_reg_t host_cr3, page_type_t type, addr_t vaddr, addr_t * page_addr);
+int v3_find_host_pt_32_page(struct guest_info * info, v3_reg_t host_cr3, page_type_t type, addr_t vaddr,
+ addr_t * page_ptr, addr_t * page_pa);
+int v3_find_host_pt_32pae_page(struct guest_info * info, v3_reg_t host_cr3, page_type_t type, addr_t vaddr,
+ addr_t * page_ptr, addr_t * page_pa);
+int v3_find_host_pt_64_page(struct guest_info * info, v3_reg_t host_cr3, page_type_t type, addr_t vaddr,
+ addr_t * page_ptr, addr_t * page_pa);
int v3_find_guest_pt_32_page(struct guest_info * info, v3_reg_t guest_cr3,
page_type_t type, addr_t vaddr,
- addr_t * page_addr);
+ addr_t * page_ptr, addr_t * page_pa);
int v3_find_guest_pt_32pae_page(struct guest_info * info, v3_reg_t guest_cr3,
page_type_t type, addr_t vaddr,
- addr_t * page_addr);
+ addr_t * page_ptr, addr_t * page_pa);
int v3_find_guest_pt_64_page(struct guest_info * info, v3_reg_t guest_cr3,
page_type_t type, addr_t vaddr,
- addr_t * page_addr);
+ addr_t * page_ptr, addr_t * page_pa);
+
+
pt_access_status_t inline v3_can_access_pde32(pde32_t * pde, addr_t addr, pf_error_t access_type);
pt_access_status_t inline v3_can_access_pte32(pte32_t * pte, addr_t addr, pf_error_t access_type);
pt_access_status_t inline v3_can_access_pte64(pte64_t * pte, addr_t addr, pf_error_t access_type);
-int v3_check_host_pt_32(v3_reg_t host_cr3, addr_t vaddr,
+int v3_check_host_pt_32(struct guest_info * info, v3_reg_t host_cr3, addr_t vaddr,
pf_error_t access_type, pt_access_status_t * access_status);
-int v3_check_host_pt_32pae(v3_reg_t host_cr3, addr_t vaddr,
+int v3_check_host_pt_32pae(struct guest_info * info, v3_reg_t host_cr3, addr_t vaddr,
pf_error_t access_type, pt_access_status_t * access_status);
-int v3_check_host_pt_64(v3_reg_t host_cr3, addr_t vaddr,
+int v3_check_host_pt_64(struct guest_info * info, v3_reg_t host_cr3, addr_t vaddr,
pf_error_t access_type, pt_access_status_t * access_status);
int v3_check_guest_pt_32(struct guest_info * info, v3_reg_t guest_cr3, addr_t vaddr,
pf_error_t access_type, pt_access_status_t * access_status);
+page_type_t v3_get_guest_data_page_type_32(struct guest_info * info, v3_reg_t guest_cr3, addr_t vaddr);
+page_type_t v3_get_guest_data_page_type_32pae(struct guest_info * info, v3_reg_t guest_cr3, addr_t vaddr);
+page_type_t v3_get_guest_data_page_type_64(struct guest_info * info, v3_reg_t guest_cr3, addr_t vaddr);
+page_type_t v3_get_host_data_page_type_32(struct guest_info * info, v3_reg_t guest_cr3, addr_t vaddr);
+page_type_t v3_get_host_data_page_type_32pae(struct guest_info * info, v3_reg_t guest_cr3, addr_t vaddr);
+page_type_t v3_get_host_data_page_type_64(struct guest_info * info, v3_reg_t guest_cr3, addr_t vaddr);
+
-int v3_drill_host_pt_32(v3_reg_t host_cr3, addr_t vaddr,
- int (*callback)(page_type_t type, addr_t vaddr, addr_t page_ptr, addr_t page_pa, void * private_data),
+int v3_drill_host_pt_32(struct guest_info * info, v3_reg_t host_cr3, addr_t vaddr,
+ int (*callback)(struct guest_info * info, page_type_t type, addr_t vaddr, addr_t page_ptr, addr_t page_pa, void * private_data),
void * private_data);
-int v3_drill_host_pt_32pae(v3_reg_t host_cr3, addr_t vaddr,
- int (*callback)(page_type_t type, addr_t vaddr, addr_t page_ptr, addr_t page_pa, void * private_data),
+int v3_drill_host_pt_32pae(struct guest_info * info, v3_reg_t host_cr3, addr_t vaddr,
+ int (*callback)(struct guest_info * info, page_type_t type, addr_t vaddr, addr_t page_ptr, addr_t page_pa, void * private_data),
void * private_data);
-int v3_drill_host_pt_64(v3_reg_t host_cr3, addr_t vaddr,
- int (*callback)(page_type_t type, addr_t vaddr, addr_t page_ptr, addr_t page_pa, void * private_data),
+int v3_drill_host_pt_64(struct guest_info * info, v3_reg_t host_cr3, addr_t vaddr,
+ int (*callback)(struct guest_info * info, page_type_t type, addr_t vaddr, addr_t page_ptr, addr_t page_pa, void * private_data),
void * private_data);
int v3_drill_guest_pt_32(struct guest_info * info, v3_reg_t guest_cr3, addr_t vaddr,
- int (*callback)(page_type_t type, addr_t vaddr, addr_t page_ptr, addr_t page_pa, void * private_data),
+ int (*callback)(struct guest_info * info, page_type_t type, addr_t vaddr, addr_t page_ptr, addr_t page_pa, void * private_data),
void * private_data);
int v3_drill_guest_pt_32pae(struct guest_info * info, v3_reg_t guest_cr3, addr_t vaddr,
- int (*callback)(page_type_t type, addr_t vaddr, addr_t page_ptr, addr_t page_pa, void * private_data),
+ int (*callback)(struct guest_info * info, page_type_t type, addr_t vaddr, addr_t page_ptr, addr_t page_pa, void * private_data),
void * private_data);
int v3_drill_guest_pt_64(struct guest_info * info, v3_reg_t guest_cr3, addr_t vaddr,
- int (*callback)(page_type_t type, addr_t vaddr, addr_t page_ptr, addr_t page_pa, void * private_data),
+ int (*callback)(struct guest_info * info, page_type_t type, addr_t vaddr, addr_t page_ptr, addr_t page_pa, void * private_data),
void * private_data);
-int v3_walk_host_pt_32(v3_reg_t host_cr3,
- int (*callback)(page_type_t type, addr_t vaddr, addr_t page_va, addr_t page_pa, void * private_data),
+
+int v3_walk_host_pt_32(struct guest_info * info, v3_reg_t host_cr3,
+ int (*callback)(struct guest_info * info, page_type_t type, addr_t vaddr, addr_t page_va, addr_t page_pa, void * private_data),
void * private_data);
-int v3_walk_host_pt_32pae(v3_reg_t host_cr3,
- int (*callback)(page_type_t type, addr_t vaddr, addr_t page_va, addr_t page_pa, void * private_data),
+int v3_walk_host_pt_32pae(struct guest_info * info, v3_reg_t host_cr3,
+ int (*callback)(struct guest_info * info, page_type_t type, addr_t vaddr, addr_t page_va, addr_t page_pa, void * private_data),
void * private_data);
-int v3_walk_host_pt_64(v3_reg_t host_cr3,
- int (*callback)(page_type_t type, addr_t vaddr, addr_t page_va, addr_t page_pa, void * private_data),
+int v3_walk_host_pt_64(struct guest_info * info, v3_reg_t host_cr3,
+ int (*callback)(struct guest_info * info, page_type_t type, addr_t vaddr, addr_t page_va, addr_t page_pa, void * private_data),
void * private_data);
int v3_walk_guest_pt_32(struct guest_info * info, v3_reg_t guest_cr3,
- int (*callback)(page_type_t type, addr_t vaddr, addr_t page_va, addr_t page_pa, void * private_data),
+ int (*callback)(struct guest_info * info, page_type_t type, addr_t vaddr, addr_t page_va, addr_t page_pa, void * private_data),
void * private_data);
int v3_walk_guest_pt_32pae(struct guest_info * info, v3_reg_t guest_cr3,
- int (*callback)(page_type_t type, addr_t vaddr, addr_t page_va, addr_t page_pa, void * private_data),
+ int (*callback)(struct guest_info * info, page_type_t type, addr_t vaddr, addr_t page_va, addr_t page_pa, void * private_data),
void * private_data);
int v3_walk_guest_pt_64(struct guest_info * info, v3_reg_t guest_cr3,
- int (*callback)(page_type_t type, addr_t vaddr, addr_t page_va, addr_t page_pa, void * private_data),
+ int (*callback)(struct guest_info * info, page_type_t type, addr_t vaddr, addr_t page_va, addr_t page_pa, void * private_data),
void * private_data);
-void PrintPTEntry(page_type_t type, addr_t vaddr, void * entry);
-void PrintHostPageTables(v3_vm_cpu_mode_t cpu_mode, addr_t cr3);
+void PrintPTEntry(struct guest_info * info, page_type_t type, addr_t vaddr, void * entry);
+void PrintHostPageTables(struct guest_info * info, addr_t cr3);
void PrintGuestPageTables(struct guest_info * info, addr_t cr3);
-void PrintHostPageTree(v3_vm_cpu_mode_t cpu_mode, addr_t virtual_addr, addr_t cr3);
+void PrintHostPageTree(struct guest_info * info, addr_t virtual_addr, addr_t cr3);
void PrintGuestPageTree(struct guest_info * info, addr_t virtual_addr, addr_t cr3);