diff --git a/src/memory/Memory.cc b/src/memory/Memory.cc index b924cd8..1513ba9 100644 --- a/src/memory/Memory.cc +++ b/src/memory/Memory.cc @@ -41,4 +41,11 @@ MemoryManager::initializeGDT() kstd::printFormat("GDT loaded\n"); } +namespace memory { + +const u32 pageSize = 4096; +const u32 pageMask = pageSize - 1; + +} /* namespace memory */ + } /* namespace kernel */ diff --git a/src/memory/Memory.hh b/src/memory/Memory.hh index b5fb4c5..f012f67 100644 --- a/src/memory/Memory.hh +++ b/src/memory/Memory.hh @@ -30,6 +30,30 @@ private: void initializeGDT(); }; +namespace memory { + +extern const u32 pageSize; +extern const u32 pageMask; + +/** Align to the nearest page boundary below `addr`. */ +inline u32 +pageAlignDown(u32 addr) +{ + return addr & ~pageMask; +} + +/** Align to the nearest page boundary above `addr`. */ +inline u32 +pageAlignUp(u32 addr) +{ + if (pageAlignDown(addr) == addr) { + return addr; + } + return (addr + pageSize) & ~pageMask; +} + +} /* namespace memory */ + } /* namespace kernel */ #endif /* __MEMORY_MEMORY_HH__ */