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
include
acpi
processor.h
Go to the documentation of this file.
1
#ifndef __ACPI_PROCESSOR_H
2
#define __ACPI_PROCESSOR_H
3
4
#include <linux/kernel.h>
5
#include <
linux/cpu.h
>
6
#include <
linux/thermal.h
>
7
#include <asm/acpi.h>
8
9
#define ACPI_PROCESSOR_BUSY_METRIC 10
10
11
#define ACPI_PROCESSOR_MAX_POWER 8
12
#define ACPI_PROCESSOR_MAX_C2_LATENCY 100
13
#define ACPI_PROCESSOR_MAX_C3_LATENCY 1000
14
15
#define ACPI_PROCESSOR_MAX_THROTTLING 16
16
#define ACPI_PROCESSOR_MAX_THROTTLE 250
/* 25% */
17
#define ACPI_PROCESSOR_MAX_DUTY_WIDTH 4
18
19
#define ACPI_PDC_REVISION_ID 0x1
20
21
#define ACPI_PSD_REV0_REVISION 0
/* Support for _PSD as in ACPI 3.0 */
22
#define ACPI_PSD_REV0_ENTRIES 5
23
24
#define ACPI_TSD_REV0_REVISION 0
/* Support for _PSD as in ACPI 3.0 */
25
#define ACPI_TSD_REV0_ENTRIES 5
26
/*
27
* Types of coordination defined in ACPI 3.0. Same macros can be used across
28
* P, C and T states
29
*/
30
#define DOMAIN_COORD_TYPE_SW_ALL 0xfc
31
#define DOMAIN_COORD_TYPE_SW_ANY 0xfd
32
#define DOMAIN_COORD_TYPE_HW_ALL 0xfe
33
34
#define ACPI_CSTATE_SYSTEMIO 0
35
#define ACPI_CSTATE_FFH 1
36
#define ACPI_CSTATE_HALT 2
37
38
#define ACPI_CX_DESC_LEN 32
39
40
/* Power Management */
41
42
struct
acpi_processor_cx
;
43
44
struct
acpi_power_register
{
45
u8
descriptor
;
46
u16
length
;
47
u8
space_id
;
48
u8
bit_width
;
49
u8
bit_offset
;
50
u8
access_size
;
51
u64
address
;
52
}
__attribute__
((packed));
53
54
struct
acpi_processor_cx
{
55
u8
valid
;
56
u8
type
;
57
u32
address
;
58
u8
entry_method
;
59
u8
index
;
60
u32
latency
;
61
u8
bm_sts_skip
;
62
char
desc
[
ACPI_CX_DESC_LEN
];
63
};
64
65
struct
acpi_processor_power
{
66
struct
acpi_processor_cx
*
state
;
67
unsigned
long
bm_check_timestamp
;
68
u32
default_state
;
69
int
count
;
70
struct
acpi_processor_cx
states
[
ACPI_PROCESSOR_MAX_POWER
];
71
int
timer_broadcast_on_state
;
72
};
73
74
/* Performance Management */
75
76
struct
acpi_psd_package
{
77
u64
num_entries
;
78
u64
revision
;
79
u64
domain
;
80
u64
coord_type
;
81
u64
num_processors
;
82
}
__attribute__
((packed));
83
84
struct
acpi_pct_register
{
85
u8
descriptor
;
86
u16
length
;
87
u8
space_id
;
88
u8
bit_width
;
89
u8
bit_offset
;
90
u8
reserved
;
91
u64
address
;
92
}
__attribute__
((packed));
93
94
struct
acpi_processor_px
{
95
u64
core_frequency
;
/* megahertz */
96
u64
power
;
/* milliWatts */
97
u64
transition_latency
;
/* microseconds */
98
u64
bus_master_latency
;
/* microseconds */
99
u64
control
;
/* control value */
100
u64
status
;
/* success indicator */
101
};
102
103
struct
acpi_processor_performance
{
104
unsigned
int
state
;
105
unsigned
int
platform_limit
;
106
struct
acpi_pct_register
control_register
;
107
struct
acpi_pct_register
status_register
;
108
unsigned
int
state_count
;
109
struct
acpi_processor_px
*
states
;
110
struct
acpi_psd_package
domain_info
;
111
cpumask_var_t
shared_cpu_map
;
112
unsigned
int
shared_type
;
113
};
114
115
/* Throttling Control */
116
117
struct
acpi_tsd_package
{
118
u64
num_entries
;
119
u64
revision
;
120
u64
domain
;
121
u64
coord_type
;
122
u64
num_processors
;
123
}
__attribute__
((packed));
124
125
struct
acpi_ptc_register
{
126
u8
descriptor
;
127
u16
length
;
128
u8
space_id
;
129
u8
bit_width
;
130
u8
bit_offset
;
131
u8
reserved
;
132
u64
address
;
133
}
__attribute__
((packed));
134
135
struct
acpi_processor_tx_tss
{
136
u64
freqpercentage
;
/* */
137
u64
power
;
/* milliWatts */
138
u64
transition_latency
;
/* microseconds */
139
u64
control
;
/* control value */
140
u64
status
;
/* success indicator */
141
};
142
struct
acpi_processor_tx
{
143
u16
power
;
144
u16
performance
;
145
};
146
147
struct
acpi_processor
;
148
struct
acpi_processor_throttling
{
149
unsigned
int
state
;
150
unsigned
int
platform_limit
;
151
struct
acpi_pct_register
control_register
;
152
struct
acpi_pct_register
status_register
;
153
unsigned
int
state_count
;
154
struct
acpi_processor_tx_tss
*
states_tss
;
155
struct
acpi_tsd_package
domain_info
;
156
cpumask_var_t
shared_cpu_map
;
157
int
(*
acpi_processor_get_throttling
) (
struct
acpi_processor
*
pr
);
158
int
(*
acpi_processor_set_throttling
) (
struct
acpi_processor
*
pr
,
159
int
state
,
bool
force
);
160
161
u32
address
;
162
u8
duty_offset
;
163
u8
duty_width
;
164
u8
tsd_valid_flag
;
165
unsigned
int
shared_type
;
166
struct
acpi_processor_tx
states
[
ACPI_PROCESSOR_MAX_THROTTLING
];
167
};
168
169
/* Limit Interface */
170
171
struct
acpi_processor_lx
{
172
int
px
;
/* performance state */
173
int
tx
;
/* throttle level */
174
};
175
176
struct
acpi_processor_limit
{
177
struct
acpi_processor_lx
state
;
/* current limit */
178
struct
acpi_processor_lx
thermal
;
/* thermal limit */
179
struct
acpi_processor_lx
user
;
/* user limit */
180
};
181
182
struct
acpi_processor_flags
{
183
u8
power
:1;
184
u8
performance
:1;
185
u8
throttling
:1;
186
u8
limit
:1;
187
u8
bm_control
:1;
188
u8
bm_check
:1;
189
u8
has_cst
:1;
190
u8
power_setup_done
:1;
191
u8
bm_rld_set
:1;
192
u8
need_hotplug_init
:1;
193
};
194
195
struct
acpi_processor
{
196
acpi_handle
handle
;
197
u32
acpi_id
;
198
u32
id
;
199
u32
pblk
;
200
int
performance_platform_limit
;
201
int
throttling_platform_limit
;
202
/* 0 - states 0..n-th state available */
203
204
struct
acpi_processor_flags
flags
;
205
struct
acpi_processor_power
power
;
206
struct
acpi_processor_performance
*
performance
;
207
struct
acpi_processor_throttling
throttling
;
208
struct
acpi_processor_limit
limit
;
209
struct
thermal_cooling_device
*
cdev
;
210
};
211
212
struct
acpi_processor_errata
{
213
u8
smp
;
214
struct
{
215
u8
throttle
:1;
216
u8
fdma
:1;
217
u8
reserved
:6;
218
u32
bmisx
;
219
}
piix4
;
220
};
221
222
extern
void
acpi_processor_load_module
(
struct
acpi_processor
*
pr
);
223
extern
int
acpi_processor_preregister_performance
(
struct
224
acpi_processor_performance
225
__percpu
*performance);
226
227
extern
int
acpi_processor_register_performance
(
struct
acpi_processor_performance
228
*performance,
unsigned
int
cpu
);
229
extern
void
acpi_processor_unregister_performance
(
struct
230
acpi_processor_performance
231
*performance,
232
unsigned
int
cpu
);
233
234
/* note: this locks both the calling module and the processor module
235
if a _PPC object exists, rmmod is disallowed then */
236
int
acpi_processor_notify_smm
(
struct
module
*calling_module);
237
238
/* for communication between multiple parts of the processor kernel module */
239
DECLARE_PER_CPU
(
struct
acpi_processor
*, processors);
240
extern
struct
acpi_processor_errata
errata
;
241
242
#ifdef ARCH_HAS_POWER_INIT
243
void
acpi_processor_power_init_bm_check
(
struct
acpi_processor_flags
*
flags
,
244
unsigned
int
cpu
);
245
int
acpi_processor_ffh_cstate_probe
(
unsigned
int
cpu
,
246
struct
acpi_processor_cx
*cx,
247
struct
acpi_power_register
*
reg
);
248
void
acpi_processor_ffh_cstate_enter
(
struct
acpi_processor_cx
*
cstate
);
249
#else
250
static
inline
void
acpi_processor_power_init_bm_check
(
struct
251
acpi_processor_flags
252
*
flags
,
unsigned
int
cpu
)
253
{
254
flags->
bm_check
= 1;
255
return
;
256
}
257
static
inline
int
acpi_processor_ffh_cstate_probe
(
unsigned
int
cpu
,
258
struct
acpi_processor_cx
*cx,
259
struct
acpi_power_register
260
*
reg
)
261
{
262
return
-1;
263
}
264
static
inline
void
acpi_processor_ffh_cstate_enter
(
struct
acpi_processor_cx
265
*
cstate
)
266
{
267
return
;
268
}
269
#endif
270
271
/* in processor_perflib.c */
272
273
#ifdef CONFIG_CPU_FREQ
274
void
acpi_processor_ppc_init
(
void
);
275
void
acpi_processor_ppc_exit
(
void
);
276
int
acpi_processor_ppc_has_changed
(
struct
acpi_processor
*
pr
,
int
event_flag);
277
extern
int
acpi_processor_get_bios_limit
(
int
cpu
,
unsigned
int
*
limit
);
278
#else
279
static
inline
void
acpi_processor_ppc_init
(
void
)
280
{
281
return
;
282
}
283
static
inline
void
acpi_processor_ppc_exit
(
void
)
284
{
285
return
;
286
}
287
static
inline
int
acpi_processor_ppc_has_changed
(
struct
acpi_processor
*
pr
,
288
int
event_flag)
289
{
290
static
unsigned
int
printout = 1;
291
if
(printout) {
292
printk
(
KERN_WARNING
293
"Warning: Processor Platform Limit event detected, but not handled.\n"
);
294
printk
(
KERN_WARNING
295
"Consider compiling CPUfreq support into your kernel.\n"
);
296
printout = 0;
297
}
298
return
0;
299
}
300
static
inline
int
acpi_processor_get_bios_limit
(
int
cpu
,
unsigned
int
*
limit
)
301
{
302
return
-
ENODEV
;
303
}
304
305
#endif
/* CONFIG_CPU_FREQ */
306
307
/* in processor_core.c */
308
void
acpi_processor_set_pdc
(
acpi_handle
handle
);
309
int
acpi_get_cpuid
(
acpi_handle
,
int
type
,
u32
acpi_id);
310
311
/* in processor_throttling.c */
312
int
acpi_processor_tstate_has_changed
(
struct
acpi_processor
*pr);
313
int
acpi_processor_get_throttling_info
(
struct
acpi_processor
*pr);
314
extern
int
acpi_processor_set_throttling
(
struct
acpi_processor
*pr,
315
int
state
,
bool
force
);
316
/*
317
* Reevaluate whether the T-state is invalid after one cpu is
318
* onlined/offlined. In such case the flags.throttling will be updated.
319
*/
320
extern
void
acpi_processor_reevaluate_tstate
(
struct
acpi_processor
*pr,
321
unsigned
long
action
);
322
extern
const
struct
file_operations
acpi_processor_throttling_fops
;
323
extern
void
acpi_processor_throttling_init
(
void
);
324
/* in processor_idle.c */
325
int
acpi_processor_power_init
(
struct
acpi_processor
*pr);
326
int
acpi_processor_power_exit
(
struct
acpi_processor
*pr);
327
int
acpi_processor_cst_has_changed
(
struct
acpi_processor
*pr);
328
int
acpi_processor_hotplug
(
struct
acpi_processor
*pr);
329
int
acpi_processor_suspend
(
struct
device
*
dev
);
330
int
acpi_processor_resume
(
struct
device
*
dev
);
331
extern
struct
cpuidle_driver
acpi_idle_driver
;
332
333
/* in processor_thermal.c */
334
int
acpi_processor_get_limit_info
(
struct
acpi_processor
*pr);
335
extern
const
struct
thermal_cooling_device_ops
processor_cooling_ops
;
336
#ifdef CONFIG_CPU_FREQ
337
void
acpi_thermal_cpufreq_init(
void
);
338
void
acpi_thermal_cpufreq_exit(
void
);
339
#else
340
static
inline
void
acpi_thermal_cpufreq_init(
void
)
341
{
342
return
;
343
}
344
static
inline
void
acpi_thermal_cpufreq_exit(
void
)
345
{
346
return
;
347
}
348
#endif
349
350
#endif
Generated on Thu Jan 10 2013 12:50:20 for Linux Kernel by
1.8.2