Files
RedBear-OS/src/page/entry.rs
T
2020-09-06 14:17:49 -06:00

40 lines
758 B
Rust

use core::marker::PhantomData;
use crate::{
Arch,
PhysicalAddress,
};
#[derive(Clone, Copy, Debug)]
pub struct PageEntry<A> {
data: usize,
phantom: PhantomData<A>,
}
impl<A: Arch> PageEntry<A> {
#[inline(always)]
pub fn new(data: usize) -> Self {
Self { data, phantom: PhantomData }
}
#[inline(always)]
pub fn data(&self) -> usize {
self.data
}
#[inline(always)]
pub fn address(&self) -> PhysicalAddress {
PhysicalAddress(self.data & A::ENTRY_ADDRESS_MASK)
}
#[inline(always)]
pub fn flags(&self) -> usize {
self.data & A::ENTRY_FLAGS_MASK
}
#[inline(always)]
pub fn present(&self) -> bool {
self.data & A::ENTRY_FLAG_PRESENT != 0
}
}