@@ -16,6 +16,7 @@ use crate::BootInfoExt;
1616use crate :: arch:: x86_64:: physicalmem:: PhysAlloc ;
1717use crate :: arch:: x86_64:: { KERNEL_STACK_SIZE , SERIAL_IO_PORT , paging} ;
1818use crate :: fdt:: Fdt ;
19+ use crate :: os:: ExtraBootInfo ;
1920
2021unsafe extern "C" {
2122 static mut loader_end: u8 ;
@@ -53,15 +54,20 @@ impl MemoryManagement for Mem {
5354pub struct DeviceTree ;
5455
5556impl DeviceTree {
56- pub fn create ( ) -> FdtWriterResult < & ' static [ u8 ] > {
57+ pub fn create ( extra_info : & ExtraBootInfo ) -> FdtWriterResult < & ' static [ u8 ] > {
5758 let mut mem = Mem ;
5859 let multiboot = unsafe { Multiboot :: from_ptr ( mb_info as u64 , & mut mem) . unwrap ( ) } ;
5960
6061 let memory_regions = multiboot
6162 . memory_regions ( )
6263 . expect ( "Could not find a memory map in the Multiboot information" ) ;
6364
64- let mut fdt = Fdt :: new ( "multiboot" ) ?. memory_regions ( memory_regions) ?;
65+ let maybe_image = match extra_info. image {
66+ None => & [ ] ,
67+ Some ( tar_image) => tar_image,
68+ } ;
69+
70+ let mut fdt = Fdt :: new ( "multiboot" , maybe_image) ?. memory_regions ( memory_regions) ?;
6571
6672 if let Some ( cmdline) = multiboot. command_line ( ) {
6773 fdt = fdt. bootargs ( cmdline. to_owned ( ) ) ?;
@@ -140,7 +146,7 @@ pub fn find_kernel() -> &'static [u8] {
140146 unsafe { slice:: from_raw_parts ( ptr:: with_exposed_provenance ( elf_start) , elf_len) }
141147}
142148
143- pub unsafe fn boot_kernel ( kernel_info : LoadedKernel ) -> ! {
149+ pub unsafe fn boot_kernel ( kernel_info : LoadedKernel , extra_info : ExtraBootInfo ) -> ! {
144150 let LoadedKernel {
145151 load_info,
146152 entry_point,
@@ -183,7 +189,7 @@ pub unsafe fn boot_kernel(kernel_info: LoadedKernel) -> ! {
183189 write_bytes ( stack, 0 , KERNEL_STACK_SIZE . try_into ( ) . unwrap ( ) ) ;
184190 }
185191
186- let device_tree = DeviceTree :: create ( ) . expect ( "Unable to create devicetree!" ) ;
192+ let device_tree = DeviceTree :: create ( & extra_info ) . expect ( "Unable to create devicetree!" ) ;
187193 let device_tree =
188194 DeviceTreeAddress :: new ( u64:: try_from ( device_tree. as_ptr ( ) . expose_provenance ( ) ) . unwrap ( ) ) ;
189195
0 commit comments