| /* SPDX-License-Identifier: GPL-2.0-only */ |
| |
| %module raw_pylibcpupower |
| %{ |
| #include "../../lib/cpupower_intern.h" |
| #include "../../lib/acpi_cppc.h" |
| #include "../../lib/cpufreq.h" |
| #include "../../lib/cpuidle.h" |
| #include "../../lib/cpupower.h" |
| #include "../../lib/powercap.h" |
| %} |
| |
| /* |
| * cpupower_intern.h |
| */ |
| |
| #define PATH_TO_CPU "/sys/devices/system/cpu/" |
| #define MAX_LINE_LEN 4096 |
| #define SYSFS_PATH_MAX 255 |
| |
| int is_valid_path(const char *path); |
| |
| unsigned int cpupower_read_sysfs(const char *path, char *buf, size_t buflen); |
| |
| unsigned int cpupower_write_sysfs(const char *path, char *buf, size_t buflen); |
| |
| /* |
| * acpi_cppc.h |
| */ |
| |
| enum acpi_cppc_value { |
| HIGHEST_PERF, |
| LOWEST_PERF, |
| NOMINAL_PERF, |
| LOWEST_NONLINEAR_PERF, |
| LOWEST_FREQ, |
| NOMINAL_FREQ, |
| REFERENCE_PERF, |
| WRAPAROUND_TIME, |
| MAX_CPPC_VALUE_FILES |
| }; |
| |
| unsigned long acpi_cppc_get_data(unsigned int cpu, |
| enum acpi_cppc_value which); |
| |
| /* |
| * cpufreq.h |
| */ |
| |
| struct cpufreq_policy { |
| unsigned long min; |
| unsigned long max; |
| char *governor; |
| }; |
| |
| struct cpufreq_available_governors { |
| char *governor; |
| struct cpufreq_available_governors *next; |
| struct cpufreq_available_governors *first; |
| }; |
| |
| struct cpufreq_available_frequencies { |
| unsigned long frequency; |
| struct cpufreq_available_frequencies *next; |
| struct cpufreq_available_frequencies *first; |
| }; |
| |
| |
| struct cpufreq_affected_cpus { |
| unsigned int cpu; |
| struct cpufreq_affected_cpus *next; |
| struct cpufreq_affected_cpus *first; |
| }; |
| |
| struct cpufreq_stats { |
| unsigned long frequency; |
| unsigned long long time_in_state; |
| struct cpufreq_stats *next; |
| struct cpufreq_stats *first; |
| }; |
| |
| unsigned long cpufreq_get_freq_kernel(unsigned int cpu); |
| |
| unsigned long cpufreq_get_freq_hardware(unsigned int cpu); |
| |
| #define cpufreq_get(cpu) cpufreq_get_freq_kernel(cpu); |
| |
| unsigned long cpufreq_get_transition_latency(unsigned int cpu); |
| |
| int cpufreq_get_hardware_limits(unsigned int cpu, |
| unsigned long *min, |
| unsigned long *max); |
| |
| char *cpufreq_get_driver(unsigned int cpu); |
| |
| void cpufreq_put_driver(char *ptr); |
| |
| struct cpufreq_policy *cpufreq_get_policy(unsigned int cpu); |
| |
| void cpufreq_put_policy(struct cpufreq_policy *policy); |
| |
| struct cpufreq_available_governors |
| *cpufreq_get_available_governors(unsigned int cpu); |
| |
| void cpufreq_put_available_governors( |
| struct cpufreq_available_governors *first); |
| |
| struct cpufreq_available_frequencies |
| *cpufreq_get_available_frequencies(unsigned int cpu); |
| |
| void cpufreq_put_available_frequencies( |
| struct cpufreq_available_frequencies *first); |
| |
| struct cpufreq_available_frequencies |
| *cpufreq_get_boost_frequencies(unsigned int cpu); |
| |
| void cpufreq_put_boost_frequencies( |
| struct cpufreq_available_frequencies *first); |
| |
| struct cpufreq_affected_cpus *cpufreq_get_affected_cpus(unsigned |
| int cpu); |
| |
| void cpufreq_put_affected_cpus(struct cpufreq_affected_cpus *first); |
| |
| struct cpufreq_affected_cpus *cpufreq_get_related_cpus(unsigned |
| int cpu); |
| |
| void cpufreq_put_related_cpus(struct cpufreq_affected_cpus *first); |
| |
| struct cpufreq_stats *cpufreq_get_stats(unsigned int cpu, |
| unsigned long long *total_time); |
| |
| void cpufreq_put_stats(struct cpufreq_stats *stats); |
| |
| unsigned long cpufreq_get_transitions(unsigned int cpu); |
| |
| int cpufreq_set_policy(unsigned int cpu, struct cpufreq_policy *policy); |
| |
| int cpufreq_modify_policy_min(unsigned int cpu, unsigned long min_freq); |
| |
| int cpufreq_modify_policy_max(unsigned int cpu, unsigned long max_freq); |
| |
| int cpufreq_modify_policy_governor(unsigned int cpu, char *governor); |
| |
| int cpufreq_set_frequency(unsigned int cpu, |
| unsigned long target_frequency); |
| |
| unsigned long cpufreq_get_sysfs_value_from_table(unsigned int cpu, |
| const char **table, |
| unsigned int index, |
| unsigned int size); |
| |
| /* |
| * cpuidle.h |
| */ |
| |
| int cpuidle_is_state_disabled(unsigned int cpu, |
| unsigned int idlestate); |
| int cpuidle_state_disable(unsigned int cpu, unsigned int idlestate, |
| unsigned int disable); |
| unsigned long cpuidle_state_latency(unsigned int cpu, |
| unsigned int idlestate); |
| unsigned long cpuidle_state_usage(unsigned int cpu, |
| unsigned int idlestate); |
| unsigned long long cpuidle_state_time(unsigned int cpu, |
| unsigned int idlestate); |
| char *cpuidle_state_name(unsigned int cpu, |
| unsigned int idlestate); |
| char *cpuidle_state_desc(unsigned int cpu, |
| unsigned int idlestate); |
| unsigned int cpuidle_state_count(unsigned int cpu); |
| |
| char *cpuidle_get_governor(void); |
| |
| char *cpuidle_get_driver(void); |
| |
| /* |
| * cpupower.h |
| */ |
| |
| struct cpupower_topology { |
| /* Amount of CPU cores, packages and threads per core in the system */ |
| unsigned int cores; |
| unsigned int pkgs; |
| unsigned int threads; /* per core */ |
| |
| /* Array gets mallocated with cores entries, holding per core info */ |
| struct cpuid_core_info *core_info; |
| }; |
| |
| struct cpuid_core_info { |
| int pkg; |
| int core; |
| int cpu; |
| |
| /* flags */ |
| unsigned int is_online:1; |
| }; |
| |
| int get_cpu_topology(struct cpupower_topology *cpu_top); |
| |
| void cpu_topology_release(struct cpupower_topology cpu_top); |
| |
| int cpupower_is_cpu_online(unsigned int cpu); |
| |
| /* |
| * powercap.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); |