/* ------------------------------------------- Copyright (C) 2024-2025, Amlal El Mahrouss, all rights reserved. ------------------------------------------- */ #include #include #if defined(__NE_ARM64__) #include #endif // defined(__NE_ARM64__) #if defined(__NE_AMD64__) #include #endif // defined(__NE_AMD64__) namespace Kernel { /***********************************************************************************/ /// @brief Pmm constructor. /***********************************************************************************/ Pmm::Pmm() : fPageMgr() { kout << "[PMM] Allocate PageMemoryMgr.\r"; } Pmm::~Pmm() = default; /***********************************************************************************/ /// @param If this returns Null pointer, enter emergency mode. /// @param user is this a user page? /// @param readWrite is it r/w? /***********************************************************************************/ Ref Pmm::RequestPage(Boolean user, Boolean readWrite) { PTEWrapper pt = fPageMgr.Leak().Request(user, readWrite, false, kPageSize, 0); if (pt.fPresent) { kout << "[PMM]: Allocation failed.\r"; return {}; } return Ref(pt); } Boolean Pmm::FreePage(Ref PageRef) { if (!PageRef) return false; PageRef.Leak().fPresent = false; return true; } Boolean Pmm::TogglePresent(Ref PageRef, Boolean Enable) { if (!PageRef) return false; PageRef.Leak().fPresent = Enable; return true; } Boolean Pmm::ToggleUser(Ref PageRef, Boolean Enable) { if (!PageRef) return false; PageRef.Leak().fRw = Enable; return true; } Boolean Pmm::ToggleRw(Ref PageRef, Boolean Enable) { if (!PageRef) return false; PageRef.Leak().fRw = Enable; return true; } Boolean Pmm::ToggleShare(Ref PageRef, Boolean Enable) { if (!PageRef) return false; PageRef.Leak().fShareable = Enable; return true; } } // namespace Kernel