1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
2 | /* |
3 | * (C) 2016 SUSE Software Solutions GmbH |
4 | * Thomas Renninger <trenn@suse.de> |
5 | */ |
6 | |
7 | #ifndef __CPUPOWER_RAPL_H__ |
8 | #define __CPUPOWER_RAPL_H__ |
9 | |
10 | #define PATH_TO_POWERCAP "/sys/devices/virtual/powercap" |
11 | #define PATH_TO_RAPL "/sys/devices/virtual/powercap/intel-rapl" |
12 | #define PATH_TO_RAPL_CLASS "/sys/devices/virtual/powercap/intel-rapl" |
13 | |
14 | #define POWERCAP_MAX_CHILD_ZONES 10 |
15 | #define POWERCAP_MAX_TREE_DEPTH 10 |
16 | |
17 | #define MAX_LINE_LEN 4096 |
18 | #define SYSFS_PATH_MAX 255 |
19 | |
20 | #include <stdint.h> |
21 | |
22 | struct powercap_zone { |
23 | char name[MAX_LINE_LEN]; |
24 | /* |
25 | * sys_name relative to PATH_TO_POWERCAP, |
26 | * do not forget the / in between |
27 | */ |
28 | char sys_name[SYSFS_PATH_MAX]; |
29 | int tree_depth; |
30 | struct powercap_zone *parent; |
31 | struct powercap_zone *children[POWERCAP_MAX_CHILD_ZONES]; |
32 | /* More possible caps or attributes to be added? */ |
33 | uint32_t has_power_uw:1, |
34 | has_energy_uj:1; |
35 | |
36 | }; |
37 | |
38 | int powercap_walk_zones(struct powercap_zone *zone, |
39 | int (*f)(struct powercap_zone *zone)); |
40 | |
41 | struct powercap_zone *powercap_init_zones(void); |
42 | int powercap_get_enabled(int *mode); |
43 | int powercap_set_enabled(int mode); |
44 | int powercap_get_driver(char *driver, int buflen); |
45 | |
46 | int powercap_get_max_energy_range_uj(struct powercap_zone *zone, uint64_t *val); |
47 | int powercap_get_energy_uj(struct powercap_zone *zone, uint64_t *val); |
48 | int powercap_get_max_power_range_uw(struct powercap_zone *zone, uint64_t *val); |
49 | int powercap_get_power_uw(struct powercap_zone *zone, uint64_t *val); |
50 | int powercap_zone_get_enabled(struct powercap_zone *zone, int *mode); |
51 | int powercap_zone_set_enabled(struct powercap_zone *zone, int mode); |
52 | |
53 | |
54 | #endif /* __CPUPOWER_RAPL_H__ */ |
55 | |