Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
tools
power
cpupower
lib
cpufreq.h
Go to the documentation of this file.
1
/*
2
* cpufreq.h - definitions for libcpufreq
3
*
4
* Copyright (C) 2004-2009 Dominik Brodowski <
[email protected]
>
5
*
6
* This program is free software; you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License as published by
8
* the Free Software Foundation, version 2 of the License.
9
*
10
* This program is distributed in the hope that it will be useful,
11
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
* GNU General Public License for more details.
14
*
15
* You should have received a copy of the GNU General Public License
16
* along with this program; if not, write to the Free Software
17
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
*/
19
20
#ifndef _CPUFREQ_H
21
#define _CPUFREQ_H 1
22
23
struct
cpufreq_policy
{
24
unsigned
long
min
;
25
unsigned
long
max
;
26
char
*
governor
;
27
};
28
29
struct
cpufreq_available_governors
{
30
char
*
governor
;
31
struct
cpufreq_available_governors
*
next
;
32
struct
cpufreq_available_governors
*
first
;
33
};
34
35
struct
cpufreq_available_frequencies
{
36
unsigned
long
frequency
;
37
struct
cpufreq_available_frequencies
*
next
;
38
struct
cpufreq_available_frequencies
*
first
;
39
};
40
41
42
struct
cpufreq_affected_cpus
{
43
unsigned
int
cpu
;
44
struct
cpufreq_affected_cpus
*
next
;
45
struct
cpufreq_affected_cpus
*
first
;
46
};
47
48
struct
cpufreq_stats
{
49
unsigned
long
frequency
;
50
unsigned
long
long
time_in_state
;
51
struct
cpufreq_stats
*
next
;
52
struct
cpufreq_stats
*
first
;
53
};
54
55
56
57
#ifdef __cplusplus
58
extern
"C"
{
59
#endif
60
61
/*
62
* returns 0 if the specified CPU is present (it doesn't say
63
* whether it is online!), and an error value if not.
64
*/
65
66
extern
int
cpufreq_cpu_exists
(
unsigned
int
cpu
);
67
68
/* determine current CPU frequency
69
* - _kernel variant means kernel's opinion of CPU frequency
70
* - _hardware variant means actual hardware CPU frequency,
71
* which is only available to root.
72
*
73
* returns 0 on failure, else frequency in kHz.
74
*/
75
76
extern
unsigned
long
cpufreq_get_freq_kernel
(
unsigned
int
cpu);
77
78
extern
unsigned
long
cpufreq_get_freq_hardware
(
unsigned
int
cpu);
79
80
#define cpufreq_get(cpu) cpufreq_get_freq_kernel(cpu);
81
82
83
/* determine CPU transition latency
84
*
85
* returns 0 on failure, else transition latency in 10^(-9) s = nanoseconds
86
*/
87
extern
unsigned
long
cpufreq_get_transition_latency
(
unsigned
int
cpu);
88
89
90
/* determine hardware CPU frequency limits
91
*
92
* These may be limited further by thermal, energy or other
93
* considerations by cpufreq policy notifiers in the kernel.
94
*/
95
96
extern
int
cpufreq_get_hardware_limits
(
unsigned
int
cpu,
97
unsigned
long
*
min
,
98
unsigned
long
*
max
);
99
100
101
/* determine CPUfreq driver used
102
*
103
* Remember to call cpufreq_put_driver when no longer needed
104
* to avoid memory leakage, please.
105
*/
106
107
extern
char
*
cpufreq_get_driver
(
unsigned
int
cpu);
108
109
extern
void
cpufreq_put_driver
(
char
*
ptr
);
110
111
112
/* determine CPUfreq policy currently used
113
*
114
* Remember to call cpufreq_put_policy when no longer needed
115
* to avoid memory leakage, please.
116
*/
117
118
119
extern
struct
cpufreq_policy
*
cpufreq_get_policy
(
unsigned
int
cpu);
120
121
extern
void
cpufreq_put_policy
(
struct
cpufreq_policy
*
policy
);
122
123
124
/* determine CPUfreq governors currently available
125
*
126
* may be modified by modprobe'ing or rmmod'ing other governors. Please
127
* free allocated memory by calling cpufreq_put_available_governors
128
* after use.
129
*/
130
131
132
extern
struct
cpufreq_available_governors
133
*
cpufreq_get_available_governors
(
unsigned
int
cpu);
134
135
extern
void
cpufreq_put_available_governors
(
136
struct
cpufreq_available_governors
*
first
);
137
138
139
/* determine CPU frequency states available
140
*
141
* Only present on _some_ ->target() cpufreq drivers. For information purposes
142
* only. Please free allocated memory by calling
143
* cpufreq_put_available_frequencies after use.
144
*/
145
146
extern
struct
cpufreq_available_frequencies
147
*
cpufreq_get_available_frequencies
(
unsigned
int
cpu);
148
149
extern
void
cpufreq_put_available_frequencies
(
150
struct
cpufreq_available_frequencies
*
first
);
151
152
153
/* determine affected CPUs
154
*
155
* Remember to call cpufreq_put_affected_cpus when no longer needed
156
* to avoid memory leakage, please.
157
*/
158
159
extern
struct
cpufreq_affected_cpus
*
cpufreq_get_affected_cpus
(
unsigned
160
int
cpu);
161
162
extern
void
cpufreq_put_affected_cpus
(
struct
cpufreq_affected_cpus
*
first
);
163
164
165
/* determine related CPUs
166
*
167
* Remember to call cpufreq_put_related_cpus when no longer needed
168
* to avoid memory leakage, please.
169
*/
170
171
extern
struct
cpufreq_affected_cpus
*
cpufreq_get_related_cpus
(
unsigned
172
int
cpu);
173
174
extern
void
cpufreq_put_related_cpus
(
struct
cpufreq_affected_cpus
*
first
);
175
176
177
/* determine stats for cpufreq subsystem
178
*
179
* This is not available in all kernel versions or configurations.
180
*/
181
182
extern
struct
cpufreq_stats
*
cpufreq_get_stats
(
unsigned
int
cpu,
183
unsigned
long
long
*total_time);
184
185
extern
void
cpufreq_put_stats
(
struct
cpufreq_stats
*
stats
);
186
187
extern
unsigned
long
cpufreq_get_transitions
(
unsigned
int
cpu);
188
189
190
/* set new cpufreq policy
191
*
192
* Tries to set the passed policy as new policy as close as possible,
193
* but results may differ depending e.g. on governors being available.
194
*/
195
196
extern
int
cpufreq_set_policy
(
unsigned
int
cpu,
struct
cpufreq_policy
*policy);
197
198
199
/* modify a policy by only changing min/max freq or governor
200
*
201
* Does not check whether result is what was intended.
202
*/
203
204
extern
int
cpufreq_modify_policy_min
(
unsigned
int
cpu,
unsigned
long
min_freq);
205
extern
int
cpufreq_modify_policy_max
(
unsigned
int
cpu,
unsigned
long
max_freq);
206
extern
int
cpufreq_modify_policy_governor
(
unsigned
int
cpu,
char
*governor);
207
208
209
/* set a specific frequency
210
*
211
* Does only work if userspace governor can be used and no external
212
* interference (other calls to this function or to set/modify_policy)
213
* occurs. Also does not work on ->range() cpufreq drivers.
214
*/
215
216
extern
int
cpufreq_set_frequency
(
unsigned
int
cpu,
217
unsigned
long
target_frequency);
218
219
#ifdef __cplusplus
220
}
221
#endif
222
223
#endif
/* _CPUFREQ_H */
Generated on Thu Jan 10 2013 12:58:30 for Linux Kernel by
1.8.2