From eb8861e6413a4fac6683f2c46dad3fd5facf9de8 Mon Sep 17 00:00:00 2001 From: "Chloe M." Date: Mon, 22 Jun 2026 23:27:26 +0000 Subject: [PATCH] stos: vmm: Initialize virtual memory manager Signed-off-by: Chloe M. --- paw/stos/head/mm/vmm.h | 5 +++++ paw/stos/init/init.c | 4 ++++ paw/stos/mm/vmm.c | 35 +++++++++++++++++++++++++++++++++++ 3 files changed, 44 insertions(+) create mode 100644 paw/stos/mm/vmm.c diff --git a/paw/stos/head/mm/vmm.h b/paw/stos/head/mm/vmm.h index afc4d3e..38b2da5 100644 --- a/paw/stos/head/mm/vmm.h +++ b/paw/stos/head/mm/vmm.h @@ -19,4 +19,9 @@ #define VMA_TO_PMA(VMA) \ (UPTR)PTR_NOFFSET(VMA, KeBpalLoadBase()) +/* + * Initialize the virtual memory manager + */ +VOID MmInitVmm(VOID); + #endif /* !_MM_VMM_H_ */ diff --git a/paw/stos/init/init.c b/paw/stos/init/init.c index bf93889..528ead5 100644 --- a/paw/stos/init/init.c +++ b/paw/stos/init/init.c @@ -13,6 +13,7 @@ #include #include #include +#include #include #define DTRACE(Fmt, ...) \ @@ -52,6 +53,9 @@ KiKernelEntry(VOID) /* Initialize physical memory */ MmInitPmm(); + /* Initialize virtual memory */ + MmInitVmm(); + /* Phase 1 initialization the bootstrap core */ HalKpcrP1Init(&BootstrapCore); } diff --git a/paw/stos/mm/vmm.c b/paw/stos/mm/vmm.c new file mode 100644 index 0000000..ee4f655 --- /dev/null +++ b/paw/stos/mm/vmm.c @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2026, Chloe M. + * Provided under the BSD-3 clause. + * + * Description: Virtual memory manager + * Author: Chloe M. + */ + +#include +#include +#include + +#define DTRACE(Fmt, ...) \ + TRACE("[ VMM ]: " Fmt, ##__VA_ARGS__) + +static MMU_VAS KernelVas; + +VOID +MmInitVmm(VOID) +{ + MMU_VAS OldVas; + ST_STATUS Status; + + DTRACE("breeding kvas from bootstrap instance...\n"); + HalMmuReadVas(&OldVas); + Status = HalMmuForkVas(&OldVas, &KernelVas); + + if (Status != STATUS_SUCCESS) { + /* TODO: Panic here */ + return; + } + + HalMmuWriteVas(&KernelVas); + DTRACE("ah!~... [ok @ %p]\n", VAS_BASE(&KernelVas)); +}