[coreboot] coreinfo: Add a module for browsing the boot LAR

Peter Stuge peter at stuge.se
Sat Apr 26 01:36:12 CEST 2008


On Fri, Apr 25, 2008 at 05:25:24PM -0600, Jordan Crouse wrote:
> coreinfo:  Add a module for browsing the boot LAR
> 
> Signed-off-by: Jordan Crouse <jordan.crouse at amd.com>

Acked-by: Peter Stuge <peter at stuge.se>


> Index: coreinfo/Kconfig
> ===================================================================
> --- coreinfo.orig/Kconfig	2008-04-25 10:08:02.000000000 -0600
> +++ coreinfo/Kconfig	2008-04-25 10:17:41.000000000 -0600
> @@ -68,5 +68,9 @@
>  	bool "Enable the coreboot bootlog module"
>  	default y
>  
> +config MODULE_LAR
> +	bool "Enable the coreboot LAR module"
> +	default y
> +
>  endmenu
>  
> Index: coreinfo/Makefile
> ===================================================================
> --- coreinfo.orig/Makefile	2008-04-25 10:08:02.000000000 -0600
> +++ coreinfo/Makefile	2008-04-25 17:24:38.000000000 -0600
> @@ -51,7 +51,7 @@
>  INCLUDES = -Ibuild
>  CFLAGS := -Wall -Werror -Os $(INCLUDES)
>  OBJECTS = cpuinfo_module.o cpuid.S.o pci_module.o coreboot_module.o \
> -	  nvram_module.o bootlog_module.o coreinfo.o
> +	  nvram_module.o bootlog_module.o lar_module.o coreinfo.o
>  OBJS    = $(patsubst %,$(obj)/%,$(OBJECTS))
>  TARGET  = $(obj)/coreinfo.elf
>  
> Index: coreinfo/coreinfo.c
> ===================================================================
> --- coreinfo.orig/coreinfo.c	2008-04-25 10:09:34.000000000 -0600
> +++ coreinfo/coreinfo.c	2008-04-25 17:22:21.000000000 -0600
> @@ -27,6 +27,7 @@
>  extern struct coreinfo_module coreboot_module;
>  extern struct coreinfo_module nvram_module;
>  extern struct coreinfo_module bootlog_module;
> +extern struct coreinfo_module lar_module;
>  
>  struct coreinfo_module *system_modules[] = {
>  #ifdef CONFIG_MODULE_CPUINFO
> @@ -47,6 +48,9 @@
>  #ifdef CONFIG_MODULE_BOOTLOG
>  	&bootlog_module,
>  #endif
> +#ifdef CONFIG_MODULE_LAR
> +	&lar_module
> +#endif
>  };
>  
>  struct coreinfo_cat {
> @@ -90,7 +94,7 @@
>  	char menu[80];
>  	char *ptr = menu;
>  
> -	wmove(stdscr, 22, 0);
> +	wmove(stdscr, SCREEN_Y - 2, 0);
>  
>  	for (j = 0; j < SCREEN_X; j++)
>  		waddch(stdscr, ' ');
> @@ -101,7 +105,7 @@
>  	for (i = 0; i < cat->count; i++)
>  		ptr += sprintf(ptr, "[%c: %s] ", 'A' + i, cat->modules[i]->name);
>  
> -	mvprintw(22, 0, menu);
> +	mvprintw(SCREEN_Y - 2, 0, menu);
>  }
>  
>  static void print_menu(void)
> @@ -110,7 +114,7 @@
>  	char menu[80];
>  	char *ptr = menu;
>  
> -	wmove(stdscr, 23, 0);
> +	wmove(stdscr, SCREEN_Y - 1, 0);
>  
>  	for (j = 0; j < SCREEN_X; j++)
>  		waddch(stdscr, ' ');
> @@ -118,10 +122,10 @@
>  	for (i = 0; i < ARRAY_SIZE(categories); i++)
>  		ptr += sprintf(ptr, "F%d: %s ", i + 1, categories[i].name);
>  
> -	mvprintw(23, 0, menu);
> +	mvprintw(SCREEN_Y - 1, 0, menu);
>  
>  #ifdef CONFIG_SHOW_DATE_TIME
> -	mvprintw(23, 59, "%02d/%02d/20%02d - %02d:%02d:%02d",
> +	mvprintw(SCREEN_Y - 1, 59, "%02d/%02d/20%02d - %02d:%02d:%02d",
>  		 bcd2dec(nvram_read(NVRAM_RTC_MONTH)),
>  		 bcd2dec(nvram_read(NVRAM_RTC_DAY)),
>  		 bcd2dec(nvram_read(NVRAM_RTC_YEAR)),
> @@ -243,12 +247,12 @@
>  	init_pair(2, COLOR_BLACK, COLOR_WHITE);
>  	init_pair(3, COLOR_WHITE, COLOR_WHITE);
>  
> -	modwin = newwin(22, 80, 1, 0);
> +	modwin = newwin(SCREEN_Y-3, SCREEN_X, 1, 0);
>  
>  	wattrset(stdscr, COLOR_PAIR(1) | A_BOLD);
>  	wattrset(modwin, COLOR_PAIR(2));
>  
> -	for (i = 0; i < 23; i++) {
> +	for (i = 0; i < SCREEN_Y - 1; i++) {
>  		wmove(modwin, i - 1, 0);
>  
>  		for (j = 0; j < SCREEN_X; j++)
> Index: coreinfo/lar_module.c
> ===================================================================
> --- /dev/null	1970-01-01 00:00:00.000000000 +0000
> +++ coreinfo/lar_module.c	2008-04-25 10:17:41.000000000 -0600
> @@ -0,0 +1,163 @@
> +/*
> + * This file is part of the coreinfo project.
> + *
> + * Copyright (C) 2008 Advanced Micro Devices, Inc.
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation; version 2 of the License.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
> + */
> +
> +#include "coreinfo.h"
> +
> +#ifdef CONFIG_MODULE_LAR
> +
> +static struct LAR *lar;
> +static int lcount;
> +static char **lnames;
> +
> +static int lar_module_init(void)
> +{
> +	int index = 0;
> +	struct larent *larent;
> +
> +	lar = openlar(NULL);
> +
> +	if (lar == NULL)
> +		return 0;
> +
> +	while((larent = readlar(lar)))
> +		lcount++;
> +
> +	lnames = malloc(lcount * sizeof(char *));
> +
> +	if (lnames == NULL)
> +		return 0;
> +
> +	rewindlar(lar);
> +
> +	while((larent = readlar(lar)))
> +		lnames[index++] = strdup((const char *) larent->name);
> +
> +	return 0;
> +}
> +
> +static int selected;
> +
> +static int lar_module_redraw(WINDOW *win)
> +{
> +	int i;
> +	int row = 2;
> +	struct larstat stat;
> +
> +	print_module_title(win, "LAR Listing");
> +
> +	if (lar == 0) {
> +		mvwprintw(win, 11, 61/2,  "Bad or missing LAR");
> +		return 0;
> +	}
> +
> +	/* Draw a line down the middle */
> +
> +	for(i = 2; i < 20; i++) {
> +		wmove(win, i, 30);
> +		waddch(win, '\263');
> +	}
> +
> +	/* Draw the names down the left side */
> +
> +	for(i = 0; i < lcount; i++) {
> +		if (i == selected)
> +			wattrset(win, COLOR_PAIR(3) | A_BOLD);
> +		else
> +			wattrset(win, COLOR_PAIR(2));
> +
> +		mvwprintw(win, 2 + i, 1, "%.25s", lnames[i]);
> +	}
> +
> +	/* Get the information for the LAR */
> +
> +	if (larstat(lar, lnames[selected], &stat)) {
> +		printf("larstat failed\n");
> +		return 0;
> +	}
> +
> +	wattrset(win, COLOR_PAIR(2));
> +
> +	mvwprintw(win, row++, 32, "Offset: 0x%x", stat.offset);
> +
> +	if (stat.compression) {
> +		switch(stat.compression) {
> +		case ALGO_LZMA:
> +			mvwprintw(win, row++, 32, "Compression: LZMA");
> +			break;
> +		case ALGO_NRV2B:
> +			mvwprintw(win, row++, 32, "Compression: NRV2B");
> +			break;
> +		case ALGO_ZEROES:
> +			mvwprintw(win, row++, 32, "Compression: zeroes");
> +			break;
> +		}
> +
> +		mvwprintw(win, row++, 32, "Compressed length: %d", stat.len);
> +		mvwprintw(win, row++, 32, "Compressed checksum: 0x%x", stat.compchecksum);
> +	}
> +
> +	mvwprintw(win, row++, 32, "Length: %d", stat.reallen);
> +	mvwprintw(win, row++, 32, "Checksum: 0x%x", stat.checksum);
> +	mvwprintw(win, row++, 32, "Load Address: 0x%llx", stat.loadaddress);
> +	mvwprintw(win, row++, 32, "Entry Point: 0x%llx", stat.entry);
> +
> +	return 0;
> +}
> +
> +static int lar_module_handle(int key)
> +{
> +	int ret = 0;
> +
> +	if (lar == NULL)
> +		return 0;
> +
> +	switch (key) {
> +	case KEY_DOWN:
> +		if (selected + 1 < lcount) {
> +			selected++;
> +			ret = 1;
> +		}
> +		break;
> +	case KEY_UP:
> +		if (selected > 0) {
> +			selected--;
> +			ret = 1;
> +		}
> +		break;
> +	}
> +
> +	return ret;
> +}
> +
> +struct coreinfo_module lar_module = {
> +	.name = "LAR",
> +	.init = lar_module_init,
> +	.redraw = lar_module_redraw,
> +	.handle = lar_module_handle
> +};
> +#else
> +
> +struct coreinfo_module lar_module = {
> +};
> +
> +#endif
> +
> +
> +
> +




More information about the coreboot mailing list