Skip to main content

islet_rmm/realm/mm/
page.rs

1use super::attribute::page_type;
2use super::stage2_tte::S2TTE;
3use super::table_level::{L1Table, L2Table, L3Table};
4use crate::config::{HUGE_PAGE_SIZE, LARGE_PAGE_SIZE, PAGE_SIZE};
5use vmsa::page::PageSize;
6use vmsa::page_table::Level;
7
8use armv9a::bits_in_reg;
9
10#[derive(Clone, Copy)]
11/// A 4 KiB page mapped in the L3Table.
12pub enum BasePageSize {}
13impl PageSize for BasePageSize {
14    const SIZE: usize = PAGE_SIZE;
15    const MAP_TABLE_LEVEL: usize = L3Table::THIS_LEVEL;
16    const MAP_EXTRA_FLAG: u64 = bits_in_reg(S2TTE::TYPE, page_type::TABLE_OR_PAGE);
17}
18
19#[derive(Clone, Copy)]
20/// A 2 MiB page mapped in the L2Table.
21pub enum LargePageSize {}
22impl PageSize for LargePageSize {
23    const SIZE: usize = LARGE_PAGE_SIZE;
24    const MAP_TABLE_LEVEL: usize = L2Table::THIS_LEVEL;
25    const MAP_EXTRA_FLAG: u64 = bits_in_reg(S2TTE::TYPE, page_type::BLOCK);
26}
27
28#[derive(Clone, Copy)]
29/// A 1 GiB page mapped in the L1Table.
30pub enum HugePageSize {}
31impl PageSize for HugePageSize {
32    const SIZE: usize = HUGE_PAGE_SIZE;
33    const MAP_TABLE_LEVEL: usize = L1Table::THIS_LEVEL;
34    const MAP_EXTRA_FLAG: u64 = bits_in_reg(S2TTE::TYPE, page_type::BLOCK);
35}