162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * (C) 2016 SUSE Software Solutions GmbH 462306a36Sopenharmony_ci * Thomas Renninger <trenn@suse.de> 562306a36Sopenharmony_ci */ 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci#ifndef __CPUPOWER_RAPL_H__ 862306a36Sopenharmony_ci#define __CPUPOWER_RAPL_H__ 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#define PATH_TO_POWERCAP "/sys/devices/virtual/powercap" 1162306a36Sopenharmony_ci#define PATH_TO_RAPL "/sys/devices/virtual/powercap/intel-rapl" 1262306a36Sopenharmony_ci#define PATH_TO_RAPL_CLASS "/sys/devices/virtual/powercap/intel-rapl" 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci#define POWERCAP_MAX_CHILD_ZONES 10 1562306a36Sopenharmony_ci#define POWERCAP_MAX_TREE_DEPTH 10 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci#define MAX_LINE_LEN 4096 1862306a36Sopenharmony_ci#define SYSFS_PATH_MAX 255 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci#include <stdint.h> 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_cistruct powercap_zone { 2362306a36Sopenharmony_ci char name[MAX_LINE_LEN]; 2462306a36Sopenharmony_ci /* 2562306a36Sopenharmony_ci * sys_name relative to PATH_TO_POWERCAP, 2662306a36Sopenharmony_ci * do not forget the / in between 2762306a36Sopenharmony_ci */ 2862306a36Sopenharmony_ci char sys_name[SYSFS_PATH_MAX]; 2962306a36Sopenharmony_ci int tree_depth; 3062306a36Sopenharmony_ci struct powercap_zone *parent; 3162306a36Sopenharmony_ci struct powercap_zone *children[POWERCAP_MAX_CHILD_ZONES]; 3262306a36Sopenharmony_ci /* More possible caps or attributes to be added? */ 3362306a36Sopenharmony_ci uint32_t has_power_uw:1, 3462306a36Sopenharmony_ci has_energy_uj:1; 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ci}; 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_ciint powercap_walk_zones(struct powercap_zone *zone, 3962306a36Sopenharmony_ci int (*f)(struct powercap_zone *zone)); 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_cistruct powercap_zone *powercap_init_zones(void); 4262306a36Sopenharmony_ciint powercap_get_enabled(int *mode); 4362306a36Sopenharmony_ciint powercap_set_enabled(int mode); 4462306a36Sopenharmony_ciint powercap_get_driver(char *driver, int buflen); 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_ciint powercap_get_max_energy_range_uj(struct powercap_zone *zone, uint64_t *val); 4762306a36Sopenharmony_ciint powercap_get_energy_uj(struct powercap_zone *zone, uint64_t *val); 4862306a36Sopenharmony_ciint powercap_get_max_power_range_uw(struct powercap_zone *zone, uint64_t *val); 4962306a36Sopenharmony_ciint powercap_get_power_uw(struct powercap_zone *zone, uint64_t *val); 5062306a36Sopenharmony_ciint powercap_zone_get_enabled(struct powercap_zone *zone, int *mode); 5162306a36Sopenharmony_ciint powercap_zone_set_enabled(struct powercap_zone *zone, int mode); 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_ci#endif /* __CPUPOWER_RAPL_H__ */ 55