#ifndef HAL_VMM_H_ #define HAL_VMM_H_ #include #include #include "compiler/attr.h" enum { HAL_PG_PRESENT = 1<<0, HAL_PG_RW = 1<<1, HAL_PG_USER = 1<<2, }; typedef struct { uint64_t pml4; uint64_t pml3; uint64_t pml2; uint64_t pml1; } PACKED PgIndex; typedef struct { bool present: 1; bool rw: 1; bool user: 1; bool writethrough: 1; bool cachedisabled: 1; bool accessed: 1; bool zero0: 1; bool size: 1; bool zero1: 1; uint8_t avail: 3; uint64_t addr: 52; } PACKED Pte; typedef struct { Pte ents[512]; } PACKED PgTable; extern PgTable *KERNEL_CR3; void hal_vmm_init(void); void hal_vmm_unmap_page(PgTable *pml4, uint64_t virtaddr, uint64_t physaddr); void hal_vmm_map_page(PgTable *pml4, uint64_t virtaddr, uint64_t physaddr, uint32_t flags); #endif // HAL_VMM_H_