/* * (C) 2004-2009 Dominik Brodowski <linux@dominikbrodowski.de> * * Licensed under the terms of the GNU GPL License version 2. */ #include <stdio.h> #include <errno.h> #include <stdlib.h> #include <string.h> #include "cpufreq.h" #include "sysfs.h" int cpufreq_cpu_exists(unsigned int cpu) { return sysfs_cpu_exists(cpu); } unsigned long cpufreq_get_freq_kernel(unsigned int cpu) { return sysfs_get_freq_kernel(cpu); } unsigned long cpufreq_get_freq_hardware(unsigned int cpu) { return sysfs_get_freq_hardware(cpu); } unsigned long cpufreq_get_transition_latency(unsigned int cpu) { return sysfs_get_freq_transition_latency(cpu); } int cpufreq_get_hardware_limits(unsigned int cpu, unsigned long *min, unsigned long *max) { if ((!min) || (!max)) return -EINVAL; return sysfs_get_freq_hardware_limits(cpu, min, max); } char *cpufreq_get_driver(unsigned int cpu) { return sysfs_get_freq_driver(cpu); } void cpufreq_put_driver(char *ptr) { if (!ptr) return; free(ptr); } struct cpufreq_policy *cpufreq_get_policy(unsigned int cpu) { return sysfs_get_freq_policy(cpu); } void cpufreq_put_policy(struct cpufreq_policy *policy) { if ((!policy) || (!policy->governor)) return; free(policy->governor); policy->governor = NULL; free(policy); } struct cpufreq_available_governors *cpufreq_get_available_governors(unsigned int cpu) { return sysfs_get_freq_available_governors(cpu); } void cpufreq_put_available_governors(struct cpufreq_available_governors *any) { struct cpufreq_available_governors *tmp, *next; if (!any) return; tmp = any->first; while (tmp) { next = tmp->next; if (tmp->governor) free(tmp->governor); free(tmp); tmp = next; } } struct cpufreq_available_frequencies *cpufreq_get_available_frequencies(unsigned int cpu) { return sysfs_get_available_frequencies(cpu); } void cpufreq_put_available_frequencies(struct cpufreq_available_frequencies *any) { struct cpufreq_available_frequencies *tmp, *next; if (!any) return; tmp = any->first; while (tmp) { next = tmp->next; free(tmp); tmp = next; } } struct cpufreq_affected_cpus *cpufreq_get_affected_cpus(unsigned int cpu) { return sysfs_get_freq_affected_cpus(cpu); } void cpufreq_put_affected_cpus(struct cpufreq_affected_cpus *any) { struct cpufreq_affected_cpus *tmp, *next; if (!any) return; tmp = any->first; while (tmp) { next = tmp->next; free(tmp); tmp = next; } } struct cpufreq_affected_cpus *cpufreq_get_related_cpus(unsigned int cpu) { return sysfs_get_freq_related_cpus(cpu); } void cpufreq_put_related_cpus(struct cpufreq_affected_cpus *any) { cpufreq_put_affected_cpus(any); } int cpufreq_set_policy(unsigned int cpu, struct cpufreq_policy *policy) { if (!policy || !(policy->governor)) return -EINVAL; return sysfs_set_freq_policy(cpu, policy); } int cpufreq_modify_policy_min(unsigned int cpu, unsigned long min_freq) { return sysfs_modify_freq_policy_min(cpu, min_freq); } int cpufreq_modify_policy_max(unsigned int cpu, unsigned long max_freq) { return sysfs_modify_freq_policy_max(cpu, max_freq); } int cpufreq_modify_policy_governor(unsigned int cpu, char *governor) { if ((!governor) || (strlen(governor) > 19)) return -EINVAL; return sysfs_modify_freq_policy_governor(cpu, governor); } int cpufreq_set_frequency(unsigned int cpu, unsigned long target_frequency) { return sysfs_set_frequency(cpu, target_frequency); } struct cpufreq_stats *cpufreq_get_stats(unsigned int cpu, unsigned long long *total_time) { return sysfs_get_freq_stats(cpu, total_time); } void cpufreq_put_stats(struct cpufreq_stats *any) { struct cpufreq_stats *tmp, *next; if (!any) return; tmp = any->first; while (tmp) { next = tmp->next; free(tmp); tmp = next; } } unsigned long cpufreq_get_transitions(unsigned int cpu) { return sysfs_get_freq_transitions(cpu); }