Index: display.c =================================================================== --- display.c (revision 314) +++ display.c (working copy) @@ -91,15 +91,18 @@ void setup_windows(void) { + int yline = MAX_NUM_CSTATES; + getmaxyx(stdscr, maxy, maxx); zap_windows(); title_bar_window = subwin(stdscr, 1, maxx, 0, 0); - cstate_window = subwin(stdscr, 7, maxx, 2, 0); - wakeup_window = subwin(stdscr, 1, maxx, 9, 0); - battery_power_window = subwin(stdscr, 2, maxx, 10, 0); - timerstat_window = subwin(stdscr, maxy-16, maxx, 12, 0); + + cstate_window = subwin(stdscr, (yline + 2), maxx, 2, 0); + wakeup_window = subwin(stdscr, 1, maxx, (yline + 5), 0); + battery_power_window = subwin(stdscr, 2, maxx, (yline + 6), 0); + timerstat_window = subwin(stdscr, maxy-16, maxx, (yline + 8), 0); maxtimerstats = maxy-16 -2; maxwidth = maxx - 18; suggestion_window = subwin(stdscr, 3, maxx, maxy-4, 0); @@ -166,18 +169,18 @@ int i, count = 0; werase(cstate_window); - for (i=0; i < 10; i++) { + for (i=0; i < MAX_CSTATE_LINES; i++) { if (i == topcstate+1) wattron(cstate_window, A_BOLD); else wattroff(cstate_window, A_BOLD); - if (strlen(cstate_lines[i]) && count <= 6) { + if (strlen(cstate_lines[i]) && count <= MAX_CSTATE_LINES) { print(cstate_window, count, 0, "%s", cstate_lines[i]); count++; } } - for (i=0; i<6; i++) { + for (i=0; i\n")); } else { @@ -907,7 +907,7 @@ sprintf(cstate_lines[1], _("C0 (cpu running) (%4.1f%%)\n"), percentage); if (percentage > 50) topcstate = 0; - for (i = 0; i < 8; i++) + for (i = 0; i < MAX_NUM_CSTATES; i++) if (cur_usage[i]) { sleept = (cur_duration[i] - last_duration[i]) / (cur_usage[i] - last_usage[i] + 0.1) / FREQ; @@ -1173,3 +1173,9 @@ return 0; } + +#if defined (__I386__) + print_intel_cstates(); +#elif defined (OMAP3) + print_omap3_cstates(); +#endif Index: omapcstates.c =================================================================== --- omapcstates.c (revision 0) +++ omapcstates.c (revision 0) @@ -0,0 +1,65 @@ +/* + * * Copyright 2008, Texas Instruments Incorporated. + * * + * * This file prints the C states supported by the OMAP processor. + * * (Based on intelcstates.c) + * * + * * This program file 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 in a file named COPYING; if not, write to the + * * Free Software Foundation, Inc., + * * 51 Franklin Street, Fifth Floor, + * * Boston, MA 02110-1301 USA + * */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "powertop.h" + + +#if defined(OMAP3) +/** + * * print_omap3_cstates() - Prints the list of supported C-states. + * * + * * This functions uses standard sysfs interface of the cpuidle framework + * * to extract the information of the C-states supported by the Linux + * * kernel. + * **/ +void print_omap3_cstates(void) +{ + DIR *dir; + struct dirent *entry; + + dir = opendir("/sys/devices/system/cpu/cpu0/cpuidle"); + + if (dir) { + printf(_("Supported C-states : ")); + + while ((entry = readdir(dir))) { + if (strlen(entry->d_name) < 3) + continue; + + printf("C%s ", entry->d_name); + } + printf("\n"); + + closedir(dir); + } +} +#endif + Index: powertop.h =================================================================== --- powertop.h (revision 314) +++ powertop.h (working copy) @@ -28,6 +28,20 @@ #include +#if defined(__I386__) +#define MAX_NUM_CSTATES 4 +#define MAX_NUM_PSTATES 5 + +#elif defined(OMAP3) +#define MAX_NUM_CSTATES 7 +#define MAX_NUM_PSTATES 5 + +#else +#error "No valid architecture is defined." +#endif + +#define MAX_CSTATE_LINES (MAX_NUM_CSTATES + 3) + struct line { char *string; int count; @@ -64,8 +78,8 @@ -extern char cstate_lines[12][200]; -extern char cpufreqstrings[6][80]; +extern char cstate_lines[MAX_CSTATE_LINES][200]; +extern char cpufreqstrings[MAX_NUM_PSTATES][80]; extern int topcstate; extern int topfreq; Index: cpufreqstats.c =================================================================== --- cpufreqstats.c (revision 314) +++ cpufreqstats.c (working copy) @@ -42,7 +42,7 @@ struct cpufreqdata delta[16]; -char cpufreqstrings[6][80]; +char cpufreqstrings[MAX_NUM_PSTATES][80]; int topfreq = -1; static void zap(void) Index: Makefile =================================================================== --- Makefile (revision 314) +++ Makefile (working copy) @@ -1,7 +1,7 @@ BINDIR=/usr/bin LOCALESDIR=/usr/share/locale MANDIR=/usr/share/man/man1 -WARNFLAGS=-Wall -W -Wshadow +WARNFLAGS=-Wall -Wstrict-prototypes CFLAGS?=-O1 -g ${WARNFLAGS} CC?=gcc @@ -16,7 +16,7 @@ # OBJS = powertop.o config.o process.o misctips.o bluetooth.o display.o suggestions.o wireless.o cpufreq.o \ - sata.o xrandr.o ethernet.o cpufreqstats.o usb.o urbnum.o intelcstates.o + sata.o xrandr.o ethernet.o cpufreqstats.o usb.o urbnum.o intelcstates.o omapcstates.o powertop: $(OBJS) Makefile powertop.h