Rework x86_64 paging and vmm
This commit is contained in:
45
kernel/hal/x86_64/vmm.h
Normal file
45
kernel/hal/x86_64/vmm.h
Normal file
@ -0,0 +1,45 @@
|
||||
#ifndef HAL_VMM_H_
|
||||
#define HAL_VMM_H_
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#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_
|
Reference in New Issue
Block a user