27#define HANDLE_STRING_ERROR {fprintf(stderr,"%s:%i unexpected string function error.\n",__FILE__,__LINE__); exit(-1);}
38 = {
"MIN_POWER",
"MAX_POWER",
"CURRENT_POWER"};
40 = {
"powercap-min",
"powercap-max",
"powercap-current"};
42 = {
"Minimum value allowed for power capping.",
43 "Maximum value allowed for power capping.",
44 "Current power drawned by package."};
46 = {O_RDONLY, O_RDONLY, O_RDWR};
62 char *
retval = strncpy( dst, src, size );
63 if ( size > 0 ) dst[size-1] =
'\0';
87 perror(
"Error in pwrite(): ");
115 char events_dir[128];
116 char event_path[128];
136 size_t ret = snprintf(events_dir,
sizeof(events_dir),
"/sys/firmware/opal/powercap/system-powercap/");
139 if ( NULL == (
events = opendir(events_dir)) ) {
141 "Directory /sys/firmware/opal/powercap/system-powercap missing.",
155 size_t ret = snprintf(event_path,
sizeof(event_path),
"%s%s", events_dir,
pkg_sys_names[e]);
159 if (access(event_path, F_OK) == -1)
continue;
265 SUBDBG(
"Enter _powercap_ppc_shutdown_thread\n" );
272 long long **
events,
int flags )
274 SUBDBG(
"Enter _powercap_ppc_read\n");
280 long long curr_val = 0;
286 SUBDBG(
"%d, current value %lld\n",
i, curr_val);
287 control->
count[
c]=curr_val;
330 SUBDBG(
"Enter: ctx: %p\n", ctx );
366 switch ( modifier ) {
373 *EventCode = *EventCode + 1;
403 int index = EventCode;
419 if (!strcmp(
name,
"MIN_POWER")) *EventCode = 0;
420 else if (!strcmp(
name,
"MAX_POWER")) *EventCode = 1;
421 else if (!strcmp(
name,
"CURRENT_POWER")) *EventCode = 2;
427 .
name =
"powercap_ppc",
428 .short_name =
"powercap_ppc",
429 .description =
"Linux powercap energy measurements for IBM PowerPC (9) architectures",
int open(const char *pathname, int flags, mode_t mode)
static const PAPI_hw_info_t * hw_info
struct papi_vectors * _papi_hwd[]
#define PAPI_DATATYPE_INT64
char events[MAX_EVENTS][BUFSIZ]
static long long values[NUM_EVENTS]
static double c[MATRIX_SIZE][MATRIX_SIZE]
static char read_buff[PAPI_MAX_STR_LEN]
static const char * pkg_sys_names[PKG_NUM_EVENTS]
static int _powercap_ppc_init_thread(hwd_context_t *ctx)
static int _powercap_ppc_start(hwd_context_t *ctx, hwd_control_state_t *ctl)
static int _powercap_ppc_read(hwd_context_t *ctx, hwd_control_state_t *ctl, long long **events, int flags)
static int _powercap_ppc_shutdown_component(void)
static int _powercap_ppc_init_component(int cidx)
static int _powercap_ppc_ntv_enum_events(unsigned int *EventCode, int modifier)
static char * _local_strlcpy(char *dst, const char *src, size_t size)
static int _powercap_ppc_init_control_state(hwd_control_state_t *ctl)
static const char * pkg_event_descs[PKG_NUM_EVENTS]
static int _powercap_ppc_ntv_code_to_info(unsigned int EventCode, PAPI_event_info_t *info)
static int _powercap_ppc_ntv_name_to_code(const char *name, unsigned int *EventCode)
static long long read_powercap_value(int index)
static int event_fds[POWERCAP_MAX_COUNTERS]
static mode_t pkg_sys_flags[PKG_NUM_EVENTS]
static int pkg_events[PKG_NUM_EVENTS]
static int write_powercap_value(int index, long long value)
static char write_buff[PAPI_MAX_STR_LEN]
static int _powercap_ppc_write(hwd_context_t *ctx, hwd_control_state_t *ctl, long long *values)
papi_vector_t _powercap_ppc_vector
static int _powercap_ppc_ctl(hwd_context_t *ctx, int code, _papi_int_option_t *option)
static int _powercap_ppc_set_domain(hwd_control_state_t *ctl, int domain)
static const char * pkg_event_names[PKG_NUM_EVENTS]
static int _powercap_ppc_reset(hwd_context_t *ctx, hwd_control_state_t *ctl)
static int _powercap_ppc_ntv_code_to_name(unsigned int EventCode, char *name, int len)
static _powercap_ppc_native_event_entry_t powercap_ppc_ntv_events[(PKG_NUM_EVENTS)]
static int _powercap_ppc_shutdown_thread(hwd_context_t *ctx)
static int _powercap_ppc_stop(hwd_context_t *ctx, hwd_control_state_t *ctl)
#define HANDLE_STRING_ERROR
static int _powercap_ppc_update_control_state(hwd_control_state_t *ctl, NativeInfo_t *native, int count, hwd_context_t *ctx)
#define papi_powercap_ppc_unlock()
#define papi_powercap_ppc_lock()
#define POWERCAP_MAX_COUNTERS
#define PAPI_NATIVE_AND_MASK
#define SUBDBG(format, args...)
papi_mdi_t _papi_hwi_system_info
char units[MAX_EVENTS][BUFSIZ]
char name[PAPI_MAX_STR_LEN]
char disabled_reason[PAPI_HUGE_STR_LEN]
char units[PAPI_MIN_STR_LEN]
char symbol[PAPI_HUGE_STR_LEN]
char long_descr[PAPI_HUGE_STR_LEN]
long long which_counter[POWERCAP_MAX_COUNTERS]
long long count[POWERCAP_MAX_COUNTERS]
char name[PAPI_MAX_STR_LEN]
char description[PAPI_MAX_STR_LEN]
_powercap_ppc_register_t resources
char units[PAPI_MIN_STR_LEN]
PAPI_component_info_t cmp_info