summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--payloads/coreinfo/coreinfo.c117
1 files changed, 23 insertions, 94 deletions
diff --git a/payloads/coreinfo/coreinfo.c b/payloads/coreinfo/coreinfo.c
index c515d29bab..13a08f24a2 100644
--- a/payloads/coreinfo/coreinfo.c
+++ b/payloads/coreinfo/coreinfo.c
@@ -28,46 +28,24 @@ extern struct coreinfo_module coreboot_module;
extern struct coreinfo_module nvram_module;
extern struct coreinfo_module bootlog_module;
-struct coreinfo_module *system_modules[] = {
+struct coreinfo_module *modules[] = {
#ifdef CONFIG_MODULE_CPUINFO
&cpuinfo_module,
#endif
#ifdef CONFIG_MODULE_PCI
&pci_module,
#endif
-#ifdef CONFIG_MODULE_NVRAM
- &nvram_module,
-#endif
-};
-
-struct coreinfo_module *coreboot_modules[] = {
#ifdef CONFIG_MODULE_COREBOOT
&coreboot_module,
#endif
+#ifdef CONFIG_MODULE_NVRAM
+ &nvram_module,
+#endif
#ifdef CONFIG_MODULE_BOOTLOG
&bootlog_module,
#endif
};
-struct coreinfo_cat {
- char name[15];
- int cur;
- int count;
- struct coreinfo_module **modules;
-} categories[] = {
- {
- .name = "System",
- .modules = system_modules,
- .count = ARRAY_SIZE(system_modules),
- },
- {
- .name = "Coreboot",
- .modules = coreboot_modules,
- .count = ARRAY_SIZE(coreboot_modules),
- }
-};
-
-
static WINDOW *modwin;
static int curwin;
@@ -84,26 +62,6 @@ void print_module_title(WINDOW *win, const char *title)
waddch(win, '\304');
}
-static void print_submenu(struct coreinfo_cat *cat)
-{
- int i, j;
- char menu[80];
- char *ptr = menu;
-
- wmove(stdscr, 22, 0);
-
- for (j = 0; j < SCREEN_X; j++)
- waddch(stdscr, ' ');
-
- if (!cat->count)
- return;
-
- for (i = 0; i < cat->count; i++)
- ptr += sprintf(ptr, "[%c: %s] ", 'A' + i, cat->modules[i]->name);
-
- mvprintw(22, 0, menu);
-}
-
static void print_menu(void)
{
int i, j;
@@ -115,14 +73,11 @@ static void print_menu(void)
for (j = 0; j < SCREEN_X; j++)
waddch(stdscr, ' ');
- for (i = 0; i < ARRAY_SIZE(categories); i++) {
- if (categories[i].count == 0)
- continue;
-
- ptr += sprintf(ptr, "F%d: %s ", i + 1, categories[i].name);
- }
+ for (i = 0; i < ARRAY_SIZE(modules); i++)
+ ptr += sprintf(ptr, "F%d: %s ", i + 1, modules[i]->name);
- mvprintw(23, 0, menu);
+ if (ARRAY_SIZE(modules) != 0)
+ mvprintw(23, 0, menu);
#ifdef CONFIG_SHOW_DATE_TIME
mvprintw(23, 59, "%02d/%02d/20%02d - %02d:%02d:%02d",
@@ -162,8 +117,6 @@ static void header(int row, const char *str)
ptr += sprintf(ptr, "[ %s ]", str);
-
-
for (i = ((SCREEN_X - len) / 2) + len; i < SCREEN_X; i++)
ptr += sprintf(ptr, "=");
@@ -171,35 +124,16 @@ static void header(int row, const char *str)
}
#endif
-static void redraw_module(struct coreinfo_cat *cat)
+static void redraw_module(void)
{
- if (cat->count == 0)
+ if (ARRAY_SIZE(modules) == 0)
return;
wclear(modwin);
- cat->modules[cat->cur]->redraw(modwin);
+ modules[curwin]->redraw(modwin);
refresh();
}
-static void handle_category_key(struct coreinfo_cat *cat, int key)
-{
- if (key >= 'a' && key <= 'z') {
- int index = key - 'a';
-
- if (index < cat->count) {
-
- cat->cur = index;
- redraw_module(cat);
- return;
- }
- }
-
- if (cat->count && cat->modules[cat->cur]->handle) {
- if (cat->modules[cat->cur]->handle(key))
- redraw_module(cat);
- }
-}
-
static void loop(void)
{
int key;
@@ -207,8 +141,9 @@ static void loop(void)
center(0, "coreinfo v0.1");
print_menu();
- print_submenu(&categories[curwin]);
- redraw_module(&categories[curwin]);
+ if (ARRAY_SIZE(modules) != 0)
+ modules[curwin]->redraw(modwin);
+ refresh();
while (1) {
key = getch();
@@ -219,21 +154,18 @@ static void loop(void)
if (key >= KEY_F(1) && key <= KEY_F(9)) {
unsigned char ch = key - KEY_F(1);
- if (ch <= ARRAY_SIZE(categories)) {
- if (ch == ARRAY_SIZE(categories))
+ if (ch <= ARRAY_SIZE(modules)) {
+ if (ch == ARRAY_SIZE(modules))
continue;
- if (categories[ch].count == 0)
- continue;
-
curwin = ch;
- print_submenu(&categories[curwin]);
- redraw_module(&categories[curwin]);
+ redraw_module();
continue;
}
}
-
- handle_category_key(&categories[curwin], key);
+ if (ARRAY_SIZE(modules) != 0 && modules[curwin]->handle)
+ if (modules[curwin]->handle(key))
+ redraw_module();
}
}
@@ -250,7 +182,7 @@ int main(void)
init_pair(2, COLOR_BLACK, COLOR_WHITE);
init_pair(3, COLOR_WHITE, COLOR_WHITE);
- modwin = newwin(22, 80, 1, 0);
+ modwin = newwin(23, 80, 1, 0);
wattrset(stdscr, COLOR_PAIR(1) | A_BOLD);
wattrset(modwin, COLOR_PAIR(2));
@@ -264,11 +196,8 @@ int main(void)
refresh();
- for (i = 0; i < ARRAY_SIZE(categories); i++) {
- for(j = 0; j < categories[i].count; j++)
- categories[i].modules[j]->init();
-
- }
+ for (i = 0; i < ARRAY_SIZE(modules); i++)
+ modules[i]->init();
loop();