limine_protocol_for_rust/requests/
paging_mode.rs1use 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}