313312c84b
The raw_pylibcpupower.i is removed unexpectedly after 'make mrproper' We can reproduce the error by performing the following steps: cd linux-next make mrproper cd tools/power/cpupower/bindings/python make We will get an error message: make: *** No rule to make target 'raw_pylibcpupower.i', needed by 'raw_pylibcpupower_wrap.c'. Stop. The root cause: The *.i files are already used for pre-processor output files and the kernel removes all the *.i files by 'make mrproper'. That explains why the raw_pylibcpupower.i is removed by 'make mrproper'. To fix it, Follow John's suggestion to rename raw_pylibcpupower.i to raw_pylibcpupower.swg. See: https://www.swig.org/Doc4.2/SWIG.html Reviewed-by: John B. Wyatt IV <jwyatt@redhat.com> Reviewed-by: John B. Wyatt IV <sageofredondo@gmail.com> Tested-by: John B. Wyatt IV <jwyatt@redhat.com> Tested-by: John B. Wyatt IV <sageofredondo@gmail.com> Signed-off-by: Min-Hua Chen <minhuadotchen@gmail.com> Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
248 lines
6.0 KiB
Plaintext
248 lines
6.0 KiB
Plaintext
/* 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);
|