WIP
This commit is contained in:
@ -26,10 +26,14 @@ enum {
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
uint64_t pml4;
|
||||
uint64_t pml3;
|
||||
uint64_t pml2;
|
||||
uint64_t pml1;
|
||||
uint16_t pml4;
|
||||
uint16_t pml3;
|
||||
uint16_t pml2;
|
||||
uint16_t pml1;
|
||||
/* uint64_t pml4; */
|
||||
/* uint64_t pml3; */
|
||||
/* uint64_t pml2; */
|
||||
/* uint64_t pml1; */
|
||||
} PACKED PgIndex;
|
||||
|
||||
typedef struct {
|
||||
@ -39,25 +43,32 @@ typedef struct {
|
||||
bool writethrough: 1;
|
||||
bool cachedisabled: 1;
|
||||
bool accessed: 1;
|
||||
bool zero0: 1;
|
||||
bool size: 1;
|
||||
bool zero1: 1;
|
||||
bool dirty: 1;
|
||||
bool hugepage: 1;
|
||||
bool global: 1;
|
||||
uint8_t avail: 3;
|
||||
uint64_t addr: 52;
|
||||
uint64_t addr: 40;
|
||||
uint16_t osdef: 11;
|
||||
bool nx: 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;
|
||||
extern uint64_t 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);
|
||||
PgTable *hal_vmm_current_cr3(void);
|
||||
void hal_vmm_map_range(PgTable *cr3, void *virtstart, void *physstart, size_t size, uint32_t flags);
|
||||
void hal_vmm_unmap_range(PgTable *cr3, void *virtstart, void *physstart, size_t size);
|
||||
PgTable *hal_vmm_userproc_pml4(struct Proc *proc);
|
||||
void hal_vmm_unmap_page(uint64_t cr3phys, uint64_t virtaddr, uint64_t physaddr);
|
||||
void hal_vmm_map_page(uint64_t cr3phys, uint64_t virtaddr, uint64_t physaddr, uint32_t flags);
|
||||
uint64_t hal_vmm_current_cr3(void);
|
||||
void hal_vmm_map_range(uint64_t cr3phys, void *virtstart, void *physstart, size_t size, uint32_t flags);
|
||||
void hal_vmm_unmap_range(uint64_t cr3phys, void *virtstart, void *physstart, size_t size);
|
||||
uint64_t hal_vmm_userproc_pml4_phys(struct Proc *proc);
|
||||
|
||||
#endif // HAL_VMM_H_
|
||||
|
Reference in New Issue
Block a user