summaryrefslogtreecommitdiff
path: root/payloads/coreinfo/coreinfo.c
diff options
context:
space:
mode:
authorJordan Crouse <jordan.crouse@amd.com>2008-03-20 00:11:05 +0000
committerJordan Crouse <jordan.crouse@amd.com>2008-03-20 00:11:05 +0000
commit7249f7979237d7f14941036dd931545b5c9e73fb (patch)
tree06e7db61c87c2204ec48623c59cf4ec11b0d98c8 /payloads/coreinfo/coreinfo.c
parentc52761be0a67f31af13ffd2c6f0217988c8b5175 (diff)
downloadcoreboot-7249f7979237d7f14941036dd931545b5c9e73fb.tar.xz
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.c172
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();
+}