diff --git a/Cargo.lock b/Cargo.lock index e4ebb85f..381364d3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -728,6 +728,26 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "ptr_meta" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bcada80daa06c42ed5f48c9a043865edea5dc44cbf9ac009fda3b89526e28607" +dependencies = [ + "ptr_meta_derive", +] + +[[package]] +name = "ptr_meta_derive" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bca9224df2e20e7c5548aeb5f110a0f3b77ef05f8585139b7148b59056168ed2" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "quote" version = "1.0.23" @@ -1122,21 +1142,22 @@ dependencies = [ [[package]] name = "uefi" -version = "0.18.0" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07b87700863d65dd4841556be3374d8d4f9f8dbb577ad93a39859e70b3b91f35" +checksum = "ab39d5e7740f21ed4c46d6659f31038bbe3fe7a8be1f702d8a984348837c43b1" dependencies = [ "bitflags", "log", + "ptr_meta", "ucs2", "uefi-macros", ] [[package]] name = "uefi-macros" -version = "0.9.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "275f054a1d9fd7e43a2ce91cc24298a87b281117dea8afc120ae95faa0e96b94" +checksum = "e0caeb0e7b31b9f1f347e541106be10aa8c66c76fa722a3298a4cd21433fabd4" dependencies = [ "proc-macro2", "quote", diff --git a/tests/runner/src/lib.rs b/tests/runner/src/lib.rs index 7d293c1e..3edb4d94 100644 --- a/tests/runner/src/lib.rs +++ b/tests/runner/src/lib.rs @@ -1,17 +1,6 @@ use bootloader::BootConfig; use bootloader::DiskImageBuilder; -use std::{io::Read, path::Path, process::Command}; - -const QEMU_ARGS: &[&str] = &[ - "-device", - "isa-debug-exit,iobase=0xf4,iosize=0x04", - "-serial", - "stdio", - "-display", - "none", - "--no-reboot", -]; -const SEPARATOR: &str = "\n____________________________________\n"; +use std::path::Path; pub fn run_test_kernel(kernel_binary_path: &str) { run_test_kernel_internal(kernel_binary_path, None, None) @@ -98,11 +87,27 @@ pub fn run_test_kernel_on_uefi_pxe(out_tftp_path: &Path) { run_qemu(args); } +#[cfg(any(feature = "uefi", feature = "bios"))] fn run_qemu<'a, A>(args: A) where A: IntoIterator, { - use std::process::Stdio; + use std::{ + io::Read, + process::{Command, Stdio}, + }; + + const QEMU_ARGS: &[&str] = &[ + "-device", + "isa-debug-exit,iobase=0xf4,iosize=0x04", + "-serial", + "stdio", + "-display", + "none", + "--no-reboot", + ]; + + const SEPARATOR: &str = "\n____________________________________\n"; let mut run_cmd = Command::new("qemu-system-x86_64"); run_cmd.args(args); diff --git a/uefi/Cargo.toml b/uefi/Cargo.toml index b9f5ec29..80168be5 100644 --- a/uefi/Cargo.toml +++ b/uefi/Cargo.toml @@ -13,6 +13,6 @@ bootloader_api = { workspace = true } bootloader-x86_64-common = { workspace = true } bootloader-boot-config = { workspace = true } log = "0.4.14" -uefi = "0.18.0" x86_64 = "0.14.8" serde-json-core = "0.5.0" +uefi = "0.20.0" diff --git a/uefi/src/main.rs b/uefi/src/main.rs index d0cee33b..7b0aa5af 100644 --- a/uefi/src/main.rs +++ b/uefi/src/main.rs @@ -136,37 +136,11 @@ fn main_inner(image: Handle, mut st: SystemTable) -> Status { } ); - let mmap_storage = { - let mut memory_map_size = st.boot_services().memory_map_size(); - loop { - let ptr = st - .boot_services() - .allocate_pool(MemoryType::LOADER_DATA, memory_map_size.map_size) - .expect("Failed to allocate memory for mmap storage"); - - let storage = unsafe { slice::from_raw_parts_mut(ptr, memory_map_size.map_size) }; - - if st.boot_services().memory_map(storage).is_ok() { - break storage; - } - - // By measuring the size here, we can find out exactly how much we need. - // We may hit this code twice, if the map allocation ends up spanning more pages. - memory_map_size = st.boot_services().memory_map_size(); - // allocated memory region was not big enough -> free it again - st.boot_services() - .free_pool(ptr) - .expect("Failed to free temporary memory for memory map!"); - } - }; - log::trace!("exiting boot services"); - let (system_table, memory_map) = st - .exit_boot_services(image, mmap_storage) - .expect("Failed to exit boot services"); + let (system_table, memory_map) = st.exit_boot_services(); let mut frame_allocator = - LegacyFrameAllocator::new(memory_map.copied().map(UefiMemoryDescriptor)); + LegacyFrameAllocator::new(memory_map.entries().copied().map(UefiMemoryDescriptor)); let page_tables = create_page_tables(&mut frame_allocator); let mut ramdisk_len = 0u64;