[BOOT:MM] Begin work on memory manager
This commit is contained in:
87
BOOT/ENVIRON/LIB/MM/mm.c
Normal file
87
BOOT/ENVIRON/LIB/MM/mm.c
Normal file
@@ -0,0 +1,87 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2024, Quinn Stephens.
|
||||
Provided under the BSD 3-Clause license.
|
||||
|
||||
Module Name:
|
||||
|
||||
mm.c
|
||||
|
||||
Abstract:
|
||||
|
||||
Provides boot library memory manager routines.
|
||||
|
||||
--*/
|
||||
|
||||
#include <ntrtl.h>
|
||||
#include "bootlib.h"
|
||||
#include "mm.h"
|
||||
|
||||
#define MAX_STATIC_DESCRIPTOR_COUNT 1024
|
||||
|
||||
BOOT_MEMORY_DESCRIPTOR MmStaticMemoryDescriptors[MAX_STATIC_DESCRIPTOR_COUNT];
|
||||
PBOOT_MEMORY_DESCRIPTOR MmGlobalMemoryDescriptors;
|
||||
ULONG MmGlobalMemoryDescriptorCount;
|
||||
|
||||
NTSTATUS
|
||||
BlpMmInitialize (
|
||||
IN PBOOT_MEMORY_INFO MemoryInfo,
|
||||
IN ULONG TranslationType,
|
||||
IN PBOOT_LIBRARY_PARAMETERS LibraryParameters
|
||||
)
|
||||
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
Initializes the boot memory manager.
|
||||
|
||||
Arguments:
|
||||
|
||||
MemoryInfo - pointer to the memory info structure.
|
||||
|
||||
TranslationType - the current translation type being used.
|
||||
|
||||
LibraryParameters - pointer to the library parameters structure.
|
||||
|
||||
Return Value:
|
||||
|
||||
STATUS_SUCCESS if successful,
|
||||
STATUS_INVALID_PARAMETER if TranslationType is invalid,
|
||||
Other NTSTATUS value if an error occurs.
|
||||
|
||||
--*/
|
||||
|
||||
{
|
||||
NTSTATUS Status;
|
||||
|
||||
DebugPrint(L"Initializing memory manager...\r\n");
|
||||
|
||||
//
|
||||
// Check TranslationType.
|
||||
//
|
||||
if (
|
||||
TranslationType > BOOT_TRANSLATION_TYPE_MAX ||
|
||||
LibraryParameters->TranslationType > BOOT_TRANSLATION_TYPE_MAX
|
||||
) {
|
||||
DebugPrint(L"BlpMmInitialize(): TranslationType is invalid\r\n");
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
//
|
||||
// Initialize memory descriptors.
|
||||
//
|
||||
MmGlobalMemoryDescriptors = &MmStaticMemoryDescriptors[0];
|
||||
MmGlobalMemoryDescriptorCount = MAX_STATIC_DESCRIPTOR_COUNT;
|
||||
RtlZeroMemory(MmGlobalMemoryDescriptors, MAX_STATIC_DESCRIPTOR_COUNT * sizeof(BOOT_MEMORY_DESCRIPTOR));
|
||||
|
||||
//
|
||||
// Initialize the page allocator.
|
||||
//
|
||||
Status = MmPaInitialize(MemoryInfo, LibraryParameters->MinimumPageAllocation);
|
||||
if (!NT_SUCCESS(Status)) {
|
||||
return Status;
|
||||
}
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
}
|
Reference in New Issue
Block a user