diff options
author | Jordan Crouse <jordan.crouse@amd.com> | 2008-03-20 00:11:05 +0000 |
---|---|---|
committer | Jordan Crouse <jordan.crouse@amd.com> | 2008-03-20 00:11:05 +0000 |
commit | 7249f7979237d7f14941036dd931545b5c9e73fb (patch) | |
tree | 06e7db61c87c2204ec48623c59cf4ec11b0d98c8 /payloads/coreinfo/coreinfo.c | |
parent | c52761be0a67f31af13ffd2c6f0217988c8b5175 (diff) |
corinfo: Inital release of the coreinfo code
This is the intial release of the coreinfo payload code.
Signed-off-by: Jordan Crouse <jordan.crouse@amd.com>
Acked-by: Uwe Hermann <uwe@hermann-uwe.de>
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3173 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
Diffstat (limited to 'payloads/coreinfo/coreinfo.c')
-rw-r--r-- | payloads/coreinfo/coreinfo.c | 172 |
1 files changed, 172 insertions, 0 deletions
diff --git a/payloads/coreinfo/coreinfo.c b/payloads/coreinfo/coreinfo.c new file mode 100644 index 0000000000..6dc07397a1 --- /dev/null +++ b/payloads/coreinfo/coreinfo.c @@ -0,0 +1,172 @@ +/* + * 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" + +#define SCREEN_Y 24 +#define SCREEN_X 80 + +extern struct coreinfo_module cpuinfo_module; +extern struct coreinfo_module pci_module; +extern struct coreinfo_module coreboot_module; + +#define MODULE_COUNT 3 + +struct coreinfo_module *modules[MODULE_COUNT] = { + &cpuinfo_module, + &pci_module, + &coreboot_module +}; + +static WINDOW *modwin; +static int curwin; + +void print_module_title(WINDOW *win, const char *title) +{ + int i; + + wattrset(win, COLOR_PAIR(2)); + mvwprintw(win, 0, 1, title); + + wmove(win, 1, 1); + + for(i = 0; i < 78; i++) + waddch(win, '\304'); +} + +void print_menu(void) { + int i, len; + char menu[80]; + char *ptr = menu; + int j; + + wmove(stdscr, 23, 0); + + for(j = 0; j < SCREEN_X; j++) + waddch(stdscr, ' '); + + for(i = 0; i < MODULE_COUNT; i++) + ptr += sprintf(ptr, "F%d: %s ", i + 1, modules[i]->name); + + mvprintw(23, 0, menu); +} + +void center(int row, const char *str) +{ + int len = strlen(str); + int j; + + wmove(stdscr, row, 0); + + for(j = 0; j < SCREEN_X; j++) + waddch(stdscr, ' '); + + mvprintw(row, (SCREEN_X - len) / 2, str); +} + +void header(int row, const char *str) +{ + char buf[SCREEN_X]; + char *ptr = buf; + int i; + int len = strlen(str) + 4; + + for(i = 0; i < (SCREEN_X - len) / 2; i++) + ptr += sprintf(ptr, "="); + + ptr += sprintf(ptr, "[ %s ]", str); + + + for(i = ((SCREEN_X - len) / 2) + len; i < SCREEN_X ; i++) + ptr += sprintf(ptr, "="); + + mvprintw(row, 0, buf); +} + +static void redraw_module(void) +{ + wclear(modwin); + modules[curwin]->redraw(modwin); + refresh(); +} + +int loop(void) +{ + int key; + + center(0, "coreinfo v0.1"); + + print_menu(); + modules[curwin]->redraw(modwin); + refresh(); + + while(1) { + key = getch(); + + if (key == ERR) + continue; + + if (key >= KEY_F(1) && key <= KEY_F(9)) { + unsigned char ch = key - KEY_F(1); + + if (ch < MODULE_COUNT) { + curwin = ch; + redraw_module(); + continue; + } + } + + if (modules[curwin]->handle) + if (modules[curwin]->handle(key)) + redraw_module(); + } +} + +int main(void) +{ + int i, j; + + curses_enable_serial(0); + curses_enable_vga(1); + + initscr(); + + init_pair(1, COLOR_WHITE, COLOR_GREEN); + init_pair(2, COLOR_BLACK, COLOR_WHITE); + init_pair(3, COLOR_WHITE, COLOR_WHITE); + + modwin = newwin(23, 80, 1, 0); + + wattrset(stdscr, COLOR_PAIR(1) | A_BOLD); + wattrset(modwin, COLOR_PAIR(2)); + + for(i = 0; i < 23; i++) { + wmove(modwin, i - 1, 0); + + for(j = 0; j < SCREEN_X; j++) + waddch(modwin, ' '); + } + + refresh(); + + for(i = 0; i < MODULE_COUNT; i++) + modules[i]->init(); + + loop(); +} |