brintos

brintos / linux-shallow public Read only

0
0
Text · 6.0 KiB · 96556d8 Raw
248 lines · plain
1/* SPDX-License-Identifier: GPL-2.0-only */2 3%module raw_pylibcpupower4%{5#include "../../lib/cpupower_intern.h"6#include "../../lib/acpi_cppc.h"7#include "../../lib/cpufreq.h"8#include "../../lib/cpuidle.h"9#include "../../lib/cpupower.h"10#include "../../lib/powercap.h"11%}12 13/*14 * cpupower_intern.h15 */16 17#define PATH_TO_CPU "/sys/devices/system/cpu/"18#define MAX_LINE_LEN 409619#define SYSFS_PATH_MAX 25520 21int is_valid_path(const char *path);22 23unsigned int cpupower_read_sysfs(const char *path, char *buf, size_t buflen);24 25unsigned int cpupower_write_sysfs(const char *path, char *buf, size_t buflen);26 27/*28 * acpi_cppc.h29 */30 31enum acpi_cppc_value {32	HIGHEST_PERF,33	LOWEST_PERF,34	NOMINAL_PERF,35	LOWEST_NONLINEAR_PERF,36	LOWEST_FREQ,37	NOMINAL_FREQ,38	REFERENCE_PERF,39	WRAPAROUND_TIME,40	MAX_CPPC_VALUE_FILES41};42 43unsigned long acpi_cppc_get_data(unsigned int cpu,44				 enum acpi_cppc_value which);45 46/*47 * cpufreq.h48 */49 50struct cpufreq_policy {51	unsigned long min;52	unsigned long max;53	char *governor;54};55 56struct cpufreq_available_governors {57	char *governor;58	struct cpufreq_available_governors *next;59	struct cpufreq_available_governors *first;60};61 62struct cpufreq_available_frequencies {63	unsigned long frequency;64	struct cpufreq_available_frequencies *next;65	struct cpufreq_available_frequencies *first;66};67 68 69struct cpufreq_affected_cpus {70	unsigned int cpu;71	struct cpufreq_affected_cpus *next;72	struct cpufreq_affected_cpus *first;73};74 75struct cpufreq_stats {76	unsigned long frequency;77	unsigned long long time_in_state;78	struct cpufreq_stats *next;79	struct cpufreq_stats *first;80};81 82unsigned long cpufreq_get_freq_kernel(unsigned int cpu);83 84unsigned long cpufreq_get_freq_hardware(unsigned int cpu);85 86#define cpufreq_get(cpu) cpufreq_get_freq_kernel(cpu);87 88unsigned long cpufreq_get_transition_latency(unsigned int cpu);89 90int cpufreq_get_hardware_limits(unsigned int cpu,91				unsigned long *min,92				unsigned long *max);93 94char *cpufreq_get_driver(unsigned int cpu);95 96void cpufreq_put_driver(char *ptr);97 98struct cpufreq_policy *cpufreq_get_policy(unsigned int cpu);99 100void cpufreq_put_policy(struct cpufreq_policy *policy);101 102struct cpufreq_available_governors103*cpufreq_get_available_governors(unsigned int cpu);104 105void cpufreq_put_available_governors(106	struct cpufreq_available_governors *first);107 108struct cpufreq_available_frequencies109*cpufreq_get_available_frequencies(unsigned int cpu);110 111void cpufreq_put_available_frequencies(112		struct cpufreq_available_frequencies *first);113 114struct cpufreq_available_frequencies115*cpufreq_get_boost_frequencies(unsigned int cpu);116 117void cpufreq_put_boost_frequencies(118		struct cpufreq_available_frequencies *first);119 120struct cpufreq_affected_cpus *cpufreq_get_affected_cpus(unsigned121							int cpu);122 123void cpufreq_put_affected_cpus(struct cpufreq_affected_cpus *first);124 125struct cpufreq_affected_cpus *cpufreq_get_related_cpus(unsigned126							int cpu);127 128void cpufreq_put_related_cpus(struct cpufreq_affected_cpus *first);129 130struct cpufreq_stats *cpufreq_get_stats(unsigned int cpu,131					unsigned long long *total_time);132 133void cpufreq_put_stats(struct cpufreq_stats *stats);134 135unsigned long cpufreq_get_transitions(unsigned int cpu);136 137int cpufreq_set_policy(unsigned int cpu, struct cpufreq_policy *policy);138 139int cpufreq_modify_policy_min(unsigned int cpu, unsigned long min_freq);140 141int cpufreq_modify_policy_max(unsigned int cpu, unsigned long max_freq);142 143int cpufreq_modify_policy_governor(unsigned int cpu, char *governor);144 145int cpufreq_set_frequency(unsigned int cpu,146				unsigned long target_frequency);147 148unsigned long cpufreq_get_sysfs_value_from_table(unsigned int cpu,149						 const char **table,150						 unsigned int index,151						 unsigned int size);152 153/*154 * cpuidle.h155 */156 157int cpuidle_is_state_disabled(unsigned int cpu,158				       unsigned int idlestate);159int cpuidle_state_disable(unsigned int cpu, unsigned int idlestate,160				   unsigned int disable);161unsigned long cpuidle_state_latency(unsigned int cpu,162						unsigned int idlestate);163unsigned long cpuidle_state_usage(unsigned int cpu,164					unsigned int idlestate);165unsigned long long cpuidle_state_time(unsigned int cpu,166						unsigned int idlestate);167char *cpuidle_state_name(unsigned int cpu,168				unsigned int idlestate);169char *cpuidle_state_desc(unsigned int cpu,170				unsigned int idlestate);171unsigned int cpuidle_state_count(unsigned int cpu);172 173char *cpuidle_get_governor(void);174 175char *cpuidle_get_driver(void);176 177/*178 * cpupower.h179 */180 181struct cpupower_topology {182	/* Amount of CPU cores, packages and threads per core in the system */183	unsigned int cores;184	unsigned int pkgs;185	unsigned int threads; /* per core */186 187	/* Array gets mallocated with cores entries, holding per core info */188	struct cpuid_core_info *core_info;189};190 191struct cpuid_core_info {192	int pkg;193	int core;194	int cpu;195 196	/* flags */197	unsigned int is_online:1;198};199 200int get_cpu_topology(struct cpupower_topology *cpu_top);201 202void cpu_topology_release(struct cpupower_topology cpu_top);203 204int cpupower_is_cpu_online(unsigned int cpu);205 206/*207 * powercap.h208 */209 210struct powercap_zone {211	char name[MAX_LINE_LEN];212	/*213	 * sys_name relative to PATH_TO_POWERCAP,214	 * do not forget the / in between215	 */216	char sys_name[SYSFS_PATH_MAX];217	int tree_depth;218	struct powercap_zone *parent;219	struct powercap_zone *children[POWERCAP_MAX_CHILD_ZONES];220	/* More possible caps or attributes to be added? */221	uint32_t has_power_uw:1,222		 has_energy_uj:1;223 224};225 226int powercap_walk_zones(struct powercap_zone *zone,227			int (*f)(struct powercap_zone *zone));228 229struct powercap_zone *powercap_init_zones(void);230 231int powercap_get_enabled(int *mode);232 233int powercap_set_enabled(int mode);234 235int powercap_get_driver(char *driver, int buflen);236 237int powercap_get_max_energy_range_uj(struct powercap_zone *zone, uint64_t *val);238 239int powercap_get_energy_uj(struct powercap_zone *zone, uint64_t *val);240 241int powercap_get_max_power_range_uw(struct powercap_zone *zone, uint64_t *val);242 243int powercap_get_power_uw(struct powercap_zone *zone, uint64_t *val);244 245int powercap_zone_get_enabled(struct powercap_zone *zone, int *mode);246 247int powercap_zone_set_enabled(struct powercap_zone *zone, int mode);248