From d8dc66575f1d1fca2ec200e7b3217c120e2cbeed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Kr=C3=B6ning?= Date: Sat, 16 Nov 2024 12:26:45 +0100 Subject: [PATCH] refactor(fdt): add support for bootargs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Martin Kröning --- src/fdt.rs | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/src/fdt.rs b/src/fdt.rs index de163b74..b2dc6dfd 100644 --- a/src/fdt.rs +++ b/src/fdt.rs @@ -4,12 +4,13 @@ use core::ops::Range; use vm_fdt::{FdtWriter, FdtWriterNode, FdtWriterResult}; -pub struct Fdt { +pub struct Fdt<'a> { writer: FdtWriter, root_node: FdtWriterNode, + bootargs: Option<&'a str>, } -impl Fdt { +impl<'a> Fdt<'a> { pub fn new(platform: &str) -> FdtWriterResult { let mut writer = FdtWriter::new()?; @@ -18,11 +19,20 @@ impl Fdt { writer.property_u32("#address-cells", 0x2)?; writer.property_u32("#size-cells", 0x2)?; - Ok(Self { writer, root_node }) + let bootargs = None; + + Ok(Self { + writer, + root_node, + bootargs, + }) } pub fn finish(mut self) -> FdtWriterResult> { let chosen_node = self.writer.begin_node("chosen")?; + if let Some(bootargs) = self.bootargs { + self.writer.property_string("bootargs", bootargs)?; + } self.writer.end_node(chosen_node)?; self.writer.end_node(self.root_node)?; @@ -30,6 +40,14 @@ impl Fdt { self.writer.finish() } + #[cfg_attr(target_os = "uefi", expect(unused))] + pub fn bootargs(mut self, bootargs: &'a str) -> FdtWriterResult { + assert!(self.bootargs.is_none()); + self.bootargs = Some(bootargs); + + Ok(self) + } + pub fn rsdp(mut self, rsdp: u64) -> FdtWriterResult { let rsdp_node = self.writer.begin_node(&format!("hermit,rsdp@{rsdp:x}"))?; self.writer.property_array_u64("reg", &[rsdp, 1])?; @@ -61,7 +79,7 @@ mod uefi { use uefi::mem::memory_map::{MemoryMap, MemoryMapMut}; use vm_fdt::FdtWriterResult; - impl super::Fdt { + impl super::Fdt<'_> { pub fn memory_map(mut self, memory_map: &mut impl MemoryMapMut) -> FdtWriterResult { memory_map.sort(); info!("Memory map:\n{}", memory_map.display());