aboutsummaryrefslogtreecommitdiff
path: root/arch/x86_64/src/memory/page_table.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86_64/src/memory/page_table.cpp')
-rw-r--r--arch/x86_64/src/memory/page_table.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/arch/x86_64/src/memory/page_table.cpp b/arch/x86_64/src/memory/page_table.cpp
index 60bf94d..e797b22 100644
--- a/arch/x86_64/src/memory/page_table.cpp
+++ b/arch/x86_64/src/memory/page_table.cpp
@@ -1,6 +1,7 @@
#include "x86_64/memory/page_table.hpp"
#include <algorithm>
+#include <utility>
namespace teachos::memory::x86_64
{
@@ -25,6 +26,18 @@ namespace teachos::memory::x86_64
return std::bit_cast<flags>(m_raw & ~frame_number_mask);
}
+ auto page_table::entry::all_flags(flags flags) -> void
+ {
+ m_raw = (m_raw & ~frame_number_mask) | std::to_underlying(flags);
+ }
+
+ auto page_table::entry::operator|=(flags rhs) -> page_table::entry &
+ {
+ auto raw_flags = std::to_underlying(rhs) & ~frame_number_mask;
+ m_raw |= raw_flags;
+ return *this;
+ }
+
auto page_table::entry::frame() const -> std::optional<struct frame>
{
if (present())