1b47b5b34SRafael Vanoni /* 2b47b5b34SRafael Vanoni * Copyright 2009, Intel Corporation 3b47b5b34SRafael Vanoni * Copyright 2009, Sun Microsystems, Inc 4b47b5b34SRafael Vanoni * 5b47b5b34SRafael Vanoni * This file is part of PowerTOP 6b47b5b34SRafael Vanoni * 7b47b5b34SRafael Vanoni * This program file is free software; you can redistribute it and/or modify it 8b47b5b34SRafael Vanoni * under the terms of the GNU General Public License as published by the 9b47b5b34SRafael Vanoni * Free Software Foundation; version 2 of the License. 10b47b5b34SRafael Vanoni * 11b47b5b34SRafael Vanoni * This program is distributed in the hope that it will be useful, but WITHOUT 12b47b5b34SRafael Vanoni * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13b47b5b34SRafael Vanoni * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14b47b5b34SRafael Vanoni * for more details. 15b47b5b34SRafael Vanoni * 16b47b5b34SRafael Vanoni * You should have received a copy of the GNU General Public License 17b47b5b34SRafael Vanoni * along with this program in a file named COPYING; if not, write to the 18b47b5b34SRafael Vanoni * Free Software Foundation, Inc., 19b47b5b34SRafael Vanoni * 51 Franklin Street, Fifth Floor, 20b47b5b34SRafael Vanoni * Boston, MA 02110-1301 USA 21b47b5b34SRafael Vanoni * 22b47b5b34SRafael Vanoni * Authors: 23b47b5b34SRafael Vanoni * Arjan van de Ven <arjan@linux.intel.com> 24b47b5b34SRafael Vanoni * Eric C Saxe <eric.saxe@sun.com> 25b47b5b34SRafael Vanoni * Aubrey Li <aubrey.li@intel.com> 26b47b5b34SRafael Vanoni */ 27b47b5b34SRafael Vanoni 28b47b5b34SRafael Vanoni /* 29b47b5b34SRafael Vanoni * GPL Disclaimer 30b47b5b34SRafael Vanoni * 31b47b5b34SRafael Vanoni * For the avoidance of doubt, except that if any license choice other 32b47b5b34SRafael Vanoni * than GPL or LGPL is available it will apply instead, Sun elects to 33b47b5b34SRafael Vanoni * use only the General Public License version 2 (GPLv2) at this time 34b47b5b34SRafael Vanoni * for any software where a choice of GPL license versions is made 35b47b5b34SRafael Vanoni * available with the language indicating that GPLv2 or any later 36b47b5b34SRafael Vanoni * version may be used, or where a choice of which version of the GPL 37b47b5b34SRafael Vanoni * is applied is otherwise unspecified. 38b47b5b34SRafael Vanoni */ 39b47b5b34SRafael Vanoni 40b47b5b34SRafael Vanoni #ifndef __INCLUDE_GUARD_POWERTOP_H_ 41b47b5b34SRafael Vanoni #define __INCLUDE_GUARD_POWERTOP_H_ 42b47b5b34SRafael Vanoni 43b47b5b34SRafael Vanoni #include <sys/types.h> 44b47b5b34SRafael Vanoni #include <libintl.h> 45b47b5b34SRafael Vanoni #include <sys/processor.h> 46b47b5b34SRafael Vanoni 47b47b5b34SRafael Vanoni #define max(A, B) (((A) < (B)) ? (B) : (A)) 48b47b5b34SRafael Vanoni 49b47b5b34SRafael Vanoni #define _(STRING) gettext(STRING) 50b47b5b34SRafael Vanoni 51b47b5b34SRafael Vanoni #define TITLE "OpenSolaris PowerTOP version 1.1" 52b47b5b34SRafael Vanoni #define COPYRIGHT_INTEL "(C) 2009 Intel Corporation" 53b47b5b34SRafael Vanoni 54b47b5b34SRafael Vanoni /* 55b47b5b34SRafael Vanoni * Exit values. stdlib.h defines EXIT_SUCCESS as 0 and 56b47b5b34SRafael Vanoni * EXIT_FAILURE as 1 57b47b5b34SRafael Vanoni */ 58b47b5b34SRafael Vanoni #define EXIT_USAGE 2 59b47b5b34SRafael Vanoni 60b47b5b34SRafael Vanoni /* 61b47b5b34SRafael Vanoni * PowerTOP Features 62b47b5b34SRafael Vanoni * These may not be available everywhere 63b47b5b34SRafael Vanoni */ 64b47b5b34SRafael Vanoni #define FEATURE_CSTATE 0x01 65b47b5b34SRafael Vanoni #define FEATURE_PSTATE 0x02 66b47b5b34SRafael Vanoni #define FEATURE_EVENTS 0x04 67b47b5b34SRafael Vanoni #define FEATURE_TURBO 0x08 68b47b5b34SRafael Vanoni 69b47b5b34SRafael Vanoni #define BIT_DEPTH_BUF 10 70b47b5b34SRafael Vanoni 71b47b5b34SRafael Vanoni #define INTERVAL_DEFAULT 5.0 72b47b5b34SRafael Vanoni #define INTERVAL_MAX 100.0 73b47b5b34SRafael Vanoni #define INTERVAL_UPDATE(l) \ 74b47b5b34SRafael Vanoni ((l/INTERVAL_DEFAULT) * INTERVAL_DEFAULT + INTERVAL_DEFAULT) 75b47b5b34SRafael Vanoni 76b47b5b34SRafael Vanoni #define STATE_NAME_MAX 16 77b47b5b34SRafael Vanoni #define EVENT_NAME_MAX 64 78b47b5b34SRafael Vanoni #define EVENT_NUM_MAX 100 79b47b5b34SRafael Vanoni #define NSTATES 32 80b47b5b34SRafael Vanoni 81b47b5b34SRafael Vanoni /* 82b47b5b34SRafael Vanoni * Display colors 83b47b5b34SRafael Vanoni */ 84b47b5b34SRafael Vanoni #define PT_COLOR_DEFAULT 1 85b47b5b34SRafael Vanoni #define PT_COLOR_HEADER_BAR 2 86b47b5b34SRafael Vanoni #define PT_COLOR_ERROR 3 87b47b5b34SRafael Vanoni #define PT_COLOR_RED 4 88b47b5b34SRafael Vanoni #define PT_COLOR_YELLOW 5 89b47b5b34SRafael Vanoni #define PT_COLOR_GREEN 6 90b47b5b34SRafael Vanoni #define PT_COLOR_BRIGHT 7 91b47b5b34SRafael Vanoni #define PT_COLOR_BLUE 8 92b47b5b34SRafael Vanoni 93b47b5b34SRafael Vanoni /* 94b47b5b34SRafael Vanoni * Constants for setup_windows() 95b47b5b34SRafael Vanoni */ 96b47b5b34SRafael Vanoni #define SINGLE_LINE_SW 1 97b47b5b34SRafael Vanoni #define LENGTH_SUGG_SW 2 98b47b5b34SRafael Vanoni #define TITLE_LINE 1 99b47b5b34SRafael Vanoni #define BLANK_LINE 1 100b47b5b34SRafael Vanoni #define NEXT_LINE 1 101*636423dbSRafael Vanoni #define PT_BAR_NSLOTS 10 102*636423dbSRafael Vanoni #define PT_BAR_LENGTH 40 103b47b5b34SRafael Vanoni 104b47b5b34SRafael Vanoni /* 105b47b5b34SRafael Vanoni * Available op modes 106b47b5b34SRafael Vanoni */ 107*636423dbSRafael Vanoni #define PT_MODE_DEFAULT 0x01 108*636423dbSRafael Vanoni #define PT_MODE_DUMP 0x02 109*636423dbSRafael Vanoni #define PT_MODE_VERBOSE 0x04 110*636423dbSRafael Vanoni #define PT_MODE_CPU 0x08 111b47b5b34SRafael Vanoni 112*636423dbSRafael Vanoni #define PT_ON_DEFAULT (g_op_mode & PT_MODE_DEFAULT) 113*636423dbSRafael Vanoni #define PT_ON_DUMP (g_op_mode & PT_MODE_DUMP) 114*636423dbSRafael Vanoni #define PT_ON_VERBOSE (g_op_mode & PT_MODE_VERBOSE) 115*636423dbSRafael Vanoni #define PT_ON_CPU (g_op_mode & PT_MODE_CPU) 116b47b5b34SRafael Vanoni 117b47b5b34SRafael Vanoni /* 118b47b5b34SRafael Vanoni * Structures and typedefs 119b47b5b34SRafael Vanoni */ 120b47b5b34SRafael Vanoni struct line { 121b47b5b34SRafael Vanoni char *string; 122b47b5b34SRafael Vanoni int count; 123b47b5b34SRafael Vanoni }; 124b47b5b34SRafael Vanoni 125b47b5b34SRafael Vanoni typedef struct event_info { 126b47b5b34SRafael Vanoni char offender_name[EVENT_NAME_MAX]; 127b47b5b34SRafael Vanoni char offense_name[EVENT_NAME_MAX]; 128b47b5b34SRafael Vanoni uint64_t total_count; 129b47b5b34SRafael Vanoni } event_info_t; 130b47b5b34SRafael Vanoni 131b47b5b34SRafael Vanoni /* 132b47b5b34SRafael Vanoni * P/C state information 133b47b5b34SRafael Vanoni */ 134b47b5b34SRafael Vanoni typedef struct state_info { 135b47b5b34SRafael Vanoni char name[STATE_NAME_MAX]; 136b47b5b34SRafael Vanoni hrtime_t total_time; 137b47b5b34SRafael Vanoni hrtime_t last_time; 138*636423dbSRafael Vanoni uint64_t events; 139b47b5b34SRafael Vanoni } state_info_t; 140b47b5b34SRafael Vanoni 141b47b5b34SRafael Vanoni typedef struct freq_state_info { 142b47b5b34SRafael Vanoni uint64_t speed; 143b47b5b34SRafael Vanoni hrtime_t total_time; 144b47b5b34SRafael Vanoni } freq_state_info_t; 145b47b5b34SRafael Vanoni 146b47b5b34SRafael Vanoni typedef struct cpu_power_info { 147b47b5b34SRafael Vanoni uint64_t current_pstate; 148*636423dbSRafael Vanoni uint64_t speed_accounted; 149b47b5b34SRafael Vanoni hrtime_t time_accounted; 150b47b5b34SRafael Vanoni hrtime_t dtrace_time; 151b47b5b34SRafael Vanoni } cpu_power_info_t; 152b47b5b34SRafael Vanoni 153b47b5b34SRafael Vanoni /* 154b47b5b34SRafael Vanoni * Turbo mode information 155b47b5b34SRafael Vanoni */ 156b47b5b34SRafael Vanoni typedef struct turbo_info { 157b47b5b34SRafael Vanoni uint64_t t_mcnt; 158b47b5b34SRafael Vanoni uint64_t t_acnt; 159b47b5b34SRafael Vanoni } turbo_info_t; 160b47b5b34SRafael Vanoni 161b47b5b34SRafael Vanoni typedef void (suggestion_func)(void); 162b47b5b34SRafael Vanoni 163b47b5b34SRafael Vanoni /* 164b47b5b34SRafael Vanoni * Global variables 165b47b5b34SRafael Vanoni */ 166b47b5b34SRafael Vanoni extern double g_displaytime; 167b47b5b34SRafael Vanoni 168b47b5b34SRafael Vanoni extern int g_bit_depth; 169b47b5b34SRafael Vanoni 170b47b5b34SRafael Vanoni /* 171b47b5b34SRafael Vanoni * Event accounting 172b47b5b34SRafael Vanoni */ 173b47b5b34SRafael Vanoni extern int g_total_events; 174*636423dbSRafael Vanoni extern int g_top_events; 175b47b5b34SRafael Vanoni 176b47b5b34SRafael Vanoni /* 177b47b5b34SRafael Vanoni * Interval 178b47b5b34SRafael Vanoni */ 179b47b5b34SRafael Vanoni extern double g_ticktime, g_ticktime_usr; 180b47b5b34SRafael Vanoni extern double g_interval; 181b47b5b34SRafael Vanoni 182b47b5b34SRafael Vanoni /* 183b47b5b34SRafael Vanoni * Command line arguments 184b47b5b34SRafael Vanoni */ 185b47b5b34SRafael Vanoni extern uchar_t g_op_mode; 186b47b5b34SRafael Vanoni extern uint_t g_observed_cpu; 187b47b5b34SRafael Vanoni extern boolean_t g_gui; 188b47b5b34SRafael Vanoni /* 189b47b5b34SRafael Vanoni * Event info array 190b47b5b34SRafael Vanoni */ 191b47b5b34SRafael Vanoni extern event_info_t g_event_info[EVENT_NUM_MAX]; 192b47b5b34SRafael Vanoni 193b47b5b34SRafael Vanoni /* 194b47b5b34SRafael Vanoni * Lookup table, sequential CPU id to Solaris CPU id 195b47b5b34SRafael Vanoni */ 196b47b5b34SRafael Vanoni extern processorid_t *g_cpu_table; 197b47b5b34SRafael Vanoni 198b47b5b34SRafael Vanoni /* 199b47b5b34SRafael Vanoni * Number of idle/frequency states 200b47b5b34SRafael Vanoni */ 201b47b5b34SRafael Vanoni extern int g_npstates; 202b47b5b34SRafael Vanoni extern int g_max_cstate; 203b47b5b34SRafael Vanoni extern int g_longest_cstate; 204b47b5b34SRafael Vanoni 205b47b5b34SRafael Vanoni /* 206b47b5b34SRafael Vanoni * Total time, used to display different idle states 207b47b5b34SRafael Vanoni */ 208b47b5b34SRafael Vanoni extern hrtime_t g_total_c_time; 209b47b5b34SRafael Vanoni 210b47b5b34SRafael Vanoni /* 211b47b5b34SRafael Vanoni * P/C state info arrays 212b47b5b34SRafael Vanoni */ 213b47b5b34SRafael Vanoni extern state_info_t g_cstate_info[NSTATES]; 214b47b5b34SRafael Vanoni extern freq_state_info_t g_pstate_info[NSTATES]; 215b47b5b34SRafael Vanoni 216b47b5b34SRafael Vanoni extern uint_t g_ncpus; 217b47b5b34SRafael Vanoni extern uint_t g_ncpus_observed; 218b47b5b34SRafael Vanoni 219*636423dbSRafael Vanoni extern char g_status_bar_slots[PT_BAR_NSLOTS] 220*636423dbSRafael Vanoni [PT_BAR_LENGTH]; 221b47b5b34SRafael Vanoni 222b47b5b34SRafael Vanoni extern cpu_power_info_t *g_cpu_power_states; 223b47b5b34SRafael Vanoni 224b47b5b34SRafael Vanoni /* 225b47b5b34SRafael Vanoni * Turbo mode related information 226b47b5b34SRafael Vanoni */ 227b47b5b34SRafael Vanoni extern boolean_t g_turbo_supported; 228b47b5b34SRafael Vanoni extern double g_turbo_ratio; 229b47b5b34SRafael Vanoni 230b47b5b34SRafael Vanoni extern char g_suggestion_key; 231b47b5b34SRafael Vanoni extern suggestion_func *g_suggestion_activate; 232b47b5b34SRafael Vanoni 233b47b5b34SRafael Vanoni /* 234b47b5b34SRafael Vanoni * DTrace scripts for the events report 235b47b5b34SRafael Vanoni */ 236b47b5b34SRafael Vanoni extern const char *g_dtp_events; 237b47b5b34SRafael Vanoni extern const char *g_dtp_events_v; 238b47b5b34SRafael Vanoni extern const char *g_dtp_events_c; 239b47b5b34SRafael Vanoni 240b47b5b34SRafael Vanoni /* 241b47b5b34SRafael Vanoni * Arguments for dtrace_program_strcompile(). Contents vary according to 242b47b5b34SRafael Vanoni * the specified operation mode. 243b47b5b34SRafael Vanoni */ 244b47b5b34SRafael Vanoni extern uint_t g_argc; 245b47b5b34SRafael Vanoni extern char **g_argv; 246b47b5b34SRafael Vanoni 247b47b5b34SRafael Vanoni /* 248b47b5b34SRafael Vanoni * Platform specific messages 249b47b5b34SRafael Vanoni */ 250b47b5b34SRafael Vanoni extern const char *g_msg_idle_state; 251b47b5b34SRafael Vanoni extern const char *g_msg_freq_state; 252b47b5b34SRafael Vanoni /* 253b47b5b34SRafael Vanoni * Suggestions related 254b47b5b34SRafael Vanoni */ 255b47b5b34SRafael Vanoni extern void suggest_p_state(void); 256b47b5b34SRafael Vanoni extern void suggest_as_root(void); 257b47b5b34SRafael Vanoni 258b47b5b34SRafael Vanoni /* 259b47b5b34SRafael Vanoni * See util.c 260b47b5b34SRafael Vanoni */ 261b47b5b34SRafael Vanoni extern void pt_error(char *, ...); 262b47b5b34SRafael Vanoni extern void pt_set_progname(char *); 263b47b5b34SRafael Vanoni extern uint_t enumerate_cpus(void); 264b47b5b34SRafael Vanoni extern void usage(void); 265b47b5b34SRafael Vanoni extern int get_bit_depth(void); 266b47b5b34SRafael Vanoni extern void battery_mod_lookup(void); 267b47b5b34SRafael Vanoni extern int event_compare(const void *, const void *); 268b47b5b34SRafael Vanoni 269b47b5b34SRafael Vanoni /* 270b47b5b34SRafael Vanoni * Display/curses related 271b47b5b34SRafael Vanoni */ 272b47b5b34SRafael Vanoni extern void show_title_bar(void); 273b47b5b34SRafael Vanoni extern void setup_windows(void); 274b47b5b34SRafael Vanoni extern void initialize_curses(void); 275*636423dbSRafael Vanoni extern void show_acpi_power_line(uint32_t, double, double, double, 276*636423dbSRafael Vanoni uint32_t); 277b47b5b34SRafael Vanoni extern void show_cstates(); 278*636423dbSRafael Vanoni extern void show_wakeups(double); 279*636423dbSRafael Vanoni extern void show_eventstats(double); 280*636423dbSRafael Vanoni extern void show_suggestion(char *); 281b47b5b34SRafael Vanoni extern void cleanup_curses(void); 282b47b5b34SRafael Vanoni extern void update_windows(void); 283b47b5b34SRafael Vanoni 284b47b5b34SRafael Vanoni /* 285b47b5b34SRafael Vanoni * Suggestions 286b47b5b34SRafael Vanoni */ 287b47b5b34SRafael Vanoni extern void pick_suggestion(void); 288*636423dbSRafael Vanoni extern void add_suggestion(char *, int, char, char *, 289*636423dbSRafael Vanoni suggestion_func *); 290b47b5b34SRafael Vanoni extern void reset_suggestions(void); 291b47b5b34SRafael Vanoni extern void print_all_suggestions(void); 292b47b5b34SRafael Vanoni extern void print_battery(void); 293b47b5b34SRafael Vanoni 294b47b5b34SRafael Vanoni /* 295b47b5b34SRafael Vanoni * DTrace stats 296b47b5b34SRafael Vanoni */ 297b47b5b34SRafael Vanoni extern int pt_cpufreq_stat_prepare(void); 298*636423dbSRafael Vanoni extern int pt_cpufreq_stat_collect(double); 299b47b5b34SRafael Vanoni extern int pt_cpuidle_stat_prepare(void); 300*636423dbSRafael Vanoni extern int pt_cpuidle_stat_collect(double); 301b47b5b34SRafael Vanoni extern int pt_events_stat_prepare(void); 302b47b5b34SRafael Vanoni extern int pt_events_stat_collect(void); 303b47b5b34SRafael Vanoni 304b47b5b34SRafael Vanoni /* 305b47b5b34SRafael Vanoni * Turbo mode related routines 306b47b5b34SRafael Vanoni */ 307b47b5b34SRafael Vanoni extern int pt_turbo_stat_prepare(void); 308b47b5b34SRafael Vanoni extern int pt_turbo_stat_collect(void); 309b47b5b34SRafael Vanoni 310b47b5b34SRafael Vanoni #endif /* __INCLUDE_GUARD_POWERTOP_H_ */ 311