/*++ Copyright (c) 2024, Quinn Stephens. Provided under the BSD 3-Clause license. Module Name: mm.h Abstract: Boot memory manager definitions. --*/ #ifndef _MM_H #define _MM_H #include "bootlib.h" #define MDL_OPERATION_FLAGS_TRUNCATE 0x00000002 #define MDL_OPERATION_FLAGS_PHYSICAL 0x40000000 #define MDL_OPERATION_FLAGS_VIRTUAL 0x80000000 extern ULONG MmTranslationType; NTSTATUS MmFwGetMemoryMap ( IN OUT PMEMORY_DESCRIPTOR_LIST Mdl, IN ULONG Flags ); BOOLEAN MmMdpHasPrecedence ( IN MEMORY_TYPE A, IN MEMORY_TYPE B ); BOOLEAN MmMdpTruncateDescriptor ( IN PMEMORY_DESCRIPTOR_LIST Mdl, IN PMEMORY_DESCRIPTOR Descriptor, IN ULONG Flags ); NTSTATUS MmMdAddDescriptorToList ( IN PMEMORY_DESCRIPTOR_LIST Mdl, IN PMEMORY_DESCRIPTOR Descriptor, IN ULONG Flags ); VOID MmMdRemoveDescriptorFromList ( IN PMEMORY_DESCRIPTOR_LIST Mdl, IN PMEMORY_DESCRIPTOR Descriptor ); PMEMORY_DESCRIPTOR MmMdFindDescriptorFromMdl ( IN PMEMORY_DESCRIPTOR_LIST Mdl, IN ULONGLONG Page, IN ULONG Flags ); NTSTATUS MmMdRemoveRegionFromMdlEx ( IN PMEMORY_DESCRIPTOR_LIST Mdl, IN ULONGLONG FirstPage, IN ULONGLONG PageCount, IN ULONG Flags, OUT PMEMORY_DESCRIPTOR_LIST Unused ); NTSTATUS MmMdRemoveRegionFromMdl ( IN PMEMORY_DESCRIPTOR_LIST Mdl, IN ULONGLONG RemoveStart, IN ULONGLONG PageCount, IN ULONG Flags ); NTSTATUS MmMdFreeDescriptor ( IN PMEMORY_DESCRIPTOR Descriptor ); VOID MmMdFreeList ( IN PMEMORY_DESCRIPTOR_LIST Mdl ); PMEMORY_DESCRIPTOR MmMdInitDescriptor ( IN ULONGLONG FirstPage, IN ULONGLONG MappedFirstPage, IN ULONGLONG PageCount, IN ULONG Attributes, IN MEMORY_TYPE Type ); NTSTATUS MmMdDestroy ( ); VOID MmMdInitialize ( IN ULONG Unused, IN PBOOT_LIBRARY_PARAMETERS LibraryParameters ); NTSTATUS MmPaDestroy ( IN ULONG Stage ); NTSTATUS MmPaInitialize ( IN PBOOT_MEMORY_INFO MemoryInfo, IN ULONG MinimumAllocation ); #endif