summaryrefslogtreecommitdiff
path: root/payloads/libpayload/drivers
diff options
context:
space:
mode:
authorNico Huber <nico.huber@secunet.com>2020-01-23 13:23:09 +0100
committerPatrick Georgi <pgeorgi@google.com>2020-03-09 08:09:44 +0000
commitde74842049cccc7c47861ce38029d81058c42fef (patch)
treec4f7f742f7a375e4d332a8aba37775a10cc66afc /payloads/libpayload/drivers
parente61241822160d9a3e4ce26464798a590fac22a91 (diff)
libpayload/corebootfb: Add option to center a 80x25 console
This makes payloads which are hardcoded to a 80x25 console look much better, e.g. FILO with its "GRUB" user interface. Change-Id: I9f4752328d85d148cd40a0c2337c7191e1d6a586 Signed-off-by: Nico Huber <nico.huber@secunet.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/38538 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net> Reviewed-by: Angel Pons <th3fanbus@gmail.com>
Diffstat (limited to 'payloads/libpayload/drivers')
-rw-r--r--payloads/libpayload/drivers/video/corebootfb.c23
1 files changed, 21 insertions, 2 deletions
diff --git a/payloads/libpayload/drivers/video/corebootfb.c b/payloads/libpayload/drivers/video/corebootfb.c
index c4b50480dd..8e7ac11540 100644
--- a/payloads/libpayload/drivers/video/corebootfb.c
+++ b/payloads/libpayload/drivers/video/corebootfb.c
@@ -236,8 +236,16 @@ static int corebootfb_init(void)
font_init(FI->x_resolution);
- coreboot_video_console.columns = FI->x_resolution / font_width;
- coreboot_video_console.rows = FI->y_resolution / font_height;
+ /* Draw centered on the framebuffer if requested and feasible, */
+ const int center =
+ IS_ENABLED(CONFIG_LP_COREBOOT_VIDEO_CENTERED)
+ && coreboot_video_console.columns * font_width <= FI->x_resolution
+ && coreboot_video_console.rows * font_height <= FI->y_resolution;
+ /* adapt to the framebuffer size, otherwise. */
+ if (!center) {
+ coreboot_video_console.columns = FI->x_resolution / font_width;
+ coreboot_video_console.rows = FI->y_resolution / font_height;
+ }
chars = malloc(coreboot_video_console.rows *
coreboot_video_console.columns * 2);
@@ -246,6 +254,17 @@ static int corebootfb_init(void)
// clear boot splash screen if there is one.
corebootfb_clear();
+
+ if (center) {
+ FI->physical_address +=
+ (FI->x_resolution - coreboot_video_console.columns * font_width)
+ / 2 * FI->bits_per_pixel / 8
+ + (FI->y_resolution - coreboot_video_console.rows * font_height)
+ / 2 * FI->bytes_per_line;
+ FI->x_resolution = coreboot_video_console.columns * font_width;
+ FI->y_resolution = coreboot_video_console.rows * font_height;
+ }
+
return 0;
}