cpufreq.c 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. /*
  2. * (C) 2004-2009 Dominik Brodowski <linux@dominikbrodowski.de>
  3. *
  4. * Licensed under the terms of the GNU GPL License version 2.
  5. */
  6. #include <stdio.h>
  7. #include <errno.h>
  8. #include <stdlib.h>
  9. #include <string.h>
  10. #include "cpufreq.h"
  11. #include "sysfs.h"
  12. int cpufreq_cpu_exists(unsigned int cpu)
  13. {
  14. return sysfs_cpu_exists(cpu);
  15. }
  16. unsigned long cpufreq_get_freq_kernel(unsigned int cpu)
  17. {
  18. return sysfs_get_freq_kernel(cpu);
  19. }
  20. unsigned long cpufreq_get_freq_hardware(unsigned int cpu)
  21. {
  22. return sysfs_get_freq_hardware(cpu);
  23. }
  24. unsigned long cpufreq_get_transition_latency(unsigned int cpu)
  25. {
  26. return sysfs_get_freq_transition_latency(cpu);
  27. }
  28. int cpufreq_get_hardware_limits(unsigned int cpu,
  29. unsigned long *min,
  30. unsigned long *max)
  31. {
  32. if ((!min) || (!max))
  33. return -EINVAL;
  34. return sysfs_get_freq_hardware_limits(cpu, min, max);
  35. }
  36. char * cpufreq_get_driver(unsigned int cpu) {
  37. return sysfs_get_freq_driver(cpu);
  38. }
  39. void cpufreq_put_driver(char * ptr) {
  40. if (!ptr)
  41. return;
  42. free(ptr);
  43. }
  44. struct cpufreq_policy * cpufreq_get_policy(unsigned int cpu) {
  45. return sysfs_get_freq_policy(cpu);
  46. }
  47. void cpufreq_put_policy(struct cpufreq_policy *policy) {
  48. if ((!policy) || (!policy->governor))
  49. return;
  50. free(policy->governor);
  51. policy->governor = NULL;
  52. free(policy);
  53. }
  54. struct cpufreq_available_governors * cpufreq_get_available_governors(unsigned int cpu) {
  55. return sysfs_get_freq_available_governors(cpu);
  56. }
  57. void cpufreq_put_available_governors(struct cpufreq_available_governors *any) {
  58. struct cpufreq_available_governors *tmp, *next;
  59. if (!any)
  60. return;
  61. tmp = any->first;
  62. while (tmp) {
  63. next = tmp->next;
  64. if (tmp->governor)
  65. free(tmp->governor);
  66. free(tmp);
  67. tmp = next;
  68. }
  69. }
  70. struct cpufreq_available_frequencies * cpufreq_get_available_frequencies(unsigned int cpu) {
  71. return sysfs_get_available_frequencies(cpu);
  72. }
  73. void cpufreq_put_available_frequencies(struct cpufreq_available_frequencies *any) {
  74. struct cpufreq_available_frequencies *tmp, *next;
  75. if (!any)
  76. return;
  77. tmp = any->first;
  78. while (tmp) {
  79. next = tmp->next;
  80. free(tmp);
  81. tmp = next;
  82. }
  83. }
  84. struct cpufreq_affected_cpus * cpufreq_get_affected_cpus(unsigned int cpu) {
  85. return sysfs_get_freq_affected_cpus(cpu);
  86. }
  87. void cpufreq_put_affected_cpus(struct cpufreq_affected_cpus *any) {
  88. struct cpufreq_affected_cpus *tmp, *next;
  89. if (!any)
  90. return;
  91. tmp = any->first;
  92. while (tmp) {
  93. next = tmp->next;
  94. free(tmp);
  95. tmp = next;
  96. }
  97. }
  98. struct cpufreq_affected_cpus * cpufreq_get_related_cpus(unsigned int cpu) {
  99. return sysfs_get_freq_related_cpus(cpu);
  100. }
  101. void cpufreq_put_related_cpus(struct cpufreq_affected_cpus *any) {
  102. cpufreq_put_affected_cpus(any);
  103. }
  104. int cpufreq_set_policy(unsigned int cpu, struct cpufreq_policy *policy) {
  105. if (!policy || !(policy->governor))
  106. return -EINVAL;
  107. return sysfs_set_freq_policy(cpu, policy);
  108. }
  109. int cpufreq_modify_policy_min(unsigned int cpu, unsigned long min_freq) {
  110. return sysfs_modify_freq_policy_min(cpu, min_freq);
  111. }
  112. int cpufreq_modify_policy_max(unsigned int cpu, unsigned long max_freq) {
  113. return sysfs_modify_freq_policy_max(cpu, max_freq);
  114. }
  115. int cpufreq_modify_policy_governor(unsigned int cpu, char *governor) {
  116. if ((!governor) || (strlen(governor) > 19))
  117. return -EINVAL;
  118. return sysfs_modify_freq_policy_governor(cpu, governor);
  119. }
  120. int cpufreq_set_frequency(unsigned int cpu, unsigned long target_frequency) {
  121. return sysfs_set_frequency(cpu, target_frequency);
  122. }
  123. struct cpufreq_stats * cpufreq_get_stats(unsigned int cpu, unsigned long long *total_time) {
  124. struct cpufreq_stats *ret;
  125. ret = sysfs_get_freq_stats(cpu, total_time);
  126. return (ret);
  127. }
  128. void cpufreq_put_stats(struct cpufreq_stats *any) {
  129. struct cpufreq_stats *tmp, *next;
  130. if (!any)
  131. return;
  132. tmp = any->first;
  133. while (tmp) {
  134. next = tmp->next;
  135. free(tmp);
  136. tmp = next;
  137. }
  138. }
  139. unsigned long cpufreq_get_transitions(unsigned int cpu) {
  140. unsigned long ret = sysfs_get_freq_transitions(cpu);
  141. return (ret);
  142. }