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 pub fdt: usize,
32 pub kimage_start_lma: usize,
34 pub kimage_start_vma: usize,
36 pub pg_start: usize,
38 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}