pie_boot_if/
lib.rs

1#![no_std]
2
3use core::{fmt::Debug, mem::MaybeUninit};
4
5#[repr(C, align(64))]
6#[derive(Clone)]
7pub struct EarlyBootArgs {
8    pub args: [usize; 4],
9    pub virt_entry: *mut (),
10    pub kimage_addr_lma: *mut (),
11    pub kimage_addr_vma: *mut (),
12    pub kcode_end: *mut (),
13}
14
15impl EarlyBootArgs {
16    pub const fn new() -> Self {
17        unsafe { MaybeUninit::zeroed().assume_init() }
18    }
19}
20
21impl Default for EarlyBootArgs {
22    fn default() -> Self {
23        Self::new()
24    }
25}
26
27#[repr(align(64))]
28#[derive(Clone)]
29pub struct BootArgs {
30    /// 设备树物理地址
31    pub fdt: usize,
32    /// 内核镜像物理地址
33    pub kimage_start_lma: usize,
34    /// 内核镜像虚拟地址
35    pub kimage_start_vma: usize,
36    /// 页表开始物理地址
37    pub pg_start: usize,
38    /// 页表结束物理地址
39    pub pg_end: usize,
40}
41
42impl Debug for BootArgs {
43    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
44        f.debug_struct("BootArgs")
45            .field("fdt", &(self.fdt as *mut u8))
46            .field("kimage_start_lma", &(self.kimage_start_lma as *mut u8))
47            .field("kimage_start_vma", &(self.kimage_start_vma as *mut u8))
48            .field("pg_start", &(self.pg_start as *mut u8))
49            .field("pg_end", &(self.pg_end as *mut u8))
50            .finish()
51    }
52}
53
54impl BootArgs {
55    pub const fn new() -> Self {
56        unsafe { MaybeUninit::zeroed().assume_init() }
57    }
58    pub fn fdt_addr(&self) -> *mut u8 {
59        self.fdt as *mut u8
60    }
61}
62
63impl Default for BootArgs {
64    fn default() -> Self {
65        Self::new()
66    }
67}