stos: pmm: Add physical frame allocation

Signed-off-by: Chloe M. <chloe@mensia.org>
This commit is contained in:
Chloe M.
2026-06-22 06:50:36 +00:00
parent ef0588512c
commit df1719fbd0
2 changed files with 28 additions and 0 deletions
+11
View File
@@ -11,9 +11,20 @@
#include <stdef.h> #include <stdef.h>
/* Page frame number */
typedef UQUAD MM_PFN;
/* /*
* Initialize the physical memory management * Initialize the physical memory management
*/ */
VOID MmInitPmm(VOID); VOID MmInitPmm(VOID);
/*
* Request a single frame of memory
*
* Returns the page frame number on success, otherwise
* zero on failure e.g., out of memory
*/
MM_PFN MmRequestFrame(VOID);
#endif /* !_MM_PMM_H_ */ #endif /* !_MM_PMM_H_ */
+17
View File
@@ -13,6 +13,7 @@
#include <hal/page.h> #include <hal/page.h>
#include <units.h> #include <units.h>
#include <stdef.h> #include <stdef.h>
#include <string.h>
#define LOAD_DELAY 128 #define LOAD_DELAY 128
@@ -159,6 +160,22 @@ MmLoadUpdate(VOID)
LoadIdx %= LoadMax; LoadIdx %= LoadMax;
} }
MM_PFN
MmRequestFrame(VOID)
{
MM_PFD *Pfd;
UPTR Pma;
Pfd = MmPfdPop(&PfdList);
if (Pfd == NULL) {
return 0;
}
RtlMemSet(Pfd, 0, PAGESIZE);
Pma = VMA_TO_PMA(Pfd);
return Pma >> LOG2_PAGESIZE;
}
static VOID static VOID
MmProbeMemory(VOID) MmProbeMemory(VOID)
{ {