limine_protocol_for_rust/requests/
paging_mode.rs

1//![Paging Mode Feature](https://codeberg.org/Limine/limine-protocol/src/branch/trunk/PROTOCOL.md#paging-mode-feature)
2use crate::requests::LimineRequest;
3use core::mem::MaybeUninit;
4use crate::{group, impl_limine_req, LimineReqId};
5
6#[cfg(target_arch = "x86_64")]
7group! {
8    pub const X86_64_4LVL: u64 = 0;
9    pub const X86_64_5LVL: u64 = 1;
10
11    pub const X86_64_DEFAULT_MODE: u64 = X86_64_4LVL;
12    pub const X86_64_MIN_MODE: u64 = X86_64_4LVL;
13}
14
15#[cfg(target_arch = "aarch64")]
16group! {
17    pub const AARCH64_4LVL: u64 = 0;
18    pub const AARCH64_5LVL: u64 = 1;
19
20    pub const AARCH64_DEFAULT_MODE: u64 = AARCH64_4LVL;
21    pub const AARCH64_MIN_MODE: u64 = AARCH64_4LVL;
22}
23
24#[cfg(target_arch = "riscv64")]
25group! {
26    pub const RISCV_SV39: u64 = 0;
27    pub const RISCV_SV48: u64 = 1;
28    pub const RISCV_SV57: u64 = 2;
29
30    pub const RISCV64_DEFAULT_MODE: u64 = RISCV_SV48;
31    pub const RISCV64_MIN_MODE: u64 = RISCV_SV39;
32}
33
34#[cfg(target_arch = "loongarch64")]
35group! {
36    pub const LOONGARCH_4LVL: u64 = 0;
37
38    pub const LOONGARCH_DEFAULT_MODE: u64 = LOONGARCH_4LVL;
39    pub const LOONGARCH_MIN_MODE: u64 = LOONGARCH_4LVL;
40}
41
42
43
44#[repr(C, align(8))]
45pub struct PagingModeRequest{
46    id: LimineReqId,
47    revision: u64,
48    resp: MaybeUninit<usize>,
49    preferred_mode: u64,
50    max_mode: u64,
51    min_mode: u64
52}
53
54impl PagingModeRequest {
55    pub const fn new(revision: u64, preferred_mode: u64, max_mode: u64, min_mode: u64) -> Self {
56        Self {
57            id: LimineReqId::new([0x95c1a0edab0944cb, 0xa4e5cb3842f7488a]),
58            revision,
59            resp: MaybeUninit::uninit(),
60            preferred_mode,
61            max_mode,
62            min_mode
63        }
64    }
65}
66
67impl_limine_req!(PagingModeRequest, PagingModeResponse);
68
69#[repr(C, align(8))]
70#[derive(Copy, Clone)]
71pub struct PagingModeResponse {
72    revision: u64,
73    pub mode: u64,
74}