/** * PROJECT: ExectOS * COPYRIGHT: See COPYING.md in the top level directory * FILE: xtoskrnl/mm/mmgr.cc * DESCRIPTION: Memory Manager * DEVELOPERS: Rafal Kupiec * Aiken Harris */ #include /** * Performs an early initialization of the XTOS Memory Manager. * * @return This routine does not return any value. * * @since XT 1.0 */ XTAPI VOID MM::Manager::InitializeMemoryManager(VOID) { /* Scan memory descriptors provided by the boot loader */ MM::Pfn::ScanMemoryDescriptors(); /* Check if there are enough physical pages */ if(MM::Pfn::GetNumberOfPhysicalPages() < MM_MINIMUM_PHYSICAL_PAGES) { /* Insufficient physical pages, kernel panic */ DebugPrint(L"Insufficient physical pages! Install additional memory\n"); KE::Crash::Panic(0); } } /** Checks whether the specified memory type should be considered as free. * * @param MemoryType * Specifies the memory type to verify. * * @return This routine returns TRUE if the specified memory type should be considered as free, or FALSE otherwise. * * @since XT 1.0 */ XTAPI BOOLEAN MM::Manager::VerifyMemoryTypeFree(LOADER_MEMORY_TYPE MemoryType) { return ((MemoryType == LoaderFree) || (MemoryType == LoaderFirmwareTemporary) || (MemoryType == LoaderLoadedProgram) || (MemoryType == LoaderOsloaderStack)); } /** * Checks whether the specified memory type should be considered as invisible for the memory manager. * * @param MemoryType * Specifies the memory type to verify. * * @return This routine returns TRUE if the specified memory type should be considered as invisible, or FALSE otherwise. * * @since XT 1.0 */ XTAPI BOOLEAN MM::Manager::VerifyMemoryTypeInvisible(LOADER_MEMORY_TYPE MemoryType) { return ((MemoryType == LoaderFirmwarePermanent) || (MemoryType == LoaderSpecialMemory) || (MemoryType == LoaderBBTMemory)); }