| /* | |
| * (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); | |
| } |