Skip to content

Commit d6e0d2b

Browse files
committed
don't fail when there's no uefi graphics output
1 parent c9444f5 commit d6e0d2b

File tree

1 file changed

+11
-9
lines changed

1 file changed

+11
-9
lines changed

Diff for: uefi/src/main.rs

+11-9
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ fn main_inner(image: Handle, mut st: SystemTable<Boot>) -> Status {
7676

7777
let kernel = load_kernel(image, &mut st);
7878

79-
let (framebuffer_addr, framebuffer_info) = init_logger(&st, kernel.config);
79+
let framebuffer = init_logger(&st, kernel.config);
8080

8181
// we no longer need the system table for printing panics
8282
unsafe {
@@ -85,7 +85,9 @@ fn main_inner(image: Handle, mut st: SystemTable<Boot>) -> Status {
8585

8686
log::info!("UEFI bootloader started");
8787
log::info!("Reading kernel and configuration from disk was successful");
88-
log::info!("Using framebuffer at {:#x}", framebuffer_addr);
88+
if let Some(framebuffer) = framebuffer {
89+
log::info!("Using framebuffer at {:#x}", framebuffer.addr);
90+
}
8991

9092
let mmap_storage = {
9193
let max_mmap_size =
@@ -107,10 +109,7 @@ fn main_inner(image: Handle, mut st: SystemTable<Boot>) -> Status {
107109
let page_tables = create_page_tables(&mut frame_allocator);
108110

109111
let system_info = SystemInfo {
110-
framebuffer: Some(RawFrameBufferInfo {
111-
addr: framebuffer_addr,
112-
info: framebuffer_info,
113-
}),
112+
framebuffer,
114113
rsdp_addr: {
115114
use uefi::table::cfg;
116115
let mut config_entries = system_table.config_table().iter();
@@ -366,11 +365,11 @@ fn create_page_tables(
366365
}
367366
}
368367

369-
fn init_logger(st: &SystemTable<Boot>, config: BootloaderConfig) -> (PhysAddr, FrameBufferInfo) {
368+
fn init_logger(st: &SystemTable<Boot>, config: BootloaderConfig) -> Option<RawFrameBufferInfo> {
370369
let gop = st
371370
.boot_services()
372371
.locate_protocol::<GraphicsOutput>()
373-
.expect("failed to locate gop");
372+
.ok()?;
374373
let gop = unsafe { &mut *gop.get() };
375374

376375
let mode = {
@@ -423,7 +422,10 @@ fn init_logger(st: &SystemTable<Boot>, config: BootloaderConfig) -> (PhysAddr, F
423422

424423
bootloader_x86_64_common::init_logger(slice, info);
425424

426-
(PhysAddr::new(framebuffer.as_mut_ptr() as u64), info)
425+
Some(RawFrameBufferInfo {
426+
addr: PhysAddr::new(framebuffer.as_mut_ptr() as u64),
427+
info,
428+
})
427429
}
428430

429431
#[panic_handler]

0 commit comments

Comments
 (0)