2 * drivers/cpufreq/cpufreq_governor.h
4 * Header file for CPUFreq governors common code
6 * Copyright (C) 2001 Russell King
7 * (C) 2003 Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>.
8 * (C) 2003 Jun Nakajima <jun.nakajima@intel.com>
9 * (C) 2009 Alexander Clouter <alex@digriz.org.uk>
10 * (c) 2012 Viresh Kumar <viresh.kumar@linaro.org>
12 * This program is free software; you can redistribute it and/or modify
13 * it under the terms of the GNU General Public License version 2 as
14 * published by the Free Software Foundation.
17 #ifndef _CPUFREQ_GOVERNER_H
18 #define _CPUFREQ_GOVERNER_H
20 #include <linux/cpufreq.h>
21 #include <linux/kobject.h>
22 #include <linux/mutex.h>
23 #include <linux/workqueue.h>
24 #include <linux/sysfs.h>
27 * The polling frequency depends on the capability of the processor. Default
28 * polling frequency is 1000 times the transition latency of the processor. The
29 * governor will work on any processor with transition latency <= 10mS, using
30 * appropriate sampling rate.
32 * For CPUs with transition latency > 10mS (mostly drivers with CPUFREQ_ETERNAL)
33 * this governor will not work. All times here are in uS.
35 #define MIN_SAMPLING_RATE_RATIO (2)
36 #define LATENCY_MULTIPLIER (1000)
37 #define MIN_LATENCY_MULTIPLIER (100)
38 #define TRANSITION_LATENCY_LIMIT (10 * 1000 * 1000)
40 /* Ondemand Sampling types */
41 enum {OD_NORMAL_SAMPLE
, OD_SUB_SAMPLE
};
43 /* Macro creating sysfs show routines */
44 #define show_one(_gov, file_name, object) \
45 static ssize_t show_##file_name \
46 (struct kobject *kobj, struct attribute *attr, char *buf) \
48 return sprintf(buf, "%u\n", _gov##_tuners.object); \
51 #define define_get_cpu_dbs_routines(_dbs_info) \
52 static struct cpu_dbs_common_info *get_cpu_cdbs(int cpu) \
54 return &per_cpu(_dbs_info, cpu).cdbs; \
57 static void *get_cpu_dbs_info_s(int cpu) \
59 return &per_cpu(_dbs_info, cpu); \
64 * dbs: used as a shortform for demand based switching It helps to keep variable
65 * names smaller, simpler
67 * on_*: On-demand governor
68 * cs_*: Conservative governor
71 /* Per cpu structures */
72 struct cpu_dbs_common_info
{
77 struct cpufreq_policy
*cur_policy
;
78 struct delayed_work work
;
80 * percpu mutex that serializes governor limit change with gov_dbs_timer
81 * invocation. We do not want gov_dbs_timer to run when user is changing
82 * the governor or limits.
84 struct mutex timer_mutex
;
87 struct od_cpu_dbs_info_s
{
88 struct cpu_dbs_common_info cdbs
;
90 struct cpufreq_frequency_table
*freq_table
;
92 unsigned int freq_lo_jiffies
;
93 unsigned int freq_hi_jiffies
;
94 unsigned int rate_mult
;
95 unsigned int sample_type
:1;
98 struct cs_cpu_dbs_info_s
{
99 struct cpu_dbs_common_info cdbs
;
100 unsigned int down_skip
;
101 unsigned int requested_freq
;
102 unsigned int enable
:1;
105 /* Governers sysfs tunables */
106 struct od_dbs_tuners
{
107 unsigned int ignore_nice
;
108 unsigned int sampling_rate
;
109 unsigned int sampling_down_factor
;
110 unsigned int up_threshold
;
111 unsigned int down_differential
;
112 unsigned int powersave_bias
;
113 unsigned int io_is_busy
;
116 struct cs_dbs_tuners
{
117 unsigned int ignore_nice
;
118 unsigned int sampling_rate
;
119 unsigned int sampling_down_factor
;
120 unsigned int up_threshold
;
121 unsigned int down_threshold
;
122 unsigned int freq_step
;
125 /* Per Governer data */
127 /* Common across governors */
128 #define GOV_ONDEMAND 0
129 #define GOV_CONSERVATIVE 1
131 unsigned int min_sampling_rate
;
132 unsigned int enable
; /* number of CPUs using this policy */
133 struct attribute_group
*attr_group
;
136 /* dbs_mutex protects dbs_enable in governor start/stop */
139 struct cpu_dbs_common_info
*(*get_cpu_cdbs
)(int cpu
);
140 void *(*get_cpu_dbs_info_s
)(int cpu
);
141 void (*gov_dbs_timer
)(struct work_struct
*work
);
142 void (*gov_check_cpu
)(int cpu
, unsigned int load
);
144 /* Governor specific ops, see below */
148 /* Governor specific ops, will be passed to dbs_data->gov_ops */
150 int (*io_busy
)(void);
151 void (*powersave_bias_init_cpu
)(int cpu
);
152 unsigned int (*powersave_bias_target
)(struct cpufreq_policy
*policy
,
153 unsigned int freq_next
, unsigned int relation
);
154 void (*freq_increase
)(struct cpufreq_policy
*p
, unsigned int freq
);
158 struct notifier_block
*notifier_block
;
161 static inline int delay_for_sampling_rate(unsigned int sampling_rate
)
163 int delay
= usecs_to_jiffies(sampling_rate
);
165 /* We want all CPUs to do sampling nearly on same jiffy */
166 if (num_online_cpus() > 1)
167 delay
-= jiffies
% delay
;
172 u64
get_cpu_idle_time(unsigned int cpu
, u64
*wall
);
173 void dbs_check_cpu(struct dbs_data
*dbs_data
, int cpu
);
174 int cpufreq_governor_dbs(struct dbs_data
*dbs_data
,
175 struct cpufreq_policy
*policy
, unsigned int event
);
176 #endif /* _CPUFREQ_GOVERNER_H */