1 /* SPDX-License-Identifier: GPL-2.0-only */
3 * (C) 2016 SUSE Software Solutions GmbH
4 * Thomas Renninger <trenn@suse.de>
7 #ifndef __CPUPOWER_RAPL_H__
8 #define __CPUPOWER_RAPL_H__
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"
14 #define POWERCAP_MAX_CHILD_ZONES 10
15 #define POWERCAP_MAX_TREE_DEPTH 10
17 #define MAX_LINE_LEN 4096
18 #define SYSFS_PATH_MAX 255
22 struct powercap_zone {
23 char name[MAX_LINE_LEN];
25 * sys_name relative to PATH_TO_POWERCAP,
26 * do not forget the / in between
28 char sys_name[SYSFS_PATH_MAX];
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,
38 int powercap_walk_zones(struct powercap_zone *zone,
39 int (*f)(struct powercap_zone *zone));
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);
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);
54 #endif /* __CPUPOWER_RAPL_H__ */