[coreboot] [FILO] r115 - trunk/filo/i386

repository service svn at coreboot.org
Fri Mar 26 12:59:16 CET 2010


Author: stepan
Date: Fri Mar 26 12:59:14 2010
New Revision: 115
URL: http://tracker.coreboot.org/trac/filo/changeset/115

Log:
linux loader support for fb only mode
(not fully functional, but does not break anything either)
Signed-off-by: Stefan Reinauer <stepan at coresystems.de>

Modified:
   trunk/filo/i386/linux_load.c

Modified: trunk/filo/i386/linux_load.c
==============================================================================
--- trunk/filo/i386/linux_load.c	Fri Mar 26 12:57:34 2010	(r114)
+++ trunk/filo/i386/linux_load.c	Fri Mar 26 12:59:14 2010	(r115)
@@ -27,6 +27,7 @@
 
 #include <libpayload.h>
 #include <libpayload-config.h>
+#include <coreboot_tables.h>
 #include <config.h>
 #include <fs.h>
 #include "context.h"
@@ -297,6 +298,33 @@
     debug("ext_mem_k=%d, alt_mem_k=%d\n", params->ext_mem_k, params->alt_mem_k);
 }
 
+/* Video mode */
+static void
+set_video_mode(struct linux_params *params)
+{
+#if CONFIG_COREBOOT_VIDEO_CONSOLE
+	/* Are we running on a framebuffer console? */
+	if (!lib_sysinfo.framebuffer)
+		return;
+
+	params->lfb_width = lib_sysinfo.framebuffer->x_resolution;
+	params->lfb_height = lib_sysinfo.framebuffer->y_resolution;
+	params->lfb_depth = lib_sysinfo.framebuffer->bits_per_pixel;
+	params->lfb_linelength = lib_sysinfo.framebuffer->bytes_per_line;
+	params->lfb_base = lib_sysinfo.framebuffer->physical_address;
+	// prolly not enough for the boot splash?!
+	params->lfb_size = (params->lfb_linelength * params->lfb_height + 65535 ) >> 16;
+	params->red_size = lib_sysinfo.framebuffer->red_mask_size;
+	params->red_pos = lib_sysinfo.framebuffer->red_mask_pos;
+	params->green_size = lib_sysinfo.framebuffer->green_mask_size;
+	params->green_pos = lib_sysinfo.framebuffer->green_mask_pos;
+	params->blue_size = lib_sysinfo.framebuffer->blue_mask_size;
+	params->blue_pos = lib_sysinfo.framebuffer->blue_mask_pos;
+	params->rsvd_size = lib_sysinfo.framebuffer->reserved_mask_size;
+	params->rsvd_pos = lib_sysinfo.framebuffer->reserved_mask_pos;
+#endif
+}
+
 /*
  * Parse command line
  * Some parameters, like initrd=<file>, are not passed to kernel,
@@ -667,6 +695,7 @@
     params = phys_to_virt(LINUX_PARAM_LOC);
     init_linux_params(params, &hdr);
     set_memory_size(params);
+    set_video_mode(params);
     initrd_file = parse_command_line(cmdline, phys_to_virt(COMMAND_LINE_LOC));
     set_command_line_loc(params, &hdr);
 




More information about the coreboot mailing list