From 93b11307fa90a704d46a22129dce49dca258ff40 Mon Sep 17 00:00:00 2001 From: Eryn Wells Date: Wed, 13 Apr 2016 00:21:28 -0400 Subject: [PATCH] Add memory::pageAlignUp/Down functions --- src/memory/Memory.cc | 7 +++++++ src/memory/Memory.hh | 24 ++++++++++++++++++++++++ 2 files changed, 31 insertions(+) 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__ */