summaryrefslogtreecommitdiff
path: root/Kernel/Prekernel
diff options
context:
space:
mode:
authorTom <tomut@yahoo.com>2022-01-05 15:05:09 -0700
committerLinus Groh <mail@linusgroh.de>2022-01-06 22:34:11 +0100
commit6a4d06e7392cae060f5cb11d6dc2ff74e46dcbd0 (patch)
treecd43cfeca42fc0267ca2402145662b14698705e4 /Kernel/Prekernel
parent785c10fda9f2885530e051ea94e9ee7bc3b61811 (diff)
downloadserenity-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.cpp16
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)