#ifndef __INCLUDE_GUARD_POWERTOP_H_
#define __INCLUDE_GUARD_POWERTOP_H_
#include <sys/types.h>
#include <sys/processor.h>
#define max(A, B) (((A) < (B)) ? (B) : (A))
#define TITLE "OpenSolaris PowerTOP version 1.2"
#define COPYRIGHT_INTEL "(C) 2009 Intel Corporation"
#define EXIT_USAGE 2
#define FEATURE_CSTATE 0x01
#define FEATURE_PSTATE 0x02
#define FEATURE_EVENTS 0x04
#define FEATURE_TURBO 0x08
#define BIT_DEPTH_BUF 10
#define INTERVAL_DEFAULT 5.0
#define INTERVAL_MAX 30.0
#define INTERVAL_UPDATE(l) \
((l/INTERVAL_DEFAULT) * INTERVAL_DEFAULT + INTERVAL_DEFAULT)
#define STATE_NAME_MAX 16
#define EVENT_NAME_MAX 64
#define EVENT_NUM_MAX 100
#define NSTATES 32
#define PT_MODE_DEFAULT 0x01
#define PT_MODE_DUMP 0x02
#define PT_MODE_VERBOSE 0x04
#define PT_MODE_CPU 0x08
#define PT_MODE_TIME 0x10
#define PT_ON_DEFAULT (g_op_mode & PT_MODE_DEFAULT)
#define PT_ON_DUMP (g_op_mode & PT_MODE_DUMP)
#define PT_ON_VERBOSE (g_op_mode & PT_MODE_VERBOSE)
#define PT_ON_CPU (g_op_mode & PT_MODE_CPU)
#define PT_ON_TIME (g_op_mode & PT_MODE_TIME)
struct line {
char *string;
int count;
};
typedef struct event_info {
char offender_name[EVENT_NAME_MAX];
char offense_name[EVENT_NAME_MAX];
uint64_t total_count;
} event_info_t;
typedef struct state_info {
char name[STATE_NAME_MAX];
hrtime_t total_time;
hrtime_t last_time;
uint64_t events;
} state_info_t;
typedef struct freq_state_info {
uint64_t speed;
hrtime_t total_time;
} freq_state_info_t;
typedef struct cpu_power_info {
uint64_t current_pstate;
uint64_t speed_accounted;
hrtime_t time_accounted;
hrtime_t dtrace_time;
} cpu_power_info_t;
typedef struct turbo_info {
uint64_t t_mcnt;
uint64_t t_acnt;
} turbo_info_t;
typedef void (sugg_func_t)(void);
typedef struct suggestion {
char *text;
char key;
char *sb_msg;
int weight;
int slice;
sugg_func_t *func;
struct suggestion *prev;
struct suggestion *next;
} sugg_t;
extern int g_bit_depth;
extern int g_total_events;
extern int g_top_events;
extern uchar_t g_op_mode;
extern uint_t g_observed_cpu;
extern boolean_t g_gui;
extern event_info_t g_event_info[EVENT_NUM_MAX];
extern processorid_t *g_cpu_table;
extern int g_npstates;
extern int g_max_cstate;
extern int g_longest_cstate;
extern hrtime_t g_total_c_time;
extern double g_interval_length;
extern state_info_t g_cstate_info[NSTATES];
extern freq_state_info_t g_pstate_info[NSTATES];
extern uint_t g_features;
extern uint_t g_ncpus;
extern uint_t g_ncpus_observed;
extern cpu_power_info_t *g_cpu_power_states;
extern boolean_t g_turbo_supported;
extern double g_turbo_ratio;
extern sugg_t *g_curr_sugg;
extern const char *g_dtp_events;
extern const char *g_dtp_events_v;
extern const char *g_dtp_events_c;
extern uint_t g_argc;
extern char **g_argv;
extern const char *g_msg_idle_state;
extern const char *g_msg_freq_state;
extern const char *g_msg_freq_enable;
extern boolean_t g_sig_resize;
extern void pt_sig_handler(int);
extern void pt_cpufreq_suggest(void);
extern void pt_sugg_as_root(void);
extern void pt_error(char *, ...);
extern void pt_set_progname(char *);
extern uint_t pt_enumerate_cpus(void);
extern void pt_usage(void);
extern int pt_get_bit_depth(void);
extern void pt_battery_mod_lookup(void);
extern int pt_event_compare(const void *, const void *);
extern void pt_display_setup(boolean_t);
extern void pt_display_init_curses(void);
extern void pt_display_update(void);
extern void pt_display_title_bar(void);
extern void pt_display_status_bar(void);
extern void pt_display_mod_status_bar(char *);
extern void pt_display_states(void);
extern void pt_display_acpi_power(uint32_t, double, double, double,
uint32_t);
extern void pt_display_wakeups(double);
extern void pt_display_events(double);
extern void pt_display_suggestions(char *);
extern void pt_display_resize(void);
extern void pt_sugg_add(char *, int, char, char *, sugg_func_t *);
extern int pt_sugg_remove(sugg_func_t *);
extern void pt_sugg_pick(void);
extern void pt_battery_print(void);
extern int pt_cpufreq_stat_prepare(void);
extern int pt_cpufreq_stat_collect(double);
extern int pt_cpuidle_stat_prepare(void);
extern int pt_cpuidle_stat_collect(double);
extern int pt_events_stat_prepare(void);
extern int pt_events_stat_collect(void);
extern int pt_turbo_stat_prepare(void);
extern int pt_turbo_stat_collect(void);
#endif