Skip to main content

kdef_pgtable/
lib.rs

1#![cfg_attr(not(test), no_std)]
2
3include!(concat!(env!("OUT_DIR"), "/constant.rs"));
4
5pub const SZ_1G: usize = 1024 * SZ_1M;
6pub const SZ_2G: usize = 2 * SZ_1G;
7pub const SZ_1M: usize = 1024 * 1024;
8pub const SZ_2M: usize = 2 * SZ_1M;
9pub const SZ_8M: usize = 8 * SZ_1M;
10pub const SZ_16M: usize = 16 * SZ_1M;
11
12pub const PAGE_SIZE: usize = 1usize << PAGE_SHIFT;
13
14const MODULES_VADDR: usize = _page_end(PG_VA_BITS);
15
16#[cfg(not(feature = "space-low"))]
17const VSIZE_P: usize = 0x10;
18
19#[cfg(feature = "space-low")]
20const VSIZE_P: usize = 0x100;
21
22const MODULES_VSIZE: usize = (1usize << PG_VA_BITS) / VSIZE_P * 0x8;
23
24pub const KIMAGE_VSIZE: usize = (1usize << PG_VA_BITS) / VSIZE_P;
25
26pub const KIMAGE_VADDR: usize = MODULES_VADDR + MODULES_VSIZE;
27
28#[cfg(not(feature = "space-low"))]
29pub const KLINER_OFFSET: usize = KIMAGE_VADDR + KIMAGE_VSIZE;
30#[cfg(feature = "space-low")]
31pub const KLINER_OFFSET: usize = 0;
32
33const fn _page_offset(va: usize) -> usize {
34    !((1usize << va) - 1)
35}
36
37#[cfg(not(feature = "space-low"))]
38const fn _page_end(va: usize) -> usize {
39    !((1usize << va) - 1)
40}
41#[cfg(feature = "space-low")]
42const fn _page_end(va: usize) -> usize {
43    (1usize << va) / 0x10 * 0xF
44}
45
46#[cfg(test)]
47mod tests {
48    use super::*;
49
50    #[test]
51    fn it_works() {
52        let result = add(2, 2);
53        assert_eq!(result, 4);
54    }
55}