stos: hal: Implement HalMmuForkVas()

Signed-off-by: Chloe M. <chloe@mensia.org>
This commit is contained in:
Chloe M.
2026-06-22 23:27:04 +00:00
parent cdce5416e2
commit 32a1463b92
2 changed files with 46 additions and 0 deletions
+33
View File
@@ -187,6 +187,39 @@ MmuExtractLevel(MMU_VAS *Vas, UPTR Vma, PAGE_LEVEL Level, BOOLEAN Alloc)
return PageMap;
}
ST_STATUS
HalMmuForkVas(MMU_VAS *Old, MMU_VAS *NewResult)
{
UPTR *OldVma, *NewVma;
UPTR NewPma;
MM_PFN NewPfn;
if (Old == NULL || NewResult == NULL) {
return STATUS_INVALID_PARAM;
}
NewPfn = MmRequestFrame();
if (NewPfn == 0) {
return STATUS_NO_MEMORY;
}
NewPma = NewPfn << LOG2_PAGESIZE;
NewVma = PMA_TO_VMA(NewPma);
OldVma = PMA_TO_VMA((Old->Cr3 & PTE_ADDR_MASK));
/* Start breeding the new VAS~ Fill it deep~ */
for (USHORT Off = 0; Off < 512; ++Off) {
if (Off < 256) {
NewVma[Off] = 0;
} else {
NewVma[Off] = OldVma[Off];
}
}
NewResult->Cr3 = NewPma;
return STATUS_SUCCESS;
}
VOID
HalMmuReadVas(MMU_VAS *Result)
{