Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
cpupower-monitor.h
Go to the documentation of this file.
1 /*
2  * (C) 2010,2011 Thomas Renninger <[email protected]>, Novell Inc.
3  *
4  * Licensed under the terms of the GNU GPL License version 2.
5  *
6  */
7 
8 #ifndef __CPUIDLE_INFO_HW__
9 #define __CPUIDLE_INFO_HW__
10 
11 #include <stdarg.h>
12 #include <time.h>
13 
15 
16 #define MONITORS_MAX 20
17 #define MONITOR_NAME_LEN 20
18 #define CSTATE_NAME_LEN 5
19 #define CSTATE_DESC_LEN 60
20 
22 
23 /* Hard to define the right names ...: */
25  RANGE_THREAD, /* Lowest in topology hierarcy, AMD: core, Intel: thread
26  kernel sysfs: cpu */
27  RANGE_CORE, /* AMD: unit, Intel: core, kernel_sysfs: core_id */
28  RANGE_PACKAGE, /* Package, processor socket */
29  RANGE_MACHINE, /* Machine, platform wide */
31 
32 typedef struct cstate {
33  int id;
37 
38  /* either provide a percentage or a general count */
39  int (*get_count_percent)(unsigned int self_id, double *percent,
40  unsigned int cpu);
41  int (*get_count)(unsigned int self_id, unsigned long long *count,
42  unsigned int cpu);
43 } cstate_t;
44 
46  /* Name must not contain whitespaces */
48  int name_len;
51  int (*start) (void);
52  int (*stop) (void);
53  struct cpuidle_monitor* (*do_register) (void);
55  unsigned int overflow_s;
57 };
58 
59 extern long long timespec_diff_us(struct timespec start, struct timespec end);
60 
61 #define print_overflow_err(mes, ov) \
62 { \
63  fprintf(stderr, gettext("Measure took %u seconds, but registers could " \
64  "overflow at %u seconds, results " \
65  "could be inaccurate\n"), mes, ov); \
66 }
67 
68 #endif /* __CPUIDLE_INFO_HW__ */