File: pr.h

package info (click to toggle)
kernel-image-2.4.18-hppa 62.3
  • links: PTS
  • area: main
  • in suites: woody
  • size: 156,012 kB
  • ctags: 448,723
  • sloc: ansic: 2,586,445; asm: 145,047; makefile: 8,574; sh: 3,097; perl: 2,578; yacc: 1,177; tcl: 577; lex: 352; awk: 251; lisp: 218; sed: 72
file content (265 lines) | stat: -rw-r--r-- 5,351 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
/******************************************************************************
 *
 * Module Name: processor.h
 *              $Revision: 13 $
 *
 *****************************************************************************/

/*
 *  Copyright (C) 2000, 2001 Andrew Grover
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

#ifndef __PR_H__
#define __PR_H__

#include <bm.h>


/*****************************************************************************
 *                             Types & Other Defines
 *****************************************************************************/


#define PR_MAX_POWER_STATES	4
#define PR_MAX_THROTTLE_STATES  8
#define PR_MAX_PERF_STATES	32
#define PR_MAX_C2_LATENCY	100
#define PR_MAX_C3_LATENCY	1000


/*
 * Commands:
 * ---------
 */
#define PR_COMMAND_GET_POWER_INFO ((BM_COMMAND) 0x80)
#define PR_COMMAND_SET_POWER_INFO ((BM_COMMAND) 0x81)
#define PR_COMMAND_GET_PERF_INFO ((BM_COMMAND) 0x82)
#define PR_COMMAND_GET_PERF_STATE ((BM_COMMAND) 0x83)
#define PR_COMMAND_SET_PERF_LIMIT ((BM_COMMAND) 0x84)


/*
 * Notifications:
 * --------------
 */
#define PR_NOTIFY_PERF_STATES	((BM_NOTIFY) 0x80)
#define PR_NOTIFY_POWER_STATES	((BM_NOTIFY) 0x81)


/*
 * Performance Control:
 * --------------------
 */
#define PR_PERF_DEC		0x00
#define PR_PERF_INC		0x01
#define PR_PERF_MAX		0xFF


/*
 * Power States:
 * -------------
 */
#define PR_C0			0x00
#define PR_C1			0x01
#define PR_C2			0x02
#define PR_C3			0x03

#define PR_C1_FLAG		0x01;
#define PR_C2_FLAG		0x02;
#define PR_C3_FLAG		0x04;


/*
 * PR_CX_POLICY_VALUES:
 * --------------------
 */
typedef struct
{
	u32			time_threshold;
	u32			count_threshold;
	u32                     bm_threshold;
	u32         		target_state;
	u32			count;
} PR_CX_POLICY_VALUES;


/*
 * PR_CX:
 * ------
 */
typedef struct
{
	u32                     latency;
	u32                     utilization;
	u8                      is_valid;
	PR_CX_POLICY_VALUES     promotion;
	PR_CX_POLICY_VALUES     demotion;
} PR_CX;


/*
 * PR_POWER:
 * ---------
 */
typedef struct
{
	ACPI_PHYSICAL_ADDRESS   p_lvl2;
	ACPI_PHYSICAL_ADDRESS   p_lvl3;
	u32                     bm_activity;
	u32                     active_state;
	u32			default_state;
	u32			busy_metric;
	u32                     state_count;
	PR_CX                   state[PR_MAX_POWER_STATES];
} PR_POWER;


/*
 * PR_PERFORMANCE_STATE:
 * ---------------------
 */
typedef struct
{
	u32                     performance;
	u32                     power;
} PR_PERFORMANCE_STATE;


/*
 * PR_PERFORMANCE:
 * ---------------
 */
typedef struct
{
	u32                     active_state;
	u32			thermal_limit;
	u32			power_limit;
	u32                     state_count;
	PR_PERFORMANCE_STATE    state[PR_MAX_PERF_STATES];
} PR_PERFORMANCE;


/*
 * PR_PBLOCK:
 * ----------
 */
typedef struct
{
	u32                     length;
	ACPI_PHYSICAL_ADDRESS   address;
} PR_PBLOCK;


/*
 * PR_CONTEXT:
 * -----------
 */
typedef struct
{
	BM_HANDLE               device_handle;
	acpi_handle             acpi_handle;
	u32                     uid;
	PR_PBLOCK               pblk;
	PR_POWER		power;
	PR_PERFORMANCE		performance;
} PR_CONTEXT;


/******************************************************************************
 *                             Function Prototypes
 *****************************************************************************/

/* processor.c */

acpi_status
pr_initialize(void);

acpi_status
pr_terminate(void);

acpi_status
pr_notify (
	BM_NOTIFY               notify_type,
	BM_HANDLE               device_handle,
	void                    **context);

acpi_status
pr_request(
	BM_REQUEST		*request,
	void                    *context);

/* prpower.c */

void
pr_power_idle (void);

acpi_status
pr_power_add_device (
	PR_CONTEXT              *processor);

acpi_status
pr_power_remove_device (
	PR_CONTEXT              *processor);

acpi_status
pr_power_initialize (void);

acpi_status
pr_power_terminate (void);

/* prperf.c */

acpi_status
pr_perf_get_state (
	PR_CONTEXT              *processor,
	u32                     *state);

acpi_status
pr_perf_set_state (
	PR_CONTEXT              *processor,
	u32                     state);

acpi_status
pr_perf_set_limit (
	PR_CONTEXT              *processor,
	u32                     limit);

acpi_status
pr_perf_add_device (
	PR_CONTEXT              *processor);

acpi_status
pr_perf_remove_device (
	PR_CONTEXT              *processor);

/* Processor Driver OSL */

acpi_status
pr_osl_add_device (
	PR_CONTEXT		*processor);

acpi_status
pr_osl_remove_device (
	PR_CONTEXT		*processor);

acpi_status
pr_osl_generate_event (
	u32			event,
	PR_CONTEXT		*processor);


#endif  /* __PR_H__ */