From 3706331a4362c8d10619674ebbb8ac600d260c95 Mon Sep 17 00:00:00 2001 From: Philipp Oppermann Date: Thu, 13 Apr 2017 18:36:07 +0200 Subject: [PATCH] Add a P4 constant and a Table::next_table_address method --- src/memory/paging/table.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/memory/paging/table.rs b/src/memory/paging/table.rs index adfc0b8..eb20de8 100644 --- a/src/memory/paging/table.rs +++ b/src/memory/paging/table.rs @@ -2,6 +2,8 @@ use core::ops::{Index, IndexMut}; use memory::paging::entry::*; use memory::paging::ENTRY_COUNT; +pub const P4: *mut Table = 0xffffffff_fffff000 as *mut _; + pub struct Table { entries: [Entry; ENTRY_COUNT], } @@ -12,6 +14,16 @@ impl Table { entry.set_unused(); } } + + fn next_table_address(&self, index: usize) -> Option { + let entry_flags = self[index].flags(); + if entry_flags.contains(PRESENT) && !entry_flags.contains(HUGE_PAGE) { + let table_address = self as *const _ as usize; + Some((table_address << 9) | (index << 12)) + } else { + None + } + } } impl Index for Table {