OpenCores
URL https://opencores.org/ocsvn/test_project/test_project/trunk

Subversion Repositories test_project

[/] [test_project/] [trunk/] [linux_sd_driver/] [include/] [acpi/] [processor.h] - Blame information for rev 81

Go to most recent revision | Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.