hal x86_64 vmm minor fixes in mapping/unmapping
This commit is contained in:
@ -16,10 +16,10 @@ PgTable *hal_vmm_current_cr3(void) {
|
|||||||
PgIndex hal_vmm_pageindex(uint64_t vaddr) {
|
PgIndex hal_vmm_pageindex(uint64_t vaddr) {
|
||||||
PgIndex ret;
|
PgIndex ret;
|
||||||
|
|
||||||
ret.pml4 = (vaddr & ((uint64_t)0x1ff < 39)) >> 39;
|
ret.pml4 = (vaddr >> 39) & 0x1ff;
|
||||||
ret.pml3 = (vaddr & ((uint64_t)0x1ff < 30)) >> 30;
|
ret.pml3 = (vaddr >> 30) & 0x1ff;
|
||||||
ret.pml2 = (vaddr & ((uint64_t)0x1ff < 21)) >> 21;
|
ret.pml2 = (vaddr >> 21) & 0x1ff;
|
||||||
ret.pml1 = (vaddr & ((uint64_t)0x1ff < 12)) >> 12;
|
ret.pml1 = (vaddr >> 12) & 0x1ff;
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -46,7 +46,7 @@ void hal_vmm_map_page(PgTable *pml4, uint64_t virtaddr, uint64_t physaddr, uint3
|
|||||||
uint64_t *pml1 = hal_vmm_nexttable((uint64_t *)pml2, pi.pml2);
|
uint64_t *pml1 = hal_vmm_nexttable((uint64_t *)pml2, pi.pml2);
|
||||||
uint64_t *pte = &pml1[pi.pml1];
|
uint64_t *pte = &pml1[pi.pml1];
|
||||||
|
|
||||||
*pte = physaddr | (flags & 0x7);
|
*pte = (physaddr & ~0xFFF) | (flags & 0x7);
|
||||||
}
|
}
|
||||||
|
|
||||||
void hal_vmm_unmap_page(PgTable *pml4, uint64_t virtaddr, uint64_t physaddr) {
|
void hal_vmm_unmap_page(PgTable *pml4, uint64_t virtaddr, uint64_t physaddr) {
|
||||||
@ -57,7 +57,7 @@ void hal_vmm_unmap_page(PgTable *pml4, uint64_t virtaddr, uint64_t physaddr) {
|
|||||||
uint64_t *pml1 = hal_vmm_nexttable((uint64_t *)pml2, pi.pml2);
|
uint64_t *pml1 = hal_vmm_nexttable((uint64_t *)pml2, pi.pml2);
|
||||||
uint64_t *pte = &pml1[pi.pml1];
|
uint64_t *pte = &pml1[pi.pml1];
|
||||||
|
|
||||||
*pte = physaddr & (~0x7);
|
*pte &= ~HAL_PG_PRESENT;
|
||||||
}
|
}
|
||||||
|
|
||||||
void hal_vmm_init(void) {
|
void hal_vmm_init(void) {
|
||||||
|
@ -68,7 +68,7 @@ void kmain(void) {
|
|||||||
hal_init_withmalloc();
|
hal_init_withmalloc();
|
||||||
|
|
||||||
/* hal_intr_enable(); */
|
/* hal_intr_enable(); */
|
||||||
/* kprintf(BANNER_TEXT "\n"); */
|
kprintf(BANNER_TEXT "\n");
|
||||||
|
|
||||||
for(;;);
|
for(;;);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user