aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/cpufreq.h
diff options
context:
space:
mode:
authorRafael J. Wysocki <rjw@rjwysocki.net>2013-10-25 16:36:40 -0400
committerRafael J. Wysocki <rjw@rjwysocki.net>2013-10-25 16:36:40 -0400
commit6ddee424fea2d269c2f402278d93165c7b92dc58 (patch)
treec1b1d0d9058846a6da22def648dea61e16faacd0 /include/linux/cpufreq.h
parente4db1c7439b31993a4886b273bb9235a8eea82bf (diff)
parenta814613b9a32d9ab9578d9dab396265c826d37f0 (diff)
Merge back earlier 'pm-cpufreq' material.
Conflicts: drivers/cpufreq/omap-cpufreq.c
Diffstat (limited to 'include/linux/cpufreq.h')
-rw-r--r--include/linux/cpufreq.h50
1 files changed, 36 insertions, 14 deletions
diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h
index fcabc42d66ab..0aba2a6cadaf 100644
--- a/include/linux/cpufreq.h
+++ b/include/linux/cpufreq.h
@@ -180,13 +180,6 @@ __ATTR(_name, 0644, show_##_name, store_##_name)
180struct cpufreq_driver { 180struct cpufreq_driver {
181 char name[CPUFREQ_NAME_LEN]; 181 char name[CPUFREQ_NAME_LEN];
182 u8 flags; 182 u8 flags;
183 /*
184 * This should be set by platforms having multiple clock-domains, i.e.
185 * supporting multiple policies. With this sysfs directories of governor
186 * would be created in cpu/cpu<num>/cpufreq/ directory and so they can
187 * use the same governor with different tunables for different clusters.
188 */
189 bool have_governor_per_policy;
190 183
191 /* needed by all drivers */ 184 /* needed by all drivers */
192 int (*init) (struct cpufreq_policy *policy); 185 int (*init) (struct cpufreq_policy *policy);
@@ -211,13 +204,22 @@ struct cpufreq_driver {
211}; 204};
212 205
213/* flags */ 206/* flags */
214#define CPUFREQ_STICKY 0x01 /* the driver isn't removed even if 207#define CPUFREQ_STICKY (1 << 0) /* driver isn't removed even if
215 * all ->init() calls failed */ 208 all ->init() calls failed */
216#define CPUFREQ_CONST_LOOPS 0x02 /* loops_per_jiffy or other kernel 209#define CPUFREQ_CONST_LOOPS (1 << 1) /* loops_per_jiffy or other
217 * "constants" aren't affected by 210 kernel "constants" aren't
218 * frequency transitions */ 211 affected by frequency
219#define CPUFREQ_PM_NO_WARN 0x04 /* don't warn on suspend/resume speed 212 transitions */
220 * mismatches */ 213#define CPUFREQ_PM_NO_WARN (1 << 2) /* don't warn on suspend/resume
214 speed mismatches */
215
216/*
217 * This should be set by platforms having multiple clock-domains, i.e.
218 * supporting multiple policies. With this sysfs directories of governor would
219 * be created in cpu/cpu<num>/cpufreq/ directory and so they can use the same
220 * governor with different tunables for different clusters.
221 */
222#define CPUFREQ_HAVE_GOVERNOR_PER_POLICY (1 << 3)
221 223
222int cpufreq_register_driver(struct cpufreq_driver *driver_data); 224int cpufreq_register_driver(struct cpufreq_driver *driver_data);
223int cpufreq_unregister_driver(struct cpufreq_driver *driver_data); 225int cpufreq_unregister_driver(struct cpufreq_driver *driver_data);
@@ -240,6 +242,13 @@ static inline void cpufreq_verify_within_limits(struct cpufreq_policy *policy,
240 return; 242 return;
241} 243}
242 244
245static inline void
246cpufreq_verify_within_cpu_limits(struct cpufreq_policy *policy)
247{
248 cpufreq_verify_within_limits(policy, policy->cpuinfo.min_freq,
249 policy->cpuinfo.max_freq);
250}
251
243/********************************************************************* 252/*********************************************************************
244 * CPUFREQ NOTIFIER INTERFACE * 253 * CPUFREQ NOTIFIER INTERFACE *
245 *********************************************************************/ 254 *********************************************************************/
@@ -392,6 +401,7 @@ int cpufreq_frequency_table_cpuinfo(struct cpufreq_policy *policy,
392 401
393int cpufreq_frequency_table_verify(struct cpufreq_policy *policy, 402int cpufreq_frequency_table_verify(struct cpufreq_policy *policy,
394 struct cpufreq_frequency_table *table); 403 struct cpufreq_frequency_table *table);
404int cpufreq_generic_frequency_table_verify(struct cpufreq_policy *policy);
395 405
396int cpufreq_frequency_table_target(struct cpufreq_policy *policy, 406int cpufreq_frequency_table_target(struct cpufreq_policy *policy,
397 struct cpufreq_frequency_table *table, 407 struct cpufreq_frequency_table *table,
@@ -407,8 +417,20 @@ struct cpufreq_frequency_table *cpufreq_frequency_get_table(unsigned int cpu);
407 417
408/* the following are really really optional */ 418/* the following are really really optional */
409extern struct freq_attr cpufreq_freq_attr_scaling_available_freqs; 419extern struct freq_attr cpufreq_freq_attr_scaling_available_freqs;
420extern struct freq_attr *cpufreq_generic_attr[];
410void cpufreq_frequency_table_get_attr(struct cpufreq_frequency_table *table, 421void cpufreq_frequency_table_get_attr(struct cpufreq_frequency_table *table,
411 unsigned int cpu); 422 unsigned int cpu);
412void cpufreq_frequency_table_put_attr(unsigned int cpu); 423void cpufreq_frequency_table_put_attr(unsigned int cpu);
424int cpufreq_table_validate_and_show(struct cpufreq_policy *policy,
425 struct cpufreq_frequency_table *table);
426
427int cpufreq_generic_init(struct cpufreq_policy *policy,
428 struct cpufreq_frequency_table *table,
429 unsigned int transition_latency);
430static inline int cpufreq_generic_exit(struct cpufreq_policy *policy)
431{
432 cpufreq_frequency_table_put_attr(policy->cpu);
433 return 0;
434}
413 435
414#endif /* _LINUX_CPUFREQ_H */ 436#endif /* _LINUX_CPUFREQ_H */