1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- /*
- * (C) 2010,2011 Thomas Renninger <trenn@suse.de>, Novell Inc.
- *
- * Licensed under the terms of the GNU GPL License version 2.
- *
- */
- #ifndef __CPUIDLE_INFO_HW__
- #define __CPUIDLE_INFO_HW__
- #include <stdarg.h>
- #include <time.h>
- #include "idle_monitor/idle_monitors.h"
- #define MONITORS_MAX 20
- #define MONITOR_NAME_LEN 20
- #define CSTATE_NAME_LEN 5
- #define CSTATE_DESC_LEN 60
- int cpu_count;
- /* Hard to define the right names ...: */
- enum power_range_e {
- RANGE_THREAD, /* Lowest in topology hierarcy, AMD: core, Intel: thread
- kernel sysfs: cpu */
- RANGE_CORE, /* AMD: unit, Intel: core, kernel_sysfs: core_id */
- RANGE_PACKAGE, /* Package, processor socket */
- RANGE_MACHINE, /* Machine, platform wide */
- RANGE_MAX };
- typedef struct cstate {
- int id;
- enum power_range_e range;
- char name[CSTATE_NAME_LEN];
- char desc[CSTATE_DESC_LEN];
- /* either provide a percentage or a general count */
- int (*get_count_percent)(unsigned int self_id, double *percent,
- unsigned int cpu);
- int (*get_count)(unsigned int self_id, unsigned long long *count,
- unsigned int cpu);
- } cstate_t;
- struct cpuidle_monitor {
- /* Name must not contain whitespaces */
- char name[MONITOR_NAME_LEN];
- int name_len;
- int hw_states_num;
- cstate_t *hw_states;
- int (*start) (void);
- int (*stop) (void);
- struct cpuidle_monitor* (*do_register) (void);
- void (*unregister)(void);
- unsigned int overflow_s;
- int needs_root;
- };
- extern long long timespec_diff_us(struct timespec start, struct timespec end);
- #define print_overflow_err(mes, ov) \
- { \
- fprintf(stderr, gettext("Measure took %u seconds, but registers could " \
- "overflow at %u seconds, results " \
- "could be inaccurate\n"), mes, ov); \
- }
- #endif /* __CPUIDLE_INFO_HW__ */
|