| /* SPDX-License-Identifier: GPL-2.0-only */ | |
| /* | |
| * (C) 2016 SUSE Software Solutions GmbH | |
| * Thomas Renninger <trenn@suse.de> | |
| */ | |
| #ifndef __CPUPOWER_RAPL_H__ | |
| #define __CPUPOWER_RAPL_H__ | |
| #define PATH_TO_POWERCAP "/sys/devices/virtual/powercap" | |
| #define PATH_TO_RAPL "/sys/devices/virtual/powercap/intel-rapl" | |
| #define PATH_TO_RAPL_CLASS "/sys/devices/virtual/powercap/intel-rapl" | |
| #define POWERCAP_MAX_CHILD_ZONES 10 | |
| #define POWERCAP_MAX_TREE_DEPTH 10 | |
| #define MAX_LINE_LEN 4096 | |
| #define SYSFS_PATH_MAX 255 | |
| #include <stdint.h> | |
| struct powercap_zone { | |
| char name[MAX_LINE_LEN]; | |
| /* | |
| * sys_name relative to PATH_TO_POWERCAP, | |
| * do not forget the / in between | |
| */ | |
| char sys_name[SYSFS_PATH_MAX]; | |
| int tree_depth; | |
| struct powercap_zone *parent; | |
| struct powercap_zone *children[POWERCAP_MAX_CHILD_ZONES]; | |
| /* More possible caps or attributes to be added? */ | |
| uint32_t has_power_uw:1, | |
| has_energy_uj:1; | |
| }; | |
| int powercap_walk_zones(struct powercap_zone *zone, | |
| int (*f)(struct powercap_zone *zone)); | |
| struct powercap_zone *powercap_init_zones(void); | |
| int powercap_get_enabled(int *mode); | |
| int powercap_set_enabled(int mode); | |
| int powercap_get_driver(char *driver, int buflen); | |
| int powercap_get_max_energy_range_uj(struct powercap_zone *zone, uint64_t *val); | |
| int powercap_get_energy_uj(struct powercap_zone *zone, uint64_t *val); | |
| int powercap_get_max_power_range_uw(struct powercap_zone *zone, uint64_t *val); | |
| int powercap_get_power_uw(struct powercap_zone *zone, uint64_t *val); | |
| int powercap_zone_get_enabled(struct powercap_zone *zone, int *mode); | |
| int powercap_zone_set_enabled(struct powercap_zone *zone, int mode); | |
| #endif /* __CPUPOWER_RAPL_H__ */ |