coreinfo:  Fix the subwindow refresh based on the libpayload changes

Changes to libpayload to fix subwindows broke coreinfo.  This fixes it,
and improves performance by eliminating the entire screen refresh every
second.

Signed-off-by: Jordan Crouse <jordan.crouse@amd.com>
Acked-by: Myles Watson <mylesgw@gmail.com>


git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3339 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
diff --git a/payloads/coreinfo/coreinfo.c b/payloads/coreinfo/coreinfo.c
index ae43357..f7e8d88 100644
--- a/payloads/coreinfo/coreinfo.c
+++ b/payloads/coreinfo/coreinfo.c
@@ -19,7 +19,7 @@
 
 #include "coreinfo.h"
 
-#define SCREEN_Y 24
+#define SCREEN_Y 25
 #define SCREEN_X 80
 
 extern struct coreinfo_module cpuinfo_module;
@@ -73,6 +73,8 @@
 
 
 static WINDOW *modwin;
+static WINDOW *menuwin;
+
 static int curwin;
 
 void print_module_title(WINDOW *win, const char *title)
@@ -94,10 +96,10 @@
 	char menu[80];
 	char *ptr = menu;
 
-	wmove(stdscr, SCREEN_Y - 2, 0);
+	wmove(menuwin, 0, 0);
 
 	for (j = 0; j < SCREEN_X; j++)
-		waddch(stdscr, ' ');
+		waddch(menuwin, ' ');
 
 	if (!cat->count)
 		return;
@@ -105,7 +107,7 @@
 	for (i = 0; i < cat->count; i++)
 		ptr += sprintf(ptr, "[%c: %s] ", 'A' + i, cat->modules[i]->name);
 
-	mvprintw(SCREEN_Y - 2, 0, menu);
+	mvwprintw(menuwin, 0, 0, menu);
 }
 
 #ifdef CONFIG_SHOW_DATE_TIME
@@ -118,7 +120,7 @@
 
 	rtc_read_clock(&tm);
 
-	mvprintw(23, 57, "%02d/%02d/%04d - %02d:%02d:%02d",
+	mvwprintw(menuwin, 0, 57, "%02d/%02d/%04d - %02d:%02d:%02d",
 		tm.tm_mon, tm.tm_mday, 1900+tm.tm_year, tm.tm_hour,
 		tm.tm_min, tm.tm_sec);
 }
@@ -130,10 +132,10 @@
 	char menu[80];
 	char *ptr = menu;
 
-	wmove(stdscr, SCREEN_Y - 1, 0);
+	wmove(menuwin, 1, 0);
 
 	for (j = 0; j < SCREEN_X; j++)
-		waddch(stdscr, ' ');
+		waddch(menuwin, ' ');
 
 	for (i = 0; i < ARRAY_SIZE(categories); i++) {
 		if (categories[i].count == 0)
@@ -142,7 +144,7 @@
 		ptr += sprintf(ptr, "F%d: %s ", i + 1, categories[i].name);
 	}
 
-	mvprintw(23, 0, menu);
+	mvwprintw(menuwin, 1, 0, menu);
 
 #ifdef CONFIG_SHOW_DATE_TIME
 	print_time_and_date();
@@ -192,7 +194,7 @@
 
 	wclear(modwin);
 	cat->modules[cat->cur]->redraw(modwin);
-	refresh();
+	wrefresh(modwin);
 }
 
 static void handle_category_key(struct coreinfo_cat *cat, int key)
@@ -219,6 +221,7 @@
 	int key;
 
 	center(0, "coreinfo v0.1");
+	refresh();
 
 	print_menu();
 	print_submenu(&categories[curwin]);
@@ -229,7 +232,7 @@
 	while (1) {
 #ifdef CONFIG_SHOW_DATE_TIME
 		print_time_and_date();
-		refresh();
+		wrefresh(menuwin);
 #endif
 
 		key = getch();
@@ -271,10 +274,12 @@
 	init_pair(2, COLOR_BLACK, COLOR_WHITE);
 	init_pair(3, COLOR_WHITE, COLOR_WHITE);
 
-	modwin = newwin(SCREEN_Y-2, SCREEN_X, 1, 0);
+	modwin = newwin(SCREEN_Y - 3, SCREEN_X, 1, 0);
+	menuwin = newwin(2, SCREEN_X, SCREEN_Y - 2, 0);
 
 	wattrset(stdscr, COLOR_PAIR(1) | A_BOLD);
 	wattrset(modwin, COLOR_PAIR(2));
+	wattrset(menuwin, COLOR_PAIR(1) | A_BOLD);
 
 	for (i = 0; i < SCREEN_Y - 1; i++) {
 		wmove(modwin, i - 1, 0);
@@ -283,7 +288,7 @@
 			waddch(modwin, ' ');
 	}
 
-	refresh();
+	wrefresh(modwin);
 
 	for (i = 0; i < ARRAY_SIZE(categories); i++) {
 		for(j = 0; j < categories[i].count; j++)