aboutsummaryrefslogtreecommitdiff
path: root/arch/x86_64/src
diff options
context:
space:
mode:
authorMatteo Gmür <matteo.gmuer1@ost.ch>2024-10-27 14:55:52 +0000
committerMatteo Gmür <matteo.gmuer1@ost.ch>2024-10-27 14:55:52 +0000
commitacbd91c9898808a928af0b1bdd9d5058e8a91f62 (patch)
treef082572bd210424a9f59a29a64d7037e402bd355 /arch/x86_64/src
parent38e87d52891429d56d20a54ce205d1e421068f36 (diff)
downloadteachos-acbd91c9898808a928af0b1bdd9d5058e8a91f62.tar.xz
teachos-acbd91c9898808a928af0b1bdd9d5058e8a91f62.zip
Add typedef for virtual / physical addresses
Diffstat (limited to 'arch/x86_64/src')
-rw-r--r--arch/x86_64/src/memory/allocator/physical_frame.cpp2
-rw-r--r--arch/x86_64/src/memory/paging/page_mapper.cpp28
-rw-r--r--arch/x86_64/src/memory/paging/virtual_page.cpp6
3 files changed, 18 insertions, 18 deletions
diff --git a/arch/x86_64/src/memory/allocator/physical_frame.cpp b/arch/x86_64/src/memory/allocator/physical_frame.cpp
index 03bd965..b05254b 100644
--- a/arch/x86_64/src/memory/allocator/physical_frame.cpp
+++ b/arch/x86_64/src/memory/allocator/physical_frame.cpp
@@ -8,7 +8,7 @@ namespace teachos::arch::memory::allocator
// Nothing to do
}
- auto physical_frame::containing_address(std::size_t address) -> physical_frame
+ auto physical_frame::containing_address(physical_address address) -> physical_frame
{
return physical_frame{address / PAGE_FRAME_SIZE};
}
diff --git a/arch/x86_64/src/memory/paging/page_mapper.cpp b/arch/x86_64/src/memory/paging/page_mapper.cpp
index bc0c0d9..00c27b0 100644
--- a/arch/x86_64/src/memory/paging/page_mapper.cpp
+++ b/arch/x86_64/src/memory/paging/page_mapper.cpp
@@ -19,6 +19,20 @@ namespace teachos::arch::memory::paging
return active_handle;
}
+ auto translate_address(virtual_address address) -> std::optional<allocator::physical_address>
+ {
+ auto offset = address % allocator::PAGE_FRAME_SIZE;
+ auto page = virtual_page::containing_address(address);
+ auto frame = translate_page(page);
+
+ if (frame.has_value())
+ {
+ return frame.value().frame_number * allocator::PAGE_FRAME_SIZE + offset;
+ }
+
+ return std::nullopt;
+ }
+
auto translate_page(virtual_page page) -> std::optional<allocator::physical_frame>
{
auto current_handle = create_or_get();
@@ -77,18 +91,4 @@ namespace teachos::arch::memory::paging
}
return std::nullopt;
}
-
- auto translate_address(std::size_t virtual_address) -> std::optional<std::size_t>
- {
- std::size_t offset = virtual_address % allocator::PAGE_FRAME_SIZE;
- virtual_page page = virtual_page::containing_address(virtual_address);
- std::optional<allocator::physical_frame> frame = translate_page(page);
-
- if (frame.has_value())
- {
- return frame.value().frame_number * allocator::PAGE_FRAME_SIZE + offset;
- }
-
- return std::nullopt;
- }
} // namespace teachos::arch::memory::paging
diff --git a/arch/x86_64/src/memory/paging/virtual_page.cpp b/arch/x86_64/src/memory/paging/virtual_page.cpp
index db0d96c..d39bb7f 100644
--- a/arch/x86_64/src/memory/paging/virtual_page.cpp
+++ b/arch/x86_64/src/memory/paging/virtual_page.cpp
@@ -10,11 +10,11 @@ namespace teachos::arch::memory::paging
// Nothing to do
}
- auto virtual_page::containing_address(std::size_t virtual_address) -> virtual_page
+ auto virtual_page::containing_address(virtual_address address) -> virtual_page
{
- exception_handling::assert(virtual_address < 0x0000800000000000 || virtual_address >= 0xffff800000000000,
+ exception_handling::assert(address < 0x0000800000000000 || address >= 0xffff800000000000,
"[Virtual Page] Attempted to create virtual page from invalid address");
- return virtual_page{virtual_address / allocator::PAGE_FRAME_SIZE};
+ return virtual_page{address / allocator::PAGE_FRAME_SIZE};
}
auto virtual_page::start_address() const -> size_t { return page_number * allocator::PAGE_FRAME_SIZE; }