diff options
author | Tom <tomut@yahoo.com> | 2022-01-05 15:05:09 -0700 |
---|---|---|
committer | Linus Groh <mail@linusgroh.de> | 2022-01-06 22:34:11 +0100 |
commit | 6a4d06e7392cae060f5cb11d6dc2ff74e46dcbd0 (patch) | |
tree | cd43cfeca42fc0267ca2402145662b14698705e4 /Kernel/Prekernel | |
parent | 785c10fda9f2885530e051ea94e9ee7bc3b61811 (diff) | |
download | serenity-6a4d06e7392cae060f5cb11d6dc2ff74e46dcbd0.zip |
Kernel: Only use multiboot framebuffer details if present
We should only look at the framebuffer structure members if the
MULTIBOOT_INFO_FRAMEBUFFER_INFO bit is set in the flags field.
Also add some logging if we ignored the fbdev command line argument
due to either not having a framebuffer provided by the bootloader, or
because we don't support the framebuffer format.
Diffstat (limited to 'Kernel/Prekernel')
-rw-r--r-- | Kernel/Prekernel/init.cpp | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/Kernel/Prekernel/init.cpp b/Kernel/Prekernel/init.cpp index 4a186c3fa7..c28931a444 100644 --- a/Kernel/Prekernel/init.cpp +++ b/Kernel/Prekernel/init.cpp @@ -167,7 +167,7 @@ extern "C" [[noreturn]] void init() return (decltype(ptr))((FlatPtr)ptr + kernel_mapping_base); }; - BootInfo info; + BootInfo info {}; info.start_of_prekernel_image = (PhysicalPtr)start_of_prekernel_image; info.end_of_prekernel_image = (PhysicalPtr)end_of_prekernel_image; info.physical_to_virtual_offset = kernel_load_base - kernel_physical_base; @@ -188,12 +188,14 @@ extern "C" [[noreturn]] void init() info.multiboot_memory_map_count = multiboot_info_ptr->mmap_length / sizeof(multiboot_memory_map_t); info.multiboot_modules = adjust_by_mapping_base((FlatPtr)multiboot_info_ptr->mods_addr); info.multiboot_modules_count = multiboot_info_ptr->mods_count; - info.multiboot_framebuffer_addr = multiboot_info_ptr->framebuffer_addr; - info.multiboot_framebuffer_pitch = multiboot_info_ptr->framebuffer_pitch; - info.multiboot_framebuffer_width = multiboot_info_ptr->framebuffer_width; - info.multiboot_framebuffer_height = multiboot_info_ptr->framebuffer_height; - info.multiboot_framebuffer_bpp = multiboot_info_ptr->framebuffer_bpp; - info.multiboot_framebuffer_type = multiboot_info_ptr->framebuffer_type; + if ((multiboot_info_ptr->flags & MULTIBOOT_INFO_FRAMEBUFFER_INFO) != 0) { + info.multiboot_framebuffer_addr = multiboot_info_ptr->framebuffer_addr; + info.multiboot_framebuffer_pitch = multiboot_info_ptr->framebuffer_pitch; + info.multiboot_framebuffer_width = multiboot_info_ptr->framebuffer_width; + info.multiboot_framebuffer_height = multiboot_info_ptr->framebuffer_height; + info.multiboot_framebuffer_bpp = multiboot_info_ptr->framebuffer_bpp; + info.multiboot_framebuffer_type = multiboot_info_ptr->framebuffer_type; + } asm( #if ARCH(I386) |