@@ -18,6 +18,7 @@ use super::physicalmem::PhysAlloc;
1818use crate :: BootInfoExt ;
1919use crate :: arch:: x86_64:: { KERNEL_STACK_SIZE , SERIAL_IO_PORT } ;
2020use crate :: fdt:: Fdt ;
21+ use crate :: os:: ExtraBootInfo ;
2122
2223unsafe extern "C" {
2324 static mut loader_end: u8 ;
@@ -55,15 +56,20 @@ impl MemoryManagement for Mem {
5556pub struct DeviceTree ;
5657
5758impl DeviceTree {
58- pub fn create ( ) -> FdtWriterResult < & ' static [ u8 ] > {
59+ pub fn create ( extra_info : & ExtraBootInfo ) -> FdtWriterResult < & ' static [ u8 ] > {
5960 let mut mem = Mem ;
6061 let multiboot = unsafe { Multiboot :: from_ptr ( mb_info as u64 , & mut mem) . unwrap ( ) } ;
6162
6263 let memory_regions = multiboot
6364 . memory_regions ( )
6465 . expect ( "Could not find a memory map in the Multiboot information" ) ;
6566
66- let mut fdt = Fdt :: new ( "multiboot" ) ?. memory_regions ( memory_regions) ?;
67+ let maybe_image = match extra_info. image {
68+ None => & [ ] ,
69+ Some ( tar_image) => tar_image,
70+ } ;
71+
72+ let mut fdt = Fdt :: new ( "multiboot" , maybe_image) ?. memory_regions ( memory_regions) ?;
6773
6874 if let Some ( cmdline) = multiboot. command_line ( ) {
6975 fdt = fdt. bootargs ( cmdline. to_owned ( ) ) ?;
@@ -142,7 +148,7 @@ pub fn find_kernel() -> &'static [u8] {
142148 unsafe { slice:: from_raw_parts ( sptr:: from_exposed_addr ( elf_start) , elf_len) }
143149}
144150
145- pub unsafe fn boot_kernel ( kernel_info : LoadedKernel ) -> ! {
151+ pub unsafe fn boot_kernel ( kernel_info : LoadedKernel , extra_info : ExtraBootInfo ) -> ! {
146152 let LoadedKernel {
147153 load_info,
148154 entry_point,
@@ -185,7 +191,7 @@ pub unsafe fn boot_kernel(kernel_info: LoadedKernel) -> ! {
185191 write_bytes ( stack, 0 , KERNEL_STACK_SIZE . try_into ( ) . unwrap ( ) ) ;
186192 }
187193
188- let device_tree = DeviceTree :: create ( ) . expect ( "Unable to create devicetree!" ) ;
194+ let device_tree = DeviceTree :: create ( extra_info ) . expect ( "Unable to create devicetree!" ) ;
189195 let device_tree =
190196 DeviceTreeAddress :: new ( u64:: try_from ( device_tree. as_ptr ( ) . expose_addr ( ) ) . unwrap ( ) ) ;
191197
0 commit comments