// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) // Licensed under the Apache License, Version 2.0 (see LICENSE file) // Official repository: https://github.com/ne-foss-org/nekernel #ifndef NEKIT_PMM_H #define NEKIT_PMM_H #include #include #include namespace Kernel { class Pmm; class PTEWrapper; // TODO: A PMM stands for Page Memory Manager. Which guarantees page retrieval and free. class Pmm final { public: explicit Pmm(); ~Pmm(); Pmm& operator=(const Pmm&) = delete; Pmm(const Pmm&) = default; Ref RequestPage(Boolean user = false, Boolean readWrite = false); Boolean FreePage(Ref refPage); Boolean ToggleRw(Ref refPage, Boolean enable = true); Boolean TogglePresent(Ref refPage, Boolean enable = true); Boolean ToggleUser(Ref refPage, Boolean enable = true); Boolean ToggleShare(Ref refPage, Boolean enable = true); /// @brief Get the page manager of this. Ref& Leak() { return fPageMgr; } private: Ref fPageMgr; }; } // namespace Kernel #endif