aboutsummaryrefslogtreecommitdiffstats
path: root/include/acpi
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@ppc970.osdl.org>2005-04-16 18:20:36 -0400
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-04-16 18:20:36 -0400
commit1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 (patch)
tree0bba044c4ce775e45a88a51686b5d9f90697ea9d /include/acpi
Linux-2.6.12-rc2
Initial git repository build. I'm not bothering with the full history, even though we have it. We can create a separate "historical" git archive of that later if we want to, and in the meantime it's about 3.2GB when imported into git - space that would just make the early git days unnecessarily complicated, when we don't have a lot of good infrastructure for it. Let it rip!
Diffstat (limited to 'include/acpi')
-rw-r--r--include/acpi/acconfig.h217
-rw-r--r--include/acpi/acdebug.h472
-rw-r--r--include/acpi/acdisasm.h428
-rw-r--r--include/acpi/acdispat.h532
-rw-r--r--include/acpi/acevents.h320
-rw-r--r--include/acpi/acexcep.h308
-rw-r--r--include/acpi/acglobal.h357
-rw-r--r--include/acpi/achware.h182
-rw-r--r--include/acpi/acinterp.h765
-rw-r--r--include/acpi/aclocal.h994
-rw-r--r--include/acpi/acmacros.h678
-rw-r--r--include/acpi/acnamesp.h515
-rw-r--r--include/acpi/acobject.h501
-rw-r--r--include/acpi/acoutput.h185
-rw-r--r--include/acpi/acparser.h351
-rw-r--r--include/acpi/acpi.h69
-rw-r--r--include/acpi/acpi_bus.h341
-rw-r--r--include/acpi/acpi_drivers.h112
-rw-r--r--include/acpi/acpiosxf.h389
-rw-r--r--include/acpi/acpixf.h497
-rw-r--r--include/acpi/acresrc.h395
-rw-r--r--include/acpi/acstruct.h223
-rw-r--r--include/acpi/actables.h235
-rw-r--r--include/acpi/actbl.h354
-rw-r--r--include/acpi/actbl1.h136
-rw-r--r--include/acpi/actbl2.h289
-rw-r--r--include/acpi/actbl71.h144
-rw-r--r--include/acpi/actypes.h1304
-rw-r--r--include/acpi/acutils.h875
-rw-r--r--include/acpi/amlcode.h518
-rw-r--r--include/acpi/amlresrc.h353
-rw-r--r--include/acpi/container.h13
-rw-r--r--include/acpi/platform/acenv.h378
-rw-r--r--include/acpi/platform/acgcc.h59
-rw-r--r--include/acpi/platform/aclinux.h92
-rw-r--r--include/acpi/processor.h235
36 files changed, 13816 insertions, 0 deletions
diff --git a/include/acpi/acconfig.h b/include/acpi/acconfig.h
new file mode 100644
index 00000000000..2b41e47b7d8
--- /dev/null
+++ b/include/acpi/acconfig.h
@@ -0,0 +1,217 @@
1/******************************************************************************
2 *
3 * Name: acconfig.h - Global configuration constants
4 *
5 *****************************************************************************/
6
7/*
8 * Copyright (C) 2000 - 2005, R. Byron Moore
9 * All rights reserved.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions, and the following disclaimer,
16 * without modification.
17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18 * substantially similar to the "NO WARRANTY" disclaimer below
19 * ("Disclaimer") and any redistribution must be conditioned upon
20 * including a substantially similar Disclaimer requirement for further
21 * binary redistribution.
22 * 3. Neither the names of the above-listed copyright holders nor the names
23 * of any contributors may be used to endorse or promote products derived
24 * from this software without specific prior written permission.
25 *
26 * Alternatively, this software may be distributed under the terms of the
27 * GNU General Public License ("GPL") version 2 as published by the Free
28 * Software Foundation.
29 *
30 * NO WARRANTY
31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41 * POSSIBILITY OF SUCH DAMAGES.
42 */
43
44#ifndef _ACCONFIG_H
45#define _ACCONFIG_H
46
47
48/******************************************************************************
49 *
50 * Configuration options
51 *
52 *****************************************************************************/
53
54/*
55 * ACPI_DEBUG_OUTPUT - This switch enables all the debug facilities of the
56 * ACPI subsystem. This includes the DEBUG_PRINT output
57 * statements. When disabled, all DEBUG_PRINT
58 * statements are compiled out.
59 *
60 * ACPI_APPLICATION - Use this switch if the subsystem is going to be run
61 * at the application level.
62 *
63 */
64
65/* Version string */
66
67#define ACPI_CA_VERSION 0x20050309
68
69/*
70 * OS name, used for the _OS object. The _OS object is essentially obsolete,
71 * but there is a large base of ASL/AML code in existing machines that check
72 * for the string below. The use of this string usually guarantees that
73 * the ASL will execute down the most tested code path. Also, there is some
74 * code that will not execute the _OSI method unless _OS matches the string
75 * below. Therefore, change this string at your own risk.
76 */
77#define ACPI_OS_NAME "Microsoft Windows NT"
78
79/* Maximum objects in the various object caches */
80
81#define ACPI_MAX_STATE_CACHE_DEPTH 64 /* State objects */
82#define ACPI_MAX_PARSE_CACHE_DEPTH 96 /* Parse tree objects */
83#define ACPI_MAX_EXTPARSE_CACHE_DEPTH 64 /* Parse tree objects */
84#define ACPI_MAX_OBJECT_CACHE_DEPTH 64 /* Interpreter operand objects */
85#define ACPI_MAX_WALK_CACHE_DEPTH 4 /* Objects for parse tree walks */
86
87/*
88 * Should the subystem abort the loading of an ACPI table if the
89 * table checksum is incorrect?
90 */
91#define ACPI_CHECKSUM_ABORT FALSE
92
93
94/******************************************************************************
95 *
96 * Subsystem Constants
97 *
98 *****************************************************************************/
99
100/* Version of ACPI supported */
101
102#define ACPI_CA_SUPPORT_LEVEL 3
103
104/* String size constants */
105
106#define ACPI_MAX_STRING_LENGTH 512
107#define ACPI_PATHNAME_MAX 256 /* A full namespace pathname */
108
109/* Maximum count for a semaphore object */
110
111#define ACPI_MAX_SEMAPHORE_COUNT 256
112
113/* Max reference count (for debug only) */
114
115#define ACPI_MAX_REFERENCE_COUNT 0x400
116
117/* Size of cached memory mapping for system memory operation region */
118
119#define ACPI_SYSMEM_REGION_WINDOW_SIZE 4096
120
121
122/******************************************************************************
123 *
124 * ACPI Specification constants (Do not change unless the specification changes)
125 *
126 *****************************************************************************/
127
128/* Number of distinct GPE register blocks and register width */
129
130#define ACPI_MAX_GPE_BLOCKS 2
131#define ACPI_GPE_REGISTER_WIDTH 8
132
133/*
134 * Method info (in WALK_STATE), containing local variables and argumetns
135 */
136#define ACPI_METHOD_NUM_LOCALS 8
137#define ACPI_METHOD_MAX_LOCAL 7
138
139#define ACPI_METHOD_NUM_ARGS 7
140#define ACPI_METHOD_MAX_ARG 6
141
142/* Maximum length of resulting string when converting from a buffer */
143
144#define ACPI_MAX_STRING_CONVERSION 200
145
146/* Length of _HID, _UID, and _CID values */
147
148#define ACPI_DEVICE_ID_LENGTH 0x09
149#define ACPI_MAX_CID_LENGTH 48
150
151/*
152 * Operand Stack (in WALK_STATE), Must be large enough to contain METHOD_MAX_ARG
153 */
154#define ACPI_OBJ_NUM_OPERANDS 8
155#define ACPI_OBJ_MAX_OPERAND 7
156
157/* Names within the namespace are 4 bytes long */
158
159#define ACPI_NAME_SIZE 4
160#define ACPI_PATH_SEGMENT_LENGTH 5 /* 4 chars for name + 1 char for separator */
161#define ACPI_PATH_SEPARATOR '.'
162
163/* Constants used in searching for the RSDP in low memory */
164
165#define ACPI_EBDA_PTR_LOCATION 0x0000040E /* Physical Address */
166#define ACPI_EBDA_PTR_LENGTH 2
167#define ACPI_EBDA_WINDOW_SIZE 1024
168#define ACPI_HI_RSDP_WINDOW_BASE 0x000E0000 /* Physical Address */
169#define ACPI_HI_RSDP_WINDOW_SIZE 0x00020000
170#define ACPI_RSDP_SCAN_STEP 16
171
172/* Operation regions */
173
174#define ACPI_NUM_PREDEFINED_REGIONS 8
175#define ACPI_USER_REGION_BEGIN 0x80
176
177/* Maximum space_ids for Operation Regions */
178
179#define ACPI_MAX_ADDRESS_SPACE 255
180
181/* Array sizes. Used for range checking also */
182
183#define ACPI_NUM_ACCESS_TYPES 6
184#define ACPI_NUM_UPDATE_RULES 3
185#define ACPI_NUM_LOCK_RULES 2
186#define ACPI_NUM_MATCH_OPS 6
187#define ACPI_NUM_OPCODES 256
188#define ACPI_NUM_FIELD_NAMES 2
189
190/* RSDP checksums */
191
192#define ACPI_RSDP_CHECKSUM_LENGTH 20
193#define ACPI_RSDP_XCHECKSUM_LENGTH 36
194
195/* SMBus bidirectional buffer size */
196
197#define ACPI_SMBUS_BUFFER_SIZE 34
198
199/* Number of strings associated with the _OSI reserved method */
200
201#define ACPI_NUM_OSI_STRINGS 10
202
203
204/******************************************************************************
205 *
206 * ACPI AML Debugger
207 *
208 *****************************************************************************/
209
210#define ACPI_DEBUGGER_MAX_ARGS 8 /* Must be max method args + 1 */
211
212#define ACPI_DEBUGGER_COMMAND_PROMPT '-'
213#define ACPI_DEBUGGER_EXECUTE_PROMPT '%'
214
215
216#endif /* _ACCONFIG_H */
217
diff --git a/include/acpi/acdebug.h b/include/acpi/acdebug.h
new file mode 100644
index 00000000000..223b2a506e4
--- /dev/null
+++ b/include/acpi/acdebug.h
@@ -0,0 +1,472 @@
1/******************************************************************************
2 *
3 * Name: acdebug.h - ACPI/AML debugger
4 *
5 *****************************************************************************/
6
7/*
8 * Copyright (C) 2000 - 2005, R. Byron Moore
9 * All rights reserved.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions, and the following disclaimer,
16 * without modification.
17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18 * substantially similar to the "NO WARRANTY" disclaimer below
19 * ("Disclaimer") and any redistribution must be conditioned upon
20 * including a substantially similar Disclaimer requirement for further
21 * binary redistribution.
22 * 3. Neither the names of the above-listed copyright holders nor the names
23 * of any contributors may be used to endorse or promote products derived
24 * from this software without specific prior written permission.
25 *
26 * Alternatively, this software may be distributed under the terms of the
27 * GNU General Public License ("GPL") version 2 as published by the Free
28 * Software Foundation.
29 *
30 * NO WARRANTY
31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41 * POSSIBILITY OF SUCH DAMAGES.
42 */
43
44#ifndef __ACDEBUG_H__
45#define __ACDEBUG_H__
46
47
48#define ACPI_DEBUG_BUFFER_SIZE 4196
49
50struct command_info
51{
52 char *name; /* Command Name */
53 u8 min_args; /* Minimum arguments required */
54};
55
56
57struct argument_info
58{
59 char *name; /* Argument Name */
60};
61
62
63#define PARAM_LIST(pl) pl
64
65#define DBTEST_OUTPUT_LEVEL(lvl) if (acpi_gbl_db_opt_verbose)
66
67#define VERBOSE_PRINT(fp) DBTEST_OUTPUT_LEVEL(lvl) {\
68 acpi_os_printf PARAM_LIST(fp);}
69
70#define EX_NO_SINGLE_STEP 1
71#define EX_SINGLE_STEP 2
72
73
74/* Prototypes */
75
76
77/*
78 * dbxface - external debugger interfaces
79 */
80
81acpi_status
82acpi_db_initialize (
83 void);
84
85void
86acpi_db_terminate (
87 void);
88
89acpi_status
90acpi_db_single_step (
91 struct acpi_walk_state *walk_state,
92 union acpi_parse_object *op,
93 u32 op_type);
94
95acpi_status
96acpi_db_start_command (
97 struct acpi_walk_state *walk_state,
98 union acpi_parse_object *op);
99
100void
101acpi_db_method_end (
102 struct acpi_walk_state *walk_state);
103
104
105/*
106 * dbcmds - debug commands and output routines
107 */
108
109acpi_status
110acpi_db_disassemble_method (
111 char *name);
112
113void
114acpi_db_display_table_info (
115 char *table_arg);
116
117void
118acpi_db_unload_acpi_table (
119 char *table_arg,
120 char *instance_arg);
121
122void
123acpi_db_set_method_breakpoint (
124 char *location,
125 struct acpi_walk_state *walk_state,
126 union acpi_parse_object *op);
127
128void
129acpi_db_set_method_call_breakpoint (
130 union acpi_parse_object *op);
131
132void
133acpi_db_disassemble_aml (
134 char *statements,
135 union acpi_parse_object *op);
136
137void
138acpi_db_dump_namespace (
139 char *start_arg,
140 char *depth_arg);
141
142void
143acpi_db_dump_namespace_by_owner (
144 char *owner_arg,
145 char *depth_arg);
146
147void
148acpi_db_send_notify (
149 char *name,
150 u32 value);
151
152void
153acpi_db_set_method_data (
154 char *type_arg,
155 char *index_arg,
156 char *value_arg);
157
158acpi_status
159acpi_db_display_objects (
160 char *obj_type_arg,
161 char *display_count_arg);
162
163acpi_status
164acpi_db_find_name_in_namespace (
165 char *name_arg);
166
167void
168acpi_db_set_scope (
169 char *name);
170
171acpi_status
172acpi_db_sleep (
173 char *object_arg);
174
175void
176acpi_db_find_references (
177 char *object_arg);
178
179void
180acpi_db_display_locks (void);
181
182
183void
184acpi_db_display_resources (
185 char *object_arg);
186
187void
188acpi_db_display_gpes (void);
189
190void
191acpi_db_check_integrity (
192 void);
193
194acpi_status
195acpi_db_integrity_walk (
196 acpi_handle obj_handle,
197 u32 nesting_level,
198 void *context,
199 void **return_value);
200
201acpi_status
202acpi_db_walk_and_match_name (
203 acpi_handle obj_handle,
204 u32 nesting_level,
205 void *context,
206 void **return_value);
207
208acpi_status
209acpi_db_walk_for_references (
210 acpi_handle obj_handle,
211 u32 nesting_level,
212 void *context,
213 void **return_value);
214
215acpi_status
216acpi_db_walk_for_specific_objects (
217 acpi_handle obj_handle,
218 u32 nesting_level,
219 void *context,
220 void **return_value);
221
222void
223acpi_db_generate_gpe (
224 char *gpe_arg,
225 char *block_arg);
226
227/*
228 * dbdisply - debug display commands
229 */
230
231void
232acpi_db_display_method_info (
233 union acpi_parse_object *op);
234
235void
236acpi_db_decode_and_display_object (
237 char *target,
238 char *output_type);
239
240void
241acpi_db_display_result_object (
242 union acpi_operand_object *obj_desc,
243 struct acpi_walk_state *walk_state);
244
245acpi_status
246acpi_db_display_all_methods (
247 char *display_count_arg);
248
249void
250acpi_db_display_arguments (
251 void);
252
253void
254acpi_db_display_locals (
255 void);
256
257void
258acpi_db_display_results (
259 void);
260
261void
262acpi_db_display_calling_tree (
263 void);
264
265void
266acpi_db_display_object_type (
267 char *object_arg);
268
269void
270acpi_db_display_argument_object (
271 union acpi_operand_object *obj_desc,
272 struct acpi_walk_state *walk_state);
273
274void
275acpi_db_dump_parser_descriptor (
276 union acpi_parse_object *op);
277
278void *
279acpi_db_get_pointer (
280 void *target);
281
282
283/*
284 * dbexec - debugger control method execution
285 */
286
287void
288acpi_db_execute (
289 char *name,
290 char **args,
291 u32 flags);
292
293void
294acpi_db_create_execution_threads (
295 char *num_threads_arg,
296 char *num_loops_arg,
297 char *method_name_arg);
298
299acpi_status
300acpi_db_execute_method (
301 struct acpi_db_method_info *info,
302 struct acpi_buffer *return_obj);
303
304void
305acpi_db_execute_setup (
306 struct acpi_db_method_info *info);
307
308u32
309acpi_db_get_outstanding_allocations (
310 void);
311
312void ACPI_SYSTEM_XFACE
313acpi_db_method_thread (
314 void *context);
315
316acpi_status
317acpi_db_execution_walk (
318 acpi_handle obj_handle,
319 u32 nesting_level,
320 void *context,
321 void **return_value);
322
323
324/*
325 * dbfileio - Debugger file I/O commands
326 */
327
328acpi_object_type
329acpi_db_match_argument (
330 char *user_argument,
331 struct argument_info *arguments);
332
333acpi_status
334ae_local_load_table (
335 struct acpi_table_header *table_ptr);
336
337void
338acpi_db_close_debug_file (
339 void);
340
341void
342acpi_db_open_debug_file (
343 char *name);
344
345acpi_status
346acpi_db_load_acpi_table (
347 char *filename);
348
349acpi_status
350acpi_db_get_table_from_file (
351 char *filename,
352 struct acpi_table_header **table);
353
354acpi_status
355acpi_db_read_table_from_file (
356 char *filename,
357 struct acpi_table_header **table);
358
359/*
360 * dbhistry - debugger HISTORY command
361 */
362
363void
364acpi_db_add_to_history (
365 char *command_line);
366
367void
368acpi_db_display_history (void);
369
370char *
371acpi_db_get_from_history (
372 char *command_num_arg);
373
374
375/*
376 * dbinput - user front-end to the AML debugger
377 */
378
379acpi_status
380acpi_db_command_dispatch (
381 char *input_buffer,
382 struct acpi_walk_state *walk_state,
383 union acpi_parse_object *op);
384
385void ACPI_SYSTEM_XFACE
386acpi_db_execute_thread (
387 void *context);
388
389void
390acpi_db_display_help (
391 char *help_type);
392
393char *
394acpi_db_get_next_token (
395 char *string,
396 char **next);
397
398u32
399acpi_db_get_line (
400 char *input_buffer);
401
402u32
403acpi_db_match_command (
404 char *user_command);
405
406void
407acpi_db_single_thread (
408 void);
409
410
411/*
412 * dbstats - Generation and display of ACPI table statistics
413 */
414
415void
416acpi_db_generate_statistics (
417 union acpi_parse_object *root,
418 u8 is_method);
419
420
421acpi_status
422acpi_db_display_statistics (
423 char *type_arg);
424
425acpi_status
426acpi_db_classify_one_object (
427 acpi_handle obj_handle,
428 u32 nesting_level,
429 void *context,
430 void **return_value);
431
432void
433acpi_db_count_namespace_objects (
434 void);
435
436void
437acpi_db_enumerate_object (
438 union acpi_operand_object *obj_desc);
439
440
441/*
442 * dbutils - AML debugger utilities
443 */
444
445void
446acpi_db_set_output_destination (
447 u32 where);
448
449void
450acpi_db_dump_buffer (
451 u32 address);
452
453void
454acpi_db_dump_object (
455 union acpi_object *obj_desc,
456 u32 level);
457
458void
459acpi_db_prep_namestring (
460 char *name);
461
462
463acpi_status
464acpi_db_second_pass_parse (
465 union acpi_parse_object *root);
466
467struct acpi_namespace_node *
468acpi_db_local_ns_lookup (
469 char *name);
470
471
472#endif /* __ACDEBUG_H__ */
diff --git a/include/acpi/acdisasm.h b/include/acpi/acdisasm.h
new file mode 100644
index 00000000000..26d907eae6f
--- /dev/null
+++ b/include/acpi/acdisasm.h
@@ -0,0 +1,428 @@
1/******************************************************************************
2 *
3 * Name: acdisasm.h - AML disassembler
4 *
5 *****************************************************************************/
6
7/*
8 * Copyright (C) 2000 - 2005, R. Byron Moore
9 * All rights reserved.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions, and the following disclaimer,
16 * without modification.
17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18 * substantially similar to the "NO WARRANTY" disclaimer below
19 * ("Disclaimer") and any redistribution must be conditioned upon
20 * including a substantially similar Disclaimer requirement for further
21 * binary redistribution.
22 * 3. Neither the names of the above-listed copyright holders nor the names
23 * of any contributors may be used to endorse or promote products derived
24 * from this software without specific prior written permission.
25 *
26 * Alternatively, this software may be distributed under the terms of the
27 * GNU General Public License ("GPL") version 2 as published by the Free
28 * Software Foundation.
29 *
30 * NO WARRANTY
31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41 * POSSIBILITY OF SUCH DAMAGES.
42 */
43
44#ifndef __ACDISASM_H__
45#define __ACDISASM_H__
46
47#include "amlresrc.h"
48
49
50#define BLOCK_NONE 0
51#define BLOCK_PAREN 1
52#define BLOCK_BRACE 2
53#define BLOCK_COMMA_LIST 4
54
55struct acpi_external_list
56{
57 char *path;
58 struct acpi_external_list *next;
59};
60
61extern struct acpi_external_list *acpi_gbl_external_list;
62extern const char *acpi_gbl_io_decode[2];
63extern const char *acpi_gbl_word_decode[4];
64extern const char *acpi_gbl_consume_decode[2];
65extern const char *acpi_gbl_min_decode[2];
66extern const char *acpi_gbl_max_decode[2];
67extern const char *acpi_gbl_DECdecode[2];
68extern const char *acpi_gbl_RNGdecode[4];
69extern const char *acpi_gbl_MEMdecode[4];
70extern const char *acpi_gbl_RWdecode[2];
71extern const char *acpi_gbl_irq_decode[2];
72extern const char *acpi_gbl_HEdecode[2];
73extern const char *acpi_gbl_LLdecode[2];
74extern const char *acpi_gbl_SHRdecode[2];
75extern const char *acpi_gbl_TYPdecode[4];
76extern const char *acpi_gbl_BMdecode[2];
77extern const char *acpi_gbl_SIZdecode[4];
78extern const char *acpi_gbl_TTPdecode[2];
79extern const char *acpi_gbl_MTPdecode[4];
80extern const char *acpi_gbl_TRSdecode[2];
81
82
83extern const char *acpi_gbl_lock_rule[ACPI_NUM_LOCK_RULES];
84extern const char *acpi_gbl_access_types[ACPI_NUM_ACCESS_TYPES];
85extern const char *acpi_gbl_update_rules[ACPI_NUM_UPDATE_RULES];
86extern const char *acpi_gbl_match_ops[ACPI_NUM_MATCH_OPS];
87
88
89struct acpi_op_walk_info
90{
91 u32 level;
92 u32 bit_offset;
93};
94
95typedef
96acpi_status (*asl_walk_callback) (
97 union acpi_parse_object *op,
98 u32 level,
99 void *context);
100
101
102/*
103 * dmwalk
104 */
105
106void
107acpi_dm_walk_parse_tree (
108 union acpi_parse_object *op,
109 asl_walk_callback descending_callback,
110 asl_walk_callback ascending_callback,
111 void *context);
112
113acpi_status
114acpi_dm_descending_op (
115 union acpi_parse_object *op,
116 u32 level,
117 void *context);
118
119acpi_status
120acpi_dm_ascending_op (
121 union acpi_parse_object *op,
122 u32 level,
123 void *context);
124
125
126/*
127 * dmopcode
128 */
129
130void
131acpi_dm_validate_name (
132 char *name,
133 union acpi_parse_object *op);
134
135u32
136acpi_dm_dump_name (
137 char *name);
138
139void
140acpi_dm_unicode (
141 union acpi_parse_object *op);
142
143void
144acpi_dm_disassemble (
145 struct acpi_walk_state *walk_state,
146 union acpi_parse_object *origin,
147 u32 num_opcodes);
148
149void
150acpi_dm_namestring (
151 char *name);
152
153void
154acpi_dm_display_path (
155 union acpi_parse_object *op);
156
157void
158acpi_dm_disassemble_one_op (
159 struct acpi_walk_state *walk_state,
160 struct acpi_op_walk_info *info,
161 union acpi_parse_object *op);
162
163void
164acpi_dm_decode_internal_object (
165 union acpi_operand_object *obj_desc);
166
167u32
168acpi_dm_block_type (
169 union acpi_parse_object *op);
170
171u32
172acpi_dm_list_type (
173 union acpi_parse_object *op);
174
175acpi_status
176acpi_ps_display_object_pathname (
177 struct acpi_walk_state *walk_state,
178 union acpi_parse_object *op);
179
180void
181acpi_dm_method_flags (
182 union acpi_parse_object *op);
183
184void
185acpi_dm_field_flags (
186 union acpi_parse_object *op);
187
188void
189acpi_dm_address_space (
190 u8 space_id);
191
192void
193acpi_dm_region_flags (
194 union acpi_parse_object *op);
195
196void
197acpi_dm_match_op (
198 union acpi_parse_object *op);
199
200void
201acpi_dm_match_keyword (
202 union acpi_parse_object *op);
203
204u8
205acpi_dm_comma_if_list_member (
206 union acpi_parse_object *op);
207
208void
209acpi_dm_comma_if_field_member (
210 union acpi_parse_object *op);
211
212
213/*
214 * dmobject
215 */
216
217void
218acpi_dm_decode_node (
219 struct acpi_namespace_node *node);
220
221void
222acpi_dm_display_internal_object (
223 union acpi_operand_object *obj_desc,
224 struct acpi_walk_state *walk_state);
225
226void
227acpi_dm_display_arguments (
228 struct acpi_walk_state *walk_state);
229
230void
231acpi_dm_display_locals (
232 struct acpi_walk_state *walk_state);
233
234void
235acpi_dm_dump_method_info (
236 acpi_status status,
237 struct acpi_walk_state *walk_state,
238 union acpi_parse_object *op);
239
240
241/*
242 * dmbuffer
243 */
244
245void
246acpi_is_eisa_id (
247 union acpi_parse_object *op);
248
249void
250acpi_dm_eisa_id (
251 u32 encoded_id);
252
253u8
254acpi_dm_is_unicode_buffer (
255 union acpi_parse_object *op);
256
257u8
258acpi_dm_is_string_buffer (
259 union acpi_parse_object *op);
260
261
262/*
263 * dmresrc
264 */
265
266void
267acpi_dm_disasm_byte_list (
268 u32 level,
269 u8 *byte_data,
270 u32 byte_count);
271
272void
273acpi_dm_byte_list (
274 struct acpi_op_walk_info *info,
275 union acpi_parse_object *op);
276
277void
278acpi_dm_resource_descriptor (
279 struct acpi_op_walk_info *info,
280 u8 *byte_data,
281 u32 byte_count);
282
283u8
284acpi_dm_is_resource_descriptor (
285 union acpi_parse_object *op);
286
287void
288acpi_dm_indent (
289 u32 level);
290
291void
292acpi_dm_bit_list (
293 u16 mask);
294
295void
296acpi_dm_decode_attribute (
297 u8 attribute);
298
299/*
300 * dmresrcl
301 */
302
303void
304acpi_dm_io_flags (
305 u8 flags);
306
307void
308acpi_dm_memory_flags (
309 u8 flags,
310 u8 specific_flags);
311
312void
313acpi_dm_word_descriptor (
314 struct asl_word_address_desc *resource,
315 u32 length,
316 u32 level);
317
318void
319acpi_dm_dword_descriptor (
320 struct asl_dword_address_desc *resource,
321 u32 length,
322 u32 level);
323
324void
325acpi_dm_extended_descriptor (
326 struct asl_extended_address_desc *resource,
327 u32 length,
328 u32 level);
329
330void
331acpi_dm_qword_descriptor (
332 struct asl_qword_address_desc *resource,
333 u32 length,
334 u32 level);
335
336void
337acpi_dm_memory24_descriptor (
338 struct asl_memory_24_desc *resource,
339 u32 length,
340 u32 level);
341
342void
343acpi_dm_memory32_descriptor (
344 struct asl_memory_32_desc *resource,
345 u32 length,
346 u32 level);
347
348void
349acpi_dm_fixed_mem32_descriptor (
350 struct asl_fixed_memory_32_desc *resource,
351 u32 length,
352 u32 level);
353
354void
355acpi_dm_generic_register_descriptor (
356 struct asl_general_register_desc *resource,
357 u32 length,
358 u32 level);
359
360void
361acpi_dm_interrupt_descriptor (
362 struct asl_extended_xrupt_desc *resource,
363 u32 length,
364 u32 level);
365
366void
367acpi_dm_vendor_large_descriptor (
368 struct asl_large_vendor_desc *resource,
369 u32 length,
370 u32 level);
371
372
373/*
374 * dmresrcs
375 */
376
377void
378acpi_dm_irq_descriptor (
379 struct asl_irq_format_desc *resource,
380 u32 length,
381 u32 level);
382
383void
384acpi_dm_dma_descriptor (
385 struct asl_dma_format_desc *resource,
386 u32 length,
387 u32 level);
388
389void
390acpi_dm_io_descriptor (
391 struct asl_io_port_desc *resource,
392 u32 length,
393 u32 level);
394
395void
396acpi_dm_fixed_io_descriptor (
397 struct asl_fixed_io_port_desc *resource,
398 u32 length,
399 u32 level);
400
401void
402acpi_dm_start_dependent_descriptor (
403 struct asl_start_dependent_desc *resource,
404 u32 length,
405 u32 level);
406
407void
408acpi_dm_end_dependent_descriptor (
409 struct asl_start_dependent_desc *resource,
410 u32 length,
411 u32 level);
412
413void
414acpi_dm_vendor_small_descriptor (
415 struct asl_small_vendor_desc *resource,
416 u32 length,
417 u32 level);
418
419
420/*
421 * dmutils
422 */
423
424void
425acpi_dm_add_to_external_list (
426 char *path);
427
428#endif /* __ACDISASM_H__ */
diff --git a/include/acpi/acdispat.h b/include/acpi/acdispat.h
new file mode 100644
index 00000000000..237d6343358
--- /dev/null
+++ b/include/acpi/acdispat.h
@@ -0,0 +1,532 @@
1/******************************************************************************
2 *
3 * Name: acdispat.h - dispatcher (parser to interpreter interface)
4 *
5 *****************************************************************************/
6
7/*
8 * Copyright (C) 2000 - 2005, R. Byron Moore
9 * All rights reserved.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions, and the following disclaimer,
16 * without modification.
17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18 * substantially similar to the "NO WARRANTY" disclaimer below
19 * ("Disclaimer") and any redistribution must be conditioned upon
20 * including a substantially similar Disclaimer requirement for further
21 * binary redistribution.
22 * 3. Neither the names of the above-listed copyright holders nor the names
23 * of any contributors may be used to endorse or promote products derived
24 * from this software without specific prior written permission.
25 *
26 * Alternatively, this software may be distributed under the terms of the
27 * GNU General Public License ("GPL") version 2 as published by the Free
28 * Software Foundation.
29 *
30 * NO WARRANTY
31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41 * POSSIBILITY OF SUCH DAMAGES.
42 */
43
44
45#ifndef _ACDISPAT_H_
46#define _ACDISPAT_H_
47
48
49#define NAMEOF_LOCAL_NTE "__L0"
50#define NAMEOF_ARG_NTE "__A0"
51
52
53/* Common interfaces */
54
55acpi_status
56acpi_ds_obj_stack_push (
57 void *object,
58 struct acpi_walk_state *walk_state);
59
60acpi_status
61acpi_ds_obj_stack_pop (
62 u32 pop_count,
63 struct acpi_walk_state *walk_state);
64
65#ifdef ACPI_FUTURE_USAGE
66void *
67acpi_ds_obj_stack_get_value (
68 u32 index,
69 struct acpi_walk_state *walk_state);
70#endif
71
72acpi_status
73acpi_ds_obj_stack_pop_object (
74 union acpi_operand_object **object,
75 struct acpi_walk_state *walk_state);
76
77
78/* dsopcode - support for late evaluation */
79
80acpi_status
81acpi_ds_execute_arguments (
82 struct acpi_namespace_node *node,
83 struct acpi_namespace_node *scope_node,
84 u32 aml_length,
85 u8 *aml_start);
86
87acpi_status
88acpi_ds_get_buffer_field_arguments (
89 union acpi_operand_object *obj_desc);
90
91acpi_status
92acpi_ds_get_region_arguments (
93 union acpi_operand_object *rgn_desc);
94
95acpi_status
96acpi_ds_get_buffer_arguments (
97 union acpi_operand_object *obj_desc);
98
99acpi_status
100acpi_ds_get_package_arguments (
101 union acpi_operand_object *obj_desc);
102
103acpi_status
104acpi_ds_init_buffer_field (
105 u16 aml_opcode,
106 union acpi_operand_object *obj_desc,
107 union acpi_operand_object *buffer_desc,
108 union acpi_operand_object *offset_desc,
109 union acpi_operand_object *length_desc,
110 union acpi_operand_object *result_desc);
111
112acpi_status
113acpi_ds_eval_buffer_field_operands (
114 struct acpi_walk_state *walk_state,
115 union acpi_parse_object *op);
116
117acpi_status
118acpi_ds_eval_region_operands (
119 struct acpi_walk_state *walk_state,
120 union acpi_parse_object *op);
121
122acpi_status
123acpi_ds_eval_data_object_operands (
124 struct acpi_walk_state *walk_state,
125 union acpi_parse_object *op,
126 union acpi_operand_object *obj_desc);
127
128acpi_status
129acpi_ds_initialize_region (
130 acpi_handle obj_handle);
131
132
133/* dsctrl - Parser/Interpreter interface, control stack routines */
134
135
136acpi_status
137acpi_ds_exec_begin_control_op (
138 struct acpi_walk_state *walk_state,
139 union acpi_parse_object *op);
140
141acpi_status
142acpi_ds_exec_end_control_op (
143 struct acpi_walk_state *walk_state,
144 union acpi_parse_object *op);
145
146
147/* dsexec - Parser/Interpreter interface, method execution callbacks */
148
149
150acpi_status
151acpi_ds_get_predicate_value (
152 struct acpi_walk_state *walk_state,
153 union acpi_operand_object *result_obj);
154
155acpi_status
156acpi_ds_exec_begin_op (
157 struct acpi_walk_state *walk_state,
158 union acpi_parse_object **out_op);
159
160acpi_status
161acpi_ds_exec_end_op (
162 struct acpi_walk_state *state);
163
164
165/* dsfield - Parser/Interpreter interface for AML fields */
166
167acpi_status
168acpi_ds_get_field_names (
169 struct acpi_create_field_info *info,
170 struct acpi_walk_state *walk_state,
171 union acpi_parse_object *arg);
172
173acpi_status
174acpi_ds_create_field (
175 union acpi_parse_object *op,
176 struct acpi_namespace_node *region_node,
177 struct acpi_walk_state *walk_state);
178
179acpi_status
180acpi_ds_create_bank_field (
181 union acpi_parse_object *op,
182 struct acpi_namespace_node *region_node,
183 struct acpi_walk_state *walk_state);
184
185acpi_status
186acpi_ds_create_index_field (
187 union acpi_parse_object *op,
188 struct acpi_namespace_node *region_node,
189 struct acpi_walk_state *walk_state);
190
191acpi_status
192acpi_ds_create_buffer_field (
193 union acpi_parse_object *op,
194 struct acpi_walk_state *walk_state);
195
196acpi_status
197acpi_ds_init_field_objects (
198 union acpi_parse_object *op,
199 struct acpi_walk_state *walk_state);
200
201
202/* dsload - Parser/Interpreter interface, namespace load callbacks */
203
204acpi_status
205acpi_ds_load1_begin_op (
206 struct acpi_walk_state *walk_state,
207 union acpi_parse_object **out_op);
208
209acpi_status
210acpi_ds_load1_end_op (
211 struct acpi_walk_state *walk_state);
212
213acpi_status
214acpi_ds_load2_begin_op (
215 struct acpi_walk_state *walk_state,
216 union acpi_parse_object **out_op);
217
218acpi_status
219acpi_ds_load2_end_op (
220 struct acpi_walk_state *walk_state);
221
222acpi_status
223acpi_ds_init_callbacks (
224 struct acpi_walk_state *walk_state,
225 u32 pass_number);
226
227
228/* dsmthdat - method data (locals/args) */
229
230
231acpi_status
232acpi_ds_store_object_to_local (
233 u16 opcode,
234 u32 index,
235 union acpi_operand_object *src_desc,
236 struct acpi_walk_state *walk_state);
237
238acpi_status
239acpi_ds_method_data_get_entry (
240 u16 opcode,
241 u32 index,
242 struct acpi_walk_state *walk_state,
243 union acpi_operand_object ***node);
244
245void
246acpi_ds_method_data_delete_all (
247 struct acpi_walk_state *walk_state);
248
249u8
250acpi_ds_is_method_value (
251 union acpi_operand_object *obj_desc);
252
253#ifdef ACPI_FUTURE_USAGE
254acpi_object_type
255acpi_ds_method_data_get_type (
256 u16 opcode,
257 u32 index,
258 struct acpi_walk_state *walk_state);
259#endif
260
261acpi_status
262acpi_ds_method_data_get_value (
263 u16 opcode,
264 u32 index,
265 struct acpi_walk_state *walk_state,
266 union acpi_operand_object **dest_desc);
267
268void
269acpi_ds_method_data_delete_value (
270 u16 opcode,
271 u32 index,
272 struct acpi_walk_state *walk_state);
273
274acpi_status
275acpi_ds_method_data_init_args (
276 union acpi_operand_object **params,
277 u32 max_param_count,
278 struct acpi_walk_state *walk_state);
279
280acpi_status
281acpi_ds_method_data_get_node (
282 u16 opcode,
283 u32 index,
284 struct acpi_walk_state *walk_state,
285 struct acpi_namespace_node **node);
286
287void
288acpi_ds_method_data_init (
289 struct acpi_walk_state *walk_state);
290
291acpi_status
292acpi_ds_method_data_set_value (
293 u16 opcode,
294 u32 index,
295 union acpi_operand_object *object,
296 struct acpi_walk_state *walk_state);
297
298
299/* dsmethod - Parser/Interpreter interface - control method parsing */
300
301acpi_status
302acpi_ds_parse_method (
303 acpi_handle obj_handle);
304
305acpi_status
306acpi_ds_call_control_method (
307 struct acpi_thread_state *thread,
308 struct acpi_walk_state *walk_state,
309 union acpi_parse_object *op);
310
311acpi_status
312acpi_ds_restart_control_method (
313 struct acpi_walk_state *walk_state,
314 union acpi_operand_object *return_desc);
315
316acpi_status
317acpi_ds_terminate_control_method (
318 struct acpi_walk_state *walk_state);
319
320acpi_status
321acpi_ds_begin_method_execution (
322 struct acpi_namespace_node *method_node,
323 union acpi_operand_object *obj_desc,
324 struct acpi_namespace_node *calling_method_node);
325
326
327/* dsobj - Parser/Interpreter interface - object initialization and conversion */
328
329acpi_status
330acpi_ds_init_one_object (
331 acpi_handle obj_handle,
332 u32 level,
333 void *context,
334 void **return_value);
335
336acpi_status
337acpi_ds_initialize_objects (
338 struct acpi_table_desc *table_desc,
339 struct acpi_namespace_node *start_node);
340
341acpi_status
342acpi_ds_build_internal_buffer_obj (
343 struct acpi_walk_state *walk_state,
344 union acpi_parse_object *op,
345 u32 buffer_length,
346 union acpi_operand_object **obj_desc_ptr);
347
348acpi_status
349acpi_ds_build_internal_package_obj (
350 struct acpi_walk_state *walk_state,
351 union acpi_parse_object *op,
352 u32 package_length,
353 union acpi_operand_object **obj_desc);
354
355acpi_status
356acpi_ds_build_internal_object (
357 struct acpi_walk_state *walk_state,
358 union acpi_parse_object *op,
359 union acpi_operand_object **obj_desc_ptr);
360
361acpi_status
362acpi_ds_init_object_from_op (
363 struct acpi_walk_state *walk_state,
364 union acpi_parse_object *op,
365 u16 opcode,
366 union acpi_operand_object **obj_desc);
367
368acpi_status
369acpi_ds_create_node (
370 struct acpi_walk_state *walk_state,
371 struct acpi_namespace_node *node,
372 union acpi_parse_object *op);
373
374
375/* dsutils - Parser/Interpreter interface utility routines */
376
377void
378acpi_ds_clear_implicit_return (
379 struct acpi_walk_state *walk_state);
380
381u8
382acpi_ds_do_implicit_return (
383 union acpi_operand_object *return_desc,
384 struct acpi_walk_state *walk_state,
385 u8 add_reference);
386
387u8
388acpi_ds_is_result_used (
389 union acpi_parse_object *op,
390 struct acpi_walk_state *walk_state);
391
392void
393acpi_ds_delete_result_if_not_used (
394 union acpi_parse_object *op,
395 union acpi_operand_object *result_obj,
396 struct acpi_walk_state *walk_state);
397
398acpi_status
399acpi_ds_create_operand (
400 struct acpi_walk_state *walk_state,
401 union acpi_parse_object *arg,
402 u32 args_remaining);
403
404acpi_status
405acpi_ds_create_operands (
406 struct acpi_walk_state *walk_state,
407 union acpi_parse_object *first_arg);
408
409acpi_status
410acpi_ds_resolve_operands (
411 struct acpi_walk_state *walk_state);
412
413void
414acpi_ds_clear_operands (
415 struct acpi_walk_state *walk_state);
416
417
418/*
419 * dswscope - Scope Stack manipulation
420 */
421
422acpi_status
423acpi_ds_scope_stack_push (
424 struct acpi_namespace_node *node,
425 acpi_object_type type,
426 struct acpi_walk_state *walk_state);
427
428
429acpi_status
430acpi_ds_scope_stack_pop (
431 struct acpi_walk_state *walk_state);
432
433void
434acpi_ds_scope_stack_clear (
435 struct acpi_walk_state *walk_state);
436
437
438/* dswstate - parser WALK_STATE management routines */
439
440struct acpi_walk_state *
441acpi_ds_create_walk_state (
442 acpi_owner_id owner_id,
443 union acpi_parse_object *origin,
444 union acpi_operand_object *mth_desc,
445 struct acpi_thread_state *thread);
446
447acpi_status
448acpi_ds_init_aml_walk (
449 struct acpi_walk_state *walk_state,
450 union acpi_parse_object *op,
451 struct acpi_namespace_node *method_node,
452 u8 *aml_start,
453 u32 aml_length,
454 struct acpi_parameter_info *info,
455 u32 pass_number);
456
457#ifdef ACPI_FUTURE_USAGE
458acpi_status
459acpi_ds_obj_stack_delete_all (
460 struct acpi_walk_state *walk_state);
461#endif
462
463acpi_status
464acpi_ds_obj_stack_pop_and_delete (
465 u32 pop_count,
466 struct acpi_walk_state *walk_state);
467
468void
469acpi_ds_delete_walk_state (
470 struct acpi_walk_state *walk_state);
471
472struct acpi_walk_state *
473acpi_ds_pop_walk_state (
474 struct acpi_thread_state *thread);
475
476void
477acpi_ds_push_walk_state (
478 struct acpi_walk_state *walk_state,
479 struct acpi_thread_state *thread);
480
481acpi_status
482acpi_ds_result_stack_pop (
483 struct acpi_walk_state *walk_state);
484
485acpi_status
486acpi_ds_result_stack_push (
487 struct acpi_walk_state *walk_state);
488
489acpi_status
490acpi_ds_result_stack_clear (
491 struct acpi_walk_state *walk_state);
492
493struct acpi_walk_state *
494acpi_ds_get_current_walk_state (
495 struct acpi_thread_state *thread);
496
497#ifdef ACPI_ENABLE_OBJECT_CACHE
498void
499acpi_ds_delete_walk_state_cache (
500 void);
501#endif
502
503#ifdef ACPI_FUTURE_USAGE
504acpi_status
505acpi_ds_result_insert (
506 void *object,
507 u32 index,
508 struct acpi_walk_state *walk_state);
509
510acpi_status
511acpi_ds_result_remove (
512 union acpi_operand_object **object,
513 u32 index,
514 struct acpi_walk_state *walk_state);
515#endif
516
517acpi_status
518acpi_ds_result_pop (
519 union acpi_operand_object **object,
520 struct acpi_walk_state *walk_state);
521
522acpi_status
523acpi_ds_result_push (
524 union acpi_operand_object *object,
525 struct acpi_walk_state *walk_state);
526
527acpi_status
528acpi_ds_result_pop_from_bottom (
529 union acpi_operand_object **object,
530 struct acpi_walk_state *walk_state);
531
532#endif /* _ACDISPAT_H_ */
diff --git a/include/acpi/acevents.h b/include/acpi/acevents.h
new file mode 100644
index 00000000000..2dec083ba1c
--- /dev/null
+++ b/include/acpi/acevents.h
@@ -0,0 +1,320 @@
1/******************************************************************************
2 *
3 * Name: acevents.h - Event subcomponent prototypes and defines
4 *
5 *****************************************************************************/
6
7/*
8 * Copyright (C) 2000 - 2005, R. Byron Moore
9 * All rights reserved.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions, and the following disclaimer,
16 * without modification.
17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18 * substantially similar to the "NO WARRANTY" disclaimer below
19 * ("Disclaimer") and any redistribution must be conditioned upon
20 * including a substantially similar Disclaimer requirement for further
21 * binary redistribution.
22 * 3. Neither the names of the above-listed copyright holders nor the names
23 * of any contributors may be used to endorse or promote products derived
24 * from this software without specific prior written permission.
25 *
26 * Alternatively, this software may be distributed under the terms of the
27 * GNU General Public License ("GPL") version 2 as published by the Free
28 * Software Foundation.
29 *
30 * NO WARRANTY
31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41 * POSSIBILITY OF SUCH DAMAGES.
42 */
43
44#ifndef __ACEVENTS_H__
45#define __ACEVENTS_H__
46
47
48acpi_status
49acpi_ev_initialize_events (
50 void);
51
52acpi_status
53acpi_ev_install_xrupt_handlers (
54 void);
55
56
57/*
58 * Evfixed - Fixed event handling
59 */
60
61acpi_status
62acpi_ev_fixed_event_initialize (
63 void);
64
65u32
66acpi_ev_fixed_event_detect (
67 void);
68
69u32
70acpi_ev_fixed_event_dispatch (
71 u32 event);
72
73
74/*
75 * Evmisc
76 */
77
78u8
79acpi_ev_is_notify_object (
80 struct acpi_namespace_node *node);
81
82acpi_status
83acpi_ev_acquire_global_lock(
84 u16 timeout);
85
86acpi_status
87acpi_ev_release_global_lock(
88 void);
89
90acpi_status
91acpi_ev_init_global_lock_handler (
92 void);
93
94u32
95acpi_ev_get_gpe_number_index (
96 u32 gpe_number);
97
98acpi_status
99acpi_ev_queue_notify_request (
100 struct acpi_namespace_node *node,
101 u32 notify_value);
102
103void ACPI_SYSTEM_XFACE
104acpi_ev_notify_dispatch (
105 void *context);
106
107
108/*
109 * Evgpe - GPE handling and dispatch
110 */
111
112acpi_status
113acpi_ev_walk_gpe_list (
114 ACPI_GPE_CALLBACK gpe_walk_callback,
115 u32 flags);
116
117u8
118acpi_ev_valid_gpe_event (
119 struct acpi_gpe_event_info *gpe_event_info);
120
121acpi_status
122acpi_ev_update_gpe_enable_masks (
123 struct acpi_gpe_event_info *gpe_event_info,
124 u8 type);
125
126acpi_status
127acpi_ev_enable_gpe (
128 struct acpi_gpe_event_info *gpe_event_info,
129 u8 write_to_hardware);
130
131acpi_status
132acpi_ev_disable_gpe (
133 struct acpi_gpe_event_info *gpe_event_info);
134
135struct acpi_gpe_event_info *
136acpi_ev_get_gpe_event_info (
137 acpi_handle gpe_device,
138 u32 gpe_number);
139
140acpi_status
141acpi_ev_gpe_initialize (
142 void);
143
144acpi_status
145acpi_ev_create_gpe_block (
146 struct acpi_namespace_node *gpe_device,
147 struct acpi_generic_address *gpe_block_address,
148 u32 register_count,
149 u8 gpe_block_base_number,
150 u32 interrupt_level,
151 struct acpi_gpe_block_info **return_gpe_block);
152
153acpi_status
154acpi_ev_delete_gpe_block (
155 struct acpi_gpe_block_info *gpe_block);
156
157acpi_status
158acpi_ev_delete_gpe_handlers (
159 struct acpi_gpe_xrupt_info *gpe_xrupt_info,
160 struct acpi_gpe_block_info *gpe_block);
161
162u32
163acpi_ev_gpe_dispatch (
164 struct acpi_gpe_event_info *gpe_event_info,
165 u32 gpe_number);
166
167u32
168acpi_ev_gpe_detect (
169 struct acpi_gpe_xrupt_info *gpe_xrupt_list);
170
171acpi_status
172acpi_ev_set_gpe_type (
173 struct acpi_gpe_event_info *gpe_event_info,
174 u8 type);
175
176acpi_status
177acpi_ev_check_for_wake_only_gpe (
178 struct acpi_gpe_event_info *gpe_event_info);
179
180/*
181 * Evregion - Address Space handling
182 */
183
184acpi_status
185acpi_ev_install_region_handlers (
186 void);
187
188acpi_status
189acpi_ev_initialize_op_regions (
190 void);
191
192acpi_status
193acpi_ev_address_space_dispatch (
194 union acpi_operand_object *region_obj,
195 u32 function,
196 acpi_physical_address address,
197 u32 bit_width,
198 void *value);
199
200acpi_status
201acpi_ev_install_handler (
202 acpi_handle obj_handle,
203 u32 level,
204 void *context,
205 void **return_value);
206
207acpi_status
208acpi_ev_attach_region (
209 union acpi_operand_object *handler_obj,
210 union acpi_operand_object *region_obj,
211 u8 acpi_ns_is_locked);
212
213void
214acpi_ev_detach_region (
215 union acpi_operand_object *region_obj,
216 u8 acpi_ns_is_locked);
217
218acpi_status
219acpi_ev_install_space_handler (
220 struct acpi_namespace_node *node,
221 acpi_adr_space_type space_id,
222 acpi_adr_space_handler handler,
223 acpi_adr_space_setup setup,
224 void *context);
225
226acpi_status
227acpi_ev_execute_reg_methods (
228 struct acpi_namespace_node *node,
229 acpi_adr_space_type space_id);
230
231acpi_status
232acpi_ev_execute_reg_method (
233 union acpi_operand_object *region_obj,
234 u32 function);
235
236acpi_status
237acpi_ev_reg_run (
238 acpi_handle obj_handle,
239 u32 level,
240 void *context,
241 void **return_value);
242
243/*
244 * Evregini - Region initialization and setup
245 */
246
247acpi_status
248acpi_ev_system_memory_region_setup (
249 acpi_handle handle,
250 u32 function,
251 void *handler_context,
252 void **region_context);
253
254acpi_status
255acpi_ev_io_space_region_setup (
256 acpi_handle handle,
257 u32 function,
258 void *handler_context,
259 void **region_context);
260
261acpi_status
262acpi_ev_pci_config_region_setup (
263 acpi_handle handle,
264 u32 function,
265 void *handler_context,
266 void **region_context);
267
268acpi_status
269acpi_ev_cmos_region_setup (
270 acpi_handle handle,
271 u32 function,
272 void *handler_context,
273 void **region_context);
274
275acpi_status
276acpi_ev_pci_bar_region_setup (
277 acpi_handle handle,
278 u32 function,
279 void *handler_context,
280 void **region_context);
281
282acpi_status
283acpi_ev_default_region_setup (
284 acpi_handle handle,
285 u32 function,
286 void *handler_context,
287 void **region_context);
288
289acpi_status
290acpi_ev_initialize_region (
291 union acpi_operand_object *region_obj,
292 u8 acpi_ns_locked);
293
294
295/*
296 * Evsci - SCI (System Control Interrupt) handling/dispatch
297 */
298
299u32 ACPI_SYSTEM_XFACE
300acpi_ev_gpe_xrupt_handler (
301 void *context);
302
303u32
304acpi_ev_install_sci_handler (
305 void);
306
307acpi_status
308acpi_ev_remove_sci_handler (
309 void);
310
311u32
312acpi_ev_initialize_sCI (
313 u32 program_sCI);
314
315void
316acpi_ev_terminate (
317 void);
318
319
320#endif /* __ACEVENTS_H__ */
diff --git a/include/acpi/acexcep.h b/include/acpi/acexcep.h
new file mode 100644
index 00000000000..53f8b50fac1
--- /dev/null
+++ b/include/acpi/acexcep.h
@@ -0,0 +1,308 @@
1/******************************************************************************
2 *
3 * Name: acexcep.h - Exception codes returned by the ACPI subsystem
4 *
5 *****************************************************************************/
6
7/*
8 * Copyright (C) 2000 - 2005, R. Byron Moore
9 * All rights reserved.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions, and the following disclaimer,
16 * without modification.
17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18 * substantially similar to the "NO WARRANTY" disclaimer below
19 * ("Disclaimer") and any redistribution must be conditioned upon
20 * including a substantially similar Disclaimer requirement for further
21 * binary redistribution.
22 * 3. Neither the names of the above-listed copyright holders nor the names
23 * of any contributors may be used to endorse or promote products derived
24 * from this software without specific prior written permission.
25 *
26 * Alternatively, this software may be distributed under the terms of the
27 * GNU General Public License ("GPL") version 2 as published by the Free
28 * Software Foundation.
29 *
30 * NO WARRANTY
31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41 * POSSIBILITY OF SUCH DAMAGES.
42 */
43
44#ifndef __ACEXCEP_H__
45#define __ACEXCEP_H__
46
47
48/*
49 * Exceptions returned by external ACPI interfaces
50 */
51
52#define AE_CODE_ENVIRONMENTAL 0x0000
53#define AE_CODE_PROGRAMMER 0x1000
54#define AE_CODE_ACPI_TABLES 0x2000
55#define AE_CODE_AML 0x3000
56#define AE_CODE_CONTROL 0x4000
57#define AE_CODE_MASK 0xF000
58
59
60#define ACPI_SUCCESS(a) (!(a))
61#define ACPI_FAILURE(a) (a)
62
63
64#define AE_OK (acpi_status) 0x0000
65
66/*
67 * Environmental exceptions
68 */
69#define AE_ERROR (acpi_status) (0x0001 | AE_CODE_ENVIRONMENTAL)
70#define AE_NO_ACPI_TABLES (acpi_status) (0x0002 | AE_CODE_ENVIRONMENTAL)
71#define AE_NO_NAMESPACE (acpi_status) (0x0003 | AE_CODE_ENVIRONMENTAL)
72#define AE_NO_MEMORY (acpi_status) (0x0004 | AE_CODE_ENVIRONMENTAL)
73#define AE_NOT_FOUND (acpi_status) (0x0005 | AE_CODE_ENVIRONMENTAL)
74#define AE_NOT_EXIST (acpi_status) (0x0006 | AE_CODE_ENVIRONMENTAL)
75#define AE_ALREADY_EXISTS (acpi_status) (0x0007 | AE_CODE_ENVIRONMENTAL)
76#define AE_TYPE (acpi_status) (0x0008 | AE_CODE_ENVIRONMENTAL)
77#define AE_NULL_OBJECT (acpi_status) (0x0009 | AE_CODE_ENVIRONMENTAL)
78#define AE_NULL_ENTRY (acpi_status) (0x000A | AE_CODE_ENVIRONMENTAL)
79#define AE_BUFFER_OVERFLOW (acpi_status) (0x000B | AE_CODE_ENVIRONMENTAL)
80#define AE_STACK_OVERFLOW (acpi_status) (0x000C | AE_CODE_ENVIRONMENTAL)
81#define AE_STACK_UNDERFLOW (acpi_status) (0x000D | AE_CODE_ENVIRONMENTAL)
82#define AE_NOT_IMPLEMENTED (acpi_status) (0x000E | AE_CODE_ENVIRONMENTAL)
83#define AE_VERSION_MISMATCH (acpi_status) (0x000F | AE_CODE_ENVIRONMENTAL)
84#define AE_SUPPORT (acpi_status) (0x0010 | AE_CODE_ENVIRONMENTAL)
85#define AE_SHARE (acpi_status) (0x0011 | AE_CODE_ENVIRONMENTAL)
86#define AE_LIMIT (acpi_status) (0x0012 | AE_CODE_ENVIRONMENTAL)
87#define AE_TIME (acpi_status) (0x0013 | AE_CODE_ENVIRONMENTAL)
88#define AE_UNKNOWN_STATUS (acpi_status) (0x0014 | AE_CODE_ENVIRONMENTAL)
89#define AE_ACQUIRE_DEADLOCK (acpi_status) (0x0015 | AE_CODE_ENVIRONMENTAL)
90#define AE_RELEASE_DEADLOCK (acpi_status) (0x0016 | AE_CODE_ENVIRONMENTAL)
91#define AE_NOT_ACQUIRED (acpi_status) (0x0017 | AE_CODE_ENVIRONMENTAL)
92#define AE_ALREADY_ACQUIRED (acpi_status) (0x0018 | AE_CODE_ENVIRONMENTAL)
93#define AE_NO_HARDWARE_RESPONSE (acpi_status) (0x0019 | AE_CODE_ENVIRONMENTAL)
94#define AE_NO_GLOBAL_LOCK (acpi_status) (0x001A | AE_CODE_ENVIRONMENTAL)
95#define AE_LOGICAL_ADDRESS (acpi_status) (0x001B | AE_CODE_ENVIRONMENTAL)
96#define AE_ABORT_METHOD (acpi_status) (0x001C | AE_CODE_ENVIRONMENTAL)
97#define AE_SAME_HANDLER (acpi_status) (0x001D | AE_CODE_ENVIRONMENTAL)
98#define AE_WAKE_ONLY_GPE (acpi_status) (0x001E | AE_CODE_ENVIRONMENTAL)
99
100#define AE_CODE_ENV_MAX 0x001E
101
102/*
103 * Programmer exceptions
104 */
105#define AE_BAD_PARAMETER (acpi_status) (0x0001 | AE_CODE_PROGRAMMER)
106#define AE_BAD_CHARACTER (acpi_status) (0x0002 | AE_CODE_PROGRAMMER)
107#define AE_BAD_PATHNAME (acpi_status) (0x0003 | AE_CODE_PROGRAMMER)
108#define AE_BAD_DATA (acpi_status) (0x0004 | AE_CODE_PROGRAMMER)
109#define AE_BAD_ADDRESS (acpi_status) (0x0005 | AE_CODE_PROGRAMMER)
110#define AE_ALIGNMENT (acpi_status) (0x0006 | AE_CODE_PROGRAMMER)
111#define AE_BAD_HEX_CONSTANT (acpi_status) (0x0007 | AE_CODE_PROGRAMMER)
112#define AE_BAD_OCTAL_CONSTANT (acpi_status) (0x0008 | AE_CODE_PROGRAMMER)
113#define AE_BAD_DECIMAL_CONSTANT (acpi_status) (0x0009 | AE_CODE_PROGRAMMER)
114
115#define AE_CODE_PGM_MAX 0x0009
116
117
118/*
119 * Acpi table exceptions
120 */
121#define AE_BAD_SIGNATURE (acpi_status) (0x0001 | AE_CODE_ACPI_TABLES)
122#define AE_BAD_HEADER (acpi_status) (0x0002 | AE_CODE_ACPI_TABLES)
123#define AE_BAD_CHECKSUM (acpi_status) (0x0003 | AE_CODE_ACPI_TABLES)
124#define AE_BAD_VALUE (acpi_status) (0x0004 | AE_CODE_ACPI_TABLES)
125#define AE_TABLE_NOT_SUPPORTED (acpi_status) (0x0005 | AE_CODE_ACPI_TABLES)
126#define AE_INVALID_TABLE_LENGTH (acpi_status) (0x0006 | AE_CODE_ACPI_TABLES)
127
128#define AE_CODE_TBL_MAX 0x0006
129
130
131/*
132 * AML exceptions. These are caused by problems with
133 * the actual AML byte stream
134 */
135#define AE_AML_ERROR (acpi_status) (0x0001 | AE_CODE_AML)
136#define AE_AML_PARSE (acpi_status) (0x0002 | AE_CODE_AML)
137#define AE_AML_BAD_OPCODE (acpi_status) (0x0003 | AE_CODE_AML)
138#define AE_AML_NO_OPERAND (acpi_status) (0x0004 | AE_CODE_AML)
139#define AE_AML_OPERAND_TYPE (acpi_status) (0x0005 | AE_CODE_AML)
140#define AE_AML_OPERAND_VALUE (acpi_status) (0x0006 | AE_CODE_AML)
141#define AE_AML_UNINITIALIZED_LOCAL (acpi_status) (0x0007 | AE_CODE_AML)
142#define AE_AML_UNINITIALIZED_ARG (acpi_status) (0x0008 | AE_CODE_AML)
143#define AE_AML_UNINITIALIZED_ELEMENT (acpi_status) (0x0009 | AE_CODE_AML)
144#define AE_AML_NUMERIC_OVERFLOW (acpi_status) (0x000A | AE_CODE_AML)
145#define AE_AML_REGION_LIMIT (acpi_status) (0x000B | AE_CODE_AML)
146#define AE_AML_BUFFER_LIMIT (acpi_status) (0x000C | AE_CODE_AML)
147#define AE_AML_PACKAGE_LIMIT (acpi_status) (0x000D | AE_CODE_AML)
148#define AE_AML_DIVIDE_BY_ZERO (acpi_status) (0x000E | AE_CODE_AML)
149#define AE_AML_BAD_NAME (acpi_status) (0x000F | AE_CODE_AML)
150#define AE_AML_NAME_NOT_FOUND (acpi_status) (0x0010 | AE_CODE_AML)
151#define AE_AML_INTERNAL (acpi_status) (0x0011 | AE_CODE_AML)
152#define AE_AML_INVALID_SPACE_ID (acpi_status) (0x0012 | AE_CODE_AML)
153#define AE_AML_STRING_LIMIT (acpi_status) (0x0013 | AE_CODE_AML)
154#define AE_AML_NO_RETURN_VALUE (acpi_status) (0x0014 | AE_CODE_AML)
155#define AE_AML_METHOD_LIMIT (acpi_status) (0x0015 | AE_CODE_AML)
156#define AE_AML_NOT_OWNER (acpi_status) (0x0016 | AE_CODE_AML)
157#define AE_AML_MUTEX_ORDER (acpi_status) (0x0017 | AE_CODE_AML)
158#define AE_AML_MUTEX_NOT_ACQUIRED (acpi_status) (0x0018 | AE_CODE_AML)
159#define AE_AML_INVALID_RESOURCE_TYPE (acpi_status) (0x0019 | AE_CODE_AML)
160#define AE_AML_INVALID_INDEX (acpi_status) (0x001A | AE_CODE_AML)
161#define AE_AML_REGISTER_LIMIT (acpi_status) (0x001B | AE_CODE_AML)
162#define AE_AML_NO_WHILE (acpi_status) (0x001C | AE_CODE_AML)
163#define AE_AML_ALIGNMENT (acpi_status) (0x001D | AE_CODE_AML)
164#define AE_AML_NO_RESOURCE_END_TAG (acpi_status) (0x001E | AE_CODE_AML)
165#define AE_AML_BAD_RESOURCE_VALUE (acpi_status) (0x001F | AE_CODE_AML)
166#define AE_AML_CIRCULAR_REFERENCE (acpi_status) (0x0020 | AE_CODE_AML)
167#define AE_AML_BAD_RESOURCE_LENGTH (acpi_status) (0x0021 | AE_CODE_AML)
168
169#define AE_CODE_AML_MAX 0x0021
170
171/*
172 * Internal exceptions used for control
173 */
174#define AE_CTRL_RETURN_VALUE (acpi_status) (0x0001 | AE_CODE_CONTROL)
175#define AE_CTRL_PENDING (acpi_status) (0x0002 | AE_CODE_CONTROL)
176#define AE_CTRL_TERMINATE (acpi_status) (0x0003 | AE_CODE_CONTROL)
177#define AE_CTRL_TRUE (acpi_status) (0x0004 | AE_CODE_CONTROL)
178#define AE_CTRL_FALSE (acpi_status) (0x0005 | AE_CODE_CONTROL)
179#define AE_CTRL_DEPTH (acpi_status) (0x0006 | AE_CODE_CONTROL)
180#define AE_CTRL_END (acpi_status) (0x0007 | AE_CODE_CONTROL)
181#define AE_CTRL_TRANSFER (acpi_status) (0x0008 | AE_CODE_CONTROL)
182#define AE_CTRL_BREAK (acpi_status) (0x0009 | AE_CODE_CONTROL)
183#define AE_CTRL_CONTINUE (acpi_status) (0x000A | AE_CODE_CONTROL)
184#define AE_CTRL_SKIP (acpi_status) (0x000B | AE_CODE_CONTROL)
185
186#define AE_CODE_CTRL_MAX 0x000B
187
188
189#ifdef DEFINE_ACPI_GLOBALS
190
191/*
192 * String versions of the exception codes above
193 * These strings must match the corresponding defines exactly
194 */
195char const *acpi_gbl_exception_names_env[] =
196{
197 "AE_OK",
198 "AE_ERROR",
199 "AE_NO_ACPI_TABLES",
200 "AE_NO_NAMESPACE",
201 "AE_NO_MEMORY",
202 "AE_NOT_FOUND",
203 "AE_NOT_EXIST",
204 "AE_ALREADY_EXISTS",
205 "AE_TYPE",
206 "AE_NULL_OBJECT",
207 "AE_NULL_ENTRY",
208 "AE_BUFFER_OVERFLOW",
209 "AE_STACK_OVERFLOW",
210 "AE_STACK_UNDERFLOW",
211 "AE_NOT_IMPLEMENTED",
212 "AE_VERSION_MISMATCH",
213 "AE_SUPPORT",
214 "AE_SHARE",
215 "AE_LIMIT",
216 "AE_TIME",
217 "AE_UNKNOWN_STATUS",
218 "AE_ACQUIRE_DEADLOCK",
219 "AE_RELEASE_DEADLOCK",
220 "AE_NOT_ACQUIRED",
221 "AE_ALREADY_ACQUIRED",
222 "AE_NO_HARDWARE_RESPONSE",
223 "AE_NO_GLOBAL_LOCK",
224 "AE_LOGICAL_ADDRESS",
225 "AE_ABORT_METHOD",
226 "AE_SAME_HANDLER",
227 "AE_WAKE_ONLY_GPE"
228};
229
230char const *acpi_gbl_exception_names_pgm[] =
231{
232 "AE_BAD_PARAMETER",
233 "AE_BAD_CHARACTER",
234 "AE_BAD_PATHNAME",
235 "AE_BAD_DATA",
236 "AE_BAD_ADDRESS",
237 "AE_ALIGNMENT",
238 "AE_BAD_HEX_CONSTANT",
239 "AE_BAD_OCTAL_CONSTANT",
240 "AE_BAD_DECIMAL_CONSTANT"
241};
242
243char const *acpi_gbl_exception_names_tbl[] =
244{
245 "AE_BAD_SIGNATURE",
246 "AE_BAD_HEADER",
247 "AE_BAD_CHECKSUM",
248 "AE_BAD_VALUE",
249 "AE_TABLE_NOT_SUPPORTED",
250 "AE_INVALID_TABLE_LENGTH"
251};
252
253char const *acpi_gbl_exception_names_aml[] =
254{
255 "AE_AML_ERROR",
256 "AE_AML_PARSE",
257 "AE_AML_BAD_OPCODE",
258 "AE_AML_NO_OPERAND",
259 "AE_AML_OPERAND_TYPE",
260 "AE_AML_OPERAND_VALUE",
261 "AE_AML_UNINITIALIZED_LOCAL",
262 "AE_AML_UNINITIALIZED_ARG",
263 "AE_AML_UNINITIALIZED_ELEMENT",
264 "AE_AML_NUMERIC_OVERFLOW",
265 "AE_AML_REGION_LIMIT",
266 "AE_AML_BUFFER_LIMIT",
267 "AE_AML_PACKAGE_LIMIT",
268 "AE_AML_DIVIDE_BY_ZERO",
269 "AE_AML_BAD_NAME",
270 "AE_AML_NAME_NOT_FOUND",
271 "AE_AML_INTERNAL",
272 "AE_AML_INVALID_SPACE_ID",
273 "AE_AML_STRING_LIMIT",
274 "AE_AML_NO_RETURN_VALUE",
275 "AE_AML_METHOD_LIMIT",
276 "AE_AML_NOT_OWNER",
277 "AE_AML_MUTEX_ORDER",
278 "AE_AML_MUTEX_NOT_ACQUIRED",
279 "AE_AML_INVALID_RESOURCE_TYPE",
280 "AE_AML_INVALID_INDEX",
281 "AE_AML_REGISTER_LIMIT",
282 "AE_AML_NO_WHILE",
283 "AE_AML_ALIGNMENT",
284 "AE_AML_NO_RESOURCE_END_TAG",
285 "AE_AML_BAD_RESOURCE_VALUE",
286 "AE_AML_CIRCULAR_REFERENCE",
287 "AE_AML_BAD_RESOURCE_LENGTH"
288};
289
290char const *acpi_gbl_exception_names_ctrl[] =
291{
292 "AE_CTRL_RETURN_VALUE",
293 "AE_CTRL_PENDING",
294 "AE_CTRL_TERMINATE",
295 "AE_CTRL_TRUE",
296 "AE_CTRL_FALSE",
297 "AE_CTRL_DEPTH",
298 "AE_CTRL_END",
299 "AE_CTRL_TRANSFER",
300 "AE_CTRL_BREAK",
301 "AE_CTRL_CONTINUE",
302 "AE_CTRL_SKIP"
303};
304
305#endif /* ACPI GLOBALS */
306
307
308#endif /* __ACEXCEP_H__ */
diff --git a/include/acpi/acglobal.h b/include/acpi/acglobal.h
new file mode 100644
index 00000000000..c7f387a972c
--- /dev/null
+++ b/include/acpi/acglobal.h
@@ -0,0 +1,357 @@
1/******************************************************************************
2 *
3 * Name: acglobal.h - Declarations for global variables
4 *
5 *****************************************************************************/
6
7/*
8 * Copyright (C) 2000 - 2005, R. Byron Moore
9 * All rights reserved.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions, and the following disclaimer,
16 * without modification.
17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18 * substantially similar to the "NO WARRANTY" disclaimer below
19 * ("Disclaimer") and any redistribution must be conditioned upon
20 * including a substantially similar Disclaimer requirement for further
21 * binary redistribution.
22 * 3. Neither the names of the above-listed copyright holders nor the names
23 * of any contributors may be used to endorse or promote products derived
24 * from this software without specific prior written permission.
25 *
26 * Alternatively, this software may be distributed under the terms of the
27 * GNU General Public License ("GPL") version 2 as published by the Free
28 * Software Foundation.
29 *
30 * NO WARRANTY
31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41 * POSSIBILITY OF SUCH DAMAGES.
42 */
43
44#ifndef __ACGLOBAL_H__
45#define __ACGLOBAL_H__
46
47
48/*
49 * Ensure that the globals are actually defined and initialized only once.
50 *
51 * The use of these macros allows a single list of globals (here) in order
52 * to simplify maintenance of the code.
53 */
54#ifdef DEFINE_ACPI_GLOBALS
55#define ACPI_EXTERN
56#define ACPI_INIT_GLOBAL(a,b) a=b
57#else
58#define ACPI_EXTERN extern
59#define ACPI_INIT_GLOBAL(a,b) a
60#endif
61
62/*
63 * Keep local copies of these FADT-based registers. NOTE: These globals
64 * are first in this file for alignment reasons on 64-bit systems.
65 */
66ACPI_EXTERN struct acpi_generic_address acpi_gbl_xpm1a_enable;
67ACPI_EXTERN struct acpi_generic_address acpi_gbl_xpm1b_enable;
68
69
70/*****************************************************************************
71 *
72 * Debug support
73 *
74 ****************************************************************************/
75
76/* Runtime configuration of debug print levels */
77
78extern u32 acpi_dbg_level;
79extern u32 acpi_dbg_layer;
80
81/* Procedure nesting level for debug output */
82
83extern u32 acpi_gbl_nesting_level;
84
85
86/*****************************************************************************
87 *
88 * Runtime configuration (static defaults that can be overriden at runtime)
89 *
90 ****************************************************************************/
91
92/*
93 * Enable "slack" in the AML interpreter? Default is FALSE, and the
94 * interpreter strictly follows the ACPI specification. Setting to TRUE
95 * allows the interpreter to forgive certain bad AML constructs. Currently:
96 * 1) Allow "implicit return" of last value in a control method
97 * 2) Allow access beyond end of operation region
98 * 3) Allow access to uninitialized locals/args (auto-init to integer 0)
99 * 4) Allow ANY object type to be a source operand for the Store() operator
100 */
101ACPI_EXTERN u8 ACPI_INIT_GLOBAL (acpi_gbl_enable_interpreter_slack, FALSE);
102
103/*
104 * Automatically serialize ALL control methods? Default is FALSE, meaning
105 * to use the Serialized/not_serialized method flags on a per method basis.
106 * Only change this if the ASL code is poorly written and cannot handle
107 * reentrancy even though methods are marked "not_serialized".
108 */
109ACPI_EXTERN u8 ACPI_INIT_GLOBAL (acpi_gbl_all_methods_serialized, FALSE);
110
111/*
112 * Create the predefined _OSI method in the namespace? Default is TRUE
113 * because ACPI CA is fully compatible with other ACPI implementations.
114 * Changing this will revert ACPI CA (and machine ASL) to pre-OSI behavior.
115 */
116ACPI_EXTERN u8 ACPI_INIT_GLOBAL (acpi_gbl_create_osi_method, TRUE);
117
118/*
119 * Disable wakeup GPEs during runtime? Default is TRUE because WAKE and
120 * RUNTIME GPEs should never be shared, and WAKE GPEs should typically only
121 * be enabled just before going to sleep.
122 */
123ACPI_EXTERN u8 ACPI_INIT_GLOBAL (acpi_gbl_leave_wake_gpes_disabled, TRUE);
124
125
126/*****************************************************************************
127 *
128 * ACPI Table globals
129 *
130 ****************************************************************************/
131
132/*
133 * Table pointers.
134 * Although these pointers are somewhat redundant with the global acpi_table,
135 * they are convenient because they are typed pointers.
136 *
137 * These tables are single-table only; meaning that there can be at most one
138 * of each in the system. Each global points to the actual table.
139 */
140ACPI_EXTERN u32 acpi_gbl_table_flags;
141ACPI_EXTERN u32 acpi_gbl_rsdt_table_count;
142ACPI_EXTERN struct rsdp_descriptor *acpi_gbl_RSDP;
143ACPI_EXTERN XSDT_DESCRIPTOR *acpi_gbl_XSDT;
144ACPI_EXTERN FADT_DESCRIPTOR *acpi_gbl_FADT;
145ACPI_EXTERN struct acpi_table_header *acpi_gbl_DSDT;
146ACPI_EXTERN FACS_DESCRIPTOR *acpi_gbl_FACS;
147ACPI_EXTERN struct acpi_common_facs acpi_gbl_common_fACS;
148/*
149 * Since there may be multiple SSDTs and PSDTS, a single pointer is not
150 * sufficient; Therefore, there isn't one!
151 */
152
153
154/*
155 * Handle both ACPI 1.0 and ACPI 2.0 Integer widths
156 * If we are running a method that exists in a 32-bit ACPI table.
157 * Use only 32 bits of the Integer for conversion.
158 */
159ACPI_EXTERN u8 acpi_gbl_integer_bit_width;
160ACPI_EXTERN u8 acpi_gbl_integer_byte_width;
161ACPI_EXTERN u8 acpi_gbl_integer_nybble_width;
162
163/*
164 * ACPI Table info arrays
165 */
166extern struct acpi_table_list acpi_gbl_table_lists[NUM_ACPI_TABLE_TYPES];
167extern struct acpi_table_support acpi_gbl_table_data[NUM_ACPI_TABLE_TYPES];
168
169/*
170 * Predefined mutex objects. This array contains the
171 * actual OS mutex handles, indexed by the local ACPI_MUTEX_HANDLEs.
172 * (The table maps local handles to the real OS handles)
173 */
174ACPI_EXTERN struct acpi_mutex_info acpi_gbl_mutex_info[NUM_MUTEX];
175
176
177/*****************************************************************************
178 *
179 * Miscellaneous globals
180 *
181 ****************************************************************************/
182
183
184ACPI_EXTERN struct acpi_memory_list acpi_gbl_memory_lists[ACPI_NUM_MEM_LISTS];
185ACPI_EXTERN struct acpi_object_notify_handler acpi_gbl_device_notify;
186ACPI_EXTERN struct acpi_object_notify_handler acpi_gbl_system_notify;
187ACPI_EXTERN acpi_exception_handler acpi_gbl_exception_handler;
188ACPI_EXTERN acpi_init_handler acpi_gbl_init_handler;
189ACPI_EXTERN struct acpi_walk_state *acpi_gbl_breakpoint_walk;
190ACPI_EXTERN acpi_handle acpi_gbl_global_lock_semaphore;
191
192ACPI_EXTERN u32 acpi_gbl_global_lock_thread_count;
193ACPI_EXTERN u32 acpi_gbl_original_mode;
194ACPI_EXTERN u32 acpi_gbl_rsdp_original_location;
195ACPI_EXTERN u32 acpi_gbl_ns_lookup_count;
196ACPI_EXTERN u32 acpi_gbl_ps_find_count;
197ACPI_EXTERN u16 acpi_gbl_pm1_enable_register_save;
198ACPI_EXTERN u16 acpi_gbl_next_table_owner_id;
199ACPI_EXTERN u16 acpi_gbl_next_method_owner_id;
200ACPI_EXTERN u16 acpi_gbl_global_lock_handle;
201ACPI_EXTERN u8 acpi_gbl_debugger_configuration;
202ACPI_EXTERN u8 acpi_gbl_global_lock_acquired;
203ACPI_EXTERN u8 acpi_gbl_step_to_next_call;
204ACPI_EXTERN u8 acpi_gbl_acpi_hardware_present;
205ACPI_EXTERN u8 acpi_gbl_global_lock_present;
206ACPI_EXTERN u8 acpi_gbl_events_initialized;
207ACPI_EXTERN u8 acpi_gbl_system_awake_and_running;
208
209extern u8 acpi_gbl_shutdown;
210extern u32 acpi_gbl_startup_flags;
211extern const u8 acpi_gbl_decode_to8bit[8];
212extern const char *acpi_gbl_sleep_state_names[ACPI_S_STATE_COUNT];
213extern const char *acpi_gbl_highest_dstate_names[4];
214extern const struct acpi_opcode_info acpi_gbl_aml_op_info[AML_NUM_OPCODES];
215extern const char *acpi_gbl_region_types[ACPI_NUM_PREDEFINED_REGIONS];
216extern const char *acpi_gbl_valid_osi_strings[ACPI_NUM_OSI_STRINGS];
217
218
219/*****************************************************************************
220 *
221 * Namespace globals
222 *
223 ****************************************************************************/
224
225#define NUM_NS_TYPES ACPI_TYPE_INVALID+1
226
227#if !defined (ACPI_NO_METHOD_EXECUTION) || defined (ACPI_CONSTANT_EVAL_ONLY)
228#define NUM_PREDEFINED_NAMES 10
229#else
230#define NUM_PREDEFINED_NAMES 9
231#endif
232
233ACPI_EXTERN struct acpi_namespace_node acpi_gbl_root_node_struct;
234ACPI_EXTERN struct acpi_namespace_node *acpi_gbl_root_node;
235ACPI_EXTERN struct acpi_namespace_node *acpi_gbl_fadt_gpe_device;
236
237extern const u8 acpi_gbl_ns_properties[NUM_NS_TYPES];
238extern const struct acpi_predefined_names acpi_gbl_pre_defined_names [NUM_PREDEFINED_NAMES];
239
240#ifdef ACPI_DEBUG_OUTPUT
241ACPI_EXTERN u32 acpi_gbl_current_node_count;
242ACPI_EXTERN u32 acpi_gbl_current_node_size;
243ACPI_EXTERN u32 acpi_gbl_max_concurrent_node_count;
244ACPI_EXTERN acpi_size acpi_gbl_entry_stack_pointer;
245ACPI_EXTERN acpi_size acpi_gbl_lowest_stack_pointer;
246ACPI_EXTERN u32 acpi_gbl_deepest_nesting;
247#endif
248
249/*****************************************************************************
250 *
251 * Interpreter globals
252 *
253 ****************************************************************************/
254
255
256ACPI_EXTERN struct acpi_thread_state *acpi_gbl_current_walk_list;
257
258/* Control method single step flag */
259
260ACPI_EXTERN u8 acpi_gbl_cm_single_step;
261
262
263/*****************************************************************************
264 *
265 * Parser globals
266 *
267 ****************************************************************************/
268
269ACPI_EXTERN union acpi_parse_object *acpi_gbl_parsed_namespace_root;
270
271/*****************************************************************************
272 *
273 * Hardware globals
274 *
275 ****************************************************************************/
276
277extern struct acpi_bit_register_info acpi_gbl_bit_register_info[ACPI_NUM_BITREG];
278ACPI_EXTERN u8 acpi_gbl_sleep_type_a;
279ACPI_EXTERN u8 acpi_gbl_sleep_type_b;
280
281
282/*****************************************************************************
283 *
284 * Event and GPE globals
285 *
286 ****************************************************************************/
287
288extern struct acpi_fixed_event_info acpi_gbl_fixed_event_info[ACPI_NUM_FIXED_EVENTS];
289ACPI_EXTERN struct acpi_fixed_event_handler acpi_gbl_fixed_event_handlers[ACPI_NUM_FIXED_EVENTS];
290ACPI_EXTERN struct acpi_gpe_xrupt_info *acpi_gbl_gpe_xrupt_list_head;
291ACPI_EXTERN struct acpi_gpe_block_info *acpi_gbl_gpe_fadt_blocks[ACPI_MAX_GPE_BLOCKS];
292ACPI_EXTERN acpi_handle acpi_gbl_gpe_lock;
293
294
295/*****************************************************************************
296 *
297 * Debugger globals
298 *
299 ****************************************************************************/
300
301
302ACPI_EXTERN u8 acpi_gbl_db_output_flags;
303
304#ifdef ACPI_DISASSEMBLER
305
306ACPI_EXTERN u8 acpi_gbl_db_opt_disasm;
307ACPI_EXTERN u8 acpi_gbl_db_opt_verbose;
308#endif
309
310
311#ifdef ACPI_DEBUGGER
312
313extern u8 acpi_gbl_method_executing;
314extern u8 acpi_gbl_abort_method;
315extern u8 acpi_gbl_db_terminate_threads;
316
317ACPI_EXTERN int optind;
318ACPI_EXTERN char *optarg;
319
320ACPI_EXTERN u8 acpi_gbl_db_opt_tables;
321ACPI_EXTERN u8 acpi_gbl_db_opt_stats;
322ACPI_EXTERN u8 acpi_gbl_db_opt_ini_methods;
323
324
325ACPI_EXTERN char *acpi_gbl_db_args[ACPI_DEBUGGER_MAX_ARGS];
326ACPI_EXTERN char acpi_gbl_db_line_buf[80];
327ACPI_EXTERN char acpi_gbl_db_parsed_buf[80];
328ACPI_EXTERN char acpi_gbl_db_scope_buf[40];
329ACPI_EXTERN char acpi_gbl_db_debug_filename[40];
330ACPI_EXTERN u8 acpi_gbl_db_output_to_file;
331ACPI_EXTERN char *acpi_gbl_db_buffer;
332ACPI_EXTERN char *acpi_gbl_db_filename;
333ACPI_EXTERN u32 acpi_gbl_db_debug_level;
334ACPI_EXTERN u32 acpi_gbl_db_console_debug_level;
335ACPI_EXTERN struct acpi_table_header *acpi_gbl_db_table_ptr;
336ACPI_EXTERN struct acpi_namespace_node *acpi_gbl_db_scope_node;
337
338/*
339 * Statistic globals
340 */
341ACPI_EXTERN u16 acpi_gbl_obj_type_count[ACPI_TYPE_NS_NODE_MAX+1];
342ACPI_EXTERN u16 acpi_gbl_node_type_count[ACPI_TYPE_NS_NODE_MAX+1];
343ACPI_EXTERN u16 acpi_gbl_obj_type_count_misc;
344ACPI_EXTERN u16 acpi_gbl_node_type_count_misc;
345ACPI_EXTERN u32 acpi_gbl_num_nodes;
346ACPI_EXTERN u32 acpi_gbl_num_objects;
347
348
349ACPI_EXTERN u32 acpi_gbl_size_of_parse_tree;
350ACPI_EXTERN u32 acpi_gbl_size_of_method_trees;
351ACPI_EXTERN u32 acpi_gbl_size_of_node_entries;
352ACPI_EXTERN u32 acpi_gbl_size_of_acpi_objects;
353
354#endif /* ACPI_DEBUGGER */
355
356
357#endif /* __ACGLOBAL_H__ */
diff --git a/include/acpi/achware.h b/include/acpi/achware.h
new file mode 100644
index 00000000000..28ad1398c15
--- /dev/null
+++ b/include/acpi/achware.h
@@ -0,0 +1,182 @@
1/******************************************************************************
2 *
3 * Name: achware.h -- hardware specific interfaces
4 *
5 *****************************************************************************/
6
7/*
8 * Copyright (C) 2000 - 2005, R. Byron Moore
9 * All rights reserved.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions, and the following disclaimer,
16 * without modification.
17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18 * substantially similar to the "NO WARRANTY" disclaimer below
19 * ("Disclaimer") and any redistribution must be conditioned upon
20 * including a substantially similar Disclaimer requirement for further
21 * binary redistribution.
22 * 3. Neither the names of the above-listed copyright holders nor the names
23 * of any contributors may be used to endorse or promote products derived
24 * from this software without specific prior written permission.
25 *
26 * Alternatively, this software may be distributed under the terms of the
27 * GNU General Public License ("GPL") version 2 as published by the Free
28 * Software Foundation.
29 *
30 * NO WARRANTY
31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41 * POSSIBILITY OF SUCH DAMAGES.
42 */
43
44#ifndef __ACHWARE_H__
45#define __ACHWARE_H__
46
47
48/* PM Timer ticks per second (HZ) */
49#define PM_TIMER_FREQUENCY 3579545
50
51
52/* Prototypes */
53
54
55acpi_status
56acpi_hw_initialize (
57 void);
58
59acpi_status
60acpi_hw_shutdown (
61 void);
62
63acpi_status
64acpi_hw_initialize_system_info (
65 void);
66
67acpi_status
68acpi_hw_set_mode (
69 u32 mode);
70
71u32
72acpi_hw_get_mode (
73 void);
74
75u32
76acpi_hw_get_mode_capabilities (
77 void);
78
79/* Register I/O Prototypes */
80
81struct acpi_bit_register_info *
82acpi_hw_get_bit_register_info (
83 u32 register_id);
84
85acpi_status
86acpi_hw_register_read (
87 u8 use_lock,
88 u32 register_id,
89 u32 *return_value);
90
91acpi_status
92acpi_hw_register_write (
93 u8 use_lock,
94 u32 register_id,
95 u32 value);
96
97acpi_status
98acpi_hw_low_level_read (
99 u32 width,
100 u32 *value,
101 struct acpi_generic_address *reg);
102
103acpi_status
104acpi_hw_low_level_write (
105 u32 width,
106 u32 value,
107 struct acpi_generic_address *reg);
108
109acpi_status
110acpi_hw_clear_acpi_status (
111 u32 flags);
112
113
114/* GPE support */
115
116acpi_status
117acpi_hw_write_gpe_enable_reg (
118 struct acpi_gpe_event_info *gpe_event_info);
119
120acpi_status
121acpi_hw_disable_gpe_block (
122 struct acpi_gpe_xrupt_info *gpe_xrupt_info,
123 struct acpi_gpe_block_info *gpe_block);
124
125acpi_status
126acpi_hw_clear_gpe (
127 struct acpi_gpe_event_info *gpe_event_info);
128
129acpi_status
130acpi_hw_clear_gpe_block (
131 struct acpi_gpe_xrupt_info *gpe_xrupt_info,
132 struct acpi_gpe_block_info *gpe_block);
133
134#ifdef ACPI_FUTURE_USAGE
135acpi_status
136acpi_hw_get_gpe_status (
137 struct acpi_gpe_event_info *gpe_event_info,
138 acpi_event_status *event_status);
139#endif
140
141acpi_status
142acpi_hw_disable_all_gpes (
143 u32 flags);
144
145acpi_status
146acpi_hw_enable_all_runtime_gpes (
147 u32 flags);
148
149acpi_status
150acpi_hw_enable_all_wakeup_gpes (
151 u32 flags);
152
153acpi_status
154acpi_hw_enable_runtime_gpe_block (
155 struct acpi_gpe_xrupt_info *gpe_xrupt_info,
156 struct acpi_gpe_block_info *gpe_block);
157
158acpi_status
159acpi_hw_enable_wakeup_gpe_block (
160 struct acpi_gpe_xrupt_info *gpe_xrupt_info,
161 struct acpi_gpe_block_info *gpe_block);
162
163
164/* ACPI Timer prototypes */
165
166#ifdef ACPI_FUTURE_USAGE
167acpi_status
168acpi_get_timer_resolution (
169 u32 *resolution);
170
171acpi_status
172acpi_get_timer (
173 u32 *ticks);
174
175acpi_status
176acpi_get_timer_duration (
177 u32 start_ticks,
178 u32 end_ticks,
179 u32 *time_elapsed);
180#endif /* ACPI_FUTURE_USAGE */
181
182#endif /* __ACHWARE_H__ */
diff --git a/include/acpi/acinterp.h b/include/acpi/acinterp.h
new file mode 100644
index 00000000000..c5301f5ffaf
--- /dev/null
+++ b/include/acpi/acinterp.h
@@ -0,0 +1,765 @@
1/******************************************************************************
2 *
3 * Name: acinterp.h - Interpreter subcomponent prototypes and defines
4 *
5 *****************************************************************************/
6
7/*
8 * Copyright (C) 2000 - 2005, R. Byron Moore
9 * All rights reserved.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions, and the following disclaimer,
16 * without modification.
17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18 * substantially similar to the "NO WARRANTY" disclaimer below
19 * ("Disclaimer") and any redistribution must be conditioned upon
20 * including a substantially similar Disclaimer requirement for further
21 * binary redistribution.
22 * 3. Neither the names of the above-listed copyright holders nor the names
23 * of any contributors may be used to endorse or promote products derived
24 * from this software without specific prior written permission.
25 *
26 * Alternatively, this software may be distributed under the terms of the
27 * GNU General Public License ("GPL") version 2 as published by the Free
28 * Software Foundation.
29 *
30 * NO WARRANTY
31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41 * POSSIBILITY OF SUCH DAMAGES.
42 */
43
44#ifndef __ACINTERP_H__
45#define __ACINTERP_H__
46
47
48#define ACPI_WALK_OPERANDS (&(walk_state->operands [walk_state->num_operands -1]))
49
50
51acpi_status
52acpi_ex_resolve_operands (
53 u16 opcode,
54 union acpi_operand_object **stack_ptr,
55 struct acpi_walk_state *walk_state);
56
57acpi_status
58acpi_ex_check_object_type (
59 acpi_object_type type_needed,
60 acpi_object_type this_type,
61 void *object);
62
63/*
64 * exxface - External interpreter interfaces
65 */
66
67acpi_status
68acpi_ex_load_table (
69 acpi_table_type table_id);
70
71acpi_status
72acpi_ex_execute_method (
73 struct acpi_namespace_node *method_node,
74 union acpi_operand_object **params,
75 union acpi_operand_object **return_obj_desc);
76
77
78/*
79 * exconvrt - object conversion
80 */
81
82acpi_status
83acpi_ex_convert_to_integer (
84 union acpi_operand_object *obj_desc,
85 union acpi_operand_object **result_desc,
86 u32 flags);
87
88acpi_status
89acpi_ex_convert_to_buffer (
90 union acpi_operand_object *obj_desc,
91 union acpi_operand_object **result_desc);
92
93acpi_status
94acpi_ex_convert_to_string (
95 union acpi_operand_object *obj_desc,
96 union acpi_operand_object **result_desc,
97 u32 type);
98
99/* Types for ->String conversion */
100
101#define ACPI_EXPLICIT_BYTE_COPY 0x00000000
102#define ACPI_EXPLICIT_CONVERT_HEX 0x00000001
103#define ACPI_IMPLICIT_CONVERT_HEX 0x00000002
104#define ACPI_EXPLICIT_CONVERT_DECIMAL 0x00000003
105
106acpi_status
107acpi_ex_convert_to_target_type (
108 acpi_object_type destination_type,
109 union acpi_operand_object *source_desc,
110 union acpi_operand_object **result_desc,
111 struct acpi_walk_state *walk_state);
112
113u32
114acpi_ex_convert_to_ascii (
115 acpi_integer integer,
116 u16 base,
117 u8 *string,
118 u8 max_length);
119
120/*
121 * exfield - ACPI AML (p-code) execution - field manipulation
122 */
123
124acpi_status
125acpi_ex_common_buffer_setup (
126 union acpi_operand_object *obj_desc,
127 u32 buffer_length,
128 u32 *datum_count);
129
130acpi_status
131acpi_ex_extract_from_field (
132 union acpi_operand_object *obj_desc,
133 void *buffer,
134 u32 buffer_length);
135
136acpi_status
137acpi_ex_insert_into_field (
138 union acpi_operand_object *obj_desc,
139 void *buffer,
140 u32 buffer_length);
141
142acpi_status
143acpi_ex_setup_region (
144 union acpi_operand_object *obj_desc,
145 u32 field_datum_byte_offset);
146
147acpi_status
148acpi_ex_access_region (
149 union acpi_operand_object *obj_desc,
150 u32 field_datum_byte_offset,
151 acpi_integer *value,
152 u32 read_write);
153
154u8
155acpi_ex_register_overflow (
156 union acpi_operand_object *obj_desc,
157 acpi_integer value);
158
159acpi_status
160acpi_ex_field_datum_io (
161 union acpi_operand_object *obj_desc,
162 u32 field_datum_byte_offset,
163 acpi_integer *value,
164 u32 read_write);
165
166acpi_status
167acpi_ex_write_with_update_rule (
168 union acpi_operand_object *obj_desc,
169 acpi_integer mask,
170 acpi_integer field_value,
171 u32 field_datum_byte_offset);
172
173void
174acpi_ex_get_buffer_datum(
175 acpi_integer *datum,
176 void *buffer,
177 u32 buffer_length,
178 u32 byte_granularity,
179 u32 buffer_offset);
180
181void
182acpi_ex_set_buffer_datum (
183 acpi_integer merged_datum,
184 void *buffer,
185 u32 buffer_length,
186 u32 byte_granularity,
187 u32 buffer_offset);
188
189acpi_status
190acpi_ex_read_data_from_field (
191 struct acpi_walk_state *walk_state,
192 union acpi_operand_object *obj_desc,
193 union acpi_operand_object **ret_buffer_desc);
194
195acpi_status
196acpi_ex_write_data_to_field (
197 union acpi_operand_object *source_desc,
198 union acpi_operand_object *obj_desc,
199 union acpi_operand_object **result_desc);
200
201/*
202 * exmisc - ACPI AML (p-code) execution - specific opcodes
203 */
204
205acpi_status
206acpi_ex_opcode_3A_0T_0R (
207 struct acpi_walk_state *walk_state);
208
209acpi_status
210acpi_ex_opcode_3A_1T_1R (
211 struct acpi_walk_state *walk_state);
212
213acpi_status
214acpi_ex_opcode_6A_0T_1R (
215 struct acpi_walk_state *walk_state);
216
217u8
218acpi_ex_do_match (
219 u32 match_op,
220 union acpi_operand_object *package_obj,
221 union acpi_operand_object *match_obj);
222
223acpi_status
224acpi_ex_get_object_reference (
225 union acpi_operand_object *obj_desc,
226 union acpi_operand_object **return_desc,
227 struct acpi_walk_state *walk_state);
228
229acpi_status
230acpi_ex_resolve_multiple (
231 struct acpi_walk_state *walk_state,
232 union acpi_operand_object *operand,
233 acpi_object_type *return_type,
234 union acpi_operand_object **return_desc);
235
236acpi_status
237acpi_ex_concat_template (
238 union acpi_operand_object *obj_desc,
239 union acpi_operand_object *obj_desc2,
240 union acpi_operand_object **actual_return_desc,
241 struct acpi_walk_state *walk_state);
242
243acpi_status
244acpi_ex_do_concatenate (
245 union acpi_operand_object *obj_desc,
246 union acpi_operand_object *obj_desc2,
247 union acpi_operand_object **actual_return_desc,
248 struct acpi_walk_state *walk_state);
249
250acpi_status
251acpi_ex_do_logical_numeric_op (
252 u16 opcode,
253 acpi_integer integer0,
254 acpi_integer integer1,
255 u8 *logical_result);
256
257acpi_status
258acpi_ex_do_logical_op (
259 u16 opcode,
260 union acpi_operand_object *operand0,
261 union acpi_operand_object *operand1,
262 u8 *logical_result);
263
264acpi_integer
265acpi_ex_do_math_op (
266 u16 opcode,
267 acpi_integer operand0,
268 acpi_integer operand1);
269
270acpi_status
271acpi_ex_create_mutex (
272 struct acpi_walk_state *walk_state);
273
274acpi_status
275acpi_ex_create_processor (
276 struct acpi_walk_state *walk_state);
277
278acpi_status
279acpi_ex_create_power_resource (
280 struct acpi_walk_state *walk_state);
281
282acpi_status
283acpi_ex_create_region (
284 u8 *aml_start,
285 u32 aml_length,
286 u8 region_space,
287 struct acpi_walk_state *walk_state);
288
289acpi_status
290acpi_ex_create_table_region (
291 struct acpi_walk_state *walk_state);
292
293acpi_status
294acpi_ex_create_event (
295 struct acpi_walk_state *walk_state);
296
297acpi_status
298acpi_ex_create_alias (
299 struct acpi_walk_state *walk_state);
300
301acpi_status
302acpi_ex_create_method (
303 u8 *aml_start,
304 u32 aml_length,
305 struct acpi_walk_state *walk_state);
306
307
308/*
309 * exconfig - dynamic table load/unload
310 */
311
312acpi_status
313acpi_ex_add_table (
314 struct acpi_table_header *table,
315 struct acpi_namespace_node *parent_node,
316 union acpi_operand_object **ddb_handle);
317
318acpi_status
319acpi_ex_load_op (
320 union acpi_operand_object *obj_desc,
321 union acpi_operand_object *target,
322 struct acpi_walk_state *walk_state);
323
324acpi_status
325acpi_ex_load_table_op (
326 struct acpi_walk_state *walk_state,
327 union acpi_operand_object **return_desc);
328
329acpi_status
330acpi_ex_unload_table (
331 union acpi_operand_object *ddb_handle);
332
333
334/*
335 * exmutex - mutex support
336 */
337
338acpi_status
339acpi_ex_acquire_mutex (
340 union acpi_operand_object *time_desc,
341 union acpi_operand_object *obj_desc,
342 struct acpi_walk_state *walk_state);
343
344acpi_status
345acpi_ex_release_mutex (
346 union acpi_operand_object *obj_desc,
347 struct acpi_walk_state *walk_state);
348
349void
350acpi_ex_release_all_mutexes (
351 struct acpi_thread_state *thread);
352
353void
354acpi_ex_unlink_mutex (
355 union acpi_operand_object *obj_desc);
356
357void
358acpi_ex_link_mutex (
359 union acpi_operand_object *obj_desc,
360 struct acpi_thread_state *thread);
361
362/*
363 * exprep - ACPI AML (p-code) execution - prep utilities
364 */
365
366acpi_status
367acpi_ex_prep_common_field_object (
368 union acpi_operand_object *obj_desc,
369 u8 field_flags,
370 u8 field_attribute,
371 u32 field_bit_position,
372 u32 field_bit_length);
373
374acpi_status
375acpi_ex_prep_field_value (
376 struct acpi_create_field_info *info);
377
378/*
379 * exsystem - Interface to OS services
380 */
381
382acpi_status
383acpi_ex_system_do_notify_op (
384 union acpi_operand_object *value,
385 union acpi_operand_object *obj_desc);
386
387acpi_status
388acpi_ex_system_do_suspend(
389 acpi_integer time);
390
391acpi_status
392acpi_ex_system_do_stall (
393 u32 time);
394
395acpi_status
396acpi_ex_system_acquire_mutex(
397 union acpi_operand_object *time,
398 union acpi_operand_object *obj_desc);
399
400acpi_status
401acpi_ex_system_release_mutex(
402 union acpi_operand_object *obj_desc);
403
404acpi_status
405acpi_ex_system_signal_event(
406 union acpi_operand_object *obj_desc);
407
408acpi_status
409acpi_ex_system_wait_event(
410 union acpi_operand_object *time,
411 union acpi_operand_object *obj_desc);
412
413acpi_status
414acpi_ex_system_reset_event(
415 union acpi_operand_object *obj_desc);
416
417acpi_status
418acpi_ex_system_wait_semaphore (
419 acpi_handle semaphore,
420 u16 timeout);
421
422
423/*
424 * exmonadic - ACPI AML (p-code) execution, monadic operators
425 */
426
427acpi_status
428acpi_ex_opcode_0A_0T_1R (
429 struct acpi_walk_state *walk_state);
430
431acpi_status
432acpi_ex_opcode_1A_0T_0R (
433 struct acpi_walk_state *walk_state);
434
435acpi_status
436acpi_ex_opcode_1A_0T_1R (
437 struct acpi_walk_state *walk_state);
438
439acpi_status
440acpi_ex_opcode_1A_1T_1R (
441 struct acpi_walk_state *walk_state);
442
443acpi_status
444acpi_ex_opcode_1A_1T_0R (
445 struct acpi_walk_state *walk_state);
446
447/*
448 * exdyadic - ACPI AML (p-code) execution, dyadic operators
449 */
450
451acpi_status
452acpi_ex_opcode_2A_0T_0R (
453 struct acpi_walk_state *walk_state);
454
455acpi_status
456acpi_ex_opcode_2A_0T_1R (
457 struct acpi_walk_state *walk_state);
458
459acpi_status
460acpi_ex_opcode_2A_1T_1R (
461 struct acpi_walk_state *walk_state);
462
463acpi_status
464acpi_ex_opcode_2A_2T_1R (
465 struct acpi_walk_state *walk_state);
466
467
468/*
469 * exresolv - Object resolution and get value functions
470 */
471
472acpi_status
473acpi_ex_resolve_to_value (
474 union acpi_operand_object **stack_ptr,
475 struct acpi_walk_state *walk_state);
476
477acpi_status
478acpi_ex_resolve_node_to_value (
479 struct acpi_namespace_node **stack_ptr,
480 struct acpi_walk_state *walk_state);
481
482acpi_status
483acpi_ex_resolve_object_to_value (
484 union acpi_operand_object **stack_ptr,
485 struct acpi_walk_state *walk_state);
486
487
488/*
489 * exdump - Interpreter debug output routines
490 */
491
492void
493acpi_ex_dump_operand (
494 union acpi_operand_object *obj_desc,
495 u32 depth);
496
497void
498acpi_ex_dump_operands (
499 union acpi_operand_object **operands,
500 acpi_interpreter_mode interpreter_mode,
501 char *ident,
502 u32 num_levels,
503 char *note,
504 char *module_name,
505 u32 line_number);
506
507#ifdef ACPI_FUTURE_USAGE
508void
509acpi_ex_dump_object_descriptor (
510 union acpi_operand_object *object,
511 u32 flags);
512
513void
514acpi_ex_dump_node (
515 struct acpi_namespace_node *node,
516 u32 flags);
517
518void
519acpi_ex_out_string (
520 char *title,
521 char *value);
522
523void
524acpi_ex_out_pointer (
525 char *title,
526 void *value);
527
528void
529acpi_ex_out_integer (
530 char *title,
531 u32 value);
532
533void
534acpi_ex_out_address (
535 char *title,
536 acpi_physical_address value);
537#endif /* ACPI_FUTURE_USAGE */
538
539/*
540 * exnames - interpreter/scanner name load/execute
541 */
542
543char *
544acpi_ex_allocate_name_string (
545 u32 prefix_count,
546 u32 num_name_segs);
547
548u32
549acpi_ex_good_char (
550 u32 character);
551
552acpi_status
553acpi_ex_name_segment (
554 u8 **in_aml_address,
555 char *name_string);
556
557acpi_status
558acpi_ex_get_name_string (
559 acpi_object_type data_type,
560 u8 *in_aml_address,
561 char **out_name_string,
562 u32 *out_name_length);
563
564acpi_status
565acpi_ex_do_name (
566 acpi_object_type data_type,
567 acpi_interpreter_mode load_exec_mode);
568
569
570/*
571 * exstore - Object store support
572 */
573
574acpi_status
575acpi_ex_store (
576 union acpi_operand_object *val_desc,
577 union acpi_operand_object *dest_desc,
578 struct acpi_walk_state *walk_state);
579
580acpi_status
581acpi_ex_store_object_to_index (
582 union acpi_operand_object *val_desc,
583 union acpi_operand_object *dest_desc,
584 struct acpi_walk_state *walk_state);
585
586acpi_status
587acpi_ex_store_object_to_node (
588 union acpi_operand_object *source_desc,
589 struct acpi_namespace_node *node,
590 struct acpi_walk_state *walk_state,
591 u8 implicit_conversion);
592
593#define ACPI_IMPLICIT_CONVERSION TRUE
594#define ACPI_NO_IMPLICIT_CONVERSION FALSE
595
596/*
597 * exstoren
598 */
599
600acpi_status
601acpi_ex_resolve_object (
602 union acpi_operand_object **source_desc_ptr,
603 acpi_object_type target_type,
604 struct acpi_walk_state *walk_state);
605
606acpi_status
607acpi_ex_store_object_to_object (
608 union acpi_operand_object *source_desc,
609 union acpi_operand_object *dest_desc,
610 union acpi_operand_object **new_desc,
611 struct acpi_walk_state *walk_state);
612
613
614/*
615 * excopy - object copy
616 */
617
618acpi_status
619acpi_ex_store_buffer_to_buffer (
620 union acpi_operand_object *source_desc,
621 union acpi_operand_object *target_desc);
622
623acpi_status
624acpi_ex_store_string_to_string (
625 union acpi_operand_object *source_desc,
626 union acpi_operand_object *target_desc);
627
628acpi_status
629acpi_ex_copy_integer_to_index_field (
630 union acpi_operand_object *source_desc,
631 union acpi_operand_object *target_desc);
632
633acpi_status
634acpi_ex_copy_integer_to_bank_field (
635 union acpi_operand_object *source_desc,
636 union acpi_operand_object *target_desc);
637
638acpi_status
639acpi_ex_copy_data_to_named_field (
640 union acpi_operand_object *source_desc,
641 struct acpi_namespace_node *node);
642
643acpi_status
644acpi_ex_copy_integer_to_buffer_field (
645 union acpi_operand_object *source_desc,
646 union acpi_operand_object *target_desc);
647
648/*
649 * exutils - interpreter/scanner utilities
650 */
651
652acpi_status
653acpi_ex_enter_interpreter (
654 void);
655
656void
657acpi_ex_exit_interpreter (
658 void);
659
660void
661acpi_ex_truncate_for32bit_table (
662 union acpi_operand_object *obj_desc);
663
664u8
665acpi_ex_acquire_global_lock (
666 u32 rule);
667
668void
669acpi_ex_release_global_lock (
670 u8 locked);
671
672u32
673acpi_ex_digits_needed (
674 acpi_integer value,
675 u32 base);
676
677void
678acpi_ex_eisa_id_to_string (
679 u32 numeric_id,
680 char *out_string);
681
682void
683acpi_ex_unsigned_integer_to_string (
684 acpi_integer value,
685 char *out_string);
686
687
688/*
689 * exregion - default op_region handlers
690 */
691
692acpi_status
693acpi_ex_system_memory_space_handler (
694 u32 function,
695 acpi_physical_address address,
696 u32 bit_width,
697 acpi_integer *value,
698 void *handler_context,
699 void *region_context);
700
701acpi_status
702acpi_ex_system_io_space_handler (
703 u32 function,
704 acpi_physical_address address,
705 u32 bit_width,
706 acpi_integer *value,
707 void *handler_context,
708 void *region_context);
709
710acpi_status
711acpi_ex_pci_config_space_handler (
712 u32 function,
713 acpi_physical_address address,
714 u32 bit_width,
715 acpi_integer *value,
716 void *handler_context,
717 void *region_context);
718
719acpi_status
720acpi_ex_cmos_space_handler (
721 u32 function,
722 acpi_physical_address address,
723 u32 bit_width,
724 acpi_integer *value,
725 void *handler_context,
726 void *region_context);
727
728acpi_status
729acpi_ex_pci_bar_space_handler (
730 u32 function,
731 acpi_physical_address address,
732 u32 bit_width,
733 acpi_integer *value,
734 void *handler_context,
735 void *region_context);
736
737acpi_status
738acpi_ex_embedded_controller_space_handler (
739 u32 function,
740 acpi_physical_address address,
741 u32 bit_width,
742 acpi_integer *value,
743 void *handler_context,
744 void *region_context);
745
746acpi_status
747acpi_ex_sm_bus_space_handler (
748 u32 function,
749 acpi_physical_address address,
750 u32 bit_width,
751 acpi_integer *value,
752 void *handler_context,
753 void *region_context);
754
755
756acpi_status
757acpi_ex_data_table_space_handler (
758 u32 function,
759 acpi_physical_address address,
760 u32 bit_width,
761 acpi_integer *value,
762 void *handler_context,
763 void *region_context);
764
765#endif /* __INTERP_H__ */
diff --git a/include/acpi/aclocal.h b/include/acpi/aclocal.h
new file mode 100644
index 00000000000..01d3b4bc0c8
--- /dev/null
+++ b/include/acpi/aclocal.h
@@ -0,0 +1,994 @@
1/******************************************************************************
2 *
3 * Name: aclocal.h - Internal data types used across the ACPI subsystem
4 *
5 *****************************************************************************/
6
7/*
8 * Copyright (C) 2000 - 2005, R. Byron Moore
9 * All rights reserved.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions, and the following disclaimer,
16 * without modification.
17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18 * substantially similar to the "NO WARRANTY" disclaimer below
19 * ("Disclaimer") and any redistribution must be conditioned upon
20 * including a substantially similar Disclaimer requirement for further
21 * binary redistribution.
22 * 3. Neither the names of the above-listed copyright holders nor the names
23 * of any contributors may be used to endorse or promote products derived
24 * from this software without specific prior written permission.
25 *
26 * Alternatively, this software may be distributed under the terms of the
27 * GNU General Public License ("GPL") version 2 as published by the Free
28 * Software Foundation.
29 *
30 * NO WARRANTY
31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41 * POSSIBILITY OF SUCH DAMAGES.
42 */
43
44#ifndef __ACLOCAL_H__
45#define __ACLOCAL_H__
46
47
48#define ACPI_WAIT_FOREVER 0xFFFF /* u16, as per ACPI spec */
49
50typedef void * acpi_mutex;
51typedef u32 acpi_mutex_handle;
52
53
54/* Total number of aml opcodes defined */
55
56#define AML_NUM_OPCODES 0x7F
57
58
59/*****************************************************************************
60 *
61 * Mutex typedefs and structs
62 *
63 ****************************************************************************/
64
65
66/*
67 * Predefined handles for the mutex objects used within the subsystem
68 * All mutex objects are automatically created by acpi_ut_mutex_initialize.
69 *
70 * The acquire/release ordering protocol is implied via this list. Mutexes
71 * with a lower value must be acquired before mutexes with a higher value.
72 *
73 * NOTE: any changes here must be reflected in the acpi_gbl_mutex_names table also!
74 */
75
76#define ACPI_MTX_EXECUTE 0
77#define ACPI_MTX_INTERPRETER 1
78#define ACPI_MTX_PARSER 2
79#define ACPI_MTX_DISPATCHER 3
80#define ACPI_MTX_TABLES 4
81#define ACPI_MTX_OP_REGIONS 5
82#define ACPI_MTX_NAMESPACE 6
83#define ACPI_MTX_EVENTS 7
84#define ACPI_MTX_HARDWARE 8
85#define ACPI_MTX_CACHES 9
86#define ACPI_MTX_MEMORY 10
87#define ACPI_MTX_DEBUG_CMD_COMPLETE 11
88#define ACPI_MTX_DEBUG_CMD_READY 12
89
90#define MAX_MUTEX 12
91#define NUM_MUTEX MAX_MUTEX+1
92
93
94#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
95#ifdef DEFINE_ACPI_GLOBALS
96
97/* Names for the mutexes used in the subsystem */
98
99static char *acpi_gbl_mutex_names[] =
100{
101 "ACPI_MTX_Execute",
102 "ACPI_MTX_Interpreter",
103 "ACPI_MTX_Parser",
104 "ACPI_MTX_Dispatcher",
105 "ACPI_MTX_Tables",
106 "ACPI_MTX_op_regions",
107 "ACPI_MTX_Namespace",
108 "ACPI_MTX_Events",
109 "ACPI_MTX_Hardware",
110 "ACPI_MTX_Caches",
111 "ACPI_MTX_Memory",
112 "ACPI_MTX_debug_cmd_complete",
113 "ACPI_MTX_debug_cmd_ready",
114};
115
116#endif
117#endif
118
119
120/* Table for the global mutexes */
121
122struct acpi_mutex_info
123{
124 acpi_mutex mutex;
125 u32 use_count;
126 u32 owner_id;
127};
128
129/* This owner ID means that the mutex is not in use (unlocked) */
130
131#define ACPI_MUTEX_NOT_ACQUIRED (u32) (-1)
132
133
134/* Lock flag parameter for various interfaces */
135
136#define ACPI_MTX_DO_NOT_LOCK 0
137#define ACPI_MTX_LOCK 1
138
139
140typedef u16 acpi_owner_id;
141#define ACPI_OWNER_TYPE_TABLE 0x0
142#define ACPI_OWNER_TYPE_METHOD 0x1
143#define ACPI_FIRST_METHOD_ID 0x0001
144#define ACPI_FIRST_TABLE_ID 0xF000
145
146
147/* Field access granularities */
148
149#define ACPI_FIELD_BYTE_GRANULARITY 1
150#define ACPI_FIELD_WORD_GRANULARITY 2
151#define ACPI_FIELD_DWORD_GRANULARITY 4
152#define ACPI_FIELD_QWORD_GRANULARITY 8
153
154/*****************************************************************************
155 *
156 * Namespace typedefs and structs
157 *
158 ****************************************************************************/
159
160
161/* Operational modes of the AML interpreter/scanner */
162
163typedef enum
164{
165 ACPI_IMODE_LOAD_PASS1 = 0x01,
166 ACPI_IMODE_LOAD_PASS2 = 0x02,
167 ACPI_IMODE_EXECUTE = 0x0E
168
169} acpi_interpreter_mode;
170
171
172/*
173 * The Node describes a named object that appears in the AML
174 * An acpi_node is used to store Nodes.
175 *
176 * data_type is used to differentiate between internal descriptors, and MUST
177 * be the first byte in this structure.
178 */
179
180union acpi_name_union
181{
182 u32 integer;
183 char ascii[4];
184};
185
186struct acpi_namespace_node
187{
188 u8 descriptor; /* Used to differentiate object descriptor types */
189 u8 type; /* Type associated with this name */
190 u16 owner_id;
191 union acpi_name_union name; /* ACPI Name, always 4 chars per ACPI spec */
192 union acpi_operand_object *object; /* Pointer to attached ACPI object (optional) */
193 struct acpi_namespace_node *child; /* First child */
194 struct acpi_namespace_node *peer; /* Next peer*/
195 u16 reference_count; /* Current count of references and children */
196 u8 flags;
197};
198
199
200#define ACPI_ENTRY_NOT_FOUND NULL
201
202
203/* Node flags */
204
205#define ANOBJ_RESERVED 0x01
206#define ANOBJ_END_OF_PEER_LIST 0x02
207#define ANOBJ_DATA_WIDTH_32 0x04 /* Parent table is 64-bits */
208#define ANOBJ_METHOD_ARG 0x08
209#define ANOBJ_METHOD_LOCAL 0x10
210#define ANOBJ_METHOD_NO_RETVAL 0x20
211#define ANOBJ_METHOD_SOME_NO_RETVAL 0x40
212#define ANOBJ_IS_BIT_OFFSET 0x80
213
214/*
215 * ACPI Table Descriptor. One per ACPI table
216 */
217struct acpi_table_desc
218{
219 struct acpi_table_desc *prev;
220 struct acpi_table_desc *next;
221 struct acpi_table_desc *installed_desc;
222 struct acpi_table_header *pointer;
223 u8 *aml_start;
224 u64 physical_address;
225 u32 aml_length;
226 acpi_size length;
227 acpi_owner_id table_id;
228 u8 type;
229 u8 allocation;
230 u8 loaded_into_namespace;
231};
232
233struct acpi_table_list
234{
235 struct acpi_table_desc *next;
236 u32 count;
237};
238
239
240struct acpi_find_context
241{
242 char *search_for;
243 acpi_handle *list;
244 u32 *count;
245};
246
247
248struct acpi_ns_search_data
249{
250 struct acpi_namespace_node *node;
251};
252
253
254/*
255 * Predefined Namespace items
256 */
257struct acpi_predefined_names
258{
259 char *name;
260 u8 type;
261 char *val;
262};
263
264
265/* Object types used during package copies */
266
267
268#define ACPI_COPY_TYPE_SIMPLE 0
269#define ACPI_COPY_TYPE_PACKAGE 1
270
271/* Info structure used to convert external<->internal namestrings */
272
273struct acpi_namestring_info
274{
275 char *external_name;
276 char *next_external_char;
277 char *internal_name;
278 u32 length;
279 u32 num_segments;
280 u32 num_carats;
281 u8 fully_qualified;
282};
283
284
285/* Field creation info */
286
287struct acpi_create_field_info
288{
289 struct acpi_namespace_node *region_node;
290 struct acpi_namespace_node *field_node;
291 struct acpi_namespace_node *register_node;
292 struct acpi_namespace_node *data_register_node;
293 u32 bank_value;
294 u32 field_bit_position;
295 u32 field_bit_length;
296 u8 field_flags;
297 u8 attribute;
298 u8 field_type;
299};
300
301
302/*****************************************************************************
303 *
304 * Event typedefs and structs
305 *
306 ****************************************************************************/
307
308/* Dispatch info for each GPE -- either a method or handler, cannot be both */
309
310struct acpi_handler_info
311{
312 acpi_event_handler address; /* Address of handler, if any */
313 void *context; /* Context to be passed to handler */
314 struct acpi_namespace_node *method_node; /* Method node for this GPE level (saved) */
315};
316
317union acpi_gpe_dispatch_info
318{
319 struct acpi_namespace_node *method_node; /* Method node for this GPE level */
320 struct acpi_handler_info *handler;
321};
322
323/*
324 * Information about a GPE, one per each GPE in an array.
325 * NOTE: Important to keep this struct as small as possible.
326 */
327struct acpi_gpe_event_info
328{
329 union acpi_gpe_dispatch_info dispatch; /* Either Method or Handler */
330 struct acpi_gpe_register_info *register_info; /* Backpointer to register info */
331 u8 flags; /* Misc info about this GPE */
332 u8 register_bit; /* This GPE bit within the register */
333};
334
335/* Information about a GPE register pair, one per each status/enable pair in an array */
336
337struct acpi_gpe_register_info
338{
339 struct acpi_generic_address status_address; /* Address of status reg */
340 struct acpi_generic_address enable_address; /* Address of enable reg */
341 u8 enable_for_wake; /* GPEs to keep enabled when sleeping */
342 u8 enable_for_run; /* GPEs to keep enabled when running */
343 u8 base_gpe_number; /* Base GPE number for this register */
344};
345
346/*
347 * Information about a GPE register block, one per each installed block --
348 * GPE0, GPE1, and one per each installed GPE Block Device.
349 */
350struct acpi_gpe_block_info
351{
352 struct acpi_namespace_node *node;
353 struct acpi_gpe_block_info *previous;
354 struct acpi_gpe_block_info *next;
355 struct acpi_gpe_xrupt_info *xrupt_block; /* Backpointer to interrupt block */
356 struct acpi_gpe_register_info *register_info; /* One per GPE register pair */
357 struct acpi_gpe_event_info *event_info; /* One for each GPE */
358 struct acpi_generic_address block_address; /* Base address of the block */
359 u32 register_count; /* Number of register pairs in block */
360 u8 block_base_number;/* Base GPE number for this block */
361};
362
363/* Information about GPE interrupt handlers, one per each interrupt level used for GPEs */
364
365struct acpi_gpe_xrupt_info
366{
367 struct acpi_gpe_xrupt_info *previous;
368 struct acpi_gpe_xrupt_info *next;
369 struct acpi_gpe_block_info *gpe_block_list_head; /* List of GPE blocks for this xrupt */
370 u32 interrupt_level; /* System interrupt level */
371};
372
373
374struct acpi_gpe_walk_info
375{
376 struct acpi_namespace_node *gpe_device;
377 struct acpi_gpe_block_info *gpe_block;
378};
379
380
381typedef acpi_status (*ACPI_GPE_CALLBACK) (
382 struct acpi_gpe_xrupt_info *gpe_xrupt_info,
383 struct acpi_gpe_block_info *gpe_block);
384
385
386/* Information about each particular fixed event */
387
388struct acpi_fixed_event_handler
389{
390 acpi_event_handler handler; /* Address of handler. */
391 void *context; /* Context to be passed to handler */
392};
393
394struct acpi_fixed_event_info
395{
396 u8 status_register_id;
397 u8 enable_register_id;
398 u16 status_bit_mask;
399 u16 enable_bit_mask;
400};
401
402/* Information used during field processing */
403
404struct acpi_field_info
405{
406 u8 skip_field;
407 u8 field_flag;
408 u32 pkg_length;
409};
410
411
412/*****************************************************************************
413 *
414 * Generic "state" object for stacks
415 *
416 ****************************************************************************/
417
418
419#define ACPI_CONTROL_NORMAL 0xC0
420#define ACPI_CONTROL_CONDITIONAL_EXECUTING 0xC1
421#define ACPI_CONTROL_PREDICATE_EXECUTING 0xC2
422#define ACPI_CONTROL_PREDICATE_FALSE 0xC3
423#define ACPI_CONTROL_PREDICATE_TRUE 0xC4
424
425
426/* Forward declarations */
427struct acpi_walk_state ;
428struct acpi_obj_mutex;
429union acpi_parse_object ;
430
431
432#define ACPI_STATE_COMMON /* Two 32-bit fields and a pointer */\
433 u8 data_type; /* To differentiate various internal objs */\
434 u8 flags; \
435 u16 value; \
436 u16 state; \
437 u16 reserved; \
438 void *next; \
439
440struct acpi_common_state
441{
442 ACPI_STATE_COMMON
443};
444
445
446/*
447 * Update state - used to traverse complex objects such as packages
448 */
449struct acpi_update_state
450{
451 ACPI_STATE_COMMON
452 union acpi_operand_object *object;
453};
454
455
456/*
457 * Pkg state - used to traverse nested package structures
458 */
459struct acpi_pkg_state
460{
461 ACPI_STATE_COMMON
462 union acpi_operand_object *source_object;
463 union acpi_operand_object *dest_object;
464 struct acpi_walk_state *walk_state;
465 void *this_target_obj;
466 u32 num_packages;
467 u16 index;
468};
469
470
471/*
472 * Control state - one per if/else and while constructs.
473 * Allows nesting of these constructs
474 */
475struct acpi_control_state
476{
477 ACPI_STATE_COMMON
478 union acpi_parse_object *predicate_op;
479 u8 *aml_predicate_start; /* Start of if/while predicate */
480 u8 *package_end; /* End of if/while block */
481 u16 opcode;
482};
483
484
485/*
486 * Scope state - current scope during namespace lookups
487 */
488struct acpi_scope_state
489{
490 ACPI_STATE_COMMON
491 struct acpi_namespace_node *node;
492};
493
494
495struct acpi_pscope_state
496{
497 ACPI_STATE_COMMON
498 union acpi_parse_object *op; /* Current op being parsed */
499 u8 *arg_end; /* Current argument end */
500 u8 *pkg_end; /* Current package end */
501 u32 arg_list; /* Next argument to parse */
502 u32 arg_count; /* Number of fixed arguments */
503};
504
505
506/*
507 * Thread state - one per thread across multiple walk states. Multiple walk
508 * states are created when there are nested control methods executing.
509 */
510struct acpi_thread_state
511{
512 ACPI_STATE_COMMON
513 struct acpi_walk_state *walk_state_list; /* Head of list of walk_states for this thread */
514 union acpi_operand_object *acquired_mutex_list; /* List of all currently acquired mutexes */
515 u32 thread_id; /* Running thread ID */
516 u8 current_sync_level; /* Mutex Sync (nested acquire) level */
517};
518
519
520/*
521 * Result values - used to accumulate the results of nested
522 * AML arguments
523 */
524struct acpi_result_values
525{
526 ACPI_STATE_COMMON
527 union acpi_operand_object *obj_desc [ACPI_OBJ_NUM_OPERANDS];
528 u8 num_results;
529 u8 last_insert;
530};
531
532
533typedef
534acpi_status (*acpi_parse_downwards) (
535 struct acpi_walk_state *walk_state,
536 union acpi_parse_object **out_op);
537
538typedef
539acpi_status (*acpi_parse_upwards) (
540 struct acpi_walk_state *walk_state);
541
542
543/*
544 * Notify info - used to pass info to the deferred notify
545 * handler/dispatcher.
546 */
547struct acpi_notify_info
548{
549 ACPI_STATE_COMMON
550 struct acpi_namespace_node *node;
551 union acpi_operand_object *handler_obj;
552};
553
554
555/* Generic state is union of structs above */
556
557union acpi_generic_state
558{
559 struct acpi_common_state common;
560 struct acpi_control_state control;
561 struct acpi_update_state update;
562 struct acpi_scope_state scope;
563 struct acpi_pscope_state parse_scope;
564 struct acpi_pkg_state pkg;
565 struct acpi_thread_state thread;
566 struct acpi_result_values results;
567 struct acpi_notify_info notify;
568};
569
570
571/*****************************************************************************
572 *
573 * Interpreter typedefs and structs
574 *
575 ****************************************************************************/
576
577typedef
578acpi_status (*ACPI_EXECUTE_OP) (
579 struct acpi_walk_state *walk_state);
580
581
582/*****************************************************************************
583 *
584 * Parser typedefs and structs
585 *
586 ****************************************************************************/
587
588/*
589 * AML opcode, name, and argument layout
590 */
591struct acpi_opcode_info
592{
593#if defined(ACPI_DISASSEMBLER) || defined(ACPI_DEBUG_OUTPUT)
594 char *name; /* Opcode name (disassembler/debug only) */
595#endif
596 u32 parse_args; /* Grammar/Parse time arguments */
597 u32 runtime_args; /* Interpret time arguments */
598 u32 flags; /* Misc flags */
599 u8 object_type; /* Corresponding internal object type */
600 u8 class; /* Opcode class */
601 u8 type; /* Opcode type */
602};
603
604
605union acpi_parse_value
606{
607 acpi_integer integer; /* Integer constant (Up to 64 bits) */
608 struct uint64_struct integer64; /* Structure overlay for 2 32-bit Dwords */
609 u32 size; /* bytelist or field size */
610 char *string; /* NULL terminated string */
611 u8 *buffer; /* buffer or string */
612 char *name; /* NULL terminated string */
613 union acpi_parse_object *arg; /* arguments and contained ops */
614};
615
616
617#define ACPI_PARSE_COMMON \
618 u8 data_type; /* To differentiate various internal objs */\
619 u8 flags; /* Type of Op */\
620 u16 aml_opcode; /* AML opcode */\
621 u32 aml_offset; /* Offset of declaration in AML */\
622 union acpi_parse_object *parent; /* Parent op */\
623 union acpi_parse_object *next; /* Next op */\
624 ACPI_DISASM_ONLY_MEMBERS (\
625 u8 disasm_flags; /* Used during AML disassembly */\
626 u8 disasm_opcode; /* Subtype used for disassembly */\
627 char aml_op_name[16]) /* Op name (debug only) */\
628 /* NON-DEBUG members below: */\
629 struct acpi_namespace_node *node; /* For use by interpreter */\
630 union acpi_parse_value value; /* Value or args associated with the opcode */\
631
632
633#define ACPI_DASM_BUFFER 0x00
634#define ACPI_DASM_RESOURCE 0x01
635#define ACPI_DASM_STRING 0x02
636#define ACPI_DASM_UNICODE 0x03
637#define ACPI_DASM_EISAID 0x04
638#define ACPI_DASM_MATCHOP 0x05
639
640/*
641 * generic operation (for example: If, While, Store)
642 */
643struct acpi_parse_obj_common
644{
645 ACPI_PARSE_COMMON
646};
647
648
649/*
650 * Extended Op for named ops (Scope, Method, etc.), deferred ops (Methods and op_regions),
651 * and bytelists.
652 */
653struct acpi_parse_obj_named
654{
655 ACPI_PARSE_COMMON
656 u8 *path;
657 u8 *data; /* AML body or bytelist data */
658 u32 length; /* AML length */
659 u32 name; /* 4-byte name or zero if no name */
660};
661
662
663/* The parse node is the fundamental element of the parse tree */
664
665struct acpi_parse_obj_asl
666{
667 ACPI_PARSE_COMMON
668 union acpi_parse_object *child;
669 union acpi_parse_object *parent_method;
670 char *filename;
671 char *external_name;
672 char *namepath;
673 char name_seg[4];
674 u32 extra_value;
675 u32 column;
676 u32 line_number;
677 u32 logical_line_number;
678 u32 logical_byte_offset;
679 u32 end_line;
680 u32 end_logical_line;
681 u32 acpi_btype;
682 u32 aml_length;
683 u32 aml_subtree_length;
684 u32 final_aml_length;
685 u32 final_aml_offset;
686 u32 compile_flags;
687 u16 parse_opcode;
688 u8 aml_opcode_length;
689 u8 aml_pkg_len_bytes;
690 u8 extra;
691 char parse_op_name[12];
692};
693
694
695union acpi_parse_object
696{
697 struct acpi_parse_obj_common common;
698 struct acpi_parse_obj_named named;
699 struct acpi_parse_obj_asl asl;
700};
701
702
703/*
704 * Parse state - one state per parser invocation and each control
705 * method.
706 */
707struct acpi_parse_state
708{
709 u32 aml_size;
710 u8 *aml_start; /* First AML byte */
711 u8 *aml; /* Next AML byte */
712 u8 *aml_end; /* (last + 1) AML byte */
713 u8 *pkg_start; /* Current package begin */
714 u8 *pkg_end; /* Current package end */
715 union acpi_parse_object *start_op; /* Root of parse tree */
716 struct acpi_namespace_node *start_node;
717 union acpi_generic_state *scope; /* Current scope */
718 union acpi_parse_object *start_scope;
719};
720
721
722/* Parse object flags */
723
724#define ACPI_PARSEOP_GENERIC 0x01
725#define ACPI_PARSEOP_NAMED 0x02
726#define ACPI_PARSEOP_DEFERRED 0x04
727#define ACPI_PARSEOP_BYTELIST 0x08
728#define ACPI_PARSEOP_IN_CACHE 0x80
729
730/* Parse object disasm_flags */
731
732#define ACPI_PARSEOP_IGNORE 0x01
733#define ACPI_PARSEOP_PARAMLIST 0x02
734#define ACPI_PARSEOP_EMPTY_TERMLIST 0x04
735#define ACPI_PARSEOP_SPECIAL 0x10
736
737
738/*****************************************************************************
739 *
740 * Hardware (ACPI registers) and PNP
741 *
742 ****************************************************************************/
743
744#define PCI_ROOT_HID_STRING "PNP0A03"
745
746struct acpi_bit_register_info
747{
748 u8 parent_register;
749 u8 bit_position;
750 u16 access_bit_mask;
751};
752
753
754/*
755 * Register IDs
756 * These are the full ACPI registers
757 */
758#define ACPI_REGISTER_PM1_STATUS 0x01
759#define ACPI_REGISTER_PM1_ENABLE 0x02
760#define ACPI_REGISTER_PM1_CONTROL 0x03
761#define ACPI_REGISTER_PM1A_CONTROL 0x04
762#define ACPI_REGISTER_PM1B_CONTROL 0x05
763#define ACPI_REGISTER_PM2_CONTROL 0x06
764#define ACPI_REGISTER_PM_TIMER 0x07
765#define ACPI_REGISTER_PROCESSOR_BLOCK 0x08
766#define ACPI_REGISTER_SMI_COMMAND_BLOCK 0x09
767
768
769/* Masks used to access the bit_registers */
770
771#define ACPI_BITMASK_TIMER_STATUS 0x0001
772#define ACPI_BITMASK_BUS_MASTER_STATUS 0x0010
773#define ACPI_BITMASK_GLOBAL_LOCK_STATUS 0x0020
774#define ACPI_BITMASK_POWER_BUTTON_STATUS 0x0100
775#define ACPI_BITMASK_SLEEP_BUTTON_STATUS 0x0200
776#define ACPI_BITMASK_RT_CLOCK_STATUS 0x0400
777#define ACPI_BITMASK_PCIEXP_WAKE_STATUS 0x4000 /* ACPI 3.0 */
778#define ACPI_BITMASK_WAKE_STATUS 0x8000
779
780#define ACPI_BITMASK_ALL_FIXED_STATUS (ACPI_BITMASK_TIMER_STATUS | \
781 ACPI_BITMASK_BUS_MASTER_STATUS | \
782 ACPI_BITMASK_GLOBAL_LOCK_STATUS | \
783 ACPI_BITMASK_POWER_BUTTON_STATUS | \
784 ACPI_BITMASK_SLEEP_BUTTON_STATUS | \
785 ACPI_BITMASK_RT_CLOCK_STATUS | \
786 ACPI_BITMASK_WAKE_STATUS)
787
788#define ACPI_BITMASK_TIMER_ENABLE 0x0001
789#define ACPI_BITMASK_GLOBAL_LOCK_ENABLE 0x0020
790#define ACPI_BITMASK_POWER_BUTTON_ENABLE 0x0100
791#define ACPI_BITMASK_SLEEP_BUTTON_ENABLE 0x0200
792#define ACPI_BITMASK_RT_CLOCK_ENABLE 0x0400
793#define ACPI_BITMASK_PCIEXP_WAKE_DISABLE 0x4000 /* ACPI 3.0 */
794
795#define ACPI_BITMASK_SCI_ENABLE 0x0001
796#define ACPI_BITMASK_BUS_MASTER_RLD 0x0002
797#define ACPI_BITMASK_GLOBAL_LOCK_RELEASE 0x0004
798#define ACPI_BITMASK_SLEEP_TYPE_X 0x1C00
799#define ACPI_BITMASK_SLEEP_ENABLE 0x2000
800
801#define ACPI_BITMASK_ARB_DISABLE 0x0001
802
803
804/* Raw bit position of each bit_register */
805
806#define ACPI_BITPOSITION_TIMER_STATUS 0x00
807#define ACPI_BITPOSITION_BUS_MASTER_STATUS 0x04
808#define ACPI_BITPOSITION_GLOBAL_LOCK_STATUS 0x05
809#define ACPI_BITPOSITION_POWER_BUTTON_STATUS 0x08
810#define ACPI_BITPOSITION_SLEEP_BUTTON_STATUS 0x09
811#define ACPI_BITPOSITION_RT_CLOCK_STATUS 0x0A
812#define ACPI_BITPOSITION_PCIEXP_WAKE_STATUS 0x0E /* ACPI 3.0 */
813#define ACPI_BITPOSITION_WAKE_STATUS 0x0F
814
815#define ACPI_BITPOSITION_TIMER_ENABLE 0x00
816#define ACPI_BITPOSITION_GLOBAL_LOCK_ENABLE 0x05
817#define ACPI_BITPOSITION_POWER_BUTTON_ENABLE 0x08
818#define ACPI_BITPOSITION_SLEEP_BUTTON_ENABLE 0x09
819#define ACPI_BITPOSITION_RT_CLOCK_ENABLE 0x0A
820#define ACPI_BITPOSITION_PCIEXP_WAKE_DISABLE 0x0E /* ACPI 3.0 */
821
822#define ACPI_BITPOSITION_SCI_ENABLE 0x00
823#define ACPI_BITPOSITION_BUS_MASTER_RLD 0x01
824#define ACPI_BITPOSITION_GLOBAL_LOCK_RELEASE 0x02
825#define ACPI_BITPOSITION_SLEEP_TYPE_X 0x0A
826#define ACPI_BITPOSITION_SLEEP_ENABLE 0x0D
827
828#define ACPI_BITPOSITION_ARB_DISABLE 0x00
829
830
831/*****************************************************************************
832 *
833 * Resource descriptors
834 *
835 ****************************************************************************/
836
837
838/* resource_type values */
839
840#define ACPI_RESOURCE_TYPE_MEMORY_RANGE 0
841#define ACPI_RESOURCE_TYPE_IO_RANGE 1
842#define ACPI_RESOURCE_TYPE_BUS_NUMBER_RANGE 2
843
844/* Resource descriptor types and masks */
845
846#define ACPI_RDESC_TYPE_LARGE 0x80
847#define ACPI_RDESC_TYPE_SMALL 0x00
848
849#define ACPI_RDESC_TYPE_MASK 0x80
850#define ACPI_RDESC_SMALL_MASK 0x78 /* Only bits 6:3 contain the type */
851
852
853/*
854 * Small resource descriptor types
855 * Note: The 3 length bits (2:0) must be zero
856 */
857#define ACPI_RDESC_TYPE_IRQ_FORMAT 0x20
858#define ACPI_RDESC_TYPE_DMA_FORMAT 0x28
859#define ACPI_RDESC_TYPE_START_DEPENDENT 0x30
860#define ACPI_RDESC_TYPE_END_DEPENDENT 0x38
861#define ACPI_RDESC_TYPE_IO_PORT 0x40
862#define ACPI_RDESC_TYPE_FIXED_IO_PORT 0x48
863#define ACPI_RDESC_TYPE_SMALL_VENDOR 0x70
864#define ACPI_RDESC_TYPE_END_TAG 0x78
865
866/*
867 * Large resource descriptor types
868 */
869#define ACPI_RDESC_TYPE_MEMORY_24 0x81
870#define ACPI_RDESC_TYPE_GENERAL_REGISTER 0x82
871#define ACPI_RDESC_TYPE_LARGE_VENDOR 0x84
872#define ACPI_RDESC_TYPE_MEMORY_32 0x85
873#define ACPI_RDESC_TYPE_FIXED_MEMORY_32 0x86
874#define ACPI_RDESC_TYPE_DWORD_ADDRESS_SPACE 0x87
875#define ACPI_RDESC_TYPE_WORD_ADDRESS_SPACE 0x88
876#define ACPI_RDESC_TYPE_EXTENDED_XRUPT 0x89
877#define ACPI_RDESC_TYPE_QWORD_ADDRESS_SPACE 0x8A
878#define ACPI_RDESC_TYPE_EXTENDED_ADDRESS_SPACE 0x8B
879
880
881/*****************************************************************************
882 *
883 * Miscellaneous
884 *
885 ****************************************************************************/
886
887#define ACPI_ASCII_ZERO 0x30
888
889
890/*****************************************************************************
891 *
892 * Debugger
893 *
894 ****************************************************************************/
895
896struct acpi_db_method_info
897{
898 acpi_handle thread_gate;
899 char *name;
900 char **args;
901 u32 flags;
902 u32 num_loops;
903 char pathname[128];
904};
905
906struct acpi_integrity_info
907{
908 u32 nodes;
909 u32 objects;
910};
911
912
913#define ACPI_DB_REDIRECTABLE_OUTPUT 0x01
914#define ACPI_DB_CONSOLE_OUTPUT 0x02
915#define ACPI_DB_DUPLICATE_OUTPUT 0x03
916
917
918/*****************************************************************************
919 *
920 * Debug
921 *
922 ****************************************************************************/
923
924struct acpi_debug_print_info
925{
926 u32 component_id;
927 char *proc_name;
928 char *module_name;
929};
930
931
932/* Entry for a memory allocation (debug only) */
933
934#define ACPI_MEM_MALLOC 0
935#define ACPI_MEM_CALLOC 1
936#define ACPI_MAX_MODULE_NAME 16
937
938#define ACPI_COMMON_DEBUG_MEM_HEADER \
939 struct acpi_debug_mem_block *previous; \
940 struct acpi_debug_mem_block *next; \
941 u32 size; \
942 u32 component; \
943 u32 line; \
944 char module[ACPI_MAX_MODULE_NAME]; \
945 u8 alloc_type;
946
947struct acpi_debug_mem_header
948{
949 ACPI_COMMON_DEBUG_MEM_HEADER
950};
951
952struct acpi_debug_mem_block
953{
954 ACPI_COMMON_DEBUG_MEM_HEADER
955 u64 user_space;
956};
957
958
959#define ACPI_MEM_LIST_GLOBAL 0
960#define ACPI_MEM_LIST_NSNODE 1
961
962#define ACPI_MEM_LIST_FIRST_CACHE_LIST 2
963#define ACPI_MEM_LIST_STATE 2
964#define ACPI_MEM_LIST_PSNODE 3
965#define ACPI_MEM_LIST_PSNODE_EXT 4
966#define ACPI_MEM_LIST_OPERAND 5
967#define ACPI_MEM_LIST_WALK 6
968#define ACPI_MEM_LIST_MAX 6
969#define ACPI_NUM_MEM_LISTS 7
970
971
972struct acpi_memory_list
973{
974 void *list_head;
975 u16 link_offset;
976 u16 max_cache_depth;
977 u16 cache_depth;
978 u16 object_size;
979
980#ifdef ACPI_DBG_TRACK_ALLOCATIONS
981
982 /* Statistics for debug memory tracking only */
983
984 u32 total_allocated;
985 u32 total_freed;
986 u32 current_total_size;
987 u32 cache_requests;
988 u32 cache_hits;
989 char *list_name;
990#endif
991};
992
993
994#endif /* __ACLOCAL_H__ */
diff --git a/include/acpi/acmacros.h b/include/acpi/acmacros.h
new file mode 100644
index 00000000000..fcaced16b16
--- /dev/null
+++ b/include/acpi/acmacros.h
@@ -0,0 +1,678 @@
1/******************************************************************************
2 *
3 * Name: acmacros.h - C macros for the entire subsystem.
4 *
5 *****************************************************************************/
6
7/*
8 * Copyright (C) 2000 - 2005, R. Byron Moore
9 * All rights reserved.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions, and the following disclaimer,
16 * without modification.
17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18 * substantially similar to the "NO WARRANTY" disclaimer below
19 * ("Disclaimer") and any redistribution must be conditioned upon
20 * including a substantially similar Disclaimer requirement for further
21 * binary redistribution.
22 * 3. Neither the names of the above-listed copyright holders nor the names
23 * of any contributors may be used to endorse or promote products derived
24 * from this software without specific prior written permission.
25 *
26 * Alternatively, this software may be distributed under the terms of the
27 * GNU General Public License ("GPL") version 2 as published by the Free
28 * Software Foundation.
29 *
30 * NO WARRANTY
31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41 * POSSIBILITY OF SUCH DAMAGES.
42 */
43
44#ifndef __ACMACROS_H__
45#define __ACMACROS_H__
46
47
48/*
49 * Data manipulation macros
50 */
51#define ACPI_LOWORD(l) ((u16)(u32)(l))
52#define ACPI_HIWORD(l) ((u16)((((u32)(l)) >> 16) & 0xFFFF))
53#define ACPI_LOBYTE(l) ((u8)(u16)(l))
54#define ACPI_HIBYTE(l) ((u8)((((u16)(l)) >> 8) & 0xFF))
55
56#define ACPI_SET_BIT(target,bit) ((target) |= (bit))
57#define ACPI_CLEAR_BIT(target,bit) ((target) &= ~(bit))
58#define ACPI_MIN(a,b) (((a)<(b))?(a):(b))
59
60
61#if ACPI_MACHINE_WIDTH == 16
62
63/*
64 * For 16-bit addresses, we have to assume that the upper 32 bits
65 * are zero.
66 */
67#define ACPI_LODWORD(l) ((u32)(l))
68#define ACPI_HIDWORD(l) ((u32)(0))
69
70#define ACPI_GET_ADDRESS(a) ((a).lo)
71#define ACPI_STORE_ADDRESS(a,b) {(a).hi=0;(a).lo=(u32)(b);}
72#define ACPI_VALID_ADDRESS(a) ((a).hi | (a).lo)
73
74#else
75#ifdef ACPI_NO_INTEGER64_SUPPORT
76/*
77 * acpi_integer is 32-bits, no 64-bit support on this platform
78 */
79#define ACPI_LODWORD(l) ((u32)(l))
80#define ACPI_HIDWORD(l) ((u32)(0))
81
82#define ACPI_GET_ADDRESS(a) (a)
83#define ACPI_STORE_ADDRESS(a,b) ((a)=(b))
84#define ACPI_VALID_ADDRESS(a) (a)
85
86#else
87
88/*
89 * Full 64-bit address/integer on both 32-bit and 64-bit platforms
90 */
91#define ACPI_LODWORD(l) ((u32)(u64)(l))
92#define ACPI_HIDWORD(l) ((u32)(((*(struct uint64_struct *)(void *)(&l))).hi))
93
94#define ACPI_GET_ADDRESS(a) (a)
95#define ACPI_STORE_ADDRESS(a,b) ((a)=(acpi_physical_address)(b))
96#define ACPI_VALID_ADDRESS(a) (a)
97#endif
98#endif
99
100/*
101 * printf() format helpers
102 */
103
104/* Split 64-bit integer into two 32-bit values. Use with %8.8X%8.8X */
105
106#define ACPI_FORMAT_UINT64(i) ACPI_HIDWORD(i),ACPI_LODWORD(i)
107
108/*
109 * Extract a byte of data using a pointer. Any more than a byte and we
110 * get into potential aligment issues -- see the STORE macros below
111 */
112#define ACPI_GET8(addr) (*(u8*)(addr))
113
114/* Pointer arithmetic */
115
116#define ACPI_PTR_ADD(t,a,b) (t *) (void *)((char *)(a) + (acpi_native_uint)(b))
117#define ACPI_PTR_DIFF(a,b) (acpi_native_uint) ((char *)(a) - (char *)(b))
118
119/* Pointer/Integer type conversions */
120
121#define ACPI_TO_POINTER(i) ACPI_PTR_ADD (void, (void *) NULL,(acpi_native_uint)i)
122#define ACPI_TO_INTEGER(p) ACPI_PTR_DIFF (p,(void *) NULL)
123#define ACPI_OFFSET(d,f) (acpi_size) ACPI_PTR_DIFF (&(((d *)0)->f),(void *) NULL)
124#define ACPI_FADT_OFFSET(f) ACPI_OFFSET (FADT_DESCRIPTOR, f)
125
126#define ACPI_CAST_PTR(t, p) ((t *)(void *)(p))
127#define ACPI_CAST_INDIRECT_PTR(t, p) ((t **)(void *)(p))
128
129#if ACPI_MACHINE_WIDTH == 16
130#define ACPI_STORE_POINTER(d,s) ACPI_MOVE_32_TO_32(d,s)
131#define ACPI_PHYSADDR_TO_PTR(i) (void *)(i)
132#define ACPI_PTR_TO_PHYSADDR(i) (u32) (char *)(i)
133#else
134#define ACPI_PHYSADDR_TO_PTR(i) ACPI_TO_POINTER(i)
135#define ACPI_PTR_TO_PHYSADDR(i) ACPI_TO_INTEGER(i)
136#endif
137
138/*
139 * Macros for moving data around to/from buffers that are possibly unaligned.
140 * If the hardware supports the transfer of unaligned data, just do the store.
141 * Otherwise, we have to move one byte at a time.
142 */
143#ifdef ACPI_BIG_ENDIAN
144/*
145 * Macros for big-endian machines
146 */
147
148/* This macro sets a buffer index, starting from the end of the buffer */
149
150#define ACPI_BUFFER_INDEX(buf_len,buf_offset,byte_gran) ((buf_len) - (((buf_offset)+1) * (byte_gran)))
151
152/* These macros reverse the bytes during the move, converting little-endian to big endian */
153
154 /* Big Endian <== Little Endian */
155 /* Hi...Lo Lo...Hi */
156/* 16-bit source, 16/32/64 destination */
157
158#define ACPI_MOVE_16_TO_16(d,s) {(( u8 *)(void *)(d))[0] = ((u8 *)(void *)(s))[1];\
159 (( u8 *)(void *)(d))[1] = ((u8 *)(void *)(s))[0];}
160
161#define ACPI_MOVE_16_TO_32(d,s) {(*(u32 *)(void *)(d))=0;\
162 ((u8 *)(void *)(d))[2] = ((u8 *)(void *)(s))[1];\
163 ((u8 *)(void *)(d))[3] = ((u8 *)(void *)(s))[0];}
164
165#define ACPI_MOVE_16_TO_64(d,s) {(*(u64 *)(void *)(d))=0;\
166 ((u8 *)(void *)(d))[6] = ((u8 *)(void *)(s))[1];\
167 ((u8 *)(void *)(d))[7] = ((u8 *)(void *)(s))[0];}
168
169/* 32-bit source, 16/32/64 destination */
170
171#define ACPI_MOVE_32_TO_16(d,s) ACPI_MOVE_16_TO_16(d,s) /* Truncate to 16 */
172
173#define ACPI_MOVE_32_TO_32(d,s) {(( u8 *)(void *)(d))[0] = ((u8 *)(void *)(s))[3];\
174 (( u8 *)(void *)(d))[1] = ((u8 *)(void *)(s))[2];\
175 (( u8 *)(void *)(d))[2] = ((u8 *)(void *)(s))[1];\
176 (( u8 *)(void *)(d))[3] = ((u8 *)(void *)(s))[0];}
177
178#define ACPI_MOVE_32_TO_64(d,s) {(*(u64 *)(void *)(d))=0;\
179 ((u8 *)(void *)(d))[4] = ((u8 *)(void *)(s))[3];\
180 ((u8 *)(void *)(d))[5] = ((u8 *)(void *)(s))[2];\
181 ((u8 *)(void *)(d))[6] = ((u8 *)(void *)(s))[1];\
182 ((u8 *)(void *)(d))[7] = ((u8 *)(void *)(s))[0];}
183
184/* 64-bit source, 16/32/64 destination */
185
186#define ACPI_MOVE_64_TO_16(d,s) ACPI_MOVE_16_TO_16(d,s) /* Truncate to 16 */
187
188#define ACPI_MOVE_64_TO_32(d,s) ACPI_MOVE_32_TO_32(d,s) /* Truncate to 32 */
189
190#define ACPI_MOVE_64_TO_64(d,s) {(( u8 *)(void *)(d))[0] = ((u8 *)(void *)(s))[7];\
191 (( u8 *)(void *)(d))[1] = ((u8 *)(void *)(s))[6];\
192 (( u8 *)(void *)(d))[2] = ((u8 *)(void *)(s))[5];\
193 (( u8 *)(void *)(d))[3] = ((u8 *)(void *)(s))[4];\
194 (( u8 *)(void *)(d))[4] = ((u8 *)(void *)(s))[3];\
195 (( u8 *)(void *)(d))[5] = ((u8 *)(void *)(s))[2];\
196 (( u8 *)(void *)(d))[6] = ((u8 *)(void *)(s))[1];\
197 (( u8 *)(void *)(d))[7] = ((u8 *)(void *)(s))[0];}
198#else
199/*
200 * Macros for little-endian machines
201 */
202
203/* This macro sets a buffer index, starting from the beginning of the buffer */
204
205#define ACPI_BUFFER_INDEX(buf_len,buf_offset,byte_gran) (buf_offset)
206
207#ifdef ACPI_MISALIGNED_TRANSFERS
208
209/* The hardware supports unaligned transfers, just do the little-endian move */
210
211#if ACPI_MACHINE_WIDTH == 16
212
213/* No 64-bit integers */
214/* 16-bit source, 16/32/64 destination */
215
216#define ACPI_MOVE_16_TO_16(d,s) *(u16 *)(void *)(d) = *(u16 *)(void *)(s)
217#define ACPI_MOVE_16_TO_32(d,s) *(u32 *)(void *)(d) = *(u16 *)(void *)(s)
218#define ACPI_MOVE_16_TO_64(d,s) ACPI_MOVE_16_TO_32(d,s)
219
220/* 32-bit source, 16/32/64 destination */
221
222#define ACPI_MOVE_32_TO_16(d,s) ACPI_MOVE_16_TO_16(d,s) /* Truncate to 16 */
223#define ACPI_MOVE_32_TO_32(d,s) *(u32 *)(void *)(d) = *(u32 *)(void *)(s)
224#define ACPI_MOVE_32_TO_64(d,s) ACPI_MOVE_32_TO_32(d,s)
225
226/* 64-bit source, 16/32/64 destination */
227
228#define ACPI_MOVE_64_TO_16(d,s) ACPI_MOVE_16_TO_16(d,s) /* Truncate to 16 */
229#define ACPI_MOVE_64_TO_32(d,s) ACPI_MOVE_32_TO_32(d,s) /* Truncate to 32 */
230#define ACPI_MOVE_64_TO_64(d,s) ACPI_MOVE_32_TO_32(d,s)
231
232#else
233/* 16-bit source, 16/32/64 destination */
234
235#define ACPI_MOVE_16_TO_16(d,s) *(u16 *)(void *)(d) = *(u16 *)(void *)(s)
236#define ACPI_MOVE_16_TO_32(d,s) *(u32 *)(void *)(d) = *(u16 *)(void *)(s)
237#define ACPI_MOVE_16_TO_64(d,s) *(u64 *)(void *)(d) = *(u16 *)(void *)(s)
238
239/* 32-bit source, 16/32/64 destination */
240
241#define ACPI_MOVE_32_TO_16(d,s) ACPI_MOVE_16_TO_16(d,s) /* Truncate to 16 */
242#define ACPI_MOVE_32_TO_32(d,s) *(u32 *)(void *)(d) = *(u32 *)(void *)(s)
243#define ACPI_MOVE_32_TO_64(d,s) *(u64 *)(void *)(d) = *(u32 *)(void *)(s)
244
245/* 64-bit source, 16/32/64 destination */
246
247#define ACPI_MOVE_64_TO_16(d,s) ACPI_MOVE_16_TO_16(d,s) /* Truncate to 16 */
248#define ACPI_MOVE_64_TO_32(d,s) ACPI_MOVE_32_TO_32(d,s) /* Truncate to 32 */
249#define ACPI_MOVE_64_TO_64(d,s) *(u64 *)(void *)(d) = *(u64 *)(void *)(s)
250#endif
251
252#else
253/*
254 * The hardware does not support unaligned transfers. We must move the
255 * data one byte at a time. These macros work whether the source or
256 * the destination (or both) is/are unaligned. (Little-endian move)
257 */
258
259/* 16-bit source, 16/32/64 destination */
260
261#define ACPI_MOVE_16_TO_16(d,s) {(( u8 *)(void *)(d))[0] = ((u8 *)(void *)(s))[0];\
262 (( u8 *)(void *)(d))[1] = ((u8 *)(void *)(s))[1];}
263
264#define ACPI_MOVE_16_TO_32(d,s) {(*(u32 *)(void *)(d)) = 0; ACPI_MOVE_16_TO_16(d,s);}
265#define ACPI_MOVE_16_TO_64(d,s) {(*(u64 *)(void *)(d)) = 0; ACPI_MOVE_16_TO_16(d,s);}
266
267/* 32-bit source, 16/32/64 destination */
268
269#define ACPI_MOVE_32_TO_16(d,s) ACPI_MOVE_16_TO_16(d,s) /* Truncate to 16 */
270
271#define ACPI_MOVE_32_TO_32(d,s) {(( u8 *)(void *)(d))[0] = ((u8 *)(void *)(s))[0];\
272 (( u8 *)(void *)(d))[1] = ((u8 *)(void *)(s))[1];\
273 (( u8 *)(void *)(d))[2] = ((u8 *)(void *)(s))[2];\
274 (( u8 *)(void *)(d))[3] = ((u8 *)(void *)(s))[3];}
275
276#define ACPI_MOVE_32_TO_64(d,s) {(*(u64 *)(void *)(d)) = 0; ACPI_MOVE_32_TO_32(d,s);}
277
278/* 64-bit source, 16/32/64 destination */
279
280#define ACPI_MOVE_64_TO_16(d,s) ACPI_MOVE_16_TO_16(d,s) /* Truncate to 16 */
281#define ACPI_MOVE_64_TO_32(d,s) ACPI_MOVE_32_TO_32(d,s) /* Truncate to 32 */
282#define ACPI_MOVE_64_TO_64(d,s) {(( u8 *)(void *)(d))[0] = ((u8 *)(void *)(s))[0];\
283 (( u8 *)(void *)(d))[1] = ((u8 *)(void *)(s))[1];\
284 (( u8 *)(void *)(d))[2] = ((u8 *)(void *)(s))[2];\
285 (( u8 *)(void *)(d))[3] = ((u8 *)(void *)(s))[3];\
286 (( u8 *)(void *)(d))[4] = ((u8 *)(void *)(s))[4];\
287 (( u8 *)(void *)(d))[5] = ((u8 *)(void *)(s))[5];\
288 (( u8 *)(void *)(d))[6] = ((u8 *)(void *)(s))[6];\
289 (( u8 *)(void *)(d))[7] = ((u8 *)(void *)(s))[7];}
290#endif
291#endif
292
293/* Macros based on machine integer width */
294
295#if ACPI_MACHINE_WIDTH == 16
296#define ACPI_MOVE_SIZE_TO_16(d,s) ACPI_MOVE_16_TO_16(d,s)
297
298#elif ACPI_MACHINE_WIDTH == 32
299#define ACPI_MOVE_SIZE_TO_16(d,s) ACPI_MOVE_32_TO_16(d,s)
300
301#elif ACPI_MACHINE_WIDTH == 64
302#define ACPI_MOVE_SIZE_TO_16(d,s) ACPI_MOVE_64_TO_16(d,s)
303
304#else
305#error unknown ACPI_MACHINE_WIDTH
306#endif
307
308
309/*
310 * Fast power-of-two math macros for non-optimized compilers
311 */
312#define _ACPI_DIV(value,power_of2) ((u32) ((value) >> (power_of2)))
313#define _ACPI_MUL(value,power_of2) ((u32) ((value) << (power_of2)))
314#define _ACPI_MOD(value,divisor) ((u32) ((value) & ((divisor) -1)))
315
316#define ACPI_DIV_2(a) _ACPI_DIV(a,1)
317#define ACPI_MUL_2(a) _ACPI_MUL(a,1)
318#define ACPI_MOD_2(a) _ACPI_MOD(a,2)
319
320#define ACPI_DIV_4(a) _ACPI_DIV(a,2)
321#define ACPI_MUL_4(a) _ACPI_MUL(a,2)
322#define ACPI_MOD_4(a) _ACPI_MOD(a,4)
323
324#define ACPI_DIV_8(a) _ACPI_DIV(a,3)
325#define ACPI_MUL_8(a) _ACPI_MUL(a,3)
326#define ACPI_MOD_8(a) _ACPI_MOD(a,8)
327
328#define ACPI_DIV_16(a) _ACPI_DIV(a,4)
329#define ACPI_MUL_16(a) _ACPI_MUL(a,4)
330#define ACPI_MOD_16(a) _ACPI_MOD(a,16)
331
332
333/*
334 * Rounding macros (Power of two boundaries only)
335 */
336#define ACPI_ROUND_DOWN(value,boundary) (((acpi_native_uint)(value)) & (~(((acpi_native_uint) boundary)-1)))
337#define ACPI_ROUND_UP(value,boundary) ((((acpi_native_uint)(value)) + (((acpi_native_uint) boundary)-1)) & (~(((acpi_native_uint) boundary)-1)))
338
339#define ACPI_ROUND_DOWN_TO_32_BITS(a) ACPI_ROUND_DOWN(a,4)
340#define ACPI_ROUND_DOWN_TO_64_BITS(a) ACPI_ROUND_DOWN(a,8)
341#define ACPI_ROUND_DOWN_TO_NATIVE_WORD(a) ACPI_ROUND_DOWN(a,ALIGNED_ADDRESS_BOUNDARY)
342
343#define ACPI_ROUND_UP_to_32_bITS(a) ACPI_ROUND_UP(a,4)
344#define ACPI_ROUND_UP_to_64_bITS(a) ACPI_ROUND_UP(a,8)
345#define ACPI_ROUND_UP_TO_NATIVE_WORD(a) ACPI_ROUND_UP(a,ALIGNED_ADDRESS_BOUNDARY)
346
347
348#define ACPI_ROUND_BITS_UP_TO_BYTES(a) ACPI_DIV_8((a) + 7)
349#define ACPI_ROUND_BITS_DOWN_TO_BYTES(a) ACPI_DIV_8((a))
350
351#define ACPI_ROUND_UP_TO_1K(a) (((a) + 1023) >> 10)
352
353/* Generic (non-power-of-two) rounding */
354
355#define ACPI_ROUND_UP_TO(value,boundary) (((value) + ((boundary)-1)) / (boundary))
356
357/*
358 * Bitmask creation
359 * Bit positions start at zero.
360 * MASK_BITS_ABOVE creates a mask starting AT the position and above
361 * MASK_BITS_BELOW creates a mask starting one bit BELOW the position
362 */
363#define ACPI_MASK_BITS_ABOVE(position) (~((ACPI_INTEGER_MAX) << ((u32) (position))))
364#define ACPI_MASK_BITS_BELOW(position) ((ACPI_INTEGER_MAX) << ((u32) (position)))
365
366#define ACPI_IS_OCTAL_DIGIT(d) (((char)(d) >= '0') && ((char)(d) <= '7'))
367
368
369/* Bitfields within ACPI registers */
370
371#define ACPI_REGISTER_PREPARE_BITS(val, pos, mask) ((val << pos) & mask)
372#define ACPI_REGISTER_INSERT_VALUE(reg, pos, mask, val) reg = (reg & (~(mask))) | ACPI_REGISTER_PREPARE_BITS(val, pos, mask)
373
374/*
375 * An struct acpi_namespace_node * can appear in some contexts,
376 * where a pointer to an union acpi_operand_object can also
377 * appear. This macro is used to distinguish them.
378 *
379 * The "Descriptor" field is the first field in both structures.
380 */
381#define ACPI_GET_DESCRIPTOR_TYPE(d) (((union acpi_descriptor *)(void *)(d))->descriptor_id)
382#define ACPI_SET_DESCRIPTOR_TYPE(d,t) (((union acpi_descriptor *)(void *)(d))->descriptor_id = t)
383
384
385/* Macro to test the object type */
386
387#define ACPI_GET_OBJECT_TYPE(d) (((union acpi_operand_object *)(void *)(d))->common.type)
388
389/* Macro to check the table flags for SINGLE or MULTIPLE tables are allowed */
390
391#define ACPI_IS_SINGLE_TABLE(x) (((x) & 0x01) == ACPI_TABLE_SINGLE ? 1 : 0)
392
393/*
394 * Macros for the master AML opcode table
395 */
396#if defined(ACPI_DISASSEMBLER) || defined (ACPI_DEBUG_OUTPUT)
397#define ACPI_OP(name,Pargs,Iargs,obj_type,class,type,flags) {name,(u32)(Pargs),(u32)(Iargs),(u32)(flags),obj_type,class,type}
398#else
399#define ACPI_OP(name,Pargs,Iargs,obj_type,class,type,flags) {(u32)(Pargs),(u32)(Iargs),(u32)(flags),obj_type,class,type}
400#endif
401
402#ifdef ACPI_DISASSEMBLER
403#define ACPI_DISASM_ONLY_MEMBERS(a) a;
404#else
405#define ACPI_DISASM_ONLY_MEMBERS(a)
406#endif
407
408#define ARG_TYPE_WIDTH 5
409#define ARG_1(x) ((u32)(x))
410#define ARG_2(x) ((u32)(x) << (1 * ARG_TYPE_WIDTH))
411#define ARG_3(x) ((u32)(x) << (2 * ARG_TYPE_WIDTH))
412#define ARG_4(x) ((u32)(x) << (3 * ARG_TYPE_WIDTH))
413#define ARG_5(x) ((u32)(x) << (4 * ARG_TYPE_WIDTH))
414#define ARG_6(x) ((u32)(x) << (5 * ARG_TYPE_WIDTH))
415
416#define ARGI_LIST1(a) (ARG_1(a))
417#define ARGI_LIST2(a,b) (ARG_1(b)|ARG_2(a))
418#define ARGI_LIST3(a,b,c) (ARG_1(c)|ARG_2(b)|ARG_3(a))
419#define ARGI_LIST4(a,b,c,d) (ARG_1(d)|ARG_2(c)|ARG_3(b)|ARG_4(a))
420#define ARGI_LIST5(a,b,c,d,e) (ARG_1(e)|ARG_2(d)|ARG_3(c)|ARG_4(b)|ARG_5(a))
421#define ARGI_LIST6(a,b,c,d,e,f) (ARG_1(f)|ARG_2(e)|ARG_3(d)|ARG_4(c)|ARG_5(b)|ARG_6(a))
422
423#define ARGP_LIST1(a) (ARG_1(a))
424#define ARGP_LIST2(a,b) (ARG_1(a)|ARG_2(b))
425#define ARGP_LIST3(a,b,c) (ARG_1(a)|ARG_2(b)|ARG_3(c))
426#define ARGP_LIST4(a,b,c,d) (ARG_1(a)|ARG_2(b)|ARG_3(c)|ARG_4(d))
427#define ARGP_LIST5(a,b,c,d,e) (ARG_1(a)|ARG_2(b)|ARG_3(c)|ARG_4(d)|ARG_5(e))
428#define ARGP_LIST6(a,b,c,d,e,f) (ARG_1(a)|ARG_2(b)|ARG_3(c)|ARG_4(d)|ARG_5(e)|ARG_6(f))
429
430#define GET_CURRENT_ARG_TYPE(list) (list & ((u32) 0x1F))
431#define INCREMENT_ARG_LIST(list) (list >>= ((u32) ARG_TYPE_WIDTH))
432
433
434/*
435 * Reporting macros that are never compiled out
436 */
437#define ACPI_PARAM_LIST(pl) pl
438
439/*
440 * Error reporting. These versions add callers module and line#. Since
441 * _THIS_MODULE gets compiled out when ACPI_DEBUG_OUTPUT isn't defined, only
442 * use it in debug mode.
443 */
444#ifdef ACPI_DEBUG_OUTPUT
445
446#define ACPI_REPORT_INFO(fp) {acpi_ut_report_info(_THIS_MODULE,__LINE__,_COMPONENT); \
447 acpi_os_printf ACPI_PARAM_LIST(fp);}
448#define ACPI_REPORT_ERROR(fp) {acpi_ut_report_error(_THIS_MODULE,__LINE__,_COMPONENT); \
449 acpi_os_printf ACPI_PARAM_LIST(fp);}
450#define ACPI_REPORT_WARNING(fp) {acpi_ut_report_warning(_THIS_MODULE,__LINE__,_COMPONENT); \
451 acpi_os_printf ACPI_PARAM_LIST(fp);}
452#define ACPI_REPORT_NSERROR(s,e) acpi_ns_report_error(_THIS_MODULE,__LINE__,_COMPONENT, s, e);
453
454#define ACPI_REPORT_METHOD_ERROR(s,n,p,e) acpi_ns_report_method_error(_THIS_MODULE,__LINE__,_COMPONENT, s, n, p, e);
455
456#else
457
458#define ACPI_REPORT_INFO(fp) {acpi_ut_report_info("ACPI",__LINE__,_COMPONENT); \
459 acpi_os_printf ACPI_PARAM_LIST(fp);}
460#define ACPI_REPORT_ERROR(fp) {acpi_ut_report_error("ACPI",__LINE__,_COMPONENT); \
461 acpi_os_printf ACPI_PARAM_LIST(fp);}
462#define ACPI_REPORT_WARNING(fp) {acpi_ut_report_warning("ACPI",__LINE__,_COMPONENT); \
463 acpi_os_printf ACPI_PARAM_LIST(fp);}
464#define ACPI_REPORT_NSERROR(s,e) acpi_ns_report_error("ACPI",__LINE__,_COMPONENT, s, e);
465
466#define ACPI_REPORT_METHOD_ERROR(s,n,p,e) acpi_ns_report_method_error("ACPI",__LINE__,_COMPONENT, s, n, p, e);
467
468#endif
469
470/* Error reporting. These versions pass thru the module and line# */
471
472#define _ACPI_REPORT_INFO(a,b,c,fp) {acpi_ut_report_info(a,b,c); \
473 acpi_os_printf ACPI_PARAM_LIST(fp);}
474#define _ACPI_REPORT_ERROR(a,b,c,fp) {acpi_ut_report_error(a,b,c); \
475 acpi_os_printf ACPI_PARAM_LIST(fp);}
476#define _ACPI_REPORT_WARNING(a,b,c,fp) {acpi_ut_report_warning(a,b,c); \
477 acpi_os_printf ACPI_PARAM_LIST(fp);}
478
479/*
480 * Debug macros that are conditionally compiled
481 */
482#ifdef ACPI_DEBUG_OUTPUT
483
484#define ACPI_MODULE_NAME(name) static char ACPI_UNUSED_VAR *_THIS_MODULE = name;
485
486/*
487 * Function entry tracing.
488 * The first parameter should be the procedure name as a quoted string. This is declared
489 * as a local string ("_proc_name) so that it can be also used by the function exit macros below.
490 */
491#define ACPI_FUNCTION_NAME(a) struct acpi_debug_print_info _debug_info; \
492 _debug_info.component_id = _COMPONENT; \
493 _debug_info.proc_name = a; \
494 _debug_info.module_name = _THIS_MODULE;
495
496#define ACPI_FUNCTION_TRACE(a) ACPI_FUNCTION_NAME(a) \
497 acpi_ut_trace(__LINE__,&_debug_info)
498#define ACPI_FUNCTION_TRACE_PTR(a,b) ACPI_FUNCTION_NAME(a) \
499 acpi_ut_trace_ptr(__LINE__,&_debug_info,(void *)b)
500#define ACPI_FUNCTION_TRACE_U32(a,b) ACPI_FUNCTION_NAME(a) \
501 acpi_ut_trace_u32(__LINE__,&_debug_info,(u32)b)
502#define ACPI_FUNCTION_TRACE_STR(a,b) ACPI_FUNCTION_NAME(a) \
503 acpi_ut_trace_str(__LINE__,&_debug_info,(char *)b)
504
505#define ACPI_FUNCTION_ENTRY() acpi_ut_track_stack_ptr()
506
507/*
508 * Function exit tracing.
509 * WARNING: These macros include a return statement. This is usually considered
510 * bad form, but having a separate exit macro is very ugly and difficult to maintain.
511 * One of the FUNCTION_TRACE macros above must be used in conjunction with these macros
512 * so that "_proc_name" is defined.
513 */
514#ifdef ACPI_USE_DO_WHILE_0
515#define ACPI_DO_WHILE0(a) do a while(0)
516#else
517#define ACPI_DO_WHILE0(a) a
518#endif
519
520#define return_VOID ACPI_DO_WHILE0 ({acpi_ut_exit(__LINE__,&_debug_info);return;})
521#define return_ACPI_STATUS(s) ACPI_DO_WHILE0 ({acpi_ut_status_exit(__LINE__,&_debug_info,(s));return((s));})
522#define return_VALUE(s) ACPI_DO_WHILE0 ({acpi_ut_value_exit(__LINE__,&_debug_info,(acpi_integer)(s));return((s));})
523#define return_PTR(s) ACPI_DO_WHILE0 ({acpi_ut_ptr_exit(__LINE__,&_debug_info,(u8 *)(s));return((s));})
524
525/* Conditional execution */
526
527#define ACPI_DEBUG_EXEC(a) a
528#define ACPI_NORMAL_EXEC(a)
529
530#define ACPI_DEBUG_DEFINE(a) a;
531#define ACPI_DEBUG_ONLY_MEMBERS(a) a;
532#define _VERBOSE_STRUCTURES
533
534
535/* Stack and buffer dumping */
536
537#define ACPI_DUMP_STACK_ENTRY(a) acpi_ex_dump_operand((a),0)
538#define ACPI_DUMP_OPERANDS(a,b,c,d,e) acpi_ex_dump_operands(a,b,c,d,e,_THIS_MODULE,__LINE__)
539
540
541#define ACPI_DUMP_ENTRY(a,b) acpi_ns_dump_entry (a,b)
542
543#ifdef ACPI_FUTURE_USAGE
544#define ACPI_DUMP_TABLES(a,b) acpi_ns_dump_tables(a,b)
545#endif
546
547#define ACPI_DUMP_PATHNAME(a,b,c,d) acpi_ns_dump_pathname(a,b,c,d)
548#define ACPI_DUMP_RESOURCE_LIST(a) acpi_rs_dump_resource_list(a)
549#define ACPI_DUMP_BUFFER(a,b) acpi_ut_dump_buffer((u8 *)a,b,DB_BYTE_DISPLAY,_COMPONENT)
550#define ACPI_BREAK_MSG(a) acpi_os_signal (ACPI_SIGNAL_BREAKPOINT,(a))
551
552
553/*
554 * Generate INT3 on ACPI_ERROR (Debug only!)
555 */
556#define ACPI_ERROR_BREAK
557#ifdef ACPI_ERROR_BREAK
558#define ACPI_BREAK_ON_ERROR(lvl) if ((lvl)&ACPI_ERROR) \
559 acpi_os_signal(ACPI_SIGNAL_BREAKPOINT,"Fatal error encountered\n")
560#else
561#define ACPI_BREAK_ON_ERROR(lvl)
562#endif
563
564/*
565 * Master debug print macros
566 * Print iff:
567 * 1) Debug print for the current component is enabled
568 * 2) Debug error level or trace level for the print statement is enabled
569 */
570#define ACPI_DEBUG_PRINT(pl) acpi_ut_debug_print ACPI_PARAM_LIST(pl)
571#define ACPI_DEBUG_PRINT_RAW(pl) acpi_ut_debug_print_raw ACPI_PARAM_LIST(pl)
572
573
574#else
575/*
576 * This is the non-debug case -- make everything go away,
577 * leaving no executable debug code!
578 */
579#define ACPI_MODULE_NAME(name)
580#define _THIS_MODULE ""
581
582#define ACPI_DEBUG_EXEC(a)
583#define ACPI_NORMAL_EXEC(a) a;
584
585#define ACPI_DEBUG_DEFINE(a)
586#define ACPI_DEBUG_ONLY_MEMBERS(a)
587#define ACPI_FUNCTION_NAME(a)
588#define ACPI_FUNCTION_TRACE(a)
589#define ACPI_FUNCTION_TRACE_PTR(a,b)
590#define ACPI_FUNCTION_TRACE_U32(a,b)
591#define ACPI_FUNCTION_TRACE_STR(a,b)
592#define ACPI_FUNCTION_EXIT
593#define ACPI_FUNCTION_STATUS_EXIT(s)
594#define ACPI_FUNCTION_VALUE_EXIT(s)
595#define ACPI_FUNCTION_ENTRY()
596#define ACPI_DUMP_STACK_ENTRY(a)
597#define ACPI_DUMP_OPERANDS(a,b,c,d,e)
598#define ACPI_DUMP_ENTRY(a,b)
599
600#ifdef ACPI_FUTURE_USAGE
601#define ACPI_DUMP_TABLES(a,b)
602#endif
603
604#define ACPI_DUMP_PATHNAME(a,b,c,d)
605#define ACPI_DUMP_RESOURCE_LIST(a)
606#define ACPI_DUMP_BUFFER(a,b)
607#define ACPI_DEBUG_PRINT(pl)
608#define ACPI_DEBUG_PRINT_RAW(pl)
609#define ACPI_BREAK_MSG(a)
610
611#define return_VOID return
612#define return_ACPI_STATUS(s) return(s)
613#define return_VALUE(s) return(s)
614#define return_PTR(s) return(s)
615
616#endif
617
618/*
619 * Some code only gets executed when the debugger is built in.
620 * Note that this is entirely independent of whether the
621 * DEBUG_PRINT stuff (set by ACPI_DEBUG_OUTPUT) is on, or not.
622 */
623#ifdef ACPI_DEBUGGER
624#define ACPI_DEBUGGER_EXEC(a) a
625#else
626#define ACPI_DEBUGGER_EXEC(a)
627#endif
628
629
630/*
631 * For 16-bit code, we want to shrink some things even though
632 * we are using ACPI_DEBUG_OUTPUT to get the debug output
633 */
634#if ACPI_MACHINE_WIDTH == 16
635#undef ACPI_DEBUG_ONLY_MEMBERS
636#undef _VERBOSE_STRUCTURES
637#define ACPI_DEBUG_ONLY_MEMBERS(a)
638#endif
639
640
641#ifdef ACPI_DEBUG_OUTPUT
642/*
643 * 1) Set name to blanks
644 * 2) Copy the object name
645 */
646#define ACPI_ADD_OBJECT_NAME(a,b) ACPI_MEMSET (a->common.name, ' ', sizeof (a->common.name));\
647 ACPI_STRNCPY (a->common.name, acpi_gbl_ns_type_names[b], sizeof (a->common.name))
648#else
649
650#define ACPI_ADD_OBJECT_NAME(a,b)
651#endif
652
653
654/*
655 * Memory allocation tracking (DEBUG ONLY)
656 */
657#ifndef ACPI_DBG_TRACK_ALLOCATIONS
658
659/* Memory allocation */
660
661#define ACPI_MEM_ALLOCATE(a) acpi_ut_allocate((acpi_size)(a),_COMPONENT,_THIS_MODULE,__LINE__)
662#define ACPI_MEM_CALLOCATE(a) acpi_ut_callocate((acpi_size)(a), _COMPONENT,_THIS_MODULE,__LINE__)
663#define ACPI_MEM_FREE(a) acpi_os_free(a)
664#define ACPI_MEM_TRACKING(a)
665
666
667#else
668
669/* Memory allocation */
670
671#define ACPI_MEM_ALLOCATE(a) acpi_ut_allocate_and_track((acpi_size)(a),_COMPONENT,_THIS_MODULE,__LINE__)
672#define ACPI_MEM_CALLOCATE(a) acpi_ut_callocate_and_track((acpi_size)(a), _COMPONENT,_THIS_MODULE,__LINE__)
673#define ACPI_MEM_FREE(a) acpi_ut_free_and_track(a,_COMPONENT,_THIS_MODULE,__LINE__)
674#define ACPI_MEM_TRACKING(a) a
675
676#endif /* ACPI_DBG_TRACK_ALLOCATIONS */
677
678#endif /* ACMACROS_H */
diff --git a/include/acpi/acnamesp.h b/include/acpi/acnamesp.h
new file mode 100644
index 00000000000..8b3cdc3566b
--- /dev/null
+++ b/include/acpi/acnamesp.h
@@ -0,0 +1,515 @@
1/******************************************************************************
2 *
3 * Name: acnamesp.h - Namespace subcomponent prototypes and defines
4 *
5 *****************************************************************************/
6
7/*
8 * Copyright (C) 2000 - 2005, R. Byron Moore
9 * All rights reserved.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions, and the following disclaimer,
16 * without modification.
17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18 * substantially similar to the "NO WARRANTY" disclaimer below
19 * ("Disclaimer") and any redistribution must be conditioned upon
20 * including a substantially similar Disclaimer requirement for further
21 * binary redistribution.
22 * 3. Neither the names of the above-listed copyright holders nor the names
23 * of any contributors may be used to endorse or promote products derived
24 * from this software without specific prior written permission.
25 *
26 * Alternatively, this software may be distributed under the terms of the
27 * GNU General Public License ("GPL") version 2 as published by the Free
28 * Software Foundation.
29 *
30 * NO WARRANTY
31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41 * POSSIBILITY OF SUCH DAMAGES.
42 */
43
44#ifndef __ACNAMESP_H__
45#define __ACNAMESP_H__
46
47
48/* To search the entire name space, pass this as search_base */
49
50#define ACPI_NS_ALL ((acpi_handle)0)
51
52/*
53 * Elements of acpi_ns_properties are bit significant
54 * and should be one-to-one with values of acpi_object_type
55 */
56#define ACPI_NS_NORMAL 0
57#define ACPI_NS_NEWSCOPE 1 /* a definition of this type opens a name scope */
58#define ACPI_NS_LOCAL 2 /* suppress search of enclosing scopes */
59
60
61/* Definitions of the predefined namespace names */
62
63#define ACPI_UNKNOWN_NAME (u32) 0x3F3F3F3F /* Unknown name is "????" */
64#define ACPI_ROOT_NAME (u32) 0x5F5F5F5C /* Root name is "\___" */
65#define ACPI_SYS_BUS_NAME (u32) 0x5F53425F /* Sys bus name is "_SB_" */
66
67#define ACPI_NS_ROOT_PATH "\\"
68#define ACPI_NS_SYSTEM_BUS "_SB_"
69
70
71/* Flags for acpi_ns_lookup, acpi_ns_search_and_enter */
72
73#define ACPI_NS_NO_UPSEARCH 0
74#define ACPI_NS_SEARCH_PARENT 0x01
75#define ACPI_NS_DONT_OPEN_SCOPE 0x02
76#define ACPI_NS_NO_PEER_SEARCH 0x04
77#define ACPI_NS_ERROR_IF_FOUND 0x08
78
79#define ACPI_NS_WALK_UNLOCK TRUE
80#define ACPI_NS_WALK_NO_UNLOCK FALSE
81
82
83acpi_status
84acpi_ns_load_namespace (
85 void);
86
87acpi_status
88acpi_ns_initialize_objects (
89 void);
90
91acpi_status
92acpi_ns_initialize_devices (
93 void);
94
95
96/* Namespace init - nsxfinit */
97
98acpi_status
99acpi_ns_init_one_device (
100 acpi_handle obj_handle,
101 u32 nesting_level,
102 void *context,
103 void **return_value);
104
105acpi_status
106acpi_ns_init_one_object (
107 acpi_handle obj_handle,
108 u32 level,
109 void *context,
110 void **return_value);
111
112
113acpi_status
114acpi_ns_walk_namespace (
115 acpi_object_type type,
116 acpi_handle start_object,
117 u32 max_depth,
118 u8 unlock_before_callback,
119 acpi_walk_callback user_function,
120 void *context,
121 void **return_value);
122
123struct acpi_namespace_node *
124acpi_ns_get_next_node (
125 acpi_object_type type,
126 struct acpi_namespace_node *parent,
127 struct acpi_namespace_node *child);
128
129void
130acpi_ns_delete_namespace_by_owner (
131 u16 table_id);
132
133
134/* Namespace loading - nsload */
135
136acpi_status
137acpi_ns_one_complete_parse (
138 u32 pass_number,
139 struct acpi_table_desc *table_desc);
140
141acpi_status
142acpi_ns_parse_table (
143 struct acpi_table_desc *table_desc,
144 struct acpi_namespace_node *scope);
145
146acpi_status
147acpi_ns_load_table (
148 struct acpi_table_desc *table_desc,
149 struct acpi_namespace_node *node);
150
151acpi_status
152acpi_ns_load_table_by_type (
153 acpi_table_type table_type);
154
155
156/*
157 * Top-level namespace access - nsaccess
158 */
159
160acpi_status
161acpi_ns_root_initialize (
162 void);
163
164acpi_status
165acpi_ns_lookup (
166 union acpi_generic_state *scope_info,
167 char *name,
168 acpi_object_type type,
169 acpi_interpreter_mode interpreter_mode,
170 u32 flags,
171 struct acpi_walk_state *walk_state,
172 struct acpi_namespace_node **ret_node);
173
174
175/*
176 * Named object allocation/deallocation - nsalloc
177 */
178
179struct acpi_namespace_node *
180acpi_ns_create_node (
181 u32 name);
182
183void
184acpi_ns_delete_node (
185 struct acpi_namespace_node *node);
186
187void
188acpi_ns_delete_namespace_subtree (
189 struct acpi_namespace_node *parent_handle);
190
191void
192acpi_ns_detach_object (
193 struct acpi_namespace_node *node);
194
195void
196acpi_ns_delete_children (
197 struct acpi_namespace_node *parent);
198
199int
200acpi_ns_compare_names (
201 char *name1,
202 char *name2);
203
204void
205acpi_ns_remove_reference (
206 struct acpi_namespace_node *node);
207
208
209/*
210 * Namespace modification - nsmodify
211 */
212
213#ifdef ACPI_FUTURE_USAGE
214acpi_status
215acpi_ns_unload_namespace (
216 acpi_handle handle);
217
218acpi_status
219acpi_ns_delete_subtree (
220 acpi_handle start_handle);
221#endif
222
223
224/*
225 * Namespace dump/print utilities - nsdump
226 */
227
228#ifdef ACPI_FUTURE_USAGE
229void
230acpi_ns_dump_tables (
231 acpi_handle search_base,
232 u32 max_depth);
233#endif
234
235void
236acpi_ns_dump_entry (
237 acpi_handle handle,
238 u32 debug_level);
239
240void
241acpi_ns_dump_pathname (
242 acpi_handle handle,
243 char *msg,
244 u32 level,
245 u32 component);
246
247void
248acpi_ns_print_pathname (
249 u32 num_segments,
250 char *pathname);
251
252#ifdef ACPI_FUTURE_USAGE
253acpi_status
254acpi_ns_dump_one_device (
255 acpi_handle obj_handle,
256 u32 level,
257 void *context,
258 void **return_value);
259
260void
261acpi_ns_dump_root_devices (
262 void);
263#endif /* ACPI_FUTURE_USAGE */
264
265acpi_status
266acpi_ns_dump_one_object (
267 acpi_handle obj_handle,
268 u32 level,
269 void *context,
270 void **return_value);
271
272#ifdef ACPI_FUTURE_USAGE
273void
274acpi_ns_dump_objects (
275 acpi_object_type type,
276 u8 display_type,
277 u32 max_depth,
278 u32 ownder_id,
279 acpi_handle start_handle);
280#endif
281
282
283/*
284 * Namespace evaluation functions - nseval
285 */
286
287acpi_status
288acpi_ns_evaluate_by_handle (
289 struct acpi_parameter_info *info);
290
291acpi_status
292acpi_ns_evaluate_by_name (
293 char *pathname,
294 struct acpi_parameter_info *info);
295
296acpi_status
297acpi_ns_evaluate_relative (
298 char *pathname,
299 struct acpi_parameter_info *info);
300
301acpi_status
302acpi_ns_execute_control_method (
303 struct acpi_parameter_info *info);
304
305acpi_status
306acpi_ns_get_object_value (
307 struct acpi_parameter_info *info);
308
309
310/*
311 * Parent/Child/Peer utility functions
312 */
313
314#ifdef ACPI_FUTURE_USAGE
315acpi_name
316acpi_ns_find_parent_name (
317 struct acpi_namespace_node *node_to_search);
318#endif
319
320
321/*
322 * Name and Scope manipulation - nsnames
323 */
324
325u32
326acpi_ns_opens_scope (
327 acpi_object_type type);
328
329void
330acpi_ns_build_external_path (
331 struct acpi_namespace_node *node,
332 acpi_size size,
333 char *name_buffer);
334
335char *
336acpi_ns_get_external_pathname (
337 struct acpi_namespace_node *node);
338
339char *
340acpi_ns_name_of_current_scope (
341 struct acpi_walk_state *walk_state);
342
343acpi_status
344acpi_ns_handle_to_pathname (
345 acpi_handle target_handle,
346 struct acpi_buffer *buffer);
347
348u8
349acpi_ns_pattern_match (
350 struct acpi_namespace_node *obj_node,
351 char *search_for);
352
353acpi_status
354acpi_ns_get_node_by_path (
355 char *external_pathname,
356 struct acpi_namespace_node *in_prefix_node,
357 u32 flags,
358 struct acpi_namespace_node **out_node);
359
360acpi_size
361acpi_ns_get_pathname_length (
362 struct acpi_namespace_node *node);
363
364
365/*
366 * Object management for namespace nodes - nsobject
367 */
368
369acpi_status
370acpi_ns_attach_object (
371 struct acpi_namespace_node *node,
372 union acpi_operand_object *object,
373 acpi_object_type type);
374
375union acpi_operand_object *
376acpi_ns_get_attached_object (
377 struct acpi_namespace_node *node);
378
379union acpi_operand_object *
380acpi_ns_get_secondary_object (
381 union acpi_operand_object *obj_desc);
382
383acpi_status
384acpi_ns_attach_data (
385 struct acpi_namespace_node *node,
386 acpi_object_handler handler,
387 void *data);
388
389acpi_status
390acpi_ns_detach_data (
391 struct acpi_namespace_node *node,
392 acpi_object_handler handler);
393
394acpi_status
395acpi_ns_get_attached_data (
396 struct acpi_namespace_node *node,
397 acpi_object_handler handler,
398 void **data);
399
400
401/*
402 * Namespace searching and entry - nssearch
403 */
404
405acpi_status
406acpi_ns_search_and_enter (
407 u32 entry_name,
408 struct acpi_walk_state *walk_state,
409 struct acpi_namespace_node *node,
410 acpi_interpreter_mode interpreter_mode,
411 acpi_object_type type,
412 u32 flags,
413 struct acpi_namespace_node **ret_node);
414
415acpi_status
416acpi_ns_search_node (
417 u32 entry_name,
418 struct acpi_namespace_node *node,
419 acpi_object_type type,
420 struct acpi_namespace_node **ret_node);
421
422void
423acpi_ns_install_node (
424 struct acpi_walk_state *walk_state,
425 struct acpi_namespace_node *parent_node,
426 struct acpi_namespace_node *node,
427 acpi_object_type type);
428
429
430/*
431 * Utility functions - nsutils
432 */
433
434u8
435acpi_ns_valid_root_prefix (
436 char prefix);
437
438u8
439acpi_ns_valid_path_separator (
440 char sep);
441
442acpi_object_type
443acpi_ns_get_type (
444 struct acpi_namespace_node *node);
445
446u32
447acpi_ns_local (
448 acpi_object_type type);
449
450void
451acpi_ns_report_error (
452 char *module_name,
453 u32 line_number,
454 u32 component_id,
455 char *internal_name,
456 acpi_status lookup_status);
457
458void
459acpi_ns_report_method_error (
460 char *module_name,
461 u32 line_number,
462 u32 component_id,
463 char *message,
464 struct acpi_namespace_node *node,
465 char *path,
466 acpi_status lookup_status);
467
468void
469acpi_ns_print_node_pathname (
470 struct acpi_namespace_node *node,
471 char *msg);
472
473acpi_status
474acpi_ns_build_internal_name (
475 struct acpi_namestring_info *info);
476
477void
478acpi_ns_get_internal_name_length (
479 struct acpi_namestring_info *info);
480
481acpi_status
482acpi_ns_internalize_name (
483 char *dotted_name,
484 char **converted_name);
485
486acpi_status
487acpi_ns_externalize_name (
488 u32 internal_name_length,
489 char *internal_name,
490 u32 *converted_name_length,
491 char **converted_name);
492
493struct acpi_namespace_node *
494acpi_ns_map_handle_to_node (
495 acpi_handle handle);
496
497acpi_handle
498acpi_ns_convert_entry_to_handle(
499 struct acpi_namespace_node *node);
500
501void
502acpi_ns_terminate (
503 void);
504
505struct acpi_namespace_node *
506acpi_ns_get_parent_node (
507 struct acpi_namespace_node *node);
508
509
510struct acpi_namespace_node *
511acpi_ns_get_next_valid_node (
512 struct acpi_namespace_node *node);
513
514
515#endif /* __ACNAMESP_H__ */
diff --git a/include/acpi/acobject.h b/include/acpi/acobject.h
new file mode 100644
index 00000000000..036023a940b
--- /dev/null
+++ b/include/acpi/acobject.h
@@ -0,0 +1,501 @@
1
2/******************************************************************************
3 *
4 * Name: acobject.h - Definition of union acpi_operand_object (Internal object only)
5 *
6 *****************************************************************************/
7
8/*
9 * Copyright (C) 2000 - 2005, R. Byron Moore
10 * All rights reserved.
11 *
12 * Redistribution and use in source and binary forms, with or without
13 * modification, are permitted provided that the following conditions
14 * are met:
15 * 1. Redistributions of source code must retain the above copyright
16 * notice, this list of conditions, and the following disclaimer,
17 * without modification.
18 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
19 * substantially similar to the "NO WARRANTY" disclaimer below
20 * ("Disclaimer") and any redistribution must be conditioned upon
21 * including a substantially similar Disclaimer requirement for further
22 * binary redistribution.
23 * 3. Neither the names of the above-listed copyright holders nor the names
24 * of any contributors may be used to endorse or promote products derived
25 * from this software without specific prior written permission.
26 *
27 * Alternatively, this software may be distributed under the terms of the
28 * GNU General Public License ("GPL") version 2 as published by the Free
29 * Software Foundation.
30 *
31 * NO WARRANTY
32 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
33 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
34 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
35 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
36 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
37 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
38 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
39 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
40 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
41 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
42 * POSSIBILITY OF SUCH DAMAGES.
43 */
44
45#ifndef _ACOBJECT_H
46#define _ACOBJECT_H
47
48
49/*
50 * The union acpi_operand_object is used to pass AML operands from the dispatcher
51 * to the interpreter, and to keep track of the various handlers such as
52 * address space handlers and notify handlers. The object is a constant
53 * size in order to allow it to be cached and reused.
54 */
55
56/*******************************************************************************
57 *
58 * Common Descriptors
59 *
60 ******************************************************************************/
61
62/*
63 * Common area for all objects.
64 *
65 * data_type is used to differentiate between internal descriptors, and MUST
66 * be the first byte in this structure.
67 */
68#define ACPI_OBJECT_COMMON_HEADER /* SIZE/ALIGNMENT: 32 bits, one ptr plus trailing 8-bit flag */\
69 u8 descriptor; /* To differentiate various internal objs */\
70 u8 type; /* acpi_object_type */\
71 u16 reference_count; /* For object deletion management */\
72 union acpi_operand_object *next_object; /* Objects linked to parent NS node */\
73 u8 flags; \
74
75/* Values for flag byte above */
76
77#define AOPOBJ_AML_CONSTANT 0x01
78#define AOPOBJ_STATIC_POINTER 0x02
79#define AOPOBJ_DATA_VALID 0x04
80#define AOPOBJ_OBJECT_INITIALIZED 0x08
81#define AOPOBJ_SETUP_COMPLETE 0x10
82#define AOPOBJ_SINGLE_DATUM 0x20
83
84
85/*
86 * Common bitfield for the field objects
87 * "Field Datum" -- a datum from the actual field object
88 * "Buffer Datum" -- a datum from a user buffer, read from or to be written to the field
89 */
90#define ACPI_COMMON_FIELD_INFO /* SIZE/ALIGNMENT: 24 bits + three 32-bit values */\
91 u8 field_flags; /* Access, update, and lock bits */\
92 u8 attribute; /* From access_as keyword */\
93 u8 access_byte_width; /* Read/Write size in bytes */\
94 u32 bit_length; /* Length of field in bits */\
95 u32 base_byte_offset; /* Byte offset within containing object */\
96 u8 start_field_bit_offset;/* Bit offset within first field datum (0-63) */\
97 u8 access_bit_width; /* Read/Write size in bits (8-64) */\
98 u32 value; /* Value to store into the Bank or Index register */\
99 struct acpi_namespace_node *node; /* Link back to parent node */
100
101
102/*
103 * Fields common to both Strings and Buffers
104 */
105#define ACPI_COMMON_BUFFER_INFO \
106 u32 length;
107
108
109/*
110 * Common fields for objects that support ASL notifications
111 */
112#define ACPI_COMMON_NOTIFY_INFO \
113 union acpi_operand_object *system_notify; /* Handler for system notifies */\
114 union acpi_operand_object *device_notify; /* Handler for driver notifies */\
115 union acpi_operand_object *handler; /* Handler for Address space */
116
117
118/******************************************************************************
119 *
120 * Basic data types
121 *
122 *****************************************************************************/
123
124struct acpi_object_common
125{
126 ACPI_OBJECT_COMMON_HEADER
127};
128
129
130struct acpi_object_integer
131{
132 ACPI_OBJECT_COMMON_HEADER
133 acpi_integer value;
134};
135
136/*
137 * Note: The String and Buffer object must be identical through the Pointer
138 * element. There is code that depends on this.
139 */
140struct acpi_object_string /* Null terminated, ASCII characters only */
141{
142 ACPI_OBJECT_COMMON_HEADER
143 ACPI_COMMON_BUFFER_INFO
144 char *pointer; /* String in AML stream or allocated string */
145};
146
147
148struct acpi_object_buffer
149{
150 ACPI_OBJECT_COMMON_HEADER
151 ACPI_COMMON_BUFFER_INFO
152 u8 *pointer; /* Buffer in AML stream or allocated buffer */
153 struct acpi_namespace_node *node; /* Link back to parent node */
154 u8 *aml_start;
155 u32 aml_length;
156};
157
158
159struct acpi_object_package
160{
161 ACPI_OBJECT_COMMON_HEADER
162
163 u32 count; /* # of elements in package */
164 u32 aml_length;
165 u8 *aml_start;
166 struct acpi_namespace_node *node; /* Link back to parent node */
167 union acpi_operand_object **elements; /* Array of pointers to acpi_objects */
168};
169
170
171/******************************************************************************
172 *
173 * Complex data types
174 *
175 *****************************************************************************/
176
177struct acpi_object_event
178{
179 ACPI_OBJECT_COMMON_HEADER
180 void *semaphore;
181};
182
183
184#define ACPI_INFINITE_CONCURRENCY 0xFF
185
186typedef
187acpi_status (*ACPI_INTERNAL_METHOD) (
188 struct acpi_walk_state *walk_state);
189
190struct acpi_object_method
191{
192 ACPI_OBJECT_COMMON_HEADER
193 u8 method_flags;
194 u8 param_count;
195 u32 aml_length;
196 void *semaphore;
197 u8 *aml_start;
198 ACPI_INTERNAL_METHOD implementation;
199 u8 concurrency;
200 u8 thread_count;
201 acpi_owner_id owning_id;
202};
203
204
205struct acpi_object_mutex
206{
207 ACPI_OBJECT_COMMON_HEADER
208 u8 sync_level; /* 0-15, specified in Mutex() call */
209 u16 acquisition_depth; /* Allow multiple Acquires, same thread */
210 struct acpi_thread_state *owner_thread; /* Current owner of the mutex */
211 void *semaphore; /* Actual OS synchronization object */
212 union acpi_operand_object *prev; /* Link for list of acquired mutexes */
213 union acpi_operand_object *next; /* Link for list of acquired mutexes */
214 struct acpi_namespace_node *node; /* Containing namespace node */
215 u8 original_sync_level; /* Owner's original sync level (0-15) */
216};
217
218
219struct acpi_object_region
220{
221 ACPI_OBJECT_COMMON_HEADER
222
223 u8 space_id;
224 union acpi_operand_object *handler; /* Handler for region access */
225 struct acpi_namespace_node *node; /* Containing namespace node */
226 union acpi_operand_object *next;
227 u32 length;
228 acpi_physical_address address;
229};
230
231
232/******************************************************************************
233 *
234 * Objects that can be notified. All share a common notify_info area.
235 *
236 *****************************************************************************/
237
238struct acpi_object_notify_common /* COMMON NOTIFY for POWER, PROCESSOR, DEVICE, and THERMAL */
239{
240 ACPI_OBJECT_COMMON_HEADER
241 ACPI_COMMON_NOTIFY_INFO
242};
243
244
245struct acpi_object_device
246{
247 ACPI_OBJECT_COMMON_HEADER
248 ACPI_COMMON_NOTIFY_INFO
249 struct acpi_gpe_block_info *gpe_block;
250};
251
252
253struct acpi_object_power_resource
254{
255 ACPI_OBJECT_COMMON_HEADER
256 ACPI_COMMON_NOTIFY_INFO
257 u32 system_level;
258 u32 resource_order;
259};
260
261
262struct acpi_object_processor
263{
264 ACPI_OBJECT_COMMON_HEADER
265 ACPI_COMMON_NOTIFY_INFO
266 u32 proc_id;
267 u32 length;
268 acpi_io_address address;
269};
270
271
272struct acpi_object_thermal_zone
273{
274 ACPI_OBJECT_COMMON_HEADER
275 ACPI_COMMON_NOTIFY_INFO
276};
277
278
279/******************************************************************************
280 *
281 * Fields. All share a common header/info field.
282 *
283 *****************************************************************************/
284
285struct acpi_object_field_common /* COMMON FIELD (for BUFFER, REGION, BANK, and INDEX fields) */
286{
287 ACPI_OBJECT_COMMON_HEADER
288 ACPI_COMMON_FIELD_INFO
289 union acpi_operand_object *region_obj; /* Containing Operation Region object */
290 /* (REGION/BANK fields only) */
291};
292
293
294struct acpi_object_region_field
295{
296 ACPI_OBJECT_COMMON_HEADER
297 ACPI_COMMON_FIELD_INFO
298 union acpi_operand_object *region_obj; /* Containing op_region object */
299};
300
301
302struct acpi_object_bank_field
303{
304 ACPI_OBJECT_COMMON_HEADER
305 ACPI_COMMON_FIELD_INFO
306 union acpi_operand_object *region_obj; /* Containing op_region object */
307 union acpi_operand_object *bank_obj; /* bank_select Register object */
308};
309
310
311struct acpi_object_index_field
312{
313 ACPI_OBJECT_COMMON_HEADER
314 ACPI_COMMON_FIELD_INFO
315
316 /*
317 * No "region_obj" pointer needed since the Index and Data registers
318 * are each field definitions unto themselves.
319 */
320 union acpi_operand_object *index_obj; /* Index register */
321 union acpi_operand_object *data_obj; /* Data register */
322};
323
324
325/* The buffer_field is different in that it is part of a Buffer, not an op_region */
326
327struct acpi_object_buffer_field
328{
329 ACPI_OBJECT_COMMON_HEADER
330 ACPI_COMMON_FIELD_INFO
331 union acpi_operand_object *buffer_obj; /* Containing Buffer object */
332};
333
334
335/******************************************************************************
336 *
337 * Objects for handlers
338 *
339 *****************************************************************************/
340
341struct acpi_object_notify_handler
342{
343 ACPI_OBJECT_COMMON_HEADER
344 struct acpi_namespace_node *node; /* Parent device */
345 acpi_notify_handler handler;
346 void *context;
347};
348
349
350/* Flags for address handler */
351
352#define ACPI_ADDR_HANDLER_DEFAULT_INSTALLED 0x1
353
354
355struct acpi_object_addr_handler
356{
357 ACPI_OBJECT_COMMON_HEADER
358 u8 space_id;
359 u16 hflags;
360 acpi_adr_space_handler handler;
361 struct acpi_namespace_node *node; /* Parent device */
362 void *context;
363 acpi_adr_space_setup setup;
364 union acpi_operand_object *region_list; /* regions using this handler */
365 union acpi_operand_object *next;
366};
367
368
369/******************************************************************************
370 *
371 * Special internal objects
372 *
373 *****************************************************************************/
374
375/*
376 * The Reference object type is used for these opcodes:
377 * Arg[0-6], Local[0-7], index_op, name_op, zero_op, one_op, ones_op, debug_op
378 */
379struct acpi_object_reference
380{
381 ACPI_OBJECT_COMMON_HEADER
382 u8 target_type; /* Used for index_op */
383 u16 opcode;
384 u32 offset; /* Used for arg_op, local_op, and index_op */
385 void *object; /* name_op=>HANDLE to obj, index_op=>union acpi_operand_object */
386 struct acpi_namespace_node *node;
387 union acpi_operand_object **where;
388};
389
390
391/*
392 * Extra object is used as additional storage for types that
393 * have AML code in their declarations (term_args) that must be
394 * evaluated at run time.
395 *
396 * Currently: Region and field_unit types
397 */
398struct acpi_object_extra
399{
400 ACPI_OBJECT_COMMON_HEADER
401 u8 byte_fill1;
402 u16 word_fill1;
403 u32 aml_length;
404 u8 *aml_start;
405 struct acpi_namespace_node *method_REG; /* _REG method for this region (if any) */
406 void *region_context; /* Region-specific data */
407};
408
409
410/* Additional data that can be attached to namespace nodes */
411
412struct acpi_object_data
413{
414 ACPI_OBJECT_COMMON_HEADER
415 acpi_object_handler handler;
416 void *pointer;
417};
418
419
420/* Structure used when objects are cached for reuse */
421
422struct acpi_object_cache_list
423{
424 ACPI_OBJECT_COMMON_HEADER
425 union acpi_operand_object *next; /* Link for object cache and internal lists*/
426};
427
428
429/******************************************************************************
430 *
431 * union acpi_operand_object Descriptor - a giant union of all of the above
432 *
433 *****************************************************************************/
434
435union acpi_operand_object
436{
437 struct acpi_object_common common;
438 struct acpi_object_integer integer;
439 struct acpi_object_string string;
440 struct acpi_object_buffer buffer;
441 struct acpi_object_package package;
442 struct acpi_object_event event;
443 struct acpi_object_method method;
444 struct acpi_object_mutex mutex;
445 struct acpi_object_region region;
446 struct acpi_object_notify_common common_notify;
447 struct acpi_object_device device;
448 struct acpi_object_power_resource power_resource;
449 struct acpi_object_processor processor;
450 struct acpi_object_thermal_zone thermal_zone;
451 struct acpi_object_field_common common_field;
452 struct acpi_object_region_field field;
453 struct acpi_object_buffer_field buffer_field;
454 struct acpi_object_bank_field bank_field;
455 struct acpi_object_index_field index_field;
456 struct acpi_object_notify_handler notify;
457 struct acpi_object_addr_handler address_space;
458 struct acpi_object_reference reference;
459 struct acpi_object_extra extra;
460 struct acpi_object_data data;
461 struct acpi_object_cache_list cache;
462};
463
464
465/******************************************************************************
466 *
467 * union acpi_descriptor - objects that share a common descriptor identifier
468 *
469 *****************************************************************************/
470
471
472/* Object descriptor types */
473
474#define ACPI_DESC_TYPE_CACHED 0x01 /* Used only when object is cached */
475#define ACPI_DESC_TYPE_STATE 0x02
476#define ACPI_DESC_TYPE_STATE_UPDATE 0x03
477#define ACPI_DESC_TYPE_STATE_PACKAGE 0x04
478#define ACPI_DESC_TYPE_STATE_CONTROL 0x05
479#define ACPI_DESC_TYPE_STATE_RPSCOPE 0x06
480#define ACPI_DESC_TYPE_STATE_PSCOPE 0x07
481#define ACPI_DESC_TYPE_STATE_WSCOPE 0x08
482#define ACPI_DESC_TYPE_STATE_RESULT 0x09
483#define ACPI_DESC_TYPE_STATE_NOTIFY 0x0A
484#define ACPI_DESC_TYPE_STATE_THREAD 0x0B
485#define ACPI_DESC_TYPE_WALK 0x0C
486#define ACPI_DESC_TYPE_PARSER 0x0D
487#define ACPI_DESC_TYPE_OPERAND 0x0E
488#define ACPI_DESC_TYPE_NAMED 0x0F
489#define ACPI_DESC_TYPE_MAX 0x0F
490
491
492union acpi_descriptor
493{
494 u8 descriptor_id; /* To differentiate various internal objs */\
495 union acpi_operand_object object;
496 struct acpi_namespace_node node;
497 union acpi_parse_object op;
498};
499
500
501#endif /* _ACOBJECT_H */
diff --git a/include/acpi/acoutput.h b/include/acpi/acoutput.h
new file mode 100644
index 00000000000..2fbe180fee6
--- /dev/null
+++ b/include/acpi/acoutput.h
@@ -0,0 +1,185 @@
1/******************************************************************************
2 *
3 * Name: acoutput.h -- debug output
4 *
5 *****************************************************************************/
6
7/*
8 * Copyright (C) 2000 - 2005, R. Byron Moore
9 * All rights reserved.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions, and the following disclaimer,
16 * without modification.
17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18 * substantially similar to the "NO WARRANTY" disclaimer below
19 * ("Disclaimer") and any redistribution must be conditioned upon
20 * including a substantially similar Disclaimer requirement for further
21 * binary redistribution.
22 * 3. Neither the names of the above-listed copyright holders nor the names
23 * of any contributors may be used to endorse or promote products derived
24 * from this software without specific prior written permission.
25 *
26 * Alternatively, this software may be distributed under the terms of the
27 * GNU General Public License ("GPL") version 2 as published by the Free
28 * Software Foundation.
29 *
30 * NO WARRANTY
31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41 * POSSIBILITY OF SUCH DAMAGES.
42 */
43
44#ifndef __ACOUTPUT_H__
45#define __ACOUTPUT_H__
46
47/*
48 * Debug levels and component IDs. These are used to control the
49 * granularity of the output of the DEBUG_PRINT macro -- on a per-
50 * component basis and a per-exception-type basis.
51 */
52
53/* Component IDs are used in the global "debug_layer" */
54
55#define ACPI_UTILITIES 0x00000001
56#define ACPI_HARDWARE 0x00000002
57#define ACPI_EVENTS 0x00000004
58#define ACPI_TABLES 0x00000008
59#define ACPI_NAMESPACE 0x00000010
60#define ACPI_PARSER 0x00000020
61#define ACPI_DISPATCHER 0x00000040
62#define ACPI_EXECUTER 0x00000080
63#define ACPI_RESOURCES 0x00000100
64#define ACPI_CA_DEBUGGER 0x00000200
65#define ACPI_OS_SERVICES 0x00000400
66#define ACPI_CA_DISASSEMBLER 0x00000800
67
68/* Component IDs for ACPI tools and utilities */
69
70#define ACPI_COMPILER 0x00001000
71#define ACPI_TOOLS 0x00002000
72
73#define ACPI_ALL_COMPONENTS 0x00003FFF
74#define ACPI_COMPONENT_DEFAULT (ACPI_ALL_COMPONENTS)
75
76
77/* Component IDs reserved for ACPI drivers */
78
79#define ACPI_ALL_DRIVERS 0xFFFF0000
80
81
82/*
83 * Raw debug output levels, do not use these in the DEBUG_PRINT macros
84 */
85#define ACPI_LV_ERROR 0x00000001
86#define ACPI_LV_WARN 0x00000002
87#define ACPI_LV_INIT 0x00000004
88#define ACPI_LV_DEBUG_OBJECT 0x00000008
89#define ACPI_LV_INFO 0x00000010
90#define ACPI_LV_ALL_EXCEPTIONS 0x0000001F
91
92/* Trace verbosity level 1 [Standard Trace Level] */
93
94#define ACPI_LV_INIT_NAMES 0x00000020
95#define ACPI_LV_PARSE 0x00000040
96#define ACPI_LV_LOAD 0x00000080
97#define ACPI_LV_DISPATCH 0x00000100
98#define ACPI_LV_EXEC 0x00000200
99#define ACPI_LV_NAMES 0x00000400
100#define ACPI_LV_OPREGION 0x00000800
101#define ACPI_LV_BFIELD 0x00001000
102#define ACPI_LV_TABLES 0x00002000
103#define ACPI_LV_VALUES 0x00004000
104#define ACPI_LV_OBJECTS 0x00008000
105#define ACPI_LV_RESOURCES 0x00010000
106#define ACPI_LV_USER_REQUESTS 0x00020000
107#define ACPI_LV_PACKAGE 0x00040000
108#define ACPI_LV_VERBOSITY1 0x0007FF40 | ACPI_LV_ALL_EXCEPTIONS
109
110/* Trace verbosity level 2 [Function tracing and memory allocation] */
111
112#define ACPI_LV_ALLOCATIONS 0x00100000
113#define ACPI_LV_FUNCTIONS 0x00200000
114#define ACPI_LV_OPTIMIZATIONS 0x00400000
115#define ACPI_LV_VERBOSITY2 0x00700000 | ACPI_LV_VERBOSITY1
116#define ACPI_LV_ALL ACPI_LV_VERBOSITY2
117
118/* Trace verbosity level 3 [Threading, I/O, and Interrupts] */
119
120#define ACPI_LV_MUTEX 0x01000000
121#define ACPI_LV_THREADS 0x02000000
122#define ACPI_LV_IO 0x04000000
123#define ACPI_LV_INTERRUPTS 0x08000000
124#define ACPI_LV_VERBOSITY3 0x0F000000 | ACPI_LV_VERBOSITY2
125
126/* Exceptionally verbose output -- also used in the global "debug_level" */
127
128#define ACPI_LV_AML_DISASSEMBLE 0x10000000
129#define ACPI_LV_VERBOSE_INFO 0x20000000
130#define ACPI_LV_FULL_TABLES 0x40000000
131#define ACPI_LV_EVENTS 0x80000000
132
133#define ACPI_LV_VERBOSE 0xF0000000
134
135
136/*
137 * Debug level macros that are used in the DEBUG_PRINT macros
138 */
139#define ACPI_DEBUG_LEVEL(dl) (u32) dl,__LINE__,&_debug_info
140
141/* Exception level -- used in the global "debug_level" */
142
143#define ACPI_DB_ERROR ACPI_DEBUG_LEVEL (ACPI_LV_ERROR)
144#define ACPI_DB_WARN ACPI_DEBUG_LEVEL (ACPI_LV_WARN)
145#define ACPI_DB_INIT ACPI_DEBUG_LEVEL (ACPI_LV_INIT)
146#define ACPI_DB_DEBUG_OBJECT ACPI_DEBUG_LEVEL (ACPI_LV_DEBUG_OBJECT)
147#define ACPI_DB_INFO ACPI_DEBUG_LEVEL (ACPI_LV_INFO)
148#define ACPI_DB_ALL_EXCEPTIONS ACPI_DEBUG_LEVEL (ACPI_LV_ALL_EXCEPTIONS)
149
150
151/* Trace level -- also used in the global "debug_level" */
152
153#define ACPI_DB_INIT_NAMES ACPI_DEBUG_LEVEL (ACPI_LV_INIT_NAMES)
154#define ACPI_DB_THREADS ACPI_DEBUG_LEVEL (ACPI_LV_THREADS)
155#define ACPI_DB_PARSE ACPI_DEBUG_LEVEL (ACPI_LV_PARSE)
156#define ACPI_DB_DISPATCH ACPI_DEBUG_LEVEL (ACPI_LV_DISPATCH)
157#define ACPI_DB_LOAD ACPI_DEBUG_LEVEL (ACPI_LV_LOAD)
158#define ACPI_DB_EXEC ACPI_DEBUG_LEVEL (ACPI_LV_EXEC)
159#define ACPI_DB_NAMES ACPI_DEBUG_LEVEL (ACPI_LV_NAMES)
160#define ACPI_DB_OPREGION ACPI_DEBUG_LEVEL (ACPI_LV_OPREGION)
161#define ACPI_DB_BFIELD ACPI_DEBUG_LEVEL (ACPI_LV_BFIELD)
162#define ACPI_DB_TABLES ACPI_DEBUG_LEVEL (ACPI_LV_TABLES)
163#define ACPI_DB_FUNCTIONS ACPI_DEBUG_LEVEL (ACPI_LV_FUNCTIONS)
164#define ACPI_DB_OPTIMIZATIONS ACPI_DEBUG_LEVEL (ACPI_LV_OPTIMIZATIONS)
165#define ACPI_DB_VALUES ACPI_DEBUG_LEVEL (ACPI_LV_VALUES)
166#define ACPI_DB_OBJECTS ACPI_DEBUG_LEVEL (ACPI_LV_OBJECTS)
167#define ACPI_DB_ALLOCATIONS ACPI_DEBUG_LEVEL (ACPI_LV_ALLOCATIONS)
168#define ACPI_DB_RESOURCES ACPI_DEBUG_LEVEL (ACPI_LV_RESOURCES)
169#define ACPI_DB_IO ACPI_DEBUG_LEVEL (ACPI_LV_IO)
170#define ACPI_DB_INTERRUPTS ACPI_DEBUG_LEVEL (ACPI_LV_INTERRUPTS)
171#define ACPI_DB_USER_REQUESTS ACPI_DEBUG_LEVEL (ACPI_LV_USER_REQUESTS)
172#define ACPI_DB_PACKAGE ACPI_DEBUG_LEVEL (ACPI_LV_PACKAGE)
173#define ACPI_DB_MUTEX ACPI_DEBUG_LEVEL (ACPI_LV_MUTEX)
174
175#define ACPI_DB_ALL ACPI_DEBUG_LEVEL (ACPI_LV_ALL)
176
177
178/* Defaults for debug_level, debug and normal */
179
180#define ACPI_DEBUG_DEFAULT (ACPI_LV_INIT | ACPI_LV_WARN | ACPI_LV_ERROR | ACPI_LV_DEBUG_OBJECT)
181#define ACPI_NORMAL_DEFAULT (ACPI_LV_INIT | ACPI_LV_WARN | ACPI_LV_ERROR | ACPI_LV_DEBUG_OBJECT)
182#define ACPI_DEBUG_ALL (ACPI_LV_AML_DISASSEMBLE | ACPI_LV_ALL_EXCEPTIONS | ACPI_LV_ALL)
183
184
185#endif /* __ACOUTPUT_H__ */
diff --git a/include/acpi/acparser.h b/include/acpi/acparser.h
new file mode 100644
index 00000000000..c0395ef2b0d
--- /dev/null
+++ b/include/acpi/acparser.h
@@ -0,0 +1,351 @@
1/******************************************************************************
2 *
3 * Module Name: acparser.h - AML Parser subcomponent prototypes and defines
4 *
5 *****************************************************************************/
6
7/*
8 * Copyright (C) 2000 - 2005, R. Byron Moore
9 * All rights reserved.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions, and the following disclaimer,
16 * without modification.
17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18 * substantially similar to the "NO WARRANTY" disclaimer below
19 * ("Disclaimer") and any redistribution must be conditioned upon
20 * including a substantially similar Disclaimer requirement for further
21 * binary redistribution.
22 * 3. Neither the names of the above-listed copyright holders nor the names
23 * of any contributors may be used to endorse or promote products derived
24 * from this software without specific prior written permission.
25 *
26 * Alternatively, this software may be distributed under the terms of the
27 * GNU General Public License ("GPL") version 2 as published by the Free
28 * Software Foundation.
29 *
30 * NO WARRANTY
31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41 * POSSIBILITY OF SUCH DAMAGES.
42 */
43
44
45#ifndef __ACPARSER_H__
46#define __ACPARSER_H__
47
48
49#define OP_HAS_RETURN_VALUE 1
50
51/* variable # arguments */
52
53#define ACPI_VAR_ARGS ACPI_UINT32_MAX
54
55
56#define ACPI_PARSE_DELETE_TREE 0x0001
57#define ACPI_PARSE_NO_TREE_DELETE 0x0000
58#define ACPI_PARSE_TREE_MASK 0x0001
59
60#define ACPI_PARSE_LOAD_PASS1 0x0010
61#define ACPI_PARSE_LOAD_PASS2 0x0020
62#define ACPI_PARSE_EXECUTE 0x0030
63#define ACPI_PARSE_MODE_MASK 0x0030
64
65#define ACPI_PARSE_DEFERRED_OP 0x0100
66
67/* Parser external interfaces */
68
69acpi_status
70acpi_psx_load_table (
71 u8 *pcode_addr,
72 u32 pcode_length);
73
74acpi_status
75acpi_psx_execute (
76 struct acpi_parameter_info *info);
77
78
79/******************************************************************************
80 *
81 * Parser interfaces
82 *
83 *****************************************************************************/
84
85
86/* psargs - Parse AML opcode arguments */
87
88u8 *
89acpi_ps_get_next_package_end (
90 struct acpi_parse_state *parser_state);
91
92u32
93acpi_ps_get_next_package_length (
94 struct acpi_parse_state *parser_state);
95
96char *
97acpi_ps_get_next_namestring (
98 struct acpi_parse_state *parser_state);
99
100void
101acpi_ps_get_next_simple_arg (
102 struct acpi_parse_state *parser_state,
103 u32 arg_type,
104 union acpi_parse_object *arg);
105
106acpi_status
107acpi_ps_get_next_namepath (
108 struct acpi_walk_state *walk_state,
109 struct acpi_parse_state *parser_state,
110 union acpi_parse_object *arg,
111 u8 method_call);
112
113union acpi_parse_object *
114acpi_ps_get_next_field (
115 struct acpi_parse_state *parser_state);
116
117acpi_status
118acpi_ps_get_next_arg (
119 struct acpi_walk_state *walk_state,
120 struct acpi_parse_state *parser_state,
121 u32 arg_type,
122 union acpi_parse_object **return_arg);
123
124
125/* psfind */
126
127union acpi_parse_object *
128acpi_ps_find_name (
129 union acpi_parse_object *scope,
130 u32 name,
131 u32 opcode);
132
133union acpi_parse_object*
134acpi_ps_get_parent (
135 union acpi_parse_object *op);
136
137
138/* psopcode - AML Opcode information */
139
140const struct acpi_opcode_info *
141acpi_ps_get_opcode_info (
142 u16 opcode);
143
144char *
145acpi_ps_get_opcode_name (
146 u16 opcode);
147
148
149/* psparse - top level parsing routines */
150
151u32
152acpi_ps_get_opcode_size (
153 u32 opcode);
154
155void
156acpi_ps_complete_this_op (
157 struct acpi_walk_state *walk_state,
158 union acpi_parse_object *op);
159
160acpi_status
161acpi_ps_next_parse_state (
162 struct acpi_walk_state *walk_state,
163 union acpi_parse_object *op,
164 acpi_status callback_status);
165
166acpi_status
167acpi_ps_find_object (
168 struct acpi_walk_state *walk_state,
169 union acpi_parse_object **out_op);
170
171void
172acpi_ps_delete_parse_tree (
173 union acpi_parse_object *root);
174
175acpi_status
176acpi_ps_parse_loop (
177 struct acpi_walk_state *walk_state);
178
179acpi_status
180acpi_ps_parse_aml (
181 struct acpi_walk_state *walk_state);
182
183acpi_status
184acpi_ps_parse_table (
185 u8 *aml,
186 u32 aml_size,
187 acpi_parse_downwards descending_callback,
188 acpi_parse_upwards ascending_callback,
189 union acpi_parse_object **root_object);
190
191u16
192acpi_ps_peek_opcode (
193 struct acpi_parse_state *state);
194
195
196/* psscope - Scope stack management routines */
197
198
199acpi_status
200acpi_ps_init_scope (
201 struct acpi_parse_state *parser_state,
202 union acpi_parse_object *root);
203
204union acpi_parse_object *
205acpi_ps_get_parent_scope (
206 struct acpi_parse_state *state);
207
208u8
209acpi_ps_has_completed_scope (
210 struct acpi_parse_state *parser_state);
211
212void
213acpi_ps_pop_scope (
214 struct acpi_parse_state *parser_state,
215 union acpi_parse_object **op,
216 u32 *arg_list,
217 u32 *arg_count);
218
219acpi_status
220acpi_ps_push_scope (
221 struct acpi_parse_state *parser_state,
222 union acpi_parse_object *op,
223 u32 remaining_args,
224 u32 arg_count);
225
226void
227acpi_ps_cleanup_scope (
228 struct acpi_parse_state *state);
229
230
231/* pstree - parse tree manipulation routines */
232
233void
234acpi_ps_append_arg(
235 union acpi_parse_object *op,
236 union acpi_parse_object *arg);
237
238union acpi_parse_object*
239acpi_ps_find (
240 union acpi_parse_object *scope,
241 char *path,
242 u16 opcode,
243 u32 create);
244
245union acpi_parse_object *
246acpi_ps_get_arg(
247 union acpi_parse_object *op,
248 u32 argn);
249
250#ifdef ACPI_FUTURE_USAGE
251union acpi_parse_object *
252acpi_ps_get_child (
253 union acpi_parse_object *op);
254
255union acpi_parse_object *
256acpi_ps_get_depth_next (
257 union acpi_parse_object *origin,
258 union acpi_parse_object *op);
259#endif /* ACPI_FUTURE_USAGE */
260
261
262/* pswalk - parse tree walk routines */
263
264acpi_status
265acpi_ps_walk_parsed_aml (
266 union acpi_parse_object *start_op,
267 union acpi_parse_object *end_op,
268 union acpi_operand_object *mth_desc,
269 struct acpi_namespace_node *start_node,
270 union acpi_operand_object **params,
271 union acpi_operand_object **caller_return_desc,
272 acpi_owner_id owner_id,
273 acpi_parse_downwards descending_callback,
274 acpi_parse_upwards ascending_callback);
275
276acpi_status
277acpi_ps_get_next_walk_op (
278 struct acpi_walk_state *walk_state,
279 union acpi_parse_object *op,
280 acpi_parse_upwards ascending_callback);
281
282acpi_status
283acpi_ps_delete_completed_op (
284 struct acpi_walk_state *walk_state);
285
286
287/* psutils - parser utilities */
288
289union acpi_parse_object *
290acpi_ps_create_scope_op (
291 void);
292
293void
294acpi_ps_init_op (
295 union acpi_parse_object *op,
296 u16 opcode);
297
298union acpi_parse_object *
299acpi_ps_alloc_op (
300 u16 opcode);
301
302void
303acpi_ps_free_op (
304 union acpi_parse_object *op);
305
306#ifdef ACPI_ENABLE_OBJECT_CACHE
307void
308acpi_ps_delete_parse_cache (
309 void);
310#endif
311
312u8
313acpi_ps_is_leading_char (
314 u32 c);
315
316u8
317acpi_ps_is_prefix_char (
318 u32 c);
319
320#ifdef ACPI_FUTURE_USAGE
321u32
322acpi_ps_get_name(
323 union acpi_parse_object *op);
324#endif
325
326void
327acpi_ps_set_name(
328 union acpi_parse_object *op,
329 u32 name);
330
331
332/* psdump - display parser tree */
333
334u32
335acpi_ps_sprint_path (
336 char *buffer_start,
337 u32 buffer_size,
338 union acpi_parse_object *op);
339
340u32
341acpi_ps_sprint_op (
342 char *buffer_start,
343 u32 buffer_size,
344 union acpi_parse_object *op);
345
346void
347acpi_ps_show (
348 union acpi_parse_object *op);
349
350
351#endif /* __ACPARSER_H__ */
diff --git a/include/acpi/acpi.h b/include/acpi/acpi.h
new file mode 100644
index 00000000000..ad53252dd42
--- /dev/null
+++ b/include/acpi/acpi.h
@@ -0,0 +1,69 @@
1/******************************************************************************
2 *
3 * Name: acpi.h - Master include file, Publics and external data.
4 *
5 *****************************************************************************/
6
7/*
8 * Copyright (C) 2000 - 2005, R. Byron Moore
9 * All rights reserved.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions, and the following disclaimer,
16 * without modification.
17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18 * substantially similar to the "NO WARRANTY" disclaimer below
19 * ("Disclaimer") and any redistribution must be conditioned upon
20 * including a substantially similar Disclaimer requirement for further
21 * binary redistribution.
22 * 3. Neither the names of the above-listed copyright holders nor the names
23 * of any contributors may be used to endorse or promote products derived
24 * from this software without specific prior written permission.
25 *
26 * Alternatively, this software may be distributed under the terms of the
27 * GNU General Public License ("GPL") version 2 as published by the Free
28 * Software Foundation.
29 *
30 * NO WARRANTY
31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41 * POSSIBILITY OF SUCH DAMAGES.
42 */
43
44#ifndef __ACPI_H__
45#define __ACPI_H__
46
47/*
48 * Common includes for all ACPI driver files
49 * We put them here because we don't want to duplicate them
50 * in the rest of the source code again and again.
51 */
52#include "acconfig.h" /* Configuration constants */
53#include "platform/acenv.h" /* Target environment specific items */
54#include "actypes.h" /* Fundamental common data types */
55#include "acexcep.h" /* ACPI exception codes */
56#include "acmacros.h" /* C macros */
57#include "actbl.h" /* ACPI table definitions */
58#include "aclocal.h" /* Internal data types */
59#include "acoutput.h" /* Error output and Debug macros */
60#include "acpiosxf.h" /* Interfaces to the ACPI-to-OS layer*/
61#include "acpixf.h" /* ACPI core subsystem external interfaces */
62#include "acobject.h" /* ACPI internal object */
63#include "acstruct.h" /* Common structures */
64#include "acglobal.h" /* All global variables */
65#include "achware.h" /* Hardware defines and interfaces */
66#include "acutils.h" /* Utility interfaces */
67
68
69#endif /* __ACPI_H__ */
diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h
new file mode 100644
index 00000000000..c627bc408a6
--- /dev/null
+++ b/include/acpi/acpi_bus.h
@@ -0,0 +1,341 @@
1/*
2 * acpi_bus.h - ACPI Bus Driver ($Revision: 22 $)
3 *
4 * Copyright (C) 2001, 2002 Andy Grover <andrew.grover@intel.com>
5 * Copyright (C) 2001, 2002 Paul Diefenbaugh <paul.s.diefenbaugh@intel.com>
6 *
7 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or (at
12 * your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful, but
15 * WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License along
20 * with this program; if not, write to the Free Software Foundation, Inc.,
21 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
22 *
23 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
24 */
25
26#ifndef __ACPI_BUS_H__
27#define __ACPI_BUS_H__
28
29#include <linux/kobject.h>
30
31#include <acpi/acpi.h>
32
33#define PREFIX "ACPI: "
34
35/* TBD: Make dynamic */
36#define ACPI_MAX_HANDLES 10
37struct acpi_handle_list {
38 u32 count;
39 acpi_handle handles[ACPI_MAX_HANDLES];
40};
41
42
43/* acpi_utils.h */
44acpi_status
45acpi_extract_package (
46 union acpi_object *package,
47 struct acpi_buffer *format,
48 struct acpi_buffer *buffer);
49acpi_status
50acpi_evaluate_integer (
51 acpi_handle handle,
52 acpi_string pathname,
53 struct acpi_object_list *arguments,
54 unsigned long *data);
55acpi_status
56acpi_evaluate_reference (
57 acpi_handle handle,
58 acpi_string pathname,
59 struct acpi_object_list *arguments,
60 struct acpi_handle_list *list);
61
62
63#ifdef CONFIG_ACPI_BUS
64
65#include <linux/proc_fs.h>
66
67#define ACPI_BUS_FILE_ROOT "acpi"
68extern struct proc_dir_entry *acpi_root_dir;
69extern FADT_DESCRIPTOR acpi_fadt;
70
71enum acpi_bus_removal_type {
72 ACPI_BUS_REMOVAL_NORMAL = 0,
73 ACPI_BUS_REMOVAL_EJECT,
74 ACPI_BUS_REMOVAL_SUPRISE,
75 ACPI_BUS_REMOVAL_TYPE_COUNT
76};
77
78enum acpi_bus_device_type {
79 ACPI_BUS_TYPE_DEVICE = 0,
80 ACPI_BUS_TYPE_POWER,
81 ACPI_BUS_TYPE_PROCESSOR,
82 ACPI_BUS_TYPE_THERMAL,
83 ACPI_BUS_TYPE_SYSTEM,
84 ACPI_BUS_TYPE_POWER_BUTTON,
85 ACPI_BUS_TYPE_SLEEP_BUTTON,
86 ACPI_BUS_DEVICE_TYPE_COUNT
87};
88
89struct acpi_driver;
90struct acpi_device;
91
92
93/*
94 * ACPI Driver
95 * -----------
96 */
97
98typedef int (*acpi_op_add) (struct acpi_device *device);
99typedef int (*acpi_op_remove) (struct acpi_device *device, int type);
100typedef int (*acpi_op_lock) (struct acpi_device *device, int type);
101typedef int (*acpi_op_start) (struct acpi_device *device);
102typedef int (*acpi_op_stop) (struct acpi_device *device, int type);
103typedef int (*acpi_op_suspend) (struct acpi_device *device, int state);
104typedef int (*acpi_op_resume) (struct acpi_device *device, int state);
105typedef int (*acpi_op_scan) (struct acpi_device *device);
106typedef int (*acpi_op_bind) (struct acpi_device *device);
107typedef int (*acpi_op_unbind) (struct acpi_device *device);
108typedef int (*acpi_op_match) (struct acpi_device *device,
109 struct acpi_driver *driver);
110
111struct acpi_device_ops {
112 acpi_op_add add;
113 acpi_op_remove remove;
114 acpi_op_lock lock;
115 acpi_op_start start;
116 acpi_op_stop stop;
117 acpi_op_suspend suspend;
118 acpi_op_resume resume;
119 acpi_op_scan scan;
120 acpi_op_bind bind;
121 acpi_op_unbind unbind;
122 acpi_op_match match;
123};
124
125struct acpi_driver {
126 struct list_head node;
127 char name[80];
128 char class[80];
129 atomic_t references;
130 char *ids; /* Supported Hardware IDs */
131 struct acpi_device_ops ops;
132};
133
134/*
135 * ACPI Device
136 * -----------
137 */
138
139/* Status (_STA) */
140
141struct acpi_device_status {
142 u32 present:1;
143 u32 enabled:1;
144 u32 show_in_ui:1;
145 u32 functional:1;
146 u32 battery_present:1;
147 u32 reserved:27;
148};
149
150
151/* Flags */
152
153struct acpi_device_flags {
154 u32 dynamic_status:1;
155 u32 hardware_id:1;
156 u32 compatible_ids:1;
157 u32 bus_address:1;
158 u32 unique_id:1;
159 u32 removable:1;
160 u32 ejectable:1;
161 u32 lockable:1;
162 u32 suprise_removal_ok:1;
163 u32 power_manageable:1;
164 u32 performance_manageable:1;
165 u32 wake_capable:1; /* Wakeup(_PRW) supported? */
166 u32 reserved:20;
167};
168
169
170/* File System */
171
172struct acpi_device_dir {
173 struct proc_dir_entry *entry;
174};
175
176#define acpi_device_dir(d) ((d)->dir.entry)
177
178
179/* Plug and Play */
180
181typedef char acpi_bus_id[5];
182typedef unsigned long acpi_bus_address;
183typedef char acpi_hardware_id[9];
184typedef char acpi_unique_id[9];
185typedef char acpi_device_name[40];
186typedef char acpi_device_class[20];
187
188struct acpi_device_pnp {
189 acpi_bus_id bus_id; /* Object name */
190 acpi_bus_address bus_address; /* _ADR */
191 acpi_hardware_id hardware_id; /* _HID */
192 struct acpi_compatible_id_list *cid_list; /* _CIDs */
193 acpi_unique_id unique_id; /* _UID */
194 acpi_device_name device_name; /* Driver-determined */
195 acpi_device_class device_class; /* " */
196};
197
198#define acpi_device_bid(d) ((d)->pnp.bus_id)
199#define acpi_device_adr(d) ((d)->pnp.bus_address)
200#define acpi_device_hid(d) ((d)->pnp.hardware_id)
201#define acpi_device_uid(d) ((d)->pnp.unique_id)
202#define acpi_device_name(d) ((d)->pnp.device_name)
203#define acpi_device_class(d) ((d)->pnp.device_class)
204
205
206/* Power Management */
207
208struct acpi_device_power_flags {
209 u32 explicit_get:1; /* _PSC present? */
210 u32 power_resources:1; /* Power resources */
211 u32 inrush_current:1; /* Serialize Dx->D0 */
212 u32 power_removed:1; /* Optimize Dx->D0 */
213 u32 reserved:28;
214};
215
216struct acpi_device_power_state {
217 struct {
218 u8 valid:1;
219 u8 explicit_set:1; /* _PSx present? */
220 u8 reserved:6;
221 } flags;
222 int power; /* % Power (compared to D0) */
223 int latency; /* Dx->D0 time (microseconds) */
224 struct acpi_handle_list resources; /* Power resources referenced */
225};
226
227struct acpi_device_power {
228 int state; /* Current state */
229 struct acpi_device_power_flags flags;
230 struct acpi_device_power_state states[4]; /* Power states (D0-D3) */
231};
232
233
234/* Performance Management */
235
236struct acpi_device_perf_flags {
237 u8 reserved:8;
238};
239
240struct acpi_device_perf_state {
241 struct {
242 u8 valid:1;
243 u8 reserved:7;
244 } flags;
245 u8 power; /* % Power (compared to P0) */
246 u8 performance; /* % Performance ( " ) */
247 int latency; /* Px->P0 time (microseconds) */
248};
249
250struct acpi_device_perf {
251 int state;
252 struct acpi_device_perf_flags flags;
253 int state_count;
254 struct acpi_device_perf_state *states;
255};
256
257/* Wakeup Management */
258struct acpi_device_wakeup_flags {
259 u8 valid:1; /* Can successfully enable wakeup? */
260 u8 run_wake:1; /* Run-Wake GPE devices */
261};
262
263struct acpi_device_wakeup_state {
264 u8 enabled:1;
265 u8 active:1;
266};
267
268struct acpi_device_wakeup {
269 acpi_handle gpe_device;
270 acpi_integer gpe_number;;
271 acpi_integer sleep_state;
272 struct acpi_handle_list resources;
273 struct acpi_device_wakeup_state state;
274 struct acpi_device_wakeup_flags flags;
275};
276
277/* Device */
278
279struct acpi_device {
280 acpi_handle handle;
281 struct acpi_device *parent;
282 struct list_head children;
283 struct list_head node;
284 struct list_head wakeup_list;
285 struct list_head g_list;
286 struct acpi_device_status status;
287 struct acpi_device_flags flags;
288 struct acpi_device_pnp pnp;
289 struct acpi_device_power power;
290 struct acpi_device_wakeup wakeup;
291 struct acpi_device_perf performance;
292 struct acpi_device_dir dir;
293 struct acpi_device_ops ops;
294 struct acpi_driver *driver;
295 void *driver_data;
296 struct kobject kobj;
297};
298
299#define acpi_driver_data(d) ((d)->driver_data)
300
301
302/*
303 * Events
304 * ------
305 */
306
307struct acpi_bus_event {
308 struct list_head node;
309 acpi_device_class device_class;
310 acpi_bus_id bus_id;
311 u32 type;
312 u32 data;
313};
314
315extern struct subsystem acpi_subsys;
316
317/*
318 * External Functions
319 */
320
321int acpi_bus_get_device(acpi_handle handle, struct acpi_device **device);
322void acpi_bus_data_handler(acpi_handle handle, u32 function, void *context);
323int acpi_bus_get_status (struct acpi_device *device);
324int acpi_bus_get_power (acpi_handle handle, int *state);
325int acpi_bus_set_power (acpi_handle handle, int state);
326int acpi_bus_generate_event (struct acpi_device *device, u8 type, int data);
327int acpi_bus_receive_event (struct acpi_bus_event *event);
328int acpi_bus_register_driver (struct acpi_driver *driver);
329int acpi_bus_unregister_driver (struct acpi_driver *driver);
330int acpi_bus_scan (struct acpi_device *start);
331int acpi_bus_add (struct acpi_device **child, struct acpi_device *parent,
332 acpi_handle handle, int type);
333
334
335int acpi_match_ids (struct acpi_device *device, char *ids);
336int acpi_create_dir(struct acpi_device *);
337void acpi_remove_dir(struct acpi_device *);
338
339#endif /*CONFIG_ACPI_BUS*/
340
341#endif /*__ACPI_BUS_H__*/
diff --git a/include/acpi/acpi_drivers.h b/include/acpi/acpi_drivers.h
new file mode 100644
index 00000000000..c62e92ec43b
--- /dev/null
+++ b/include/acpi/acpi_drivers.h
@@ -0,0 +1,112 @@
1/*
2 * acpi_drivers.h ($Revision: 31 $)
3 *
4 * Copyright (C) 2001, 2002 Andy Grover <andrew.grover@intel.com>
5 * Copyright (C) 2001, 2002 Paul Diefenbaugh <paul.s.diefenbaugh@intel.com>
6 *
7 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or (at
12 * your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful, but
15 * WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License along
20 * with this program; if not, write to the Free Software Foundation, Inc.,
21 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
22 *
23 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
24 */
25
26#ifndef __ACPI_DRIVERS_H__
27#define __ACPI_DRIVERS_H__
28
29#include <linux/acpi.h>
30#include <acpi/acpi_bus.h>
31
32
33#define ACPI_MAX_STRING 80
34
35#define ACPI_BUS_COMPONENT 0x00010000
36#define ACPI_SYSTEM_COMPONENT 0x02000000
37
38/* _HID definitions */
39
40#define ACPI_POWER_HID "ACPI_PWR"
41#define ACPI_PROCESSOR_HID "ACPI_CPU"
42#define ACPI_SYSTEM_HID "ACPI_SYS"
43#define ACPI_THERMAL_HID "ACPI_THM"
44#define ACPI_BUTTON_HID_POWERF "ACPI_FPB"
45#define ACPI_BUTTON_HID_SLEEPF "ACPI_FSB"
46
47
48/* --------------------------------------------------------------------------
49 PCI
50 -------------------------------------------------------------------------- */
51
52#ifdef CONFIG_ACPI_PCI
53
54#define ACPI_PCI_COMPONENT 0x00400000
55
56/* ACPI PCI Interrupt Link (pci_link.c) */
57
58int acpi_irq_penalty_init (void);
59int acpi_pci_link_get_irq (acpi_handle handle, int index, int *edge_level,
60 int *active_high_low, char **name);
61
62/* ACPI PCI Interrupt Routing (pci_irq.c) */
63
64int acpi_pci_irq_add_prt (acpi_handle handle, int segment, int bus);
65void acpi_pci_irq_del_prt (int segment, int bus);
66
67/* ACPI PCI Device Binding (pci_bind.c) */
68
69struct pci_bus;
70
71int acpi_pci_bind (struct acpi_device *device);
72int acpi_pci_unbind (struct acpi_device *device);
73int acpi_pci_bind_root (struct acpi_device *device, struct acpi_pci_id *id, struct pci_bus *bus);
74
75/* Arch-defined function to add a bus to the system */
76
77struct pci_bus *pci_acpi_scan_root(struct acpi_device *device, int domain, int bus);
78
79#endif /*CONFIG_ACPI_PCI*/
80
81
82/* --------------------------------------------------------------------------
83 Power Resource
84 -------------------------------------------------------------------------- */
85
86#ifdef CONFIG_ACPI_POWER
87int acpi_enable_wakeup_device_power (struct acpi_device *dev);
88int acpi_disable_wakeup_device_power (struct acpi_device *dev);
89int acpi_power_get_inferred_state (struct acpi_device *device);
90int acpi_power_transition (struct acpi_device *device, int state);
91#endif
92
93
94/* --------------------------------------------------------------------------
95 Embedded Controller
96 -------------------------------------------------------------------------- */
97#ifdef CONFIG_ACPI_EC
98int acpi_ec_ecdt_probe (void);
99#endif
100
101/* --------------------------------------------------------------------------
102 Processor
103 -------------------------------------------------------------------------- */
104
105#define ACPI_PROCESSOR_LIMIT_NONE 0x00
106#define ACPI_PROCESSOR_LIMIT_INCREMENT 0x01
107#define ACPI_PROCESSOR_LIMIT_DECREMENT 0x02
108
109int acpi_processor_set_thermal_limit(acpi_handle handle, int type);
110
111
112#endif /*__ACPI_DRIVERS_H__*/
diff --git a/include/acpi/acpiosxf.h b/include/acpi/acpiosxf.h
new file mode 100644
index 00000000000..857c8072eb1
--- /dev/null
+++ b/include/acpi/acpiosxf.h
@@ -0,0 +1,389 @@
1
2/******************************************************************************
3 *
4 * Name: acpiosxf.h - All interfaces to the OS Services Layer (OSL). These
5 * interfaces must be implemented by OSL to interface the
6 * ACPI components to the host operating system.
7 *
8 *****************************************************************************/
9
10
11/*
12 * Copyright (C) 2000 - 2005, R. Byron Moore
13 * All rights reserved.
14 *
15 * Redistribution and use in source and binary forms, with or without
16 * modification, are permitted provided that the following conditions
17 * are met:
18 * 1. Redistributions of source code must retain the above copyright
19 * notice, this list of conditions, and the following disclaimer,
20 * without modification.
21 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
22 * substantially similar to the "NO WARRANTY" disclaimer below
23 * ("Disclaimer") and any redistribution must be conditioned upon
24 * including a substantially similar Disclaimer requirement for further
25 * binary redistribution.
26 * 3. Neither the names of the above-listed copyright holders nor the names
27 * of any contributors may be used to endorse or promote products derived
28 * from this software without specific prior written permission.
29 *
30 * Alternatively, this software may be distributed under the terms of the
31 * GNU General Public License ("GPL") version 2 as published by the Free
32 * Software Foundation.
33 *
34 * NO WARRANTY
35 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
36 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
37 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
38 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
39 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
40 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
41 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
42 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
43 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
44 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
45 * POSSIBILITY OF SUCH DAMAGES.
46 */
47
48#ifndef __ACPIOSXF_H__
49#define __ACPIOSXF_H__
50
51#include "platform/acenv.h"
52#include "actypes.h"
53
54
55/* Priorities for acpi_os_queue_for_execution */
56
57#define OSD_PRIORITY_GPE 1
58#define OSD_PRIORITY_HIGH 2
59#define OSD_PRIORITY_MED 3
60#define OSD_PRIORITY_LO 4
61
62#define ACPI_NO_UNIT_LIMIT ((u32) -1)
63#define ACPI_MUTEX_SEM 1
64
65
66/* Functions for acpi_os_signal */
67
68#define ACPI_SIGNAL_FATAL 0
69#define ACPI_SIGNAL_BREAKPOINT 1
70
71struct acpi_signal_fatal_info
72{
73 u32 type;
74 u32 code;
75 u32 argument;
76};
77
78
79/*
80 * OSL Initialization and shutdown primitives
81 */
82
83acpi_status
84acpi_os_initialize (
85 void);
86
87acpi_status
88acpi_os_terminate (
89 void);
90
91
92/*
93 * ACPI Table interfaces
94 */
95
96acpi_status
97acpi_os_get_root_pointer (
98 u32 flags,
99 struct acpi_pointer *address);
100
101acpi_status
102acpi_os_predefined_override (
103 const struct acpi_predefined_names *init_val,
104 acpi_string *new_val);
105
106acpi_status
107acpi_os_table_override (
108 struct acpi_table_header *existing_table,
109 struct acpi_table_header **new_table);
110
111
112/*
113 * Synchronization primitives
114 */
115
116acpi_status
117acpi_os_create_semaphore (
118 u32 max_units,
119 u32 initial_units,
120 acpi_handle *out_handle);
121
122acpi_status
123acpi_os_delete_semaphore (
124 acpi_handle handle);
125
126acpi_status
127acpi_os_wait_semaphore (
128 acpi_handle handle,
129 u32 units,
130 u16 timeout);
131
132acpi_status
133acpi_os_signal_semaphore (
134 acpi_handle handle,
135 u32 units);
136
137acpi_status
138acpi_os_create_lock (
139 acpi_handle *out_handle);
140
141void
142acpi_os_delete_lock (
143 acpi_handle handle);
144
145void
146acpi_os_acquire_lock (
147 acpi_handle handle,
148 u32 flags);
149
150void
151acpi_os_release_lock (
152 acpi_handle handle,
153 u32 flags);
154
155
156/*
157 * Memory allocation and mapping
158 */
159
160void *
161acpi_os_allocate (
162 acpi_size size);
163
164void
165acpi_os_free (
166 void * memory);
167
168acpi_status
169acpi_os_map_memory (
170 acpi_physical_address physical_address,
171 acpi_size size,
172 void __iomem **logical_address);
173
174void
175acpi_os_unmap_memory (
176 void __iomem *logical_address,
177 acpi_size size);
178
179#ifdef ACPI_FUTURE_USAGE
180acpi_status
181acpi_os_get_physical_address (
182 void *logical_address,
183 acpi_physical_address *physical_address);
184#endif
185
186
187/*
188 * Interrupt handlers
189 */
190
191acpi_status
192acpi_os_install_interrupt_handler (
193 u32 gsi,
194 acpi_osd_handler service_routine,
195 void *context);
196
197acpi_status
198acpi_os_remove_interrupt_handler (
199 u32 gsi,
200 acpi_osd_handler service_routine);
201
202
203/*
204 * Threads and Scheduling
205 */
206
207u32
208acpi_os_get_thread_id (
209 void);
210
211acpi_status
212acpi_os_queue_for_execution (
213 u32 priority,
214 acpi_osd_exec_callback function,
215 void *context);
216
217void
218acpi_os_wait_events_complete(
219 void * context);
220
221void
222acpi_os_wait_events_complete (
223 void *context);
224
225void
226acpi_os_sleep (
227 acpi_integer milliseconds);
228
229void
230acpi_os_stall (
231 u32 microseconds);
232
233
234/*
235 * Platform and hardware-independent I/O interfaces
236 */
237
238acpi_status
239acpi_os_read_port (
240 acpi_io_address address,
241 u32 *value,
242 u32 width);
243
244acpi_status
245acpi_os_write_port (
246 acpi_io_address address,
247 u32 value,
248 u32 width);
249
250
251/*
252 * Platform and hardware-independent physical memory interfaces
253 */
254
255acpi_status
256acpi_os_read_memory (
257 acpi_physical_address address,
258 u32 *value,
259 u32 width);
260
261acpi_status
262acpi_os_write_memory (
263 acpi_physical_address address,
264 u32 value,
265 u32 width);
266
267
268/*
269 * Platform and hardware-independent PCI configuration space access
270 * Note: Can't use "Register" as a parameter, changed to "Reg" --
271 * certain compilers complain.
272 */
273
274acpi_status
275acpi_os_read_pci_configuration (
276 struct acpi_pci_id *pci_id,
277 u32 reg,
278 void *value,
279 u32 width);
280
281acpi_status
282acpi_os_write_pci_configuration (
283 struct acpi_pci_id *pci_id,
284 u32 reg,
285 acpi_integer value,
286 u32 width);
287
288/*
289 * Interim function needed for PCI IRQ routing
290 */
291
292void
293acpi_os_derive_pci_id(
294 acpi_handle rhandle,
295 acpi_handle chandle,
296 struct acpi_pci_id **pci_id);
297
298/*
299 * Miscellaneous
300 */
301
302u8
303acpi_os_readable (
304 void *pointer,
305 acpi_size length);
306
307#ifdef ACPI_FUTURE_USAGE
308u8
309acpi_os_writable (
310 void *pointer,
311 acpi_size length);
312#endif
313
314u64
315acpi_os_get_timer (
316 void);
317
318acpi_status
319acpi_os_signal (
320 u32 function,
321 void *info);
322
323/*
324 * Debug print routines
325 */
326
327void ACPI_INTERNAL_VAR_XFACE
328acpi_os_printf (
329 const char *format,
330 ...);
331
332void
333acpi_os_vprintf (
334 const char *format,
335 va_list args);
336
337void
338acpi_os_redirect_output (
339 void *destination);
340
341
342/*
343 * Debug input
344 */
345
346#ifdef ACPI_FUTURE_USAGE
347u32
348acpi_os_get_line (
349 char *buffer);
350#endif
351
352
353/*
354 * Directory manipulation
355 */
356
357void *
358acpi_os_open_directory (
359 char *pathname,
360 char *wildcard_spec,
361 char requested_file_type);
362
363/* requeste_file_type values */
364
365#define REQUEST_FILE_ONLY 0
366#define REQUEST_DIR_ONLY 1
367
368
369char *
370acpi_os_get_next_filename (
371 void *dir_handle);
372
373void
374acpi_os_close_directory (
375 void *dir_handle);
376
377/*
378 * Debug
379 */
380
381void
382acpi_os_dbg_assert(
383 void *failed_assertion,
384 void *file_name,
385 u32 line_number,
386 char *message);
387
388
389#endif /* __ACPIOSXF_H__ */
diff --git a/include/acpi/acpixf.h b/include/acpi/acpixf.h
new file mode 100644
index 00000000000..00d78b79652
--- /dev/null
+++ b/include/acpi/acpixf.h
@@ -0,0 +1,497 @@
1
2/******************************************************************************
3 *
4 * Name: acpixf.h - External interfaces to the ACPI subsystem
5 *
6 *****************************************************************************/
7
8/*
9 * Copyright (C) 2000 - 2005, R. Byron Moore
10 * All rights reserved.
11 *
12 * Redistribution and use in source and binary forms, with or without
13 * modification, are permitted provided that the following conditions
14 * are met:
15 * 1. Redistributions of source code must retain the above copyright
16 * notice, this list of conditions, and the following disclaimer,
17 * without modification.
18 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
19 * substantially similar to the "NO WARRANTY" disclaimer below
20 * ("Disclaimer") and any redistribution must be conditioned upon
21 * including a substantially similar Disclaimer requirement for further
22 * binary redistribution.
23 * 3. Neither the names of the above-listed copyright holders nor the names
24 * of any contributors may be used to endorse or promote products derived
25 * from this software without specific prior written permission.
26 *
27 * Alternatively, this software may be distributed under the terms of the
28 * GNU General Public License ("GPL") version 2 as published by the Free
29 * Software Foundation.
30 *
31 * NO WARRANTY
32 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
33 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
34 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
35 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
36 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
37 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
38 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
39 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
40 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
41 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
42 * POSSIBILITY OF SUCH DAMAGES.
43 */
44
45
46#ifndef __ACXFACE_H__
47#define __ACXFACE_H__
48
49#include "actypes.h"
50#include "actbl.h"
51
52
53 /*
54 * Global interfaces
55 */
56
57acpi_status
58acpi_initialize_subsystem (
59 void);
60
61acpi_status
62acpi_enable_subsystem (
63 u32 flags);
64
65acpi_status
66acpi_initialize_objects (
67 u32 flags);
68
69acpi_status
70acpi_terminate (
71 void);
72
73#ifdef ACPI_FUTURE_USAGE
74acpi_status
75acpi_subsystem_status (
76 void);
77#endif
78
79acpi_status
80acpi_enable (
81 void);
82
83acpi_status
84acpi_disable (
85 void);
86
87#ifdef ACPI_FUTURE_USAGE
88acpi_status
89acpi_get_system_info (
90 struct acpi_buffer *ret_buffer);
91#endif
92
93const char *
94acpi_format_exception (
95 acpi_status exception);
96
97acpi_status
98acpi_purge_cached_objects (
99 void);
100
101#ifdef ACPI_FUTURE_USAGE
102acpi_status
103acpi_install_initialization_handler (
104 acpi_init_handler handler,
105 u32 function);
106#endif
107
108/*
109 * ACPI Memory manager
110 */
111
112void *
113acpi_allocate (
114 u32 size);
115
116void *
117acpi_callocate (
118 u32 size);
119
120void
121acpi_free (
122 void *address);
123
124
125/*
126 * ACPI table manipulation interfaces
127 */
128
129acpi_status
130acpi_find_root_pointer (
131 u32 flags,
132 struct acpi_pointer *rsdp_address);
133
134acpi_status
135acpi_load_tables (
136 void);
137
138#ifdef ACPI_FUTURE_USAGE
139acpi_status
140acpi_load_table (
141 struct acpi_table_header *table_ptr);
142
143acpi_status
144acpi_unload_table (
145 acpi_table_type table_type);
146
147acpi_status
148acpi_get_table_header (
149 acpi_table_type table_type,
150 u32 instance,
151 struct acpi_table_header *out_table_header);
152#endif /* ACPI_FUTURE_USAGE */
153
154acpi_status
155acpi_get_table (
156 acpi_table_type table_type,
157 u32 instance,
158 struct acpi_buffer *ret_buffer);
159
160acpi_status
161acpi_get_firmware_table (
162 acpi_string signature,
163 u32 instance,
164 u32 flags,
165 struct acpi_table_header **table_pointer);
166
167
168/*
169 * Namespace and name interfaces
170 */
171
172acpi_status
173acpi_walk_namespace (
174 acpi_object_type type,
175 acpi_handle start_object,
176 u32 max_depth,
177 acpi_walk_callback user_function,
178 void *context,
179 void **return_value);
180
181acpi_status
182acpi_get_devices (
183 char *HID,
184 acpi_walk_callback user_function,
185 void *context,
186 void **return_value);
187
188acpi_status
189acpi_get_name (
190 acpi_handle handle,
191 u32 name_type,
192 struct acpi_buffer *ret_path_ptr);
193
194acpi_status
195acpi_get_handle (
196 acpi_handle parent,
197 acpi_string pathname,
198 acpi_handle *ret_handle);
199
200acpi_status
201acpi_attach_data (
202 acpi_handle obj_handle,
203 acpi_object_handler handler,
204 void *data);
205
206acpi_status
207acpi_detach_data (
208 acpi_handle obj_handle,
209 acpi_object_handler handler);
210
211acpi_status
212acpi_get_data (
213 acpi_handle obj_handle,
214 acpi_object_handler handler,
215 void **data);
216
217
218/*
219 * Object manipulation and enumeration
220 */
221
222acpi_status
223acpi_evaluate_object (
224 acpi_handle object,
225 acpi_string pathname,
226 struct acpi_object_list *parameter_objects,
227 struct acpi_buffer *return_object_buffer);
228
229#ifdef ACPI_FUTURE_USAGE
230acpi_status
231acpi_evaluate_object_typed (
232 acpi_handle object,
233 acpi_string pathname,
234 struct acpi_object_list *external_params,
235 struct acpi_buffer *return_buffer,
236 acpi_object_type return_type);
237#endif
238
239acpi_status
240acpi_get_object_info (
241 acpi_handle handle,
242 struct acpi_buffer *return_buffer);
243
244acpi_status
245acpi_get_next_object (
246 acpi_object_type type,
247 acpi_handle parent,
248 acpi_handle child,
249 acpi_handle *out_handle);
250
251acpi_status
252acpi_get_type (
253 acpi_handle object,
254 acpi_object_type *out_type);
255
256acpi_status
257acpi_get_parent (
258 acpi_handle object,
259 acpi_handle *out_handle);
260
261
262/*
263 * Event handler interfaces
264 */
265
266acpi_status
267acpi_install_fixed_event_handler (
268 u32 acpi_event,
269 acpi_event_handler handler,
270 void *context);
271
272acpi_status
273acpi_remove_fixed_event_handler (
274 u32 acpi_event,
275 acpi_event_handler handler);
276
277acpi_status
278acpi_install_notify_handler (
279 acpi_handle device,
280 u32 handler_type,
281 acpi_notify_handler handler,
282 void *context);
283
284acpi_status
285acpi_remove_notify_handler (
286 acpi_handle device,
287 u32 handler_type,
288 acpi_notify_handler handler);
289
290acpi_status
291acpi_install_address_space_handler (
292 acpi_handle device,
293 acpi_adr_space_type space_id,
294 acpi_adr_space_handler handler,
295 acpi_adr_space_setup setup,
296 void *context);
297
298acpi_status
299acpi_remove_address_space_handler (
300 acpi_handle device,
301 acpi_adr_space_type space_id,
302 acpi_adr_space_handler handler);
303
304acpi_status
305acpi_install_gpe_handler (
306 acpi_handle gpe_device,
307 u32 gpe_number,
308 u32 type,
309 acpi_event_handler address,
310 void *context);
311
312#ifdef ACPI_FUTURE_USAGE
313acpi_status
314acpi_install_exception_handler (
315 acpi_exception_handler handler);
316#endif
317
318
319/*
320 * Event interfaces
321 */
322
323acpi_status
324acpi_acquire_global_lock (
325 u16 timeout,
326 u32 *handle);
327
328acpi_status
329acpi_release_global_lock (
330 u32 handle);
331
332acpi_status
333acpi_remove_gpe_handler (
334 acpi_handle gpe_device,
335 u32 gpe_number,
336 acpi_event_handler address);
337
338acpi_status
339acpi_enable_event (
340 u32 event,
341 u32 flags);
342
343acpi_status
344acpi_disable_event (
345 u32 event,
346 u32 flags);
347
348acpi_status
349acpi_clear_event (
350 u32 event);
351
352#ifdef ACPI_FUTURE_USAGE
353acpi_status
354acpi_get_event_status (
355 u32 event,
356 acpi_event_status *event_status);
357#endif /* ACPI_FUTURE_USAGE */
358
359acpi_status
360acpi_set_gpe_type (
361 acpi_handle gpe_device,
362 u32 gpe_number,
363 u8 type);
364
365acpi_status
366acpi_enable_gpe (
367 acpi_handle gpe_device,
368 u32 gpe_number,
369 u32 flags);
370
371acpi_status
372acpi_disable_gpe (
373 acpi_handle gpe_device,
374 u32 gpe_number,
375 u32 flags);
376
377acpi_status
378acpi_clear_gpe (
379 acpi_handle gpe_device,
380 u32 gpe_number,
381 u32 flags);
382
383#ifdef ACPI_FUTURE_USAGE
384acpi_status
385acpi_get_gpe_status (
386 acpi_handle gpe_device,
387 u32 gpe_number,
388 u32 flags,
389 acpi_event_status *event_status);
390#endif /* ACPI_FUTURE_USAGE */
391
392acpi_status
393acpi_install_gpe_block (
394 acpi_handle gpe_device,
395 struct acpi_generic_address *gpe_block_address,
396 u32 register_count,
397 u32 interrupt_level);
398
399acpi_status
400acpi_remove_gpe_block (
401 acpi_handle gpe_device);
402
403
404/*
405 * Resource interfaces
406 */
407
408typedef
409acpi_status (*ACPI_WALK_RESOURCE_CALLBACK) (
410 struct acpi_resource *resource,
411 void *context);
412
413
414acpi_status
415acpi_get_current_resources(
416 acpi_handle device_handle,
417 struct acpi_buffer *ret_buffer);
418
419#ifdef ACPI_FUTURE_USAGE
420acpi_status
421acpi_get_possible_resources(
422 acpi_handle device_handle,
423 struct acpi_buffer *ret_buffer);
424#endif
425
426acpi_status
427acpi_walk_resources (
428 acpi_handle device_handle,
429 char *path,
430 ACPI_WALK_RESOURCE_CALLBACK user_function,
431 void *context);
432
433acpi_status
434acpi_set_current_resources (
435 acpi_handle device_handle,
436 struct acpi_buffer *in_buffer);
437
438acpi_status
439acpi_get_irq_routing_table (
440 acpi_handle bus_device_handle,
441 struct acpi_buffer *ret_buffer);
442
443acpi_status
444acpi_resource_to_address64 (
445 struct acpi_resource *resource,
446 struct acpi_resource_address64 *out);
447
448/*
449 * Hardware (ACPI device) interfaces
450 */
451
452acpi_status
453acpi_get_register (
454 u32 register_id,
455 u32 *return_value,
456 u32 flags);
457
458acpi_status
459acpi_set_register (
460 u32 register_id,
461 u32 value,
462 u32 flags);
463
464acpi_status
465acpi_set_firmware_waking_vector (
466 acpi_physical_address physical_address);
467
468#ifdef ACPI_FUTURE_USAGE
469acpi_status
470acpi_get_firmware_waking_vector (
471 acpi_physical_address *physical_address);
472#endif
473
474acpi_status
475acpi_get_sleep_type_data (
476 u8 sleep_state,
477 u8 *slp_typ_a,
478 u8 *slp_typ_b);
479
480acpi_status
481acpi_enter_sleep_state_prep (
482 u8 sleep_state);
483
484acpi_status asmlinkage
485acpi_enter_sleep_state (
486 u8 sleep_state);
487
488acpi_status asmlinkage
489acpi_enter_sleep_state_s4bios (
490 void);
491
492acpi_status
493acpi_leave_sleep_state (
494 u8 sleep_state);
495
496
497#endif /* __ACXFACE_H__ */
diff --git a/include/acpi/acresrc.h b/include/acpi/acresrc.h
new file mode 100644
index 00000000000..93c55ff5c23
--- /dev/null
+++ b/include/acpi/acresrc.h
@@ -0,0 +1,395 @@
1/******************************************************************************
2 *
3 * Name: acresrc.h - Resource Manager function prototypes
4 *
5 *****************************************************************************/
6
7/*
8 * Copyright (C) 2000 - 2005, R. Byron Moore
9 * All rights reserved.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions, and the following disclaimer,
16 * without modification.
17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18 * substantially similar to the "NO WARRANTY" disclaimer below
19 * ("Disclaimer") and any redistribution must be conditioned upon
20 * including a substantially similar Disclaimer requirement for further
21 * binary redistribution.
22 * 3. Neither the names of the above-listed copyright holders nor the names
23 * of any contributors may be used to endorse or promote products derived
24 * from this software without specific prior written permission.
25 *
26 * Alternatively, this software may be distributed under the terms of the
27 * GNU General Public License ("GPL") version 2 as published by the Free
28 * Software Foundation.
29 *
30 * NO WARRANTY
31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41 * POSSIBILITY OF SUCH DAMAGES.
42 */
43
44#ifndef __ACRESRC_H__
45#define __ACRESRC_H__
46
47
48/*
49 * Function prototypes called from Acpi* APIs
50 */
51
52acpi_status
53acpi_rs_get_prt_method_data (
54 acpi_handle handle,
55 struct acpi_buffer *ret_buffer);
56
57
58acpi_status
59acpi_rs_get_crs_method_data (
60 acpi_handle handle,
61 struct acpi_buffer *ret_buffer);
62
63#ifdef ACPI_FUTURE_USAGE
64acpi_status
65acpi_rs_get_prs_method_data (
66 acpi_handle handle,
67 struct acpi_buffer *ret_buffer);
68#endif
69
70acpi_status
71acpi_rs_get_method_data (
72 acpi_handle handle,
73 char *path,
74 struct acpi_buffer *ret_buffer);
75
76acpi_status
77acpi_rs_set_srs_method_data (
78 acpi_handle handle,
79 struct acpi_buffer *ret_buffer);
80
81acpi_status
82acpi_rs_create_resource_list (
83 union acpi_operand_object *byte_stream_buffer,
84 struct acpi_buffer *output_buffer);
85
86acpi_status
87acpi_rs_create_byte_stream (
88 struct acpi_resource *linked_list_buffer,
89 struct acpi_buffer *output_buffer);
90
91acpi_status
92acpi_rs_create_pci_routing_table (
93 union acpi_operand_object *package_object,
94 struct acpi_buffer *output_buffer);
95
96
97/*
98 * Function prototypes called from acpi_rs_create*
99 */
100#ifdef ACPI_FUTURE_USAGE
101void
102acpi_rs_dump_irq (
103 union acpi_resource_data *data);
104
105void
106acpi_rs_dump_address16 (
107 union acpi_resource_data *data);
108
109void
110acpi_rs_dump_address32 (
111 union acpi_resource_data *data);
112
113void
114acpi_rs_dump_address64 (
115 union acpi_resource_data *data);
116
117void
118acpi_rs_dump_dma (
119 union acpi_resource_data *data);
120
121void
122acpi_rs_dump_io (
123 union acpi_resource_data *data);
124
125void
126acpi_rs_dump_extended_irq (
127 union acpi_resource_data *data);
128
129void
130acpi_rs_dump_fixed_io (
131 union acpi_resource_data *data);
132
133void
134acpi_rs_dump_fixed_memory32 (
135 union acpi_resource_data *data);
136
137void
138acpi_rs_dump_memory24 (
139 union acpi_resource_data *data);
140
141void
142acpi_rs_dump_memory32 (
143 union acpi_resource_data *data);
144
145void
146acpi_rs_dump_start_depend_fns (
147 union acpi_resource_data *data);
148
149void
150acpi_rs_dump_vendor_specific (
151 union acpi_resource_data *data);
152
153void
154acpi_rs_dump_resource_list (
155 struct acpi_resource *resource);
156
157void
158acpi_rs_dump_irq_list (
159 u8 *route_table);
160#endif /* ACPI_FUTURE_USAGE */
161
162acpi_status
163acpi_rs_get_byte_stream_start (
164 u8 *byte_stream_buffer,
165 u8 **byte_stream_start,
166 u32 *size);
167
168acpi_status
169acpi_rs_get_list_length (
170 u8 *byte_stream_buffer,
171 u32 byte_stream_buffer_length,
172 acpi_size *size_needed);
173
174acpi_status
175acpi_rs_get_byte_stream_length (
176 struct acpi_resource *linked_list_buffer,
177 acpi_size *size_needed);
178
179acpi_status
180acpi_rs_get_pci_routing_table_length (
181 union acpi_operand_object *package_object,
182 acpi_size *buffer_size_needed);
183
184acpi_status
185acpi_rs_byte_stream_to_list (
186 u8 *byte_stream_buffer,
187 u32 byte_stream_buffer_length,
188 u8 *output_buffer);
189
190acpi_status
191acpi_rs_list_to_byte_stream (
192 struct acpi_resource *linked_list,
193 acpi_size byte_stream_size_needed,
194 u8 *output_buffer);
195
196acpi_status
197acpi_rs_io_resource (
198 u8 *byte_stream_buffer,
199 acpi_size *bytes_consumed,
200 u8 **output_buffer,
201 acpi_size *structure_size);
202
203acpi_status
204acpi_rs_fixed_io_resource (
205 u8 *byte_stream_buffer,
206 acpi_size *bytes_consumed,
207 u8 **output_buffer,
208 acpi_size *structure_size);
209
210acpi_status
211acpi_rs_io_stream (
212 struct acpi_resource *linked_list,
213 u8 **output_buffer,
214 acpi_size *bytes_consumed);
215
216acpi_status
217acpi_rs_fixed_io_stream (
218 struct acpi_resource *linked_list,
219 u8 **output_buffer,
220 acpi_size *bytes_consumed);
221
222acpi_status
223acpi_rs_irq_resource (
224 u8 *byte_stream_buffer,
225 acpi_size *bytes_consumed,
226 u8 **output_buffer,
227 acpi_size *structure_size);
228
229acpi_status
230acpi_rs_irq_stream (
231 struct acpi_resource *linked_list,
232 u8 **output_buffer,
233 acpi_size *bytes_consumed);
234
235acpi_status
236acpi_rs_dma_resource (
237 u8 *byte_stream_buffer,
238 acpi_size *bytes_consumed,
239 u8 **output_buffer,
240 acpi_size *structure_size);
241
242acpi_status
243acpi_rs_dma_stream (
244 struct acpi_resource *linked_list,
245 u8 **output_buffer,
246 acpi_size *bytes_consumed);
247
248acpi_status
249acpi_rs_address16_resource (
250 u8 *byte_stream_buffer,
251 acpi_size *bytes_consumed,
252 u8 **output_buffer,
253 acpi_size *structure_size);
254
255acpi_status
256acpi_rs_address16_stream (
257 struct acpi_resource *linked_list,
258 u8 **output_buffer,
259 acpi_size *bytes_consumed);
260
261acpi_status
262acpi_rs_address32_resource (
263 u8 *byte_stream_buffer,
264 acpi_size *bytes_consumed,
265 u8 **output_buffer,
266 acpi_size *structure_size);
267
268acpi_status
269acpi_rs_address32_stream (
270 struct acpi_resource *linked_list,
271 u8 **output_buffer,
272 acpi_size *bytes_consumed);
273
274acpi_status
275acpi_rs_address64_resource (
276 u8 *byte_stream_buffer,
277 acpi_size *bytes_consumed,
278 u8 **output_buffer,
279 acpi_size *structure_size);
280
281acpi_status
282acpi_rs_address64_stream (
283 struct acpi_resource *linked_list,
284 u8 **output_buffer,
285 acpi_size *bytes_consumed);
286
287acpi_status
288acpi_rs_start_depend_fns_resource (
289 u8 *byte_stream_buffer,
290 acpi_size *bytes_consumed,
291 u8 **output_buffer,
292 acpi_size *structure_size);
293
294acpi_status
295acpi_rs_end_depend_fns_resource (
296 u8 *byte_stream_buffer,
297 acpi_size *bytes_consumed,
298 u8 **output_buffer,
299 acpi_size *structure_size);
300
301acpi_status
302acpi_rs_start_depend_fns_stream (
303 struct acpi_resource *linked_list,
304 u8 **output_buffer,
305 acpi_size *bytes_consumed);
306
307acpi_status
308acpi_rs_end_depend_fns_stream (
309 struct acpi_resource *linked_list,
310 u8 **output_buffer,
311 acpi_size *bytes_consumed);
312
313acpi_status
314acpi_rs_memory24_resource (
315 u8 *byte_stream_buffer,
316 acpi_size *bytes_consumed,
317 u8 **output_buffer,
318 acpi_size *structure_size);
319
320acpi_status
321acpi_rs_memory24_stream (
322 struct acpi_resource *linked_list,
323 u8 **output_buffer,
324 acpi_size *bytes_consumed);
325
326acpi_status
327acpi_rs_memory32_range_resource (
328 u8 *byte_stream_buffer,
329 acpi_size *bytes_consumed,
330 u8 **output_buffer,
331 acpi_size *structure_size);
332
333acpi_status
334acpi_rs_fixed_memory32_resource (
335 u8 *byte_stream_buffer,
336 acpi_size *bytes_consumed,
337 u8 **output_buffer,
338 acpi_size *structure_size);
339
340acpi_status
341acpi_rs_memory32_range_stream (
342 struct acpi_resource *linked_list,
343 u8 **output_buffer,
344 acpi_size *bytes_consumed);
345
346acpi_status
347acpi_rs_fixed_memory32_stream (
348 struct acpi_resource *linked_list,
349 u8 **output_buffer,
350 acpi_size *bytes_consumed);
351
352acpi_status
353acpi_rs_extended_irq_resource (
354 u8 *byte_stream_buffer,
355 acpi_size *bytes_consumed,
356 u8 **output_buffer,
357 acpi_size *structure_size);
358
359acpi_status
360acpi_rs_extended_irq_stream (
361 struct acpi_resource *linked_list,
362 u8 **output_buffer,
363 acpi_size *bytes_consumed);
364
365acpi_status
366acpi_rs_end_tag_resource (
367 u8 *byte_stream_buffer,
368 acpi_size *bytes_consumed,
369 u8 **output_buffer,
370 acpi_size *structure_size);
371
372acpi_status
373acpi_rs_end_tag_stream (
374 struct acpi_resource *linked_list,
375 u8 **output_buffer,
376 acpi_size *bytes_consumed);
377
378acpi_status
379acpi_rs_vendor_resource (
380 u8 *byte_stream_buffer,
381 acpi_size *bytes_consumed,
382 u8 **output_buffer,
383 acpi_size *structure_size);
384
385acpi_status
386acpi_rs_vendor_stream (
387 struct acpi_resource *linked_list,
388 u8 **output_buffer,
389 acpi_size *bytes_consumed);
390
391u8
392acpi_rs_get_resource_type (
393 u8 resource_start_byte);
394
395#endif /* __ACRESRC_H__ */
diff --git a/include/acpi/acstruct.h b/include/acpi/acstruct.h
new file mode 100644
index 00000000000..c97843f6bcb
--- /dev/null
+++ b/include/acpi/acstruct.h
@@ -0,0 +1,223 @@
1/******************************************************************************
2 *
3 * Name: acstruct.h - Internal structs
4 *
5 *****************************************************************************/
6
7/*
8 * Copyright (C) 2000 - 2005, R. Byron Moore
9 * All rights reserved.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions, and the following disclaimer,
16 * without modification.
17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18 * substantially similar to the "NO WARRANTY" disclaimer below
19 * ("Disclaimer") and any redistribution must be conditioned upon
20 * including a substantially similar Disclaimer requirement for further
21 * binary redistribution.
22 * 3. Neither the names of the above-listed copyright holders nor the names
23 * of any contributors may be used to endorse or promote products derived
24 * from this software without specific prior written permission.
25 *
26 * Alternatively, this software may be distributed under the terms of the
27 * GNU General Public License ("GPL") version 2 as published by the Free
28 * Software Foundation.
29 *
30 * NO WARRANTY
31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41 * POSSIBILITY OF SUCH DAMAGES.
42 */
43
44#ifndef __ACSTRUCT_H__
45#define __ACSTRUCT_H__
46
47
48/*****************************************************************************
49 *
50 * Tree walking typedefs and structs
51 *
52 ****************************************************************************/
53
54
55/*
56 * Walk state - current state of a parse tree walk. Used for both a leisurely stroll through
57 * the tree (for whatever reason), and for control method execution.
58 */
59
60#define ACPI_NEXT_OP_DOWNWARD 1
61#define ACPI_NEXT_OP_UPWARD 2
62
63#define ACPI_WALK_NON_METHOD 0
64#define ACPI_WALK_METHOD 1
65#define ACPI_WALK_METHOD_RESTART 2
66#define ACPI_WALK_CONST_REQUIRED 3
67#define ACPI_WALK_CONST_OPTIONAL 4
68
69struct acpi_walk_state
70{
71 u8 data_type; /* To differentiate various internal objs MUST BE FIRST!*/\
72 u8 walk_type;
73 acpi_owner_id owner_id; /* Owner of objects created during the walk */
74 u8 last_predicate; /* Result of last predicate */
75 u8 reserved; /* For alignment */
76 u8 current_result; /* */
77 u8 next_op_info; /* Info about next_op */
78 u8 num_operands; /* Stack pointer for Operands[] array */
79 u8 return_used;
80 u16 opcode; /* Current AML opcode */
81 u8 scope_depth;
82 u8 reserved1;
83 u32 arg_count; /* push for fixed or var args */
84 u32 aml_offset;
85 u32 arg_types;
86 u32 method_breakpoint; /* For single stepping */
87 u32 user_breakpoint; /* User AML breakpoint */
88 u32 parse_flags;
89 u32 prev_arg_types;
90
91 u8 *aml_last_while;
92 struct acpi_namespace_node arguments[ACPI_METHOD_NUM_ARGS]; /* Control method arguments */
93 union acpi_operand_object **caller_return_desc;
94 union acpi_generic_state *control_state; /* List of control states (nested IFs) */
95 struct acpi_namespace_node *deferred_node; /* Used when executing deferred opcodes */
96 struct acpi_gpe_event_info *gpe_event_info; /* Info for GPE (_Lxx/_Exx methods only */
97 union acpi_operand_object *implicit_return_obj;
98 struct acpi_namespace_node local_variables[ACPI_METHOD_NUM_LOCALS]; /* Control method locals */
99 struct acpi_namespace_node *method_call_node; /* Called method Node*/
100 union acpi_parse_object *method_call_op; /* method_call Op if running a method */
101 union acpi_operand_object *method_desc; /* Method descriptor if running a method */
102 struct acpi_namespace_node *method_node; /* Method node if running a method. */
103 union acpi_parse_object *op; /* Current parser op */
104 union acpi_operand_object *operands[ACPI_OBJ_NUM_OPERANDS+1]; /* Operands passed to the interpreter (+1 for NULL terminator) */
105 const struct acpi_opcode_info *op_info; /* Info on current opcode */
106 union acpi_parse_object *origin; /* Start of walk [Obsolete] */
107 union acpi_operand_object **params;
108 struct acpi_parse_state parser_state; /* Current state of parser */
109 union acpi_operand_object *result_obj;
110 union acpi_generic_state *results; /* Stack of accumulated results */
111 union acpi_operand_object *return_desc; /* Return object, if any */
112 union acpi_generic_state *scope_info; /* Stack of nested scopes */
113
114 union acpi_parse_object *prev_op; /* Last op that was processed */
115 union acpi_parse_object *next_op; /* next op to be processed */
116 acpi_parse_downwards descending_callback;
117 acpi_parse_upwards ascending_callback;
118 struct acpi_thread_state *thread;
119 struct acpi_walk_state *next; /* Next walk_state in list */
120};
121
122
123/* Info used by acpi_ps_init_objects */
124
125struct acpi_init_walk_info
126{
127 u16 method_count;
128 u16 device_count;
129 u16 op_region_count;
130 u16 field_count;
131 u16 buffer_count;
132 u16 package_count;
133 u16 op_region_init;
134 u16 field_init;
135 u16 buffer_init;
136 u16 package_init;
137 u16 object_count;
138 struct acpi_table_desc *table_desc;
139};
140
141
142/* Info used by acpi_ns_initialize_devices */
143
144struct acpi_device_walk_info
145{
146 u16 device_count;
147 u16 num_STA;
148 u16 num_INI;
149 struct acpi_table_desc *table_desc;
150};
151
152
153/* TBD: [Restructure] Merge with struct above */
154
155struct acpi_walk_info
156{
157 u32 debug_level;
158 u32 owner_id;
159 u8 display_type;
160};
161
162/* Display Types */
163
164#define ACPI_DISPLAY_SUMMARY 0
165#define ACPI_DISPLAY_OBJECTS 1
166
167struct acpi_get_devices_info
168{
169 acpi_walk_callback user_function;
170 void *context;
171 char *hid;
172};
173
174
175union acpi_aml_operands
176{
177 union acpi_operand_object *operands[7];
178
179 struct
180 {
181 struct acpi_object_integer *type;
182 struct acpi_object_integer *code;
183 struct acpi_object_integer *argument;
184
185 } fatal;
186
187 struct
188 {
189 union acpi_operand_object *source;
190 struct acpi_object_integer *index;
191 union acpi_operand_object *target;
192
193 } index;
194
195 struct
196 {
197 union acpi_operand_object *source;
198 struct acpi_object_integer *index;
199 struct acpi_object_integer *length;
200 union acpi_operand_object *target;
201
202 } mid;
203};
204
205
206/* Internal method parameter list */
207
208struct acpi_parameter_info
209{
210 struct acpi_namespace_node *node;
211 union acpi_operand_object **parameters;
212 union acpi_operand_object *return_object;
213 u8 parameter_type;
214 u8 return_object_type;
215};
216
217/* Types for parameter_type above */
218
219#define ACPI_PARAM_ARGS 0
220#define ACPI_PARAM_GPE 1
221
222
223#endif
diff --git a/include/acpi/actables.h b/include/acpi/actables.h
new file mode 100644
index 00000000000..e8f5d4ffd45
--- /dev/null
+++ b/include/acpi/actables.h
@@ -0,0 +1,235 @@
1/******************************************************************************
2 *
3 * Name: actables.h - ACPI table management
4 *
5 *****************************************************************************/
6
7/*
8 * Copyright (C) 2000 - 2005, R. Byron Moore
9 * All rights reserved.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions, and the following disclaimer,
16 * without modification.
17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18 * substantially similar to the "NO WARRANTY" disclaimer below
19 * ("Disclaimer") and any redistribution must be conditioned upon
20 * including a substantially similar Disclaimer requirement for further
21 * binary redistribution.
22 * 3. Neither the names of the above-listed copyright holders nor the names
23 * of any contributors may be used to endorse or promote products derived
24 * from this software without specific prior written permission.
25 *
26 * Alternatively, this software may be distributed under the terms of the
27 * GNU General Public License ("GPL") version 2 as published by the Free
28 * Software Foundation.
29 *
30 * NO WARRANTY
31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41 * POSSIBILITY OF SUCH DAMAGES.
42 */
43
44#ifndef __ACTABLES_H__
45#define __ACTABLES_H__
46
47
48/* Used in acpi_tb_map_acpi_table for size parameter if table header is to be used */
49
50#define SIZE_IN_HEADER 0
51
52
53#ifdef ACPI_FUTURE_USAGE
54acpi_status
55acpi_tb_handle_to_object (
56 u16 table_id,
57 struct acpi_table_desc **table_desc);
58#endif
59
60/*
61 * tbconvrt - Table conversion routines
62 */
63
64acpi_status
65acpi_tb_convert_to_xsdt (
66 struct acpi_table_desc *table_info);
67
68acpi_status
69acpi_tb_convert_table_fadt (
70 void);
71
72acpi_status
73acpi_tb_build_common_facs (
74 struct acpi_table_desc *table_info);
75
76u32
77acpi_tb_get_table_count (
78 struct rsdp_descriptor *RSDP,
79 struct acpi_table_header *RSDT);
80
81/*
82 * tbget - Table "get" routines
83 */
84
85acpi_status
86acpi_tb_get_table (
87 struct acpi_pointer *address,
88 struct acpi_table_desc *table_info);
89
90acpi_status
91acpi_tb_get_table_header (
92 struct acpi_pointer *address,
93 struct acpi_table_header *return_header);
94
95acpi_status
96acpi_tb_get_table_body (
97 struct acpi_pointer *address,
98 struct acpi_table_header *header,
99 struct acpi_table_desc *table_info);
100
101acpi_status
102acpi_tb_get_this_table (
103 struct acpi_pointer *address,
104 struct acpi_table_header *header,
105 struct acpi_table_desc *table_info);
106
107acpi_status
108acpi_tb_table_override (
109 struct acpi_table_header *header,
110 struct acpi_table_desc *table_info);
111
112acpi_status
113acpi_tb_get_table_ptr (
114 acpi_table_type table_type,
115 u32 instance,
116 struct acpi_table_header **table_ptr_loc);
117
118acpi_status
119acpi_tb_verify_rsdp (
120 struct acpi_pointer *address);
121
122void
123acpi_tb_get_rsdt_address (
124 struct acpi_pointer *out_address);
125
126acpi_status
127acpi_tb_validate_rsdt (
128 struct acpi_table_header *table_ptr);
129
130acpi_status
131acpi_tb_get_required_tables (
132 void);
133
134acpi_status
135acpi_tb_get_primary_table (
136 struct acpi_pointer *address,
137 struct acpi_table_desc *table_info);
138
139acpi_status
140acpi_tb_get_secondary_table (
141 struct acpi_pointer *address,
142 acpi_string signature,
143 struct acpi_table_desc *table_info);
144
145/*
146 * tbinstall - Table installation
147 */
148
149acpi_status
150acpi_tb_install_table (
151 struct acpi_table_desc *table_info);
152
153acpi_status
154acpi_tb_match_signature (
155 char *signature,
156 struct acpi_table_desc *table_info,
157 u8 search_type);
158
159acpi_status
160acpi_tb_recognize_table (
161 struct acpi_table_desc *table_info,
162 u8 search_type);
163
164acpi_status
165acpi_tb_init_table_descriptor (
166 acpi_table_type table_type,
167 struct acpi_table_desc *table_info);
168
169
170/*
171 * tbremove - Table removal and deletion
172 */
173
174void
175acpi_tb_delete_all_tables (
176 void);
177
178void
179acpi_tb_delete_tables_by_type (
180 acpi_table_type type);
181
182void
183acpi_tb_delete_single_table (
184 struct acpi_table_desc *table_desc);
185
186struct acpi_table_desc *
187acpi_tb_uninstall_table (
188 struct acpi_table_desc *table_desc);
189
190
191/*
192 * tbrsd - RSDP, RSDT utilities
193 */
194
195acpi_status
196acpi_tb_get_table_rsdt (
197 void);
198
199u8 *
200acpi_tb_scan_memory_for_rsdp (
201 u8 *start_address,
202 u32 length);
203
204acpi_status
205acpi_tb_find_rsdp (
206 struct acpi_table_desc *table_info,
207 u32 flags);
208
209
210/*
211 * tbutils - common table utilities
212 */
213
214acpi_status
215acpi_tb_find_table (
216 char *signature,
217 char *oem_id,
218 char *oem_table_id,
219 struct acpi_table_header **table_ptr);
220
221acpi_status
222acpi_tb_verify_table_checksum (
223 struct acpi_table_header *table_header);
224
225u8
226acpi_tb_checksum (
227 void *buffer,
228 u32 length);
229
230acpi_status
231acpi_tb_validate_table_header (
232 struct acpi_table_header *table_header);
233
234
235#endif /* __ACTABLES_H__ */
diff --git a/include/acpi/actbl.h b/include/acpi/actbl.h
new file mode 100644
index 00000000000..7eee731112b
--- /dev/null
+++ b/include/acpi/actbl.h
@@ -0,0 +1,354 @@
1/******************************************************************************
2 *
3 * Name: actbl.h - Table data structures defined in ACPI specification
4 *
5 *****************************************************************************/
6
7/*
8 * Copyright (C) 2000 - 2005, R. Byron Moore
9 * All rights reserved.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions, and the following disclaimer,
16 * without modification.
17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18 * substantially similar to the "NO WARRANTY" disclaimer below
19 * ("Disclaimer") and any redistribution must be conditioned upon
20 * including a substantially similar Disclaimer requirement for further
21 * binary redistribution.
22 * 3. Neither the names of the above-listed copyright holders nor the names
23 * of any contributors may be used to endorse or promote products derived
24 * from this software without specific prior written permission.
25 *
26 * Alternatively, this software may be distributed under the terms of the
27 * GNU General Public License ("GPL") version 2 as published by the Free
28 * Software Foundation.
29 *
30 * NO WARRANTY
31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41 * POSSIBILITY OF SUCH DAMAGES.
42 */
43
44#ifndef __ACTBL_H__
45#define __ACTBL_H__
46
47
48/*
49 * Values for description table header signatures
50 */
51#define RSDP_NAME "RSDP"
52#define RSDP_SIG "RSD PTR " /* RSDT Pointer signature */
53#define APIC_SIG "APIC" /* Multiple APIC Description Table */
54#define DSDT_SIG "DSDT" /* Differentiated System Description Table */
55#define FADT_SIG "FACP" /* Fixed ACPI Description Table */
56#define FACS_SIG "FACS" /* Firmware ACPI Control Structure */
57#define PSDT_SIG "PSDT" /* Persistent System Description Table */
58#define RSDT_SIG "RSDT" /* Root System Description Table */
59#define XSDT_SIG "XSDT" /* Extended System Description Table */
60#define SSDT_SIG "SSDT" /* Secondary System Description Table */
61#define SBST_SIG "SBST" /* Smart Battery Specification Table */
62#define SPIC_SIG "SPIC" /* IOSAPIC table */
63#define BOOT_SIG "BOOT" /* Boot table */
64
65
66#define GL_OWNED 0x02 /* Ownership of global lock is bit 1 */
67
68
69/*
70 * Common table types. The base code can remain
71 * constant if the underlying tables are changed
72 */
73#define RSDT_DESCRIPTOR struct rsdt_descriptor_rev2
74#define XSDT_DESCRIPTOR struct xsdt_descriptor_rev2
75#define FACS_DESCRIPTOR struct facs_descriptor_rev2
76#define FADT_DESCRIPTOR struct fadt_descriptor_rev2
77
78
79#pragma pack(1)
80
81/*
82 * ACPI Version-independent tables
83 *
84 * NOTE: The tables that are specific to ACPI versions (1.0, 2.0, etc.)
85 * are in separate files.
86 */
87struct rsdp_descriptor /* Root System Descriptor Pointer */
88{
89 char signature [8]; /* ACPI signature, contains "RSD PTR " */
90 u8 checksum; /* To make sum of struct == 0 */
91 char oem_id [6]; /* OEM identification */
92 u8 revision; /* Must be 0 for 1.0, 2 for 2.0 */
93 u32 rsdt_physical_address; /* 32-bit physical address of RSDT */
94 u32 length; /* XSDT Length in bytes including hdr */
95 u64 xsdt_physical_address; /* 64-bit physical address of XSDT */
96 u8 extended_checksum; /* Checksum of entire table */
97 char reserved [3]; /* Reserved field must be 0 */
98};
99
100
101struct acpi_common_facs /* Common FACS for internal use */
102{
103 u32 *global_lock;
104 u64 *firmware_waking_vector;
105 u8 vector_width;
106};
107
108
109#define ACPI_TABLE_HEADER_DEF /* ACPI common table header */ \
110 char signature [4]; /* ACPI signature (4 ASCII characters) */\
111 u32 length; /* Length of table, in bytes, including header */\
112 u8 revision; /* ACPI Specification minor version # */\
113 u8 checksum; /* To make sum of entire table == 0 */\
114 char oem_id [6]; /* OEM identification */\
115 char oem_table_id [8]; /* OEM table identification */\
116 u32 oem_revision; /* OEM revision number */\
117 char asl_compiler_id [4]; /* ASL compiler vendor ID */\
118 u32 asl_compiler_revision; /* ASL compiler revision number */
119
120
121struct acpi_table_header /* ACPI common table header */
122{
123 ACPI_TABLE_HEADER_DEF
124};
125
126
127/*
128 * MADT values and structures
129 */
130
131/* Values for MADT PCATCompat */
132
133#define DUAL_PIC 0
134#define MULTIPLE_APIC 1
135
136
137/* Master MADT */
138
139struct multiple_apic_table
140{
141 ACPI_TABLE_HEADER_DEF /* ACPI common table header */
142 u32 local_apic_address; /* Physical address of local APIC */
143 u32 PCATcompat : 1; /* A one indicates system also has dual 8259s */
144 u32 reserved1 : 31;
145};
146
147
148/* Values for Type in APIC_HEADER_DEF */
149
150#define APIC_PROCESSOR 0
151#define APIC_IO 1
152#define APIC_XRUPT_OVERRIDE 2
153#define APIC_NMI 3
154#define APIC_LOCAL_NMI 4
155#define APIC_ADDRESS_OVERRIDE 5
156#define APIC_IO_SAPIC 6
157#define APIC_LOCAL_SAPIC 7
158#define APIC_XRUPT_SOURCE 8
159#define APIC_RESERVED 9 /* 9 and greater are reserved */
160
161/*
162 * MADT sub-structures (Follow MULTIPLE_APIC_DESCRIPTION_TABLE)
163 */
164#define APIC_HEADER_DEF /* Common APIC sub-structure header */\
165 u8 type; \
166 u8 length;
167
168struct apic_header
169{
170 APIC_HEADER_DEF
171};
172
173/* Values for MPS INTI flags */
174
175#define POLARITY_CONFORMS 0
176#define POLARITY_ACTIVE_HIGH 1
177#define POLARITY_RESERVED 2
178#define POLARITY_ACTIVE_LOW 3
179
180#define TRIGGER_CONFORMS 0
181#define TRIGGER_EDGE 1
182#define TRIGGER_RESERVED 2
183#define TRIGGER_LEVEL 3
184
185/* Common flag definitions */
186
187#define MPS_INTI_FLAGS \
188 u16 polarity : 2; /* Polarity of APIC I/O input signals */\
189 u16 trigger_mode : 2; /* Trigger mode of APIC input signals */\
190 u16 reserved1 : 12; /* Reserved, must be zero */
191
192#define LOCAL_APIC_FLAGS \
193 u32 processor_enabled: 1; /* Processor is usable if set */\
194 u32 reserved2 : 31; /* Reserved, must be zero */
195
196/* Sub-structures for MADT */
197
198struct madt_processor_apic
199{
200 APIC_HEADER_DEF
201 u8 processor_id; /* ACPI processor id */
202 u8 local_apic_id; /* Processor's local APIC id */
203 LOCAL_APIC_FLAGS
204};
205
206struct madt_io_apic
207{
208 APIC_HEADER_DEF
209 u8 io_apic_id; /* I/O APIC ID */
210 u8 reserved; /* Reserved - must be zero */
211 u32 address; /* APIC physical address */
212 u32 interrupt; /* Global system interrupt where INTI
213 * lines start */
214};
215
216struct madt_interrupt_override
217{
218 APIC_HEADER_DEF
219 u8 bus; /* 0 - ISA */
220 u8 source; /* Interrupt source (IRQ) */
221 u32 interrupt; /* Global system interrupt */
222 MPS_INTI_FLAGS
223};
224
225struct madt_nmi_source
226{
227 APIC_HEADER_DEF
228 MPS_INTI_FLAGS
229 u32 interrupt; /* Global system interrupt */
230};
231
232struct madt_local_apic_nmi
233{
234 APIC_HEADER_DEF
235 u8 processor_id; /* ACPI processor id */
236 MPS_INTI_FLAGS
237 u8 lint; /* LINTn to which NMI is connected */
238};
239
240struct madt_address_override
241{
242 APIC_HEADER_DEF
243 u16 reserved; /* Reserved - must be zero */
244 u64 address; /* APIC physical address */
245};
246
247struct madt_io_sapic
248{
249 APIC_HEADER_DEF
250 u8 io_sapic_id; /* I/O SAPIC ID */
251 u8 reserved; /* Reserved - must be zero */
252 u32 interrupt_base; /* Glocal interrupt for SAPIC start */
253 u64 address; /* SAPIC physical address */
254};
255
256struct madt_local_sapic
257{
258 APIC_HEADER_DEF
259 u8 processor_id; /* ACPI processor id */
260 u8 local_sapic_id; /* SAPIC ID */
261 u8 local_sapic_eid; /* SAPIC EID */
262 u8 reserved [3]; /* Reserved - must be zero */
263 LOCAL_APIC_FLAGS
264 u32 processor_uID; /* Numeric UID - ACPI 3.0 */
265 char processor_uIDstring[1]; /* String UID - ACPI 3.0 */
266};
267
268struct madt_interrupt_source
269{
270 APIC_HEADER_DEF
271 MPS_INTI_FLAGS
272 u8 interrupt_type; /* 1=PMI, 2=INIT, 3=corrected */
273 u8 processor_id; /* Processor ID */
274 u8 processor_eid; /* Processor EID */
275 u8 io_sapic_vector; /* Vector value for PMI interrupts */
276 u32 interrupt; /* Global system interrupt */
277 u32 flags; /* Interrupt Source Flags */
278};
279
280
281/*
282 * Smart Battery
283 */
284struct smart_battery_table
285{
286 ACPI_TABLE_HEADER_DEF
287 u32 warning_level;
288 u32 low_level;
289 u32 critical_level;
290};
291
292
293#pragma pack()
294
295
296/*
297 * ACPI Table information. We save the table address, length,
298 * and type of memory allocation (mapped or allocated) for each
299 * table for 1) when we exit, and 2) if a new table is installed
300 */
301#define ACPI_MEM_NOT_ALLOCATED 0
302#define ACPI_MEM_ALLOCATED 1
303#define ACPI_MEM_MAPPED 2
304
305/* Definitions for the Flags bitfield member of struct acpi_table_support */
306
307#define ACPI_TABLE_SINGLE 0x00
308#define ACPI_TABLE_MULTIPLE 0x01
309#define ACPI_TABLE_EXECUTABLE 0x02
310
311#define ACPI_TABLE_ROOT 0x00
312#define ACPI_TABLE_PRIMARY 0x10
313#define ACPI_TABLE_SECONDARY 0x20
314#define ACPI_TABLE_ALL 0x30
315#define ACPI_TABLE_TYPE_MASK 0x30
316
317/* Data about each known table type */
318
319struct acpi_table_support
320{
321 char *name;
322 char *signature;
323 void **global_ptr;
324 u8 sig_length;
325 u8 flags;
326};
327
328
329/*
330 * Get the ACPI version-specific tables
331 */
332#include "actbl1.h" /* Acpi 1.0 table definitions */
333#include "actbl2.h" /* Acpi 2.0 table definitions */
334
335extern u8 acpi_fadt_is_v1; /* is set to 1 if FADT is revision 1,
336 * needed for certain workarounds */
337
338#pragma pack(1)
339/*
340 * High performance timer
341 */
342struct hpet_table
343{
344 ACPI_TABLE_HEADER_DEF
345 u32 hardware_id;
346 struct acpi_generic_address base_address;
347 u8 hpet_number;
348 u16 clock_tick;
349 u8 attributes;
350};
351
352#pragma pack()
353
354#endif /* __ACTBL_H__ */
diff --git a/include/acpi/actbl1.h b/include/acpi/actbl1.h
new file mode 100644
index 00000000000..33de5f4d2cc
--- /dev/null
+++ b/include/acpi/actbl1.h
@@ -0,0 +1,136 @@
1/******************************************************************************
2 *
3 * Name: actbl1.h - ACPI 1.0 tables
4 *
5 *****************************************************************************/
6
7/*
8 * Copyright (C) 2000 - 2005, R. Byron Moore
9 * All rights reserved.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions, and the following disclaimer,
16 * without modification.
17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18 * substantially similar to the "NO WARRANTY" disclaimer below
19 * ("Disclaimer") and any redistribution must be conditioned upon
20 * including a substantially similar Disclaimer requirement for further
21 * binary redistribution.
22 * 3. Neither the names of the above-listed copyright holders nor the names
23 * of any contributors may be used to endorse or promote products derived
24 * from this software without specific prior written permission.
25 *
26 * Alternatively, this software may be distributed under the terms of the
27 * GNU General Public License ("GPL") version 2 as published by the Free
28 * Software Foundation.
29 *
30 * NO WARRANTY
31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41 * POSSIBILITY OF SUCH DAMAGES.
42 */
43
44#ifndef __ACTBL1_H__
45#define __ACTBL1_H__
46
47#pragma pack(1)
48
49/*
50 * ACPI 1.0 Root System Description Table (RSDT)
51 */
52struct rsdt_descriptor_rev1
53{
54 ACPI_TABLE_HEADER_DEF /* ACPI common table header */
55 u32 table_offset_entry [1]; /* Array of pointers to other */
56 /* ACPI tables */
57};
58
59
60/*
61 * ACPI 1.0 Firmware ACPI Control Structure (FACS)
62 */
63struct facs_descriptor_rev1
64{
65 char signature[4]; /* ACPI Signature */
66 u32 length; /* Length of structure, in bytes */
67 u32 hardware_signature; /* Hardware configuration signature */
68 u32 firmware_waking_vector; /* ACPI OS waking vector */
69 u32 global_lock; /* Global Lock */
70 u32 S4bios_f : 1; /* Indicates if S4BIOS support is present */
71 u32 reserved1 : 31; /* Must be 0 */
72 u8 resverved3 [40]; /* Reserved - must be zero */
73};
74
75
76/*
77 * ACPI 1.0 Fixed ACPI Description Table (FADT)
78 */
79struct fadt_descriptor_rev1
80{
81 ACPI_TABLE_HEADER_DEF /* ACPI common table header */
82 u32 firmware_ctrl; /* Physical address of FACS */
83 u32 dsdt; /* Physical address of DSDT */
84 u8 model; /* System Interrupt Model */
85 u8 reserved1; /* Reserved */
86 u16 sci_int; /* System vector of SCI interrupt */
87 u32 smi_cmd; /* Port address of SMI command port */
88 u8 acpi_enable; /* Value to write to smi_cmd to enable ACPI */
89 u8 acpi_disable; /* Value to write to smi_cmd to disable ACPI */
90 u8 S4bios_req; /* Value to write to SMI CMD to enter S4BIOS state */
91 u8 reserved2; /* Reserved - must be zero */
92 u32 pm1a_evt_blk; /* Port address of Power Mgt 1a acpi_event Reg Blk */
93 u32 pm1b_evt_blk; /* Port address of Power Mgt 1b acpi_event Reg Blk */
94 u32 pm1a_cnt_blk; /* Port address of Power Mgt 1a Control Reg Blk */
95 u32 pm1b_cnt_blk; /* Port address of Power Mgt 1b Control Reg Blk */
96 u32 pm2_cnt_blk; /* Port address of Power Mgt 2 Control Reg Blk */
97 u32 pm_tmr_blk; /* Port address of Power Mgt Timer Ctrl Reg Blk */
98 u32 gpe0_blk; /* Port addr of General Purpose acpi_event 0 Reg Blk */
99 u32 gpe1_blk; /* Port addr of General Purpose acpi_event 1 Reg Blk */
100 u8 pm1_evt_len; /* Byte length of ports at pm1_x_evt_blk */
101 u8 pm1_cnt_len; /* Byte length of ports at pm1_x_cnt_blk */
102 u8 pm2_cnt_len; /* Byte Length of ports at pm2_cnt_blk */
103 u8 pm_tm_len; /* Byte Length of ports at pm_tm_blk */
104 u8 gpe0_blk_len; /* Byte Length of ports at gpe0_blk */
105 u8 gpe1_blk_len; /* Byte Length of ports at gpe1_blk */
106 u8 gpe1_base; /* Offset in gpe model where gpe1 events start */
107 u8 reserved3; /* Reserved */
108 u16 plvl2_lat; /* Worst case HW latency to enter/exit C2 state */
109 u16 plvl3_lat; /* Worst case HW latency to enter/exit C3 state */
110 u16 flush_size; /* Size of area read to flush caches */
111 u16 flush_stride; /* Stride used in flushing caches */
112 u8 duty_offset; /* Bit location of duty cycle field in p_cnt reg */
113 u8 duty_width; /* Bit width of duty cycle field in p_cnt reg */
114 u8 day_alrm; /* Index to day-of-month alarm in RTC CMOS RAM */
115 u8 mon_alrm; /* Index to month-of-year alarm in RTC CMOS RAM */
116 u8 century; /* Index to century in RTC CMOS RAM */
117 u8 reserved4; /* Reserved */
118 u8 reserved4a; /* Reserved */
119 u8 reserved4b; /* Reserved */
120 u32 wb_invd : 1; /* The wbinvd instruction works properly */
121 u32 wb_invd_flush : 1; /* The wbinvd flushes but does not invalidate */
122 u32 proc_c1 : 1; /* All processors support C1 state */
123 u32 plvl2_up : 1; /* C2 state works on MP system */
124 u32 pwr_button : 1; /* Power button is handled as a generic feature */
125 u32 sleep_button : 1; /* Sleep button is handled as a generic feature, or not present */
126 u32 fixed_rTC : 1; /* RTC wakeup stat not in fixed register space */
127 u32 rtcs4 : 1; /* RTC wakeup stat not possible from S4 */
128 u32 tmr_val_ext : 1; /* The tmr_val width is 32 bits (0 = 24 bits) */
129 u32 reserved5 : 23; /* Reserved - must be zero */
130};
131
132#pragma pack()
133
134#endif /* __ACTBL1_H__ */
135
136
diff --git a/include/acpi/actbl2.h b/include/acpi/actbl2.h
new file mode 100644
index 00000000000..e1729c967e0
--- /dev/null
+++ b/include/acpi/actbl2.h
@@ -0,0 +1,289 @@
1/******************************************************************************
2 *
3 * Name: actbl2.h - ACPI Specification Revision 2.0 Tables
4 *
5 *****************************************************************************/
6
7/*
8 * Copyright (C) 2000 - 2005, R. Byron Moore
9 * All rights reserved.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions, and the following disclaimer,
16 * without modification.
17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18 * substantially similar to the "NO WARRANTY" disclaimer below
19 * ("Disclaimer") and any redistribution must be conditioned upon
20 * including a substantially similar Disclaimer requirement for further
21 * binary redistribution.
22 * 3. Neither the names of the above-listed copyright holders nor the names
23 * of any contributors may be used to endorse or promote products derived
24 * from this software without specific prior written permission.
25 *
26 * Alternatively, this software may be distributed under the terms of the
27 * GNU General Public License ("GPL") version 2 as published by the Free
28 * Software Foundation.
29 *
30 * NO WARRANTY
31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41 * POSSIBILITY OF SUCH DAMAGES.
42 */
43
44#ifndef __ACTBL2_H__
45#define __ACTBL2_H__
46
47/*
48 * Prefered Power Management Profiles
49 */
50#define PM_UNSPECIFIED 0
51#define PM_DESKTOP 1
52#define PM_MOBILE 2
53#define PM_WORKSTATION 3
54#define PM_ENTERPRISE_SERVER 4
55#define PM_SOHO_SERVER 5
56#define PM_APPLIANCE_PC 6
57
58/*
59 * ACPI Boot Arch Flags
60 */
61#define BAF_LEGACY_DEVICES 0x0001
62#define BAF_8042_KEYBOARD_CONTROLLER 0x0002
63
64#define FADT2_REVISION_ID 3
65#define FADT2_MINUS_REVISION_ID 2
66
67
68#pragma pack(1)
69
70/*
71 * ACPI 2.0 Root System Description Table (RSDT)
72 */
73struct rsdt_descriptor_rev2
74{
75 ACPI_TABLE_HEADER_DEF /* ACPI common table header */
76 u32 table_offset_entry [1]; /* Array of pointers to */
77 /* ACPI table headers */
78};
79
80
81/*
82 * ACPI 2.0 Extended System Description Table (XSDT)
83 */
84struct xsdt_descriptor_rev2
85{
86 ACPI_TABLE_HEADER_DEF /* ACPI common table header */
87 u64 table_offset_entry [1]; /* Array of pointers to */
88 /* ACPI table headers */
89};
90
91
92/*
93 * ACPI 2.0 Firmware ACPI Control Structure (FACS)
94 */
95struct facs_descriptor_rev2
96{
97 char signature[4]; /* ACPI signature */
98 u32 length; /* Length of structure, in bytes */
99 u32 hardware_signature; /* Hardware configuration signature */
100 u32 firmware_waking_vector; /* 32bit physical address of the Firmware Waking Vector. */
101 u32 global_lock; /* Global Lock used to synchronize access to shared hardware resources */
102 u32 S4bios_f : 1; /* S4Bios_f - Indicates if S4BIOS support is present */
103 u32 reserved1 : 31; /* Must be 0 */
104 u64 xfirmware_waking_vector; /* 64bit physical address of the Firmware Waking Vector. */
105 u8 version; /* Version of this table */
106 u8 reserved3 [31]; /* Reserved - must be zero */
107};
108
109
110/*
111 * ACPI 2.0+ Generic Address Structure (GAS)
112 */
113struct acpi_generic_address
114{
115 u8 address_space_id; /* Address space where struct or register exists. */
116 u8 register_bit_width; /* Size in bits of given register */
117 u8 register_bit_offset; /* Bit offset within the register */
118 u8 access_width; /* Minimum Access size (ACPI 3.0) */
119 u64 address; /* 64-bit address of struct or register */
120};
121
122
123#define FADT_REV2_COMMON \
124 u32 V1_firmware_ctrl; /* 32-bit physical address of FACS */ \
125 u32 V1_dsdt; /* 32-bit physical address of DSDT */ \
126 u8 reserved1; /* System Interrupt Model isn't used in ACPI 2.0*/ \
127 u8 prefer_PM_profile; /* Conveys preferred power management profile to OSPM. */ \
128 u16 sci_int; /* System vector of SCI interrupt */ \
129 u32 smi_cmd; /* Port address of SMI command port */ \
130 u8 acpi_enable; /* Value to write to smi_cmd to enable ACPI */ \
131 u8 acpi_disable; /* Value to write to smi_cmd to disable ACPI */ \
132 u8 S4bios_req; /* Value to write to SMI CMD to enter S4BIOS state */ \
133 u8 pstate_cnt; /* Processor performance state control*/ \
134 u32 V1_pm1a_evt_blk; /* Port address of Power Mgt 1a acpi_event Reg Blk */ \
135 u32 V1_pm1b_evt_blk; /* Port address of Power Mgt 1b acpi_event Reg Blk */ \
136 u32 V1_pm1a_cnt_blk; /* Port address of Power Mgt 1a Control Reg Blk */ \
137 u32 V1_pm1b_cnt_blk; /* Port address of Power Mgt 1b Control Reg Blk */ \
138 u32 V1_pm2_cnt_blk; /* Port address of Power Mgt 2 Control Reg Blk */ \
139 u32 V1_pm_tmr_blk; /* Port address of Power Mgt Timer Ctrl Reg Blk */ \
140 u32 V1_gpe0_blk; /* Port addr of General Purpose acpi_event 0 Reg Blk */ \
141 u32 V1_gpe1_blk; /* Port addr of General Purpose acpi_event 1 Reg Blk */ \
142 u8 pm1_evt_len; /* Byte length of ports at pm1_x_evt_blk */ \
143 u8 pm1_cnt_len; /* Byte length of ports at pm1_x_cnt_blk */ \
144 u8 pm2_cnt_len; /* Byte Length of ports at pm2_cnt_blk */ \
145 u8 pm_tm_len; /* Byte Length of ports at pm_tm_blk */ \
146 u8 gpe0_blk_len; /* Byte Length of ports at gpe0_blk */ \
147 u8 gpe1_blk_len; /* Byte Length of ports at gpe1_blk */ \
148 u8 gpe1_base; /* Offset in gpe model where gpe1 events start */ \
149 u8 cst_cnt; /* Support for the _CST object and C States change notification.*/ \
150 u16 plvl2_lat; /* Worst case HW latency to enter/exit C2 state */ \
151 u16 plvl3_lat; /* Worst case HW latency to enter/exit C3 state */ \
152 u16 flush_size; /* Number of flush strides that need to be read */ \
153 u16 flush_stride; /* Processor's memory cache line width, in bytes */ \
154 u8 duty_offset; /* Processor's duty cycle index in processor's P_CNT reg*/ \
155 u8 duty_width; /* Processor's duty cycle value bit width in P_CNT register.*/ \
156 u8 day_alrm; /* Index to day-of-month alarm in RTC CMOS RAM */ \
157 u8 mon_alrm; /* Index to month-of-year alarm in RTC CMOS RAM */ \
158 u8 century; /* Index to century in RTC CMOS RAM */ \
159 u16 iapc_boot_arch; /* IA-PC Boot Architecture Flags. See Table 5-10 for description*/
160
161/*
162 * ACPI 2.0+ Fixed ACPI Description Table (FADT)
163 */
164struct fadt_descriptor_rev2
165{
166 ACPI_TABLE_HEADER_DEF /* ACPI common table header */
167 FADT_REV2_COMMON
168 u8 reserved2; /* Reserved */
169 u32 wb_invd : 1; /* The wbinvd instruction works properly */
170 u32 wb_invd_flush : 1; /* The wbinvd flushes but does not invalidate */
171 u32 proc_c1 : 1; /* All processors support C1 state */
172 u32 plvl2_up : 1; /* C2 state works on MP system */
173 u32 pwr_button : 1; /* Power button is handled as a generic feature */
174 u32 sleep_button : 1; /* Sleep button is handled as a generic feature, or not present */
175 u32 fixed_rTC : 1; /* RTC wakeup stat not in fixed register space */
176 u32 rtcs4 : 1; /* RTC wakeup stat not possible from S4 */
177 u32 tmr_val_ext : 1; /* Indicates tmr_val is 32 bits 0=24-bits */
178 u32 dock_cap : 1; /* Supports Docking */
179 u32 reset_reg_sup : 1; /* Indicates system supports system reset via the FADT RESET_REG */
180 u32 sealed_case : 1; /* Indicates system has no internal expansion capabilities and case is sealed */
181 u32 headless : 1; /* Indicates system does not have local video capabilities or local input devices */
182 u32 cpu_sw_sleep : 1; /* Indicates to OSPM that a processor native instruction */
183 /* must be executed after writing the SLP_TYPx register */
184 /* ACPI 3.0 flag bits */
185
186 u32 pci_exp_wak : 1; /* System supports PCIEXP_WAKE (STS/EN) bits */
187 u32 use_platform_clock : 1; /* OSPM should use platform-provided timer */
188 u32 S4rtc_sts_valid : 1; /* Contents of RTC_STS valid after S4 wake */
189 u32 remote_power_on_capable : 1; /* System is compatible with remote power on */
190 u32 force_apic_cluster_model : 1; /* All local APICs must use cluster model */
191 u32 force_apic_physical_destination_mode : 1; /* all local x_aPICs must use physical dest mode */
192 u32 reserved6 : 12;/* Reserved - must be zero */
193
194 struct acpi_generic_address reset_register; /* Reset register address in GAS format */
195 u8 reset_value; /* Value to write to the reset_register port to reset the system */
196 u8 reserved7[3]; /* These three bytes must be zero */
197 u64 xfirmware_ctrl; /* 64-bit physical address of FACS */
198 u64 Xdsdt; /* 64-bit physical address of DSDT */
199 struct acpi_generic_address xpm1a_evt_blk; /* Extended Power Mgt 1a acpi_event Reg Blk address */
200 struct acpi_generic_address xpm1b_evt_blk; /* Extended Power Mgt 1b acpi_event Reg Blk address */
201 struct acpi_generic_address xpm1a_cnt_blk; /* Extended Power Mgt 1a Control Reg Blk address */
202 struct acpi_generic_address xpm1b_cnt_blk; /* Extended Power Mgt 1b Control Reg Blk address */
203 struct acpi_generic_address xpm2_cnt_blk; /* Extended Power Mgt 2 Control Reg Blk address */
204 struct acpi_generic_address xpm_tmr_blk; /* Extended Power Mgt Timer Ctrl Reg Blk address */
205 struct acpi_generic_address xgpe0_blk; /* Extended General Purpose acpi_event 0 Reg Blk address */
206 struct acpi_generic_address xgpe1_blk; /* Extended General Purpose acpi_event 1 Reg Blk address */
207};
208
209
210/* "Down-revved" ACPI 2.0 FADT descriptor */
211
212struct fadt_descriptor_rev2_minus
213{
214 ACPI_TABLE_HEADER_DEF /* ACPI common table header */
215 FADT_REV2_COMMON
216 u8 reserved2; /* Reserved */
217 u32 flags;
218 struct acpi_generic_address reset_register; /* Reset register address in GAS format */
219 u8 reset_value; /* Value to write to the reset_register port to reset the system. */
220 u8 reserved7[3]; /* These three bytes must be zero */
221};
222
223
224/* ECDT - Embedded Controller Boot Resources Table */
225
226struct ec_boot_resources
227{
228 ACPI_TABLE_HEADER_DEF
229 struct acpi_generic_address ec_control; /* Address of EC command/status register */
230 struct acpi_generic_address ec_data; /* Address of EC data register */
231 u32 uid; /* Unique ID - must be same as the EC _UID method */
232 u8 gpe_bit; /* The GPE for the EC */
233 u8 ec_id[1]; /* Full namepath of the EC in the ACPI namespace */
234};
235
236
237/* SRAT - System Resource Affinity Table */
238
239struct static_resource_alloc
240{
241 u8 type;
242 u8 length;
243 u8 proximity_domain_lo;
244 u8 apic_id;
245 u32 enabled :1;
246 u32 reserved3 :31;
247 u8 local_sapic_eid;
248 u8 proximity_domain_hi[3];
249 u32 reserved4;
250};
251
252struct memory_affinity
253{
254 u8 type;
255 u8 length;
256 u32 proximity_domain;
257 u16 reserved3;
258 u64 base_address;
259 u64 address_length;
260 u32 reserved4;
261 u32 enabled :1;
262 u32 hot_pluggable :1;
263 u32 non_volatile :1;
264 u32 reserved5 :29;
265 u64 reserved6;
266};
267
268struct system_resource_affinity
269{
270 ACPI_TABLE_HEADER_DEF
271 u32 reserved1; /* Must be value '1' */
272 u64 reserved2;
273};
274
275
276/* SLIT - System Locality Distance Information Table */
277
278struct system_locality_info
279{
280 ACPI_TABLE_HEADER_DEF
281 u64 locality_count;
282 u8 entry[1][1];
283};
284
285
286#pragma pack()
287
288#endif /* __ACTBL2_H__ */
289
diff --git a/include/acpi/actbl71.h b/include/acpi/actbl71.h
new file mode 100644
index 00000000000..7b4fb44261f
--- /dev/null
+++ b/include/acpi/actbl71.h
@@ -0,0 +1,144 @@
1/******************************************************************************
2 *
3 * Name: actbl71.h - IA-64 Extensions to the ACPI Spec Rev. 0.71
4 * This file includes tables specific to this
5 * specification revision.
6 *
7 *****************************************************************************/
8
9/*
10 * Copyright (C) 2000 - 2003, R. Byron Moore
11 *
12 * This program is free software; you can redistribute it and/or modify
13 * it under the terms of the GNU General Public License as published by
14 * the Free Software Foundation; either version 2 of the License, or
15 * (at your option) any later version.
16 *
17 * This program is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 * GNU General Public License for more details.
21 *
22 * You should have received a copy of the GNU General Public License
23 * along with this program; if not, write to the Free Software
24 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
25 */
26
27#ifndef __ACTBL71_H__
28#define __ACTBL71_H__
29
30
31/* 0.71 FADT address_space data item bitmasks defines */
32/* If the associated bit is zero then it is in memory space else in io space */
33
34#define SMI_CMD_ADDRESS_SPACE 0x01
35#define PM1_BLK_ADDRESS_SPACE 0x02
36#define PM2_CNT_BLK_ADDRESS_SPACE 0x04
37#define PM_TMR_BLK_ADDRESS_SPACE 0x08
38#define GPE0_BLK_ADDRESS_SPACE 0x10
39#define GPE1_BLK_ADDRESS_SPACE 0x20
40
41/* Only for clarity in declarations */
42
43typedef u64 IO_ADDRESS;
44
45
46#pragma pack(1)
47struct /* Root System Descriptor Pointer */
48{
49 NATIVE_CHAR signature [8]; /* contains "RSD PTR " */
50 u8 checksum; /* to make sum of struct == 0 */
51 NATIVE_CHAR oem_id [6]; /* OEM identification */
52 u8 reserved; /* Must be 0 for 1.0, 2 for 2.0 */
53 u64 rsdt_physical_address; /* 64-bit physical address of RSDT */
54};
55
56
57/*****************************************/
58/* IA64 Extensions to ACPI Spec Rev 0.71 */
59/* for the Root System Description Table */
60/*****************************************/
61struct
62{
63 struct acpi_table_header header; /* Table header */
64 u32 reserved_pad; /* IA64 alignment, must be 0 */
65 u64 table_offset_entry [1]; /* Array of pointers to other */
66 /* tables' headers */
67};
68
69
70/*******************************************/
71/* IA64 Extensions to ACPI Spec Rev 0.71 */
72/* for the Firmware ACPI Control Structure */
73/*******************************************/
74struct
75{
76 NATIVE_CHAR signature[4]; /* signature "FACS" */
77 u32 length; /* length of structure, in bytes */
78 u32 hardware_signature; /* hardware configuration signature */
79 u32 reserved4; /* must be 0 */
80 u64 firmware_waking_vector; /* ACPI OS waking vector */
81 u64 global_lock; /* Global Lock */
82 u32 S4bios_f : 1; /* Indicates if S4BIOS support is present */
83 u32 reserved1 : 31; /* must be 0 */
84 u8 reserved3 [28]; /* reserved - must be zero */
85};
86
87
88/******************************************/
89/* IA64 Extensions to ACPI Spec Rev 0.71 */
90/* for the Fixed ACPI Description Table */
91/******************************************/
92struct
93{
94 struct acpi_table_header header; /* table header */
95 u32 reserved_pad; /* IA64 alignment, must be 0 */
96 u64 firmware_ctrl; /* 64-bit Physical address of FACS */
97 u64 dsdt; /* 64-bit Physical address of DSDT */
98 u8 model; /* System Interrupt Model */
99 u8 address_space; /* Address Space Bitmask */
100 u16 sci_int; /* System vector of SCI interrupt */
101 u8 acpi_enable; /* value to write to smi_cmd to enable ACPI */
102 u8 acpi_disable; /* value to write to smi_cmd to disable ACPI */
103 u8 S4bios_req; /* Value to write to SMI CMD to enter S4BIOS state */
104 u8 reserved2; /* reserved - must be zero */
105 u64 smi_cmd; /* Port address of SMI command port */
106 u64 pm1a_evt_blk; /* Port address of Power Mgt 1a acpi_event Reg Blk */
107 u64 pm1b_evt_blk; /* Port address of Power Mgt 1b acpi_event Reg Blk */
108 u64 pm1a_cnt_blk; /* Port address of Power Mgt 1a Control Reg Blk */
109 u64 pm1b_cnt_blk; /* Port address of Power Mgt 1b Control Reg Blk */
110 u64 pm2_cnt_blk; /* Port address of Power Mgt 2 Control Reg Blk */
111 u64 pm_tmr_blk; /* Port address of Power Mgt Timer Ctrl Reg Blk */
112 u64 gpe0_blk; /* Port addr of General Purpose acpi_event 0 Reg Blk */
113 u64 gpe1_blk; /* Port addr of General Purpose acpi_event 1 Reg Blk */
114 u8 pm1_evt_len; /* Byte length of ports at pm1_x_evt_blk */
115 u8 pm1_cnt_len; /* Byte length of ports at pm1_x_cnt_blk */
116 u8 pm2_cnt_len; /* Byte Length of ports at pm2_cnt_blk */
117 u8 pm_tm_len; /* Byte Length of ports at pm_tm_blk */
118 u8 gpe0_blk_len; /* Byte Length of ports at gpe0_blk */
119 u8 gpe1_blk_len; /* Byte Length of ports at gpe1_blk */
120 u8 gpe1_base; /* offset in gpe model where gpe1 events start */
121 u8 reserved3; /* reserved */
122 u16 plvl2_lat; /* worst case HW latency to enter/exit C2 state */
123 u16 plvl3_lat; /* worst case HW latency to enter/exit C3 state */
124 u8 day_alrm; /* index to day-of-month alarm in RTC CMOS RAM */
125 u8 mon_alrm; /* index to month-of-year alarm in RTC CMOS RAM */
126 u8 century; /* index to century in RTC CMOS RAM */
127 u8 reserved4; /* reserved */
128 u32 flush_cash : 1; /* PAL_FLUSH_CACHE is correctly supported */
129 u32 reserved5 : 1; /* reserved - must be zero */
130 u32 proc_c1 : 1; /* all processors support C1 state */
131 u32 plvl2_up : 1; /* C2 state works on MP system */
132 u32 pwr_button : 1; /* Power button is handled as a generic feature */
133 u32 sleep_button : 1; /* Sleep button is handled as a generic feature, or not present */
134 u32 fixed_rTC : 1; /* RTC wakeup stat not in fixed register space */
135 u32 rtcs4 : 1; /* RTC wakeup stat not possible from S4 */
136 u32 tmr_val_ext : 1; /* tmr_val is 32 bits */
137 u32 dock_cap : 1; /* Supports Docking */
138 u32 reserved6 : 22; /* reserved - must be zero */
139};
140
141#pragma pack()
142
143#endif /* __ACTBL71_H__ */
144
diff --git a/include/acpi/actypes.h b/include/acpi/actypes.h
new file mode 100644
index 00000000000..7acb550af3e
--- /dev/null
+++ b/include/acpi/actypes.h
@@ -0,0 +1,1304 @@
1/******************************************************************************
2 *
3 * Name: actypes.h - Common data types for the entire ACPI subsystem
4 *
5 *****************************************************************************/
6
7/*
8 * Copyright (C) 2000 - 2005, R. Byron Moore
9 * All rights reserved.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions, and the following disclaimer,
16 * without modification.
17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18 * substantially similar to the "NO WARRANTY" disclaimer below
19 * ("Disclaimer") and any redistribution must be conditioned upon
20 * including a substantially similar Disclaimer requirement for further
21 * binary redistribution.
22 * 3. Neither the names of the above-listed copyright holders nor the names
23 * of any contributors may be used to endorse or promote products derived
24 * from this software without specific prior written permission.
25 *
26 * Alternatively, this software may be distributed under the terms of the
27 * GNU General Public License ("GPL") version 2 as published by the Free
28 * Software Foundation.
29 *
30 * NO WARRANTY
31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41 * POSSIBILITY OF SUCH DAMAGES.
42 */
43
44#ifndef __ACTYPES_H__
45#define __ACTYPES_H__
46
47/*! [Begin] no source code translation (keep the typedefs) */
48
49
50
51/*
52 * Data type ranges
53 * Note: These macros are designed to be compiler independent as well as
54 * working around problems that some 32-bit compilers have with 64-bit
55 * constants.
56 */
57#define ACPI_UINT8_MAX (UINT8) (~((UINT8) 0)) /* 0xFF */
58#define ACPI_UINT16_MAX (UINT16)(~((UINT16) 0)) /* 0xFFFF */
59#define ACPI_UINT32_MAX (UINT32)(~((UINT32) 0)) /* 0xFFFFFFFF */
60#define ACPI_UINT64_MAX (UINT64)(~((UINT64) 0)) /* 0xFFFFFFFFFFFFFFFF */
61#define ACPI_ASCII_MAX 0x7F
62
63
64#ifdef DEFINE_ALTERNATE_TYPES
65/*
66 * Types used only in translated source, defined here to enable
67 * cross-platform compilation only.
68 */
69typedef int s32;
70typedef unsigned char u8;
71typedef unsigned short u16;
72typedef unsigned int u32;
73typedef COMPILER_DEPENDENT_UINT64 u64;
74
75#endif
76
77
78/*
79 * Data types - Fixed across all compilation models (16/32/64)
80 *
81 * BOOLEAN Logical Boolean.
82 * INT8 8-bit (1 byte) signed value
83 * UINT8 8-bit (1 byte) unsigned value
84 * INT16 16-bit (2 byte) signed value
85 * UINT16 16-bit (2 byte) unsigned value
86 * INT32 32-bit (4 byte) signed value
87 * UINT32 32-bit (4 byte) unsigned value
88 * INT64 64-bit (8 byte) signed value
89 * UINT64 64-bit (8 byte) unsigned value
90 * ACPI_NATIVE_INT 32-bit on IA-32, 64-bit on IA-64 signed value
91 * ACPI_NATIVE_UINT 32-bit on IA-32, 64-bit on IA-64 unsigned value
92 */
93
94#ifndef ACPI_MACHINE_WIDTH
95#error ACPI_MACHINE_WIDTH not defined
96#endif
97
98#if ACPI_MACHINE_WIDTH == 64
99
100/*! [Begin] no source code translation (keep the typedefs) */
101
102/*
103 * 64-bit type definitions
104 */
105typedef unsigned char UINT8;
106typedef unsigned char BOOLEAN;
107typedef unsigned short UINT16;
108typedef int INT32;
109typedef unsigned int UINT32;
110typedef COMPILER_DEPENDENT_INT64 INT64;
111typedef COMPILER_DEPENDENT_UINT64 UINT64;
112
113/*! [End] no source code translation !*/
114
115typedef s64 acpi_native_int;
116typedef u64 acpi_native_uint;
117
118typedef u64 acpi_table_ptr;
119typedef u64 acpi_io_address;
120typedef u64 acpi_physical_address;
121typedef u64 acpi_size;
122
123#define ALIGNED_ADDRESS_BOUNDARY 0x00000008 /* No hardware alignment support in IA64 */
124#define ACPI_USE_NATIVE_DIVIDE /* Native 64-bit integer support */
125#define ACPI_MAX_PTR ACPI_UINT64_MAX
126#define ACPI_SIZE_MAX ACPI_UINT64_MAX
127
128
129#elif ACPI_MACHINE_WIDTH == 16
130
131/*! [Begin] no source code translation (keep the typedefs) */
132
133/*
134 * 16-bit type definitions
135 */
136typedef unsigned char UINT8;
137typedef unsigned char BOOLEAN;
138typedef unsigned int UINT16;
139typedef long INT32;
140typedef int INT16;
141typedef unsigned long UINT32;
142
143struct
144{
145 UINT32 Lo;
146 UINT32 Hi;
147};
148
149/*! [End] no source code translation !*/
150
151typedef u16 acpi_native_uint;
152typedef s16 acpi_native_int;
153
154typedef u32 acpi_table_ptr;
155typedef u32 acpi_io_address;
156typedef char *acpi_physical_address;
157typedef u16 acpi_size;
158
159#define ALIGNED_ADDRESS_BOUNDARY 0x00000002
160#define ACPI_MISALIGNED_TRANSFERS
161#define ACPI_USE_NATIVE_DIVIDE /* No 64-bit integers, ok to use native divide */
162#define ACPI_MAX_PTR ACPI_UINT16_MAX
163#define ACPI_SIZE_MAX ACPI_UINT16_MAX
164
165/*
166 * (16-bit only) internal integers must be 32-bits, so
167 * 64-bit integers cannot be supported
168 */
169#define ACPI_NO_INTEGER64_SUPPORT
170
171
172#elif ACPI_MACHINE_WIDTH == 32
173
174/*! [Begin] no source code translation (keep the typedefs) */
175
176/*
177 * 32-bit type definitions (default)
178 */
179typedef unsigned char UINT8;
180typedef unsigned char BOOLEAN;
181typedef unsigned short UINT16;
182typedef int INT32;
183typedef unsigned int UINT32;
184typedef COMPILER_DEPENDENT_INT64 INT64;
185typedef COMPILER_DEPENDENT_UINT64 UINT64;
186
187/*! [End] no source code translation !*/
188
189typedef s32 acpi_native_int;
190typedef u32 acpi_native_uint;
191
192typedef u64 acpi_table_ptr;
193typedef u32 acpi_io_address;
194typedef u64 acpi_physical_address;
195typedef u32 acpi_size;
196
197#define ALIGNED_ADDRESS_BOUNDARY 0x00000004
198#define ACPI_MISALIGNED_TRANSFERS
199#define ACPI_MAX_PTR ACPI_UINT32_MAX
200#define ACPI_SIZE_MAX ACPI_UINT32_MAX
201
202#else
203#error unknown ACPI_MACHINE_WIDTH
204#endif
205
206
207/*
208 * Miscellaneous common types
209 */
210typedef u16 UINT16_BIT;
211typedef u32 UINT32_BIT;
212typedef acpi_native_uint ACPI_PTRDIFF;
213
214/*
215 * Pointer overlays to avoid lots of typecasting for
216 * code that accepts both physical and logical pointers.
217 */
218union acpi_pointers
219{
220 acpi_physical_address physical;
221 void *logical;
222 acpi_table_ptr value;
223};
224
225struct acpi_pointer
226{
227 u32 pointer_type;
228 union acpi_pointers pointer;
229};
230
231/* pointer_types for above */
232
233#define ACPI_PHYSICAL_POINTER 0x01
234#define ACPI_LOGICAL_POINTER 0x02
235
236/* Processor mode */
237
238#define ACPI_PHYSICAL_ADDRESSING 0x04
239#define ACPI_LOGICAL_ADDRESSING 0x08
240#define ACPI_MEMORY_MODE 0x0C
241
242#define ACPI_PHYSMODE_PHYSPTR ACPI_PHYSICAL_ADDRESSING | ACPI_PHYSICAL_POINTER
243#define ACPI_LOGMODE_PHYSPTR ACPI_LOGICAL_ADDRESSING | ACPI_PHYSICAL_POINTER
244#define ACPI_LOGMODE_LOGPTR ACPI_LOGICAL_ADDRESSING | ACPI_LOGICAL_POINTER
245
246
247/*
248 * Useful defines
249 */
250#ifdef FALSE
251#undef FALSE
252#endif
253#define FALSE (1 == 0)
254
255#ifdef TRUE
256#undef TRUE
257#endif
258#define TRUE (1 == 1)
259
260#ifndef NULL
261#define NULL (void *) 0
262#endif
263
264
265/*
266 * Local datatypes
267 */
268typedef u32 acpi_status; /* All ACPI Exceptions */
269typedef u32 acpi_name; /* 4-byte ACPI name */
270typedef char * acpi_string; /* Null terminated ASCII string */
271typedef void * acpi_handle; /* Actually a ptr to an Node */
272
273struct uint64_struct
274{
275 u32 lo;
276 u32 hi;
277};
278
279union uint64_overlay
280{
281 u64 full;
282 struct uint64_struct part;
283};
284
285struct uint32_struct
286{
287 u32 lo;
288 u32 hi;
289};
290
291
292/*
293 * Acpi integer width. In ACPI version 1, integers are
294 * 32 bits. In ACPI version 2, integers are 64 bits.
295 * Note that this pertains to the ACPI integer type only, not
296 * other integers used in the implementation of the ACPI CA
297 * subsystem.
298 */
299#ifdef ACPI_NO_INTEGER64_SUPPORT
300
301/* 32-bit integers only, no 64-bit support */
302
303typedef u32 acpi_integer;
304#define ACPI_INTEGER_MAX ACPI_UINT32_MAX
305#define ACPI_INTEGER_BIT_SIZE 32
306#define ACPI_MAX_DECIMAL_DIGITS 10 /* 2^32 = 4,294,967,296 */
307
308#define ACPI_USE_NATIVE_DIVIDE /* Use compiler native 32-bit divide */
309
310
311#else
312
313/* 64-bit integers */
314
315typedef u64 acpi_integer;
316#define ACPI_INTEGER_MAX ACPI_UINT64_MAX
317#define ACPI_INTEGER_BIT_SIZE 64
318#define ACPI_MAX_DECIMAL_DIGITS 20 /* 2^64 = 18,446,744,073,709,551,616 */
319
320
321#if ACPI_MACHINE_WIDTH == 64
322#define ACPI_USE_NATIVE_DIVIDE /* Use compiler native 64-bit divide */
323#endif
324#endif
325
326#define ACPI_MAX64_DECIMAL_DIGITS 20
327#define ACPI_MAX32_DECIMAL_DIGITS 10
328#define ACPI_MAX16_DECIMAL_DIGITS 5
329#define ACPI_MAX8_DECIMAL_DIGITS 3
330
331/*
332 * Constants with special meanings
333 */
334#define ACPI_ROOT_OBJECT (acpi_handle) ACPI_PTR_ADD (char, NULL, ACPI_MAX_PTR)
335
336
337/*
338 * Initialization sequence
339 */
340#define ACPI_FULL_INITIALIZATION 0x00
341#define ACPI_NO_ADDRESS_SPACE_INIT 0x01
342#define ACPI_NO_HARDWARE_INIT 0x02
343#define ACPI_NO_EVENT_INIT 0x04
344#define ACPI_NO_HANDLER_INIT 0x08
345#define ACPI_NO_ACPI_ENABLE 0x10
346#define ACPI_NO_DEVICE_INIT 0x20
347#define ACPI_NO_OBJECT_INIT 0x40
348
349/*
350 * Initialization state
351 */
352#define ACPI_INITIALIZED_OK 0x01
353
354/*
355 * Power state values
356 */
357#define ACPI_STATE_UNKNOWN (u8) 0xFF
358
359#define ACPI_STATE_S0 (u8) 0
360#define ACPI_STATE_S1 (u8) 1
361#define ACPI_STATE_S2 (u8) 2
362#define ACPI_STATE_S3 (u8) 3
363#define ACPI_STATE_S4 (u8) 4
364#define ACPI_STATE_S5 (u8) 5
365#define ACPI_S_STATES_MAX ACPI_STATE_S5
366#define ACPI_S_STATE_COUNT 6
367
368#define ACPI_STATE_D0 (u8) 0
369#define ACPI_STATE_D1 (u8) 1
370#define ACPI_STATE_D2 (u8) 2
371#define ACPI_STATE_D3 (u8) 3
372#define ACPI_D_STATES_MAX ACPI_STATE_D3
373#define ACPI_D_STATE_COUNT 4
374
375#define ACPI_STATE_C0 (u8) 0
376#define ACPI_STATE_C1 (u8) 1
377#define ACPI_STATE_C2 (u8) 2
378#define ACPI_STATE_C3 (u8) 3
379#define ACPI_C_STATES_MAX ACPI_STATE_C3
380#define ACPI_C_STATE_COUNT 4
381
382/*
383 * Sleep type invalid value
384 */
385#define ACPI_SLEEP_TYPE_MAX 0x7
386#define ACPI_SLEEP_TYPE_INVALID 0xFF
387
388/*
389 * Standard notify values
390 */
391#define ACPI_NOTIFY_BUS_CHECK (u8) 0
392#define ACPI_NOTIFY_DEVICE_CHECK (u8) 1
393#define ACPI_NOTIFY_DEVICE_WAKE (u8) 2
394#define ACPI_NOTIFY_EJECT_REQUEST (u8) 3
395#define ACPI_NOTIFY_DEVICE_CHECK_LIGHT (u8) 4
396#define ACPI_NOTIFY_FREQUENCY_MISMATCH (u8) 5
397#define ACPI_NOTIFY_BUS_MODE_MISMATCH (u8) 6
398#define ACPI_NOTIFY_POWER_FAULT (u8) 7
399
400/*
401 * Table types. These values are passed to the table related APIs
402 */
403typedef u32 acpi_table_type;
404
405#define ACPI_TABLE_RSDP (acpi_table_type) 0
406#define ACPI_TABLE_DSDT (acpi_table_type) 1
407#define ACPI_TABLE_FADT (acpi_table_type) 2
408#define ACPI_TABLE_FACS (acpi_table_type) 3
409#define ACPI_TABLE_PSDT (acpi_table_type) 4
410#define ACPI_TABLE_SSDT (acpi_table_type) 5
411#define ACPI_TABLE_XSDT (acpi_table_type) 6
412#define ACPI_TABLE_MAX 6
413#define NUM_ACPI_TABLE_TYPES (ACPI_TABLE_MAX+1)
414
415/*
416 * Types associated with ACPI names and objects. The first group of
417 * values (up to ACPI_TYPE_EXTERNAL_MAX) correspond to the definition
418 * of the ACPI object_type() operator (See the ACPI Spec). Therefore,
419 * only add to the first group if the spec changes.
420 *
421 * NOTE: Types must be kept in sync with the global acpi_ns_properties
422 * and acpi_ns_type_names arrays.
423 */
424typedef u32 acpi_object_type;
425
426#define ACPI_TYPE_ANY 0x00
427#define ACPI_TYPE_INTEGER 0x01 /* Byte/Word/Dword/Zero/One/Ones */
428#define ACPI_TYPE_STRING 0x02
429#define ACPI_TYPE_BUFFER 0x03
430#define ACPI_TYPE_PACKAGE 0x04 /* byte_const, multiple data_term/Constant/super_name */
431#define ACPI_TYPE_FIELD_UNIT 0x05
432#define ACPI_TYPE_DEVICE 0x06 /* Name, multiple Node */
433#define ACPI_TYPE_EVENT 0x07
434#define ACPI_TYPE_METHOD 0x08 /* Name, byte_const, multiple Code */
435#define ACPI_TYPE_MUTEX 0x09
436#define ACPI_TYPE_REGION 0x0A
437#define ACPI_TYPE_POWER 0x0B /* Name,byte_const,word_const,multi Node */
438#define ACPI_TYPE_PROCESSOR 0x0C /* Name,byte_const,Dword_const,byte_const,multi nm_o */
439#define ACPI_TYPE_THERMAL 0x0D /* Name, multiple Node */
440#define ACPI_TYPE_BUFFER_FIELD 0x0E
441#define ACPI_TYPE_DDB_HANDLE 0x0F
442#define ACPI_TYPE_DEBUG_OBJECT 0x10
443
444#define ACPI_TYPE_EXTERNAL_MAX 0x10
445
446/*
447 * These are object types that do not map directly to the ACPI
448 * object_type() operator. They are used for various internal purposes only.
449 * If new predefined ACPI_TYPEs are added (via the ACPI specification), these
450 * internal types must move upwards. (There is code that depends on these
451 * values being contiguous with the external types above.)
452 */
453#define ACPI_TYPE_LOCAL_REGION_FIELD 0x11
454#define ACPI_TYPE_LOCAL_BANK_FIELD 0x12
455#define ACPI_TYPE_LOCAL_INDEX_FIELD 0x13
456#define ACPI_TYPE_LOCAL_REFERENCE 0x14 /* Arg#, Local#, Name, Debug, ref_of, Index */
457#define ACPI_TYPE_LOCAL_ALIAS 0x15
458#define ACPI_TYPE_LOCAL_METHOD_ALIAS 0x16
459#define ACPI_TYPE_LOCAL_NOTIFY 0x17
460#define ACPI_TYPE_LOCAL_ADDRESS_HANDLER 0x18
461#define ACPI_TYPE_LOCAL_RESOURCE 0x19
462#define ACPI_TYPE_LOCAL_RESOURCE_FIELD 0x1A
463#define ACPI_TYPE_LOCAL_SCOPE 0x1B /* 1 Name, multiple object_list Nodes */
464
465#define ACPI_TYPE_NS_NODE_MAX 0x1B /* Last typecode used within a NS Node */
466
467/*
468 * These are special object types that never appear in
469 * a Namespace node, only in an union acpi_operand_object
470 */
471#define ACPI_TYPE_LOCAL_EXTRA 0x1C
472#define ACPI_TYPE_LOCAL_DATA 0x1D
473
474#define ACPI_TYPE_LOCAL_MAX 0x1D
475
476/* All types above here are invalid */
477
478#define ACPI_TYPE_INVALID 0x1E
479#define ACPI_TYPE_NOT_FOUND 0xFF
480
481
482/*
483 * Bitmapped ACPI types. Used internally only
484 */
485#define ACPI_BTYPE_ANY 0x00000000
486#define ACPI_BTYPE_INTEGER 0x00000001
487#define ACPI_BTYPE_STRING 0x00000002
488#define ACPI_BTYPE_BUFFER 0x00000004
489#define ACPI_BTYPE_PACKAGE 0x00000008
490#define ACPI_BTYPE_FIELD_UNIT 0x00000010
491#define ACPI_BTYPE_DEVICE 0x00000020
492#define ACPI_BTYPE_EVENT 0x00000040
493#define ACPI_BTYPE_METHOD 0x00000080
494#define ACPI_BTYPE_MUTEX 0x00000100
495#define ACPI_BTYPE_REGION 0x00000200
496#define ACPI_BTYPE_POWER 0x00000400
497#define ACPI_BTYPE_PROCESSOR 0x00000800
498#define ACPI_BTYPE_THERMAL 0x00001000
499#define ACPI_BTYPE_BUFFER_FIELD 0x00002000
500#define ACPI_BTYPE_DDB_HANDLE 0x00004000
501#define ACPI_BTYPE_DEBUG_OBJECT 0x00008000
502#define ACPI_BTYPE_REFERENCE 0x00010000
503#define ACPI_BTYPE_RESOURCE 0x00020000
504
505#define ACPI_BTYPE_COMPUTE_DATA (ACPI_BTYPE_INTEGER | ACPI_BTYPE_STRING | ACPI_BTYPE_BUFFER)
506
507#define ACPI_BTYPE_DATA (ACPI_BTYPE_COMPUTE_DATA | ACPI_BTYPE_PACKAGE)
508#define ACPI_BTYPE_DATA_REFERENCE (ACPI_BTYPE_DATA | ACPI_BTYPE_REFERENCE | ACPI_BTYPE_DDB_HANDLE)
509#define ACPI_BTYPE_DEVICE_OBJECTS (ACPI_BTYPE_DEVICE | ACPI_BTYPE_THERMAL | ACPI_BTYPE_PROCESSOR)
510#define ACPI_BTYPE_OBJECTS_AND_REFS 0x0001FFFF /* ARG or LOCAL */
511#define ACPI_BTYPE_ALL_OBJECTS 0x0000FFFF
512
513/*
514 * All I/O
515 */
516#define ACPI_READ 0
517#define ACPI_WRITE 1
518#define ACPI_IO_MASK 1
519
520/*
521 * Event Types: Fixed & General Purpose
522 */
523typedef u32 acpi_event_type;
524
525/*
526 * Fixed events
527 */
528#define ACPI_EVENT_PMTIMER 0
529#define ACPI_EVENT_GLOBAL 1
530#define ACPI_EVENT_POWER_BUTTON 2
531#define ACPI_EVENT_SLEEP_BUTTON 3
532#define ACPI_EVENT_RTC 4
533#define ACPI_EVENT_MAX 4
534#define ACPI_NUM_FIXED_EVENTS ACPI_EVENT_MAX + 1
535
536/*
537 * Event Status - Per event
538 * -------------
539 * The encoding of acpi_event_status is illustrated below.
540 * Note that a set bit (1) indicates the property is TRUE
541 * (e.g. if bit 0 is set then the event is enabled).
542 * +-------------+-+-+-+
543 * | Bits 31:3 |2|1|0|
544 * +-------------+-+-+-+
545 * | | | |
546 * | | | +- Enabled?
547 * | | +--- Enabled for wake?
548 * | +----- Set?
549 * +----------- <Reserved>
550 */
551typedef u32 acpi_event_status;
552
553#define ACPI_EVENT_FLAG_DISABLED (acpi_event_status) 0x00
554#define ACPI_EVENT_FLAG_ENABLED (acpi_event_status) 0x01
555#define ACPI_EVENT_FLAG_WAKE_ENABLED (acpi_event_status) 0x02
556#define ACPI_EVENT_FLAG_SET (acpi_event_status) 0x04
557
558/*
559 * General Purpose Events (GPE)
560 */
561#define ACPI_GPE_INVALID 0xFF
562#define ACPI_GPE_MAX 0xFF
563#define ACPI_NUM_GPE 256
564
565#define ACPI_GPE_ENABLE 0
566#define ACPI_GPE_DISABLE 1
567
568
569/*
570 * GPE info flags - Per GPE
571 * +-+-+-+---+---+-+
572 * |7|6|5|4:3|2:1|0|
573 * +-+-+-+---+---+-+
574 * | | | | | |
575 * | | | | | +--- Interrupt type: Edge or Level Triggered
576 * | | | | +--- Type: Wake-only, Runtime-only, or wake/runtime
577 * | | | +--- Type of dispatch -- to method, handler, or none
578 * | | +--- Enabled for runtime?
579 * | +--- Enabled for wake?
580 * +--- System state when GPE ocurred (running/waking)
581 */
582#define ACPI_GPE_XRUPT_TYPE_MASK (u8) 0x01
583#define ACPI_GPE_LEVEL_TRIGGERED (u8) 0x01
584#define ACPI_GPE_EDGE_TRIGGERED (u8) 0x00
585
586#define ACPI_GPE_TYPE_MASK (u8) 0x06
587#define ACPI_GPE_TYPE_WAKE_RUN (u8) 0x06
588#define ACPI_GPE_TYPE_WAKE (u8) 0x02
589#define ACPI_GPE_TYPE_RUNTIME (u8) 0x04 /* Default */
590
591#define ACPI_GPE_DISPATCH_MASK (u8) 0x18
592#define ACPI_GPE_DISPATCH_HANDLER (u8) 0x08
593#define ACPI_GPE_DISPATCH_METHOD (u8) 0x10
594#define ACPI_GPE_DISPATCH_NOT_USED (u8) 0x00 /* Default */
595
596#define ACPI_GPE_RUN_ENABLE_MASK (u8) 0x20
597#define ACPI_GPE_RUN_ENABLED (u8) 0x20
598#define ACPI_GPE_RUN_DISABLED (u8) 0x00 /* Default */
599
600#define ACPI_GPE_WAKE_ENABLE_MASK (u8) 0x40
601#define ACPI_GPE_WAKE_ENABLED (u8) 0x40
602#define ACPI_GPE_WAKE_DISABLED (u8) 0x00 /* Default */
603
604#define ACPI_GPE_ENABLE_MASK (u8) 0x60 /* Both run/wake */
605
606#define ACPI_GPE_SYSTEM_MASK (u8) 0x80
607#define ACPI_GPE_SYSTEM_RUNNING (u8) 0x80
608#define ACPI_GPE_SYSTEM_WAKING (u8) 0x00
609
610/*
611 * Flags for GPE and Lock interfaces
612 */
613#define ACPI_EVENT_WAKE_ENABLE 0x2 /* acpi_gpe_enable */
614#define ACPI_EVENT_WAKE_DISABLE 0x2 /* acpi_gpe_disable */
615
616#define ACPI_NOT_ISR 0x1
617#define ACPI_ISR 0x0
618
619
620/* Notify types */
621
622#define ACPI_SYSTEM_NOTIFY 0x1
623#define ACPI_DEVICE_NOTIFY 0x2
624#define ACPI_ALL_NOTIFY 0x3
625#define ACPI_MAX_NOTIFY_HANDLER_TYPE 0x3
626
627#define ACPI_MAX_SYS_NOTIFY 0x7f
628
629
630/* Address Space (Operation Region) Types */
631
632typedef u8 acpi_adr_space_type;
633
634#define ACPI_ADR_SPACE_SYSTEM_MEMORY (acpi_adr_space_type) 0
635#define ACPI_ADR_SPACE_SYSTEM_IO (acpi_adr_space_type) 1
636#define ACPI_ADR_SPACE_PCI_CONFIG (acpi_adr_space_type) 2
637#define ACPI_ADR_SPACE_EC (acpi_adr_space_type) 3
638#define ACPI_ADR_SPACE_SMBUS (acpi_adr_space_type) 4
639#define ACPI_ADR_SPACE_CMOS (acpi_adr_space_type) 5
640#define ACPI_ADR_SPACE_PCI_BAR_TARGET (acpi_adr_space_type) 6
641#define ACPI_ADR_SPACE_DATA_TABLE (acpi_adr_space_type) 7
642#define ACPI_ADR_SPACE_FIXED_HARDWARE (acpi_adr_space_type) 127
643
644
645/*
646 * bit_register IDs
647 * These are bitfields defined within the full ACPI registers
648 */
649#define ACPI_BITREG_TIMER_STATUS 0x00
650#define ACPI_BITREG_BUS_MASTER_STATUS 0x01
651#define ACPI_BITREG_GLOBAL_LOCK_STATUS 0x02
652#define ACPI_BITREG_POWER_BUTTON_STATUS 0x03
653#define ACPI_BITREG_SLEEP_BUTTON_STATUS 0x04
654#define ACPI_BITREG_RT_CLOCK_STATUS 0x05
655#define ACPI_BITREG_WAKE_STATUS 0x06
656#define ACPI_BITREG_PCIEXP_WAKE_STATUS 0x07
657
658#define ACPI_BITREG_TIMER_ENABLE 0x08
659#define ACPI_BITREG_GLOBAL_LOCK_ENABLE 0x09
660#define ACPI_BITREG_POWER_BUTTON_ENABLE 0x0A
661#define ACPI_BITREG_SLEEP_BUTTON_ENABLE 0x0B
662#define ACPI_BITREG_RT_CLOCK_ENABLE 0x0C
663#define ACPI_BITREG_WAKE_ENABLE 0x0D
664#define ACPI_BITREG_PCIEXP_WAKE_DISABLE 0x0E
665
666#define ACPI_BITREG_SCI_ENABLE 0x0F
667#define ACPI_BITREG_BUS_MASTER_RLD 0x10
668#define ACPI_BITREG_GLOBAL_LOCK_RELEASE 0x11
669#define ACPI_BITREG_SLEEP_TYPE_A 0x12
670#define ACPI_BITREG_SLEEP_TYPE_B 0x13
671#define ACPI_BITREG_SLEEP_ENABLE 0x14
672
673#define ACPI_BITREG_ARB_DISABLE 0x15
674
675#define ACPI_BITREG_MAX 0x15
676#define ACPI_NUM_BITREG ACPI_BITREG_MAX + 1
677
678
679/*
680 * External ACPI object definition
681 */
682union acpi_object
683{
684 acpi_object_type type; /* See definition of acpi_ns_type for values */
685 struct
686 {
687 acpi_object_type type;
688 acpi_integer value; /* The actual number */
689 } integer;
690
691 struct
692 {
693 acpi_object_type type;
694 u32 length; /* # of bytes in string, excluding trailing null */
695 char *pointer; /* points to the string value */
696 } string;
697
698 struct
699 {
700 acpi_object_type type;
701 u32 length; /* # of bytes in buffer */
702 u8 *pointer; /* points to the buffer */
703 } buffer;
704
705 struct
706 {
707 acpi_object_type type;
708 u32 fill1;
709 acpi_handle handle; /* object reference */
710 } reference;
711
712 struct
713 {
714 acpi_object_type type;
715 u32 count; /* # of elements in package */
716 union acpi_object *elements; /* Pointer to an array of ACPI_OBJECTs */
717 } package;
718
719 struct
720 {
721 acpi_object_type type;
722 u32 proc_id;
723 acpi_io_address pblk_address;
724 u32 pblk_length;
725 } processor;
726
727 struct
728 {
729 acpi_object_type type;
730 u32 system_level;
731 u32 resource_order;
732 } power_resource;
733};
734
735
736/*
737 * List of objects, used as a parameter list for control method evaluation
738 */
739struct acpi_object_list
740{
741 u32 count;
742 union acpi_object *pointer;
743};
744
745
746/*
747 * Miscellaneous common Data Structures used by the interfaces
748 */
749#define ACPI_NO_BUFFER 0
750#define ACPI_ALLOCATE_BUFFER (acpi_size) (-1)
751#define ACPI_ALLOCATE_LOCAL_BUFFER (acpi_size) (-2)
752
753struct acpi_buffer
754{
755 acpi_size length; /* Length in bytes of the buffer */
756 void *pointer; /* pointer to buffer */
757};
758
759
760/*
761 * name_type for acpi_get_name
762 */
763#define ACPI_FULL_PATHNAME 0
764#define ACPI_SINGLE_NAME 1
765#define ACPI_NAME_TYPE_MAX 1
766
767
768/*
769 * Structure and flags for acpi_get_system_info
770 */
771#define ACPI_SYS_MODE_UNKNOWN 0x0000
772#define ACPI_SYS_MODE_ACPI 0x0001
773#define ACPI_SYS_MODE_LEGACY 0x0002
774#define ACPI_SYS_MODES_MASK 0x0003
775
776
777/*
778 * ACPI Table Info. One per ACPI table _type_
779 */
780struct acpi_table_info
781{
782 u32 count;
783};
784
785
786/*
787 * System info returned by acpi_get_system_info()
788 */
789struct acpi_system_info
790{
791 u32 acpi_ca_version;
792 u32 flags;
793 u32 timer_resolution;
794 u32 reserved1;
795 u32 reserved2;
796 u32 debug_level;
797 u32 debug_layer;
798 u32 num_table_types;
799 struct acpi_table_info table_info [NUM_ACPI_TABLE_TYPES];
800};
801
802
803/*
804 * Types specific to the OS service interfaces
805 */
806
807typedef u32
808(ACPI_SYSTEM_XFACE *acpi_osd_handler) (
809 void *context);
810
811typedef void
812(ACPI_SYSTEM_XFACE *acpi_osd_exec_callback) (
813 void *context);
814
815/*
816 * Various handlers and callback procedures
817 */
818typedef
819u32 (*acpi_event_handler) (
820 void *context);
821
822typedef
823void (*acpi_notify_handler) (
824 acpi_handle device,
825 u32 value,
826 void *context);
827
828typedef
829void (*acpi_object_handler) (
830 acpi_handle object,
831 u32 function,
832 void *data);
833
834typedef
835acpi_status (*acpi_init_handler) (
836 acpi_handle object,
837 u32 function);
838
839#define ACPI_INIT_DEVICE_INI 1
840
841typedef
842acpi_status (*acpi_exception_handler) (
843 acpi_status aml_status,
844 acpi_name name,
845 u16 opcode,
846 u32 aml_offset,
847 void *context);
848
849
850/* Address Spaces (For Operation Regions) */
851
852typedef
853acpi_status (*acpi_adr_space_handler) (
854 u32 function,
855 acpi_physical_address address,
856 u32 bit_width,
857 acpi_integer *value,
858 void *handler_context,
859 void *region_context);
860
861#define ACPI_DEFAULT_HANDLER NULL
862
863
864typedef
865acpi_status (*acpi_adr_space_setup) (
866 acpi_handle region_handle,
867 u32 function,
868 void *handler_context,
869 void **region_context);
870
871#define ACPI_REGION_ACTIVATE 0
872#define ACPI_REGION_DEACTIVATE 1
873
874typedef
875acpi_status (*acpi_walk_callback) (
876 acpi_handle obj_handle,
877 u32 nesting_level,
878 void *context,
879 void **return_value);
880
881
882/* Interrupt handler return values */
883
884#define ACPI_INTERRUPT_NOT_HANDLED 0x00
885#define ACPI_INTERRUPT_HANDLED 0x01
886
887
888/* Common string version of device HIDs and UIDs */
889
890struct acpi_device_id
891{
892 char value[ACPI_DEVICE_ID_LENGTH];
893};
894
895/* Common string version of device CIDs */
896
897struct acpi_compatible_id
898{
899 char value[ACPI_MAX_CID_LENGTH];
900};
901
902struct acpi_compatible_id_list
903{
904 u32 count;
905 u32 size;
906 struct acpi_compatible_id id[1];
907};
908
909
910/* Structure and flags for acpi_get_object_info */
911
912#define ACPI_VALID_STA 0x0001
913#define ACPI_VALID_ADR 0x0002
914#define ACPI_VALID_HID 0x0004
915#define ACPI_VALID_UID 0x0008
916#define ACPI_VALID_CID 0x0010
917#define ACPI_VALID_SXDS 0x0020
918
919
920#define ACPI_COMMON_OBJ_INFO \
921 acpi_object_type type; /* ACPI object type */ \
922 acpi_name name /* ACPI object Name */
923
924
925struct acpi_obj_info_header
926{
927 ACPI_COMMON_OBJ_INFO;
928};
929
930
931/* Structure returned from Get Object Info */
932
933struct acpi_device_info
934{
935 ACPI_COMMON_OBJ_INFO;
936
937 u32 valid; /* Indicates which fields below are valid */
938 u32 current_status; /* _STA value */
939 acpi_integer address; /* _ADR value if any */
940 struct acpi_device_id hardware_id; /* _HID value if any */
941 struct acpi_device_id unique_id; /* _UID value if any */
942 u8 highest_dstates[4]; /* _sx_d values: 0xFF indicates not valid */
943 struct acpi_compatible_id_list compatibility_id; /* List of _CIDs if any */
944};
945
946
947/* Context structs for address space handlers */
948
949struct acpi_pci_id
950{
951 u16 segment;
952 u16 bus;
953 u16 device;
954 u16 function;
955};
956
957
958struct acpi_mem_space_context
959{
960 u32 length;
961 acpi_physical_address address;
962 acpi_physical_address mapped_physical_address;
963 u8 *mapped_logical_address;
964 acpi_size mapped_length;
965};
966
967
968/*
969 * Definitions for Resource Attributes
970 */
971
972/*
973 * Memory Attributes
974 */
975#define ACPI_READ_ONLY_MEMORY (u8) 0x00
976#define ACPI_READ_WRITE_MEMORY (u8) 0x01
977
978#define ACPI_NON_CACHEABLE_MEMORY (u8) 0x00
979#define ACPI_CACHABLE_MEMORY (u8) 0x01
980#define ACPI_WRITE_COMBINING_MEMORY (u8) 0x02
981#define ACPI_PREFETCHABLE_MEMORY (u8) 0x03
982
983/*
984 * IO Attributes
985 * The ISA Io ranges are: n000-n0_ffh, n400-n4_ffh, n800-n8_ffh, n_c00-n_cFFh.
986 * The non-ISA Io ranges are: n100-n3_ffh, n500-n7_ffh, n900-n_bFfh, n_cd0-n_fFFh.
987 */
988#define ACPI_NON_ISA_ONLY_RANGES (u8) 0x01
989#define ACPI_ISA_ONLY_RANGES (u8) 0x02
990#define ACPI_ENTIRE_RANGE (ACPI_NON_ISA_ONLY_RANGES | ACPI_ISA_ONLY_RANGES)
991
992#define ACPI_SPARSE_TRANSLATION (u8) 0x03
993
994/*
995 * IO Port Descriptor Decode
996 */
997#define ACPI_DECODE_10 (u8) 0x00 /* 10-bit IO address decode */
998#define ACPI_DECODE_16 (u8) 0x01 /* 16-bit IO address decode */
999
1000/*
1001 * IRQ Attributes
1002 */
1003#define ACPI_EDGE_SENSITIVE (u8) 0x00
1004#define ACPI_LEVEL_SENSITIVE (u8) 0x01
1005
1006#define ACPI_ACTIVE_HIGH (u8) 0x00
1007#define ACPI_ACTIVE_LOW (u8) 0x01
1008
1009#define ACPI_EXCLUSIVE (u8) 0x00
1010#define ACPI_SHARED (u8) 0x01
1011
1012/*
1013 * DMA Attributes
1014 */
1015#define ACPI_COMPATIBILITY (u8) 0x00
1016#define ACPI_TYPE_A (u8) 0x01
1017#define ACPI_TYPE_B (u8) 0x02
1018#define ACPI_TYPE_F (u8) 0x03
1019
1020#define ACPI_NOT_BUS_MASTER (u8) 0x00
1021#define ACPI_BUS_MASTER (u8) 0x01
1022
1023#define ACPI_TRANSFER_8 (u8) 0x00
1024#define ACPI_TRANSFER_8_16 (u8) 0x01
1025#define ACPI_TRANSFER_16 (u8) 0x02
1026
1027/*
1028 * Start Dependent Functions Priority definitions
1029 */
1030#define ACPI_GOOD_CONFIGURATION (u8) 0x00
1031#define ACPI_ACCEPTABLE_CONFIGURATION (u8) 0x01
1032#define ACPI_SUB_OPTIMAL_CONFIGURATION (u8) 0x02
1033
1034/*
1035 * 16, 32 and 64-bit Address Descriptor resource types
1036 */
1037#define ACPI_MEMORY_RANGE (u8) 0x00
1038#define ACPI_IO_RANGE (u8) 0x01
1039#define ACPI_BUS_NUMBER_RANGE (u8) 0x02
1040
1041#define ACPI_ADDRESS_NOT_FIXED (u8) 0x00
1042#define ACPI_ADDRESS_FIXED (u8) 0x01
1043
1044#define ACPI_POS_DECODE (u8) 0x00
1045#define ACPI_SUB_DECODE (u8) 0x01
1046
1047#define ACPI_PRODUCER (u8) 0x00
1048#define ACPI_CONSUMER (u8) 0x01
1049
1050
1051/*
1052 * Structures used to describe device resources
1053 */
1054struct acpi_resource_irq
1055{
1056 u32 edge_level;
1057 u32 active_high_low;
1058 u32 shared_exclusive;
1059 u32 number_of_interrupts;
1060 u32 interrupts[1];
1061};
1062
1063struct acpi_resource_dma
1064{
1065 u32 type;
1066 u32 bus_master;
1067 u32 transfer;
1068 u32 number_of_channels;
1069 u32 channels[1];
1070};
1071
1072struct acpi_resource_start_dpf
1073{
1074 u32 compatibility_priority;
1075 u32 performance_robustness;
1076};
1077
1078/*
1079 * END_DEPENDENT_FUNCTIONS_RESOURCE struct is not
1080 * needed because it has no fields
1081 */
1082
1083struct acpi_resource_io
1084{
1085 u32 io_decode;
1086 u32 min_base_address;
1087 u32 max_base_address;
1088 u32 alignment;
1089 u32 range_length;
1090};
1091
1092struct acpi_resource_fixed_io
1093{
1094 u32 base_address;
1095 u32 range_length;
1096};
1097
1098struct acpi_resource_vendor
1099{
1100 u32 length;
1101 u8 reserved[1];
1102};
1103
1104struct acpi_resource_end_tag
1105{
1106 u8 checksum;
1107};
1108
1109struct acpi_resource_mem24
1110{
1111 u32 read_write_attribute;
1112 u32 min_base_address;
1113 u32 max_base_address;
1114 u32 alignment;
1115 u32 range_length;
1116};
1117
1118struct acpi_resource_mem32
1119{
1120 u32 read_write_attribute;
1121 u32 min_base_address;
1122 u32 max_base_address;
1123 u32 alignment;
1124 u32 range_length;
1125};
1126
1127struct acpi_resource_fixed_mem32
1128{
1129 u32 read_write_attribute;
1130 u32 range_base_address;
1131 u32 range_length;
1132};
1133
1134struct acpi_memory_attribute
1135{
1136 u16 cache_attribute;
1137 u16 read_write_attribute;
1138};
1139
1140struct acpi_io_attribute
1141{
1142 u16 range_attribute;
1143 u16 translation_attribute;
1144};
1145
1146struct acpi_bus_attribute
1147{
1148 u16 reserved1;
1149 u16 reserved2;
1150};
1151
1152union acpi_resource_attribute
1153{
1154 struct acpi_memory_attribute memory;
1155 struct acpi_io_attribute io;
1156 struct acpi_bus_attribute bus;
1157};
1158
1159struct acpi_resource_source
1160{
1161 u32 index;
1162 u32 string_length;
1163 char *string_ptr;
1164};
1165
1166struct acpi_resource_address16
1167{
1168 u32 resource_type;
1169 u32 producer_consumer;
1170 u32 decode;
1171 u32 min_address_fixed;
1172 u32 max_address_fixed;
1173 union acpi_resource_attribute attribute;
1174 u32 granularity;
1175 u32 min_address_range;
1176 u32 max_address_range;
1177 u32 address_translation_offset;
1178 u32 address_length;
1179 struct acpi_resource_source resource_source;
1180};
1181
1182struct acpi_resource_address32
1183{
1184 u32 resource_type;
1185 u32 producer_consumer;
1186 u32 decode;
1187 u32 min_address_fixed;
1188 u32 max_address_fixed;
1189 union acpi_resource_attribute attribute;
1190 u32 granularity;
1191 u32 min_address_range;
1192 u32 max_address_range;
1193 u32 address_translation_offset;
1194 u32 address_length;
1195 struct acpi_resource_source resource_source;
1196};
1197
1198struct acpi_resource_address64
1199{
1200 u32 resource_type;
1201 u32 producer_consumer;
1202 u32 decode;
1203 u32 min_address_fixed;
1204 u32 max_address_fixed;
1205 union acpi_resource_attribute attribute;
1206 u64 granularity;
1207 u64 min_address_range;
1208 u64 max_address_range;
1209 u64 address_translation_offset;
1210 u64 address_length;
1211 u64 type_specific_attributes;
1212 struct acpi_resource_source resource_source;
1213};
1214
1215struct acpi_resource_ext_irq
1216{
1217 u32 producer_consumer;
1218 u32 edge_level;
1219 u32 active_high_low;
1220 u32 shared_exclusive;
1221 u32 number_of_interrupts;
1222 struct acpi_resource_source resource_source;
1223 u32 interrupts[1];
1224};
1225
1226
1227/* ACPI_RESOURCE_TYPEs */
1228
1229#define ACPI_RSTYPE_IRQ 0
1230#define ACPI_RSTYPE_DMA 1
1231#define ACPI_RSTYPE_START_DPF 2
1232#define ACPI_RSTYPE_END_DPF 3
1233#define ACPI_RSTYPE_IO 4
1234#define ACPI_RSTYPE_FIXED_IO 5
1235#define ACPI_RSTYPE_VENDOR 6
1236#define ACPI_RSTYPE_END_TAG 7
1237#define ACPI_RSTYPE_MEM24 8
1238#define ACPI_RSTYPE_MEM32 9
1239#define ACPI_RSTYPE_FIXED_MEM32 10
1240#define ACPI_RSTYPE_ADDRESS16 11
1241#define ACPI_RSTYPE_ADDRESS32 12
1242#define ACPI_RSTYPE_ADDRESS64 13
1243#define ACPI_RSTYPE_EXT_IRQ 14
1244
1245typedef u32 acpi_resource_type;
1246
1247union acpi_resource_data
1248{
1249 struct acpi_resource_irq irq;
1250 struct acpi_resource_dma dma;
1251 struct acpi_resource_start_dpf start_dpf;
1252 struct acpi_resource_io io;
1253 struct acpi_resource_fixed_io fixed_io;
1254 struct acpi_resource_vendor vendor_specific;
1255 struct acpi_resource_end_tag end_tag;
1256 struct acpi_resource_mem24 memory24;
1257 struct acpi_resource_mem32 memory32;
1258 struct acpi_resource_fixed_mem32 fixed_memory32;
1259 struct acpi_resource_address16 address16;
1260 struct acpi_resource_address32 address32;
1261 struct acpi_resource_address64 address64;
1262 struct acpi_resource_ext_irq extended_irq;
1263};
1264
1265struct acpi_resource
1266{
1267 acpi_resource_type id;
1268 u32 length;
1269 union acpi_resource_data data;
1270};
1271
1272#define ACPI_RESOURCE_LENGTH 12
1273#define ACPI_RESOURCE_LENGTH_NO_DATA 8 /* Id + Length fields */
1274
1275#define ACPI_SIZEOF_RESOURCE(type) (ACPI_RESOURCE_LENGTH_NO_DATA + sizeof (type))
1276
1277#define ACPI_NEXT_RESOURCE(res) (struct acpi_resource *)((u8 *) res + res->length)
1278
1279#ifdef ACPI_MISALIGNED_TRANSFERS
1280#define ACPI_ALIGN_RESOURCE_SIZE(length) (length)
1281#else
1282#define ACPI_ALIGN_RESOURCE_SIZE(length) ACPI_ROUND_UP_TO_NATIVE_WORD(length)
1283#endif
1284
1285/*
1286 * END: of definitions for Resource Attributes
1287 */
1288
1289
1290struct acpi_pci_routing_table
1291{
1292 u32 length;
1293 u32 pin;
1294 acpi_integer address; /* here for 64-bit alignment */
1295 u32 source_index;
1296 char source[4]; /* pad to 64 bits so sizeof() works in all cases */
1297};
1298
1299/*
1300 * END: of definitions for PCI Routing tables
1301 */
1302
1303
1304#endif /* __ACTYPES_H__ */
diff --git a/include/acpi/acutils.h b/include/acpi/acutils.h
new file mode 100644
index 00000000000..0de26b8f102
--- /dev/null
+++ b/include/acpi/acutils.h
@@ -0,0 +1,875 @@
1/******************************************************************************
2 *
3 * Name: acutils.h -- prototypes for the common (subsystem-wide) procedures
4 *
5 *****************************************************************************/
6
7/*
8 * Copyright (C) 2000 - 2005, R. Byron Moore
9 * All rights reserved.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions, and the following disclaimer,
16 * without modification.
17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18 * substantially similar to the "NO WARRANTY" disclaimer below
19 * ("Disclaimer") and any redistribution must be conditioned upon
20 * including a substantially similar Disclaimer requirement for further
21 * binary redistribution.
22 * 3. Neither the names of the above-listed copyright holders nor the names
23 * of any contributors may be used to endorse or promote products derived
24 * from this software without specific prior written permission.
25 *
26 * Alternatively, this software may be distributed under the terms of the
27 * GNU General Public License ("GPL") version 2 as published by the Free
28 * Software Foundation.
29 *
30 * NO WARRANTY
31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41 * POSSIBILITY OF SUCH DAMAGES.
42 */
43
44#ifndef _ACUTILS_H
45#define _ACUTILS_H
46
47
48typedef
49acpi_status (*acpi_pkg_callback) (
50 u8 object_type,
51 union acpi_operand_object *source_object,
52 union acpi_generic_state *state,
53 void *context);
54
55acpi_status
56acpi_ut_walk_package_tree (
57 union acpi_operand_object *source_object,
58 void *target_object,
59 acpi_pkg_callback walk_callback,
60 void *context);
61
62struct acpi_pkg_info
63{
64 u8 *free_space;
65 acpi_size length;
66 u32 object_space;
67 u32 num_packages;
68};
69
70#define REF_INCREMENT (u16) 0
71#define REF_DECREMENT (u16) 1
72#define REF_FORCE_DELETE (u16) 2
73
74/* acpi_ut_dump_buffer */
75
76#define DB_BYTE_DISPLAY 1
77#define DB_WORD_DISPLAY 2
78#define DB_DWORD_DISPLAY 4
79#define DB_QWORD_DISPLAY 8
80
81
82/* Global initialization interfaces */
83
84void
85acpi_ut_init_globals (
86 void);
87
88void
89acpi_ut_terminate (
90 void);
91
92
93/*
94 * ut_init - miscellaneous initialization and shutdown
95 */
96
97acpi_status
98acpi_ut_hardware_initialize (
99 void);
100
101void
102acpi_ut_subsystem_shutdown (
103 void);
104
105acpi_status
106acpi_ut_validate_fadt (
107 void);
108
109/*
110 * ut_global - Global data structures and procedures
111 */
112
113#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
114
115char *
116acpi_ut_get_mutex_name (
117 u32 mutex_id);
118
119#endif
120
121char *
122acpi_ut_get_type_name (
123 acpi_object_type type);
124
125char *
126acpi_ut_get_node_name (
127 void *object);
128
129char *
130acpi_ut_get_descriptor_name (
131 void *object);
132
133char *
134acpi_ut_get_object_type_name (
135 union acpi_operand_object *obj_desc);
136
137char *
138acpi_ut_get_region_name (
139 u8 space_id);
140
141char *
142acpi_ut_get_event_name (
143 u32 event_id);
144
145char
146acpi_ut_hex_to_ascii_char (
147 acpi_integer integer,
148 u32 position);
149
150u8
151acpi_ut_valid_object_type (
152 acpi_object_type type);
153
154acpi_owner_id
155acpi_ut_allocate_owner_id (
156 u32 id_type);
157
158
159/*
160 * ut_clib - Local implementations of C library functions
161 */
162
163#ifndef ACPI_USE_SYSTEM_CLIBRARY
164
165acpi_size
166acpi_ut_strlen (
167 const char *string);
168
169char *
170acpi_ut_strcpy (
171 char *dst_string,
172 const char *src_string);
173
174char *
175acpi_ut_strncpy (
176 char *dst_string,
177 const char *src_string,
178 acpi_size count);
179
180int
181acpi_ut_memcmp (
182 const char *buffer1,
183 const char *buffer2,
184 acpi_size count);
185
186int
187acpi_ut_strncmp (
188 const char *string1,
189 const char *string2,
190 acpi_size count);
191
192int
193acpi_ut_strcmp (
194 const char *string1,
195 const char *string2);
196
197char *
198acpi_ut_strcat (
199 char *dst_string,
200 const char *src_string);
201
202char *
203acpi_ut_strncat (
204 char *dst_string,
205 const char *src_string,
206 acpi_size count);
207
208u32
209acpi_ut_strtoul (
210 const char *string,
211 char **terminator,
212 u32 base);
213
214char *
215acpi_ut_strstr (
216 char *string1,
217 char *string2);
218
219void *
220acpi_ut_memcpy (
221 void *dest,
222 const void *src,
223 acpi_size count);
224
225void *
226acpi_ut_memset (
227 void *dest,
228 acpi_native_uint value,
229 acpi_size count);
230
231int
232acpi_ut_to_upper (
233 int c);
234
235int
236acpi_ut_to_lower (
237 int c);
238
239extern const u8 _acpi_ctype[];
240
241#define _ACPI_XA 0x00 /* extra alphabetic - not supported */
242#define _ACPI_XS 0x40 /* extra space */
243#define _ACPI_BB 0x00 /* BEL, BS, etc. - not supported */
244#define _ACPI_CN 0x20 /* CR, FF, HT, NL, VT */
245#define _ACPI_DI 0x04 /* '0'-'9' */
246#define _ACPI_LO 0x02 /* 'a'-'z' */
247#define _ACPI_PU 0x10 /* punctuation */
248#define _ACPI_SP 0x08 /* space */
249#define _ACPI_UP 0x01 /* 'A'-'Z' */
250#define _ACPI_XD 0x80 /* '0'-'9', 'A'-'F', 'a'-'f' */
251
252#define ACPI_IS_DIGIT(c) (_acpi_ctype[(unsigned char)(c)] & (_ACPI_DI))
253#define ACPI_IS_SPACE(c) (_acpi_ctype[(unsigned char)(c)] & (_ACPI_SP))
254#define ACPI_IS_XDIGIT(c) (_acpi_ctype[(unsigned char)(c)] & (_ACPI_XD))
255#define ACPI_IS_UPPER(c) (_acpi_ctype[(unsigned char)(c)] & (_ACPI_UP))
256#define ACPI_IS_LOWER(c) (_acpi_ctype[(unsigned char)(c)] & (_ACPI_LO))
257#define ACPI_IS_PRINT(c) (_acpi_ctype[(unsigned char)(c)] & (_ACPI_LO | _ACPI_UP | _ACPI_DI | _ACPI_SP | _ACPI_PU))
258#define ACPI_IS_ALPHA(c) (_acpi_ctype[(unsigned char)(c)] & (_ACPI_LO | _ACPI_UP))
259#define ACPI_IS_ASCII(c) ((c) < 0x80)
260
261#endif /* ACPI_USE_SYSTEM_CLIBRARY */
262
263/*
264 * ut_copy - Object construction and conversion interfaces
265 */
266
267acpi_status
268acpi_ut_build_simple_object(
269 union acpi_operand_object *obj,
270 union acpi_object *user_obj,
271 u8 *data_space,
272 u32 *buffer_space_used);
273
274acpi_status
275acpi_ut_build_package_object (
276 union acpi_operand_object *obj,
277 u8 *buffer,
278 u32 *space_used);
279
280acpi_status
281acpi_ut_copy_ielement_to_eelement (
282 u8 object_type,
283 union acpi_operand_object *source_object,
284 union acpi_generic_state *state,
285 void *context);
286
287acpi_status
288acpi_ut_copy_ielement_to_ielement (
289 u8 object_type,
290 union acpi_operand_object *source_object,
291 union acpi_generic_state *state,
292 void *context);
293
294acpi_status
295acpi_ut_copy_iobject_to_eobject (
296 union acpi_operand_object *obj,
297 struct acpi_buffer *ret_buffer);
298
299acpi_status
300acpi_ut_copy_esimple_to_isimple(
301 union acpi_object *user_obj,
302 union acpi_operand_object **return_obj);
303
304acpi_status
305acpi_ut_copy_eobject_to_iobject (
306 union acpi_object *obj,
307 union acpi_operand_object **internal_obj);
308
309acpi_status
310acpi_ut_copy_isimple_to_isimple (
311 union acpi_operand_object *source_obj,
312 union acpi_operand_object *dest_obj);
313
314acpi_status
315acpi_ut_copy_ipackage_to_ipackage (
316 union acpi_operand_object *source_obj,
317 union acpi_operand_object *dest_obj,
318 struct acpi_walk_state *walk_state);
319
320acpi_status
321acpi_ut_copy_simple_object (
322 union acpi_operand_object *source_desc,
323 union acpi_operand_object *dest_desc);
324
325acpi_status
326acpi_ut_copy_iobject_to_iobject (
327 union acpi_operand_object *source_desc,
328 union acpi_operand_object **dest_desc,
329 struct acpi_walk_state *walk_state);
330
331
332/*
333 * ut_create - Object creation
334 */
335
336acpi_status
337acpi_ut_update_object_reference (
338 union acpi_operand_object *object,
339 u16 action);
340
341
342/*
343 * ut_debug - Debug interfaces
344 */
345
346void
347acpi_ut_init_stack_ptr_trace (
348 void);
349
350void
351acpi_ut_track_stack_ptr (
352 void);
353
354void
355acpi_ut_trace (
356 u32 line_number,
357 struct acpi_debug_print_info *dbg_info);
358
359void
360acpi_ut_trace_ptr (
361 u32 line_number,
362 struct acpi_debug_print_info *dbg_info,
363 void *pointer);
364
365void
366acpi_ut_trace_u32 (
367 u32 line_number,
368 struct acpi_debug_print_info *dbg_info,
369 u32 integer);
370
371void
372acpi_ut_trace_str (
373 u32 line_number,
374 struct acpi_debug_print_info *dbg_info,
375 char *string);
376
377void
378acpi_ut_exit (
379 u32 line_number,
380 struct acpi_debug_print_info *dbg_info);
381
382void
383acpi_ut_status_exit (
384 u32 line_number,
385 struct acpi_debug_print_info *dbg_info,
386 acpi_status status);
387
388void
389acpi_ut_value_exit (
390 u32 line_number,
391 struct acpi_debug_print_info *dbg_info,
392 acpi_integer value);
393
394void
395acpi_ut_ptr_exit (
396 u32 line_number,
397 struct acpi_debug_print_info *dbg_info,
398 u8 *ptr);
399
400void
401acpi_ut_report_info (
402 char *module_name,
403 u32 line_number,
404 u32 component_id);
405
406void
407acpi_ut_report_error (
408 char *module_name,
409 u32 line_number,
410 u32 component_id);
411
412void
413acpi_ut_report_warning (
414 char *module_name,
415 u32 line_number,
416 u32 component_id);
417
418void
419acpi_ut_dump_buffer (
420 u8 *buffer,
421 u32 count,
422 u32 display,
423 u32 component_id);
424
425void ACPI_INTERNAL_VAR_XFACE
426acpi_ut_debug_print (
427 u32 requested_debug_level,
428 u32 line_number,
429 struct acpi_debug_print_info *dbg_info,
430 char *format,
431 ...) ACPI_PRINTF_LIKE_FUNC;
432
433void ACPI_INTERNAL_VAR_XFACE
434acpi_ut_debug_print_raw (
435 u32 requested_debug_level,
436 u32 line_number,
437 struct acpi_debug_print_info *dbg_info,
438 char *format,
439 ...) ACPI_PRINTF_LIKE_FUNC;
440
441
442/*
443 * ut_delete - Object deletion
444 */
445
446void
447acpi_ut_delete_internal_obj (
448 union acpi_operand_object *object);
449
450void
451acpi_ut_delete_internal_package_object (
452 union acpi_operand_object *object);
453
454void
455acpi_ut_delete_internal_simple_object (
456 union acpi_operand_object *object);
457
458void
459acpi_ut_delete_internal_object_list (
460 union acpi_operand_object **obj_list);
461
462
463/*
464 * ut_eval - object evaluation
465 */
466
467/* Method name strings */
468
469#define METHOD_NAME__HID "_HID"
470#define METHOD_NAME__CID "_CID"
471#define METHOD_NAME__UID "_UID"
472#define METHOD_NAME__ADR "_ADR"
473#define METHOD_NAME__STA "_STA"
474#define METHOD_NAME__REG "_REG"
475#define METHOD_NAME__SEG "_SEG"
476#define METHOD_NAME__BBN "_BBN"
477#define METHOD_NAME__PRT "_PRT"
478#define METHOD_NAME__CRS "_CRS"
479#define METHOD_NAME__PRS "_PRS"
480#define METHOD_NAME__PRW "_PRW"
481
482
483acpi_status
484acpi_ut_osi_implementation (
485 struct acpi_walk_state *walk_state);
486
487acpi_status
488acpi_ut_evaluate_object (
489 struct acpi_namespace_node *prefix_node,
490 char *path,
491 u32 expected_return_btypes,
492 union acpi_operand_object **return_desc);
493
494acpi_status
495acpi_ut_evaluate_numeric_object (
496 char *object_name,
497 struct acpi_namespace_node *device_node,
498 acpi_integer *address);
499
500acpi_status
501acpi_ut_execute_HID (
502 struct acpi_namespace_node *device_node,
503 struct acpi_device_id *hid);
504
505acpi_status
506acpi_ut_execute_CID (
507 struct acpi_namespace_node *device_node,
508 struct acpi_compatible_id_list **return_cid_list);
509
510acpi_status
511acpi_ut_execute_STA (
512 struct acpi_namespace_node *device_node,
513 u32 *status_flags);
514
515acpi_status
516acpi_ut_execute_UID (
517 struct acpi_namespace_node *device_node,
518 struct acpi_device_id *uid);
519
520acpi_status
521acpi_ut_execute_sxds (
522 struct acpi_namespace_node *device_node,
523 u8 *highest);
524
525/*
526 * ut_mutex - mutual exclusion interfaces
527 */
528
529acpi_status
530acpi_ut_mutex_initialize (
531 void);
532
533void
534acpi_ut_mutex_terminate (
535 void);
536
537acpi_status
538acpi_ut_create_mutex (
539 acpi_mutex_handle mutex_id);
540
541acpi_status
542acpi_ut_delete_mutex (
543 acpi_mutex_handle mutex_id);
544
545acpi_status
546acpi_ut_acquire_mutex (
547 acpi_mutex_handle mutex_id);
548
549acpi_status
550acpi_ut_release_mutex (
551 acpi_mutex_handle mutex_id);
552
553
554/*
555 * ut_object - internal object create/delete/cache routines
556 */
557
558union acpi_operand_object *
559acpi_ut_create_internal_object_dbg (
560 char *module_name,
561 u32 line_number,
562 u32 component_id,
563 acpi_object_type type);
564
565void *
566acpi_ut_allocate_object_desc_dbg (
567 char *module_name,
568 u32 line_number,
569 u32 component_id);
570
571#define acpi_ut_create_internal_object(t) acpi_ut_create_internal_object_dbg (_THIS_MODULE,__LINE__,_COMPONENT,t)
572#define acpi_ut_allocate_object_desc() acpi_ut_allocate_object_desc_dbg (_THIS_MODULE,__LINE__,_COMPONENT)
573
574void
575acpi_ut_delete_object_desc (
576 union acpi_operand_object *object);
577
578u8
579acpi_ut_valid_internal_object (
580 void *object);
581
582union acpi_operand_object *
583acpi_ut_create_buffer_object (
584 acpi_size buffer_size);
585
586union acpi_operand_object *
587acpi_ut_create_string_object (
588 acpi_size string_size);
589
590
591/*
592 * ut_ref_cnt - Object reference count management
593 */
594
595void
596acpi_ut_add_reference (
597 union acpi_operand_object *object);
598
599void
600acpi_ut_remove_reference (
601 union acpi_operand_object *object);
602
603/*
604 * ut_size - Object size routines
605 */
606
607acpi_status
608acpi_ut_get_simple_object_size (
609 union acpi_operand_object *obj,
610 acpi_size *obj_length);
611
612acpi_status
613acpi_ut_get_package_object_size (
614 union acpi_operand_object *obj,
615 acpi_size *obj_length);
616
617acpi_status
618acpi_ut_get_object_size(
619 union acpi_operand_object *obj,
620 acpi_size *obj_length);
621
622acpi_status
623acpi_ut_get_element_length (
624 u8 object_type,
625 union acpi_operand_object *source_object,
626 union acpi_generic_state *state,
627 void *context);
628
629
630/*
631 * ut_state - Generic state creation/cache routines
632 */
633
634void
635acpi_ut_push_generic_state (
636 union acpi_generic_state **list_head,
637 union acpi_generic_state *state);
638
639union acpi_generic_state *
640acpi_ut_pop_generic_state (
641 union acpi_generic_state **list_head);
642
643
644union acpi_generic_state *
645acpi_ut_create_generic_state (
646 void);
647
648struct acpi_thread_state *
649acpi_ut_create_thread_state (
650 void);
651
652union acpi_generic_state *
653acpi_ut_create_update_state (
654 union acpi_operand_object *object,
655 u16 action);
656
657union acpi_generic_state *
658acpi_ut_create_pkg_state (
659 void *internal_object,
660 void *external_object,
661 u16 index);
662
663acpi_status
664acpi_ut_create_update_state_and_push (
665 union acpi_operand_object *object,
666 u16 action,
667 union acpi_generic_state **state_list);
668
669#ifdef ACPI_FUTURE_USAGE
670acpi_status
671acpi_ut_create_pkg_state_and_push (
672 void *internal_object,
673 void *external_object,
674 u16 index,
675 union acpi_generic_state **state_list);
676#endif
677
678union acpi_generic_state *
679acpi_ut_create_control_state (
680 void);
681
682void
683acpi_ut_delete_generic_state (
684 union acpi_generic_state *state);
685
686#ifdef ACPI_ENABLE_OBJECT_CACHE
687void
688acpi_ut_delete_generic_state_cache (
689 void);
690
691void
692acpi_ut_delete_object_cache (
693 void);
694#endif
695
696/*
697 * utmisc
698 */
699
700void
701acpi_ut_print_string (
702 char *string,
703 u8 max_length);
704
705acpi_status
706acpi_ut_divide (
707 acpi_integer in_dividend,
708 acpi_integer in_divisor,
709 acpi_integer *out_quotient,
710 acpi_integer *out_remainder);
711
712acpi_status
713acpi_ut_short_divide (
714 acpi_integer in_dividend,
715 u32 divisor,
716 acpi_integer *out_quotient,
717 u32 *out_remainder);
718
719u8
720acpi_ut_valid_acpi_name (
721 u32 name);
722
723u8
724acpi_ut_valid_acpi_character (
725 char character);
726
727acpi_status
728acpi_ut_strtoul64 (
729 char *string,
730 u32 base,
731 acpi_integer *ret_integer);
732
733/* Values for Base above (16=Hex, 10=Decimal) */
734
735#define ACPI_ANY_BASE 0
736
737#ifdef ACPI_FUTURE_USAGE
738char *
739acpi_ut_strupr (
740 char *src_string);
741#endif
742
743u8 *
744acpi_ut_get_resource_end_tag (
745 union acpi_operand_object *obj_desc);
746
747u8
748acpi_ut_generate_checksum (
749 u8 *buffer,
750 u32 length);
751
752u32
753acpi_ut_dword_byte_swap (
754 u32 value);
755
756void
757acpi_ut_set_integer_width (
758 u8 revision);
759
760#ifdef ACPI_DEBUG_OUTPUT
761void
762acpi_ut_display_init_pathname (
763 u8 type,
764 struct acpi_namespace_node *obj_handle,
765 char *path);
766
767#endif
768
769
770/*
771 * Utalloc - memory allocation and object caching
772 */
773
774void *
775acpi_ut_acquire_from_cache (
776 u32 list_id);
777
778void
779acpi_ut_release_to_cache (
780 u32 list_id,
781 void *object);
782
783#ifdef ACPI_ENABLE_OBJECT_CACHE
784void
785acpi_ut_delete_generic_cache (
786 u32 list_id);
787#endif
788
789acpi_status
790acpi_ut_validate_buffer (
791 struct acpi_buffer *buffer);
792
793acpi_status
794acpi_ut_initialize_buffer (
795 struct acpi_buffer *buffer,
796 acpi_size required_length);
797
798
799/* Memory allocation functions */
800
801void *
802acpi_ut_allocate (
803 acpi_size size,
804 u32 component,
805 char *module,
806 u32 line);
807
808void *
809acpi_ut_callocate (
810 acpi_size size,
811 u32 component,
812 char *module,
813 u32 line);
814
815
816#ifdef ACPI_DBG_TRACK_ALLOCATIONS
817
818void *
819acpi_ut_allocate_and_track (
820 acpi_size size,
821 u32 component,
822 char *module,
823 u32 line);
824
825void *
826acpi_ut_callocate_and_track (
827 acpi_size size,
828 u32 component,
829 char *module,
830 u32 line);
831
832void
833acpi_ut_free_and_track (
834 void *address,
835 u32 component,
836 char *module,
837 u32 line);
838
839struct acpi_debug_mem_block *
840acpi_ut_find_allocation (
841 u32 list_id,
842 void *allocation);
843
844acpi_status
845acpi_ut_track_allocation (
846 u32 list_id,
847 struct acpi_debug_mem_block *address,
848 acpi_size size,
849 u8 alloc_type,
850 u32 component,
851 char *module,
852 u32 line);
853
854acpi_status
855acpi_ut_remove_allocation (
856 u32 list_id,
857 struct acpi_debug_mem_block *address,
858 u32 component,
859 char *module,
860 u32 line);
861
862#ifdef ACPI_FUTURE_USAGE
863void
864acpi_ut_dump_allocation_info (
865 void);
866#endif
867
868void
869acpi_ut_dump_allocations (
870 u32 component,
871 char *module);
872#endif
873
874
875#endif /* _ACUTILS_H */
diff --git a/include/acpi/amlcode.h b/include/acpi/amlcode.h
new file mode 100644
index 00000000000..2ec538eac58
--- /dev/null
+++ b/include/acpi/amlcode.h
@@ -0,0 +1,518 @@
1/******************************************************************************
2 *
3 * Name: amlcode.h - Definitions for AML, as included in "definition blocks"
4 * Declarations and definitions contained herein are derived
5 * directly from the ACPI specification.
6 *
7 *****************************************************************************/
8
9/*
10 * Copyright (C) 2000 - 2005, R. Byron Moore
11 * All rights reserved.
12 *
13 * Redistribution and use in source and binary forms, with or without
14 * modification, are permitted provided that the following conditions
15 * are met:
16 * 1. Redistributions of source code must retain the above copyright
17 * notice, this list of conditions, and the following disclaimer,
18 * without modification.
19 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
20 * substantially similar to the "NO WARRANTY" disclaimer below
21 * ("Disclaimer") and any redistribution must be conditioned upon
22 * including a substantially similar Disclaimer requirement for further
23 * binary redistribution.
24 * 3. Neither the names of the above-listed copyright holders nor the names
25 * of any contributors may be used to endorse or promote products derived
26 * from this software without specific prior written permission.
27 *
28 * Alternatively, this software may be distributed under the terms of the
29 * GNU General Public License ("GPL") version 2 as published by the Free
30 * Software Foundation.
31 *
32 * NO WARRANTY
33 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
34 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
35 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
36 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
37 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
38 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
39 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
40 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
41 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
42 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
43 * POSSIBILITY OF SUCH DAMAGES.
44 */
45
46#ifndef __AMLCODE_H__
47#define __AMLCODE_H__
48
49/* primary opcodes */
50
51#define AML_NULL_CHAR (u16) 0x00
52
53#define AML_ZERO_OP (u16) 0x00
54#define AML_ONE_OP (u16) 0x01
55#define AML_UNASSIGNED (u16) 0x02
56#define AML_ALIAS_OP (u16) 0x06
57#define AML_NAME_OP (u16) 0x08
58#define AML_BYTE_OP (u16) 0x0a
59#define AML_WORD_OP (u16) 0x0b
60#define AML_DWORD_OP (u16) 0x0c
61#define AML_STRING_OP (u16) 0x0d
62#define AML_QWORD_OP (u16) 0x0e /* ACPI 2.0 */
63#define AML_SCOPE_OP (u16) 0x10
64#define AML_BUFFER_OP (u16) 0x11
65#define AML_PACKAGE_OP (u16) 0x12
66#define AML_VAR_PACKAGE_OP (u16) 0x13 /* ACPI 2.0 */
67#define AML_METHOD_OP (u16) 0x14
68#define AML_DUAL_NAME_PREFIX (u16) 0x2e
69#define AML_MULTI_NAME_PREFIX_OP (u16) 0x2f
70#define AML_NAME_CHAR_SUBSEQ (u16) 0x30
71#define AML_NAME_CHAR_FIRST (u16) 0x41
72#define AML_OP_PREFIX (u16) 0x5b
73#define AML_ROOT_PREFIX (u16) 0x5c
74#define AML_PARENT_PREFIX (u16) 0x5e
75#define AML_LOCAL_OP (u16) 0x60
76#define AML_LOCAL0 (u16) 0x60
77#define AML_LOCAL1 (u16) 0x61
78#define AML_LOCAL2 (u16) 0x62
79#define AML_LOCAL3 (u16) 0x63
80#define AML_LOCAL4 (u16) 0x64
81#define AML_LOCAL5 (u16) 0x65
82#define AML_LOCAL6 (u16) 0x66
83#define AML_LOCAL7 (u16) 0x67
84#define AML_ARG_OP (u16) 0x68
85#define AML_ARG0 (u16) 0x68
86#define AML_ARG1 (u16) 0x69
87#define AML_ARG2 (u16) 0x6a
88#define AML_ARG3 (u16) 0x6b
89#define AML_ARG4 (u16) 0x6c
90#define AML_ARG5 (u16) 0x6d
91#define AML_ARG6 (u16) 0x6e
92#define AML_STORE_OP (u16) 0x70
93#define AML_REF_OF_OP (u16) 0x71
94#define AML_ADD_OP (u16) 0x72
95#define AML_CONCAT_OP (u16) 0x73
96#define AML_SUBTRACT_OP (u16) 0x74
97#define AML_INCREMENT_OP (u16) 0x75
98#define AML_DECREMENT_OP (u16) 0x76
99#define AML_MULTIPLY_OP (u16) 0x77
100#define AML_DIVIDE_OP (u16) 0x78
101#define AML_SHIFT_LEFT_OP (u16) 0x79
102#define AML_SHIFT_RIGHT_OP (u16) 0x7a
103#define AML_BIT_AND_OP (u16) 0x7b
104#define AML_BIT_NAND_OP (u16) 0x7c
105#define AML_BIT_OR_OP (u16) 0x7d
106#define AML_BIT_NOR_OP (u16) 0x7e
107#define AML_BIT_XOR_OP (u16) 0x7f
108#define AML_BIT_NOT_OP (u16) 0x80
109#define AML_FIND_SET_LEFT_BIT_OP (u16) 0x81
110#define AML_FIND_SET_RIGHT_BIT_OP (u16) 0x82
111#define AML_DEREF_OF_OP (u16) 0x83
112#define AML_CONCAT_RES_OP (u16) 0x84 /* ACPI 2.0 */
113#define AML_MOD_OP (u16) 0x85 /* ACPI 2.0 */
114#define AML_NOTIFY_OP (u16) 0x86
115#define AML_SIZE_OF_OP (u16) 0x87
116#define AML_INDEX_OP (u16) 0x88
117#define AML_MATCH_OP (u16) 0x89
118#define AML_CREATE_DWORD_FIELD_OP (u16) 0x8a
119#define AML_CREATE_WORD_FIELD_OP (u16) 0x8b
120#define AML_CREATE_BYTE_FIELD_OP (u16) 0x8c
121#define AML_CREATE_BIT_FIELD_OP (u16) 0x8d
122#define AML_TYPE_OP (u16) 0x8e
123#define AML_CREATE_QWORD_FIELD_OP (u16) 0x8f /* ACPI 2.0 */
124#define AML_LAND_OP (u16) 0x90
125#define AML_LOR_OP (u16) 0x91
126#define AML_LNOT_OP (u16) 0x92
127#define AML_LEQUAL_OP (u16) 0x93
128#define AML_LGREATER_OP (u16) 0x94
129#define AML_LLESS_OP (u16) 0x95
130#define AML_TO_BUFFER_OP (u16) 0x96 /* ACPI 2.0 */
131#define AML_TO_DECSTRING_OP (u16) 0x97 /* ACPI 2.0 */
132#define AML_TO_HEXSTRING_OP (u16) 0x98 /* ACPI 2.0 */
133#define AML_TO_INTEGER_OP (u16) 0x99 /* ACPI 2.0 */
134#define AML_TO_STRING_OP (u16) 0x9c /* ACPI 2.0 */
135#define AML_COPY_OP (u16) 0x9d /* ACPI 2.0 */
136#define AML_MID_OP (u16) 0x9e /* ACPI 2.0 */
137#define AML_CONTINUE_OP (u16) 0x9f /* ACPI 2.0 */
138#define AML_IF_OP (u16) 0xa0
139#define AML_ELSE_OP (u16) 0xa1
140#define AML_WHILE_OP (u16) 0xa2
141#define AML_NOOP_OP (u16) 0xa3
142#define AML_RETURN_OP (u16) 0xa4
143#define AML_BREAK_OP (u16) 0xa5
144#define AML_BREAK_POINT_OP (u16) 0xcc
145#define AML_ONES_OP (u16) 0xff
146
147/* prefixed opcodes */
148
149#define AML_EXTOP (u16) 0x005b
150
151
152#define AML_MUTEX_OP (u16) 0x5b01
153#define AML_EVENT_OP (u16) 0x5b02
154#define AML_SHIFT_RIGHT_BIT_OP (u16) 0x5b10
155#define AML_SHIFT_LEFT_BIT_OP (u16) 0x5b11
156#define AML_COND_REF_OF_OP (u16) 0x5b12
157#define AML_CREATE_FIELD_OP (u16) 0x5b13
158#define AML_LOAD_TABLE_OP (u16) 0x5b1f /* ACPI 2.0 */
159#define AML_LOAD_OP (u16) 0x5b20
160#define AML_STALL_OP (u16) 0x5b21
161#define AML_SLEEP_OP (u16) 0x5b22
162#define AML_ACQUIRE_OP (u16) 0x5b23
163#define AML_SIGNAL_OP (u16) 0x5b24
164#define AML_WAIT_OP (u16) 0x5b25
165#define AML_RESET_OP (u16) 0x5b26
166#define AML_RELEASE_OP (u16) 0x5b27
167#define AML_FROM_BCD_OP (u16) 0x5b28
168#define AML_TO_BCD_OP (u16) 0x5b29
169#define AML_UNLOAD_OP (u16) 0x5b2a
170#define AML_REVISION_OP (u16) 0x5b30
171#define AML_DEBUG_OP (u16) 0x5b31
172#define AML_FATAL_OP (u16) 0x5b32
173#define AML_TIMER_OP (u16) 0x5b33 /* ACPI 3.0 */
174#define AML_REGION_OP (u16) 0x5b80
175#define AML_FIELD_OP (u16) 0x5b81
176#define AML_DEVICE_OP (u16) 0x5b82
177#define AML_PROCESSOR_OP (u16) 0x5b83
178#define AML_POWER_RES_OP (u16) 0x5b84
179#define AML_THERMAL_ZONE_OP (u16) 0x5b85
180#define AML_INDEX_FIELD_OP (u16) 0x5b86
181#define AML_BANK_FIELD_OP (u16) 0x5b87
182#define AML_DATA_REGION_OP (u16) 0x5b88 /* ACPI 2.0 */
183
184
185/* Bogus opcodes (they are actually two separate opcodes) */
186
187#define AML_LGREATEREQUAL_OP (u16) 0x9295
188#define AML_LLESSEQUAL_OP (u16) 0x9294
189#define AML_LNOTEQUAL_OP (u16) 0x9293
190
191
192/*
193 * Internal opcodes
194 * Use only "Unknown" AML opcodes, don't attempt to use
195 * any valid ACPI ASCII values (A-Z, 0-9, '-')
196 */
197
198#define AML_INT_NAMEPATH_OP (u16) 0x002d
199#define AML_INT_NAMEDFIELD_OP (u16) 0x0030
200#define AML_INT_RESERVEDFIELD_OP (u16) 0x0031
201#define AML_INT_ACCESSFIELD_OP (u16) 0x0032
202#define AML_INT_BYTELIST_OP (u16) 0x0033
203#define AML_INT_STATICSTRING_OP (u16) 0x0034
204#define AML_INT_METHODCALL_OP (u16) 0x0035
205#define AML_INT_RETURN_VALUE_OP (u16) 0x0036
206#define AML_INT_EVAL_SUBTREE_OP (u16) 0x0037
207
208
209#define ARG_NONE 0x0
210
211/*
212 * Argument types for the AML Parser
213 * Each field in the arg_types u32 is 5 bits, allowing for a maximum of 6 arguments.
214 * There can be up to 31 unique argument types
215 * Zero is reserved as end-of-list indicator
216 */
217
218#define ARGP_BYTEDATA 0x01
219#define ARGP_BYTELIST 0x02
220#define ARGP_CHARLIST 0x03
221#define ARGP_DATAOBJ 0x04
222#define ARGP_DATAOBJLIST 0x05
223#define ARGP_DWORDDATA 0x06
224#define ARGP_FIELDLIST 0x07
225#define ARGP_NAME 0x08
226#define ARGP_NAMESTRING 0x09
227#define ARGP_OBJLIST 0x0A
228#define ARGP_PKGLENGTH 0x0B
229#define ARGP_SUPERNAME 0x0C
230#define ARGP_TARGET 0x0D
231#define ARGP_TERMARG 0x0E
232#define ARGP_TERMLIST 0x0F
233#define ARGP_WORDDATA 0x10
234#define ARGP_QWORDDATA 0x11
235#define ARGP_SIMPLENAME 0x12
236
237/*
238 * Resolved argument types for the AML Interpreter
239 * Each field in the arg_types u32 is 5 bits, allowing for a maximum of 6 arguments.
240 * There can be up to 31 unique argument types (0 is end-of-arg-list indicator)
241 *
242 * Note1: These values are completely independent from the ACPI_TYPEs
243 * i.e., ARGI_INTEGER != ACPI_TYPE_INTEGER
244 *
245 * Note2: If and when 5 bits becomes insufficient, it would probably be best
246 * to convert to a 6-byte array of argument types, allowing 8 bits per argument.
247 */
248
249/* Single, simple types */
250
251#define ARGI_ANYTYPE 0x01 /* Don't care */
252#define ARGI_PACKAGE 0x02
253#define ARGI_EVENT 0x03
254#define ARGI_MUTEX 0x04
255#define ARGI_DDBHANDLE 0x05
256
257/* Interchangeable types (via implicit conversion) */
258
259#define ARGI_INTEGER 0x06
260#define ARGI_STRING 0x07
261#define ARGI_BUFFER 0x08
262#define ARGI_BUFFER_OR_STRING 0x09 /* Used by MID op only */
263#define ARGI_COMPUTEDATA 0x0A /* Buffer, String, or Integer */
264
265/* Reference objects */
266
267#define ARGI_INTEGER_REF 0x0B
268#define ARGI_OBJECT_REF 0x0C
269#define ARGI_DEVICE_REF 0x0D
270#define ARGI_REFERENCE 0x0E
271#define ARGI_TARGETREF 0x0F /* Target, subject to implicit conversion */
272#define ARGI_FIXED_TARGET 0x10 /* Target, no implicit conversion */
273#define ARGI_SIMPLE_TARGET 0x11 /* Name, Local, Arg -- no implicit conversion */
274
275/* Multiple/complex types */
276
277#define ARGI_DATAOBJECT 0x12 /* Buffer, String, package or reference to a Node - Used only by size_of operator*/
278#define ARGI_COMPLEXOBJ 0x13 /* Buffer, String, or package (Used by INDEX op only) */
279#define ARGI_REF_OR_STRING 0x14 /* Reference or String (Used by DEREFOF op only) */
280#define ARGI_REGION_OR_FIELD 0x15 /* Used by LOAD op only */
281#define ARGI_DATAREFOBJ 0x16
282
283/* Note: types above can expand to 0x1F maximum */
284
285#define ARGI_INVALID_OPCODE 0xFFFFFFFF
286
287
288/*
289 * hash offsets
290 */
291#define AML_EXTOP_HASH_OFFSET 22
292#define AML_LNOT_HASH_OFFSET 19
293
294
295/*
296 * opcode groups and types
297 */
298
299#define OPGRP_NAMED 0x01
300#define OPGRP_FIELD 0x02
301#define OPGRP_BYTELIST 0x04
302
303
304/*
305 * Opcode information
306 */
307
308/* Opcode flags */
309
310#define AML_LOGICAL 0x0001
311#define AML_LOGICAL_NUMERIC 0x0002
312#define AML_MATH 0x0004
313#define AML_CREATE 0x0008
314#define AML_FIELD 0x0010
315#define AML_DEFER 0x0020
316#define AML_NAMED 0x0040
317#define AML_NSNODE 0x0080
318#define AML_NSOPCODE 0x0100
319#define AML_NSOBJECT 0x0200
320#define AML_HAS_RETVAL 0x0400
321#define AML_HAS_TARGET 0x0800
322#define AML_HAS_ARGS 0x1000
323#define AML_CONSTANT 0x2000
324#define AML_NO_OPERAND_RESOLVE 0x4000
325
326/* Convenient flag groupings */
327
328#define AML_FLAGS_EXEC_0A_0T_1R AML_HAS_RETVAL
329#define AML_FLAGS_EXEC_1A_0T_0R AML_HAS_ARGS /* Monadic1 */
330#define AML_FLAGS_EXEC_1A_0T_1R AML_HAS_ARGS | AML_HAS_RETVAL /* Monadic2 */
331#define AML_FLAGS_EXEC_1A_1T_0R AML_HAS_ARGS | AML_HAS_TARGET
332#define AML_FLAGS_EXEC_1A_1T_1R AML_HAS_ARGS | AML_HAS_TARGET | AML_HAS_RETVAL /* monadic2_r */
333#define AML_FLAGS_EXEC_2A_0T_0R AML_HAS_ARGS /* Dyadic1 */
334#define AML_FLAGS_EXEC_2A_0T_1R AML_HAS_ARGS | AML_HAS_RETVAL /* Dyadic2 */
335#define AML_FLAGS_EXEC_2A_1T_1R AML_HAS_ARGS | AML_HAS_TARGET | AML_HAS_RETVAL /* dyadic2_r */
336#define AML_FLAGS_EXEC_2A_2T_1R AML_HAS_ARGS | AML_HAS_TARGET | AML_HAS_RETVAL
337#define AML_FLAGS_EXEC_3A_0T_0R AML_HAS_ARGS
338#define AML_FLAGS_EXEC_3A_1T_1R AML_HAS_ARGS | AML_HAS_TARGET | AML_HAS_RETVAL
339#define AML_FLAGS_EXEC_6A_0T_1R AML_HAS_ARGS | AML_HAS_RETVAL
340
341
342/*
343 * The opcode Type is used in a dispatch table, do not change
344 * without updating the table.
345 */
346#define AML_TYPE_EXEC_0A_0T_1R 0x00
347#define AML_TYPE_EXEC_1A_0T_0R 0x01 /* Monadic1 */
348#define AML_TYPE_EXEC_1A_0T_1R 0x02 /* Monadic2 */
349#define AML_TYPE_EXEC_1A_1T_0R 0x03
350#define AML_TYPE_EXEC_1A_1T_1R 0x04 /* monadic2_r */
351#define AML_TYPE_EXEC_2A_0T_0R 0x05 /* Dyadic1 */
352#define AML_TYPE_EXEC_2A_0T_1R 0x06 /* Dyadic2 */
353#define AML_TYPE_EXEC_2A_1T_1R 0x07 /* dyadic2_r */
354#define AML_TYPE_EXEC_2A_2T_1R 0x08
355#define AML_TYPE_EXEC_3A_0T_0R 0x09
356#define AML_TYPE_EXEC_3A_1T_1R 0x0A
357#define AML_TYPE_EXEC_6A_0T_1R 0x0B
358/* End of types used in dispatch table */
359
360#define AML_TYPE_LITERAL 0x0B
361#define AML_TYPE_CONSTANT 0x0C
362#define AML_TYPE_METHOD_ARGUMENT 0x0D
363#define AML_TYPE_LOCAL_VARIABLE 0x0E
364#define AML_TYPE_DATA_TERM 0x0F
365
366/* Generic for an op that returns a value */
367
368#define AML_TYPE_METHOD_CALL 0x10
369
370/* Misc */
371
372#define AML_TYPE_CREATE_FIELD 0x11
373#define AML_TYPE_CREATE_OBJECT 0x12
374#define AML_TYPE_CONTROL 0x13
375#define AML_TYPE_NAMED_NO_OBJ 0x14
376#define AML_TYPE_NAMED_FIELD 0x15
377#define AML_TYPE_NAMED_SIMPLE 0x16
378#define AML_TYPE_NAMED_COMPLEX 0x17
379#define AML_TYPE_RETURN 0x18
380
381#define AML_TYPE_UNDEFINED 0x19
382#define AML_TYPE_BOGUS 0x1A
383
384
385/*
386 * Opcode classes
387 */
388#define AML_CLASS_EXECUTE 0x00
389#define AML_CLASS_CREATE 0x01
390#define AML_CLASS_ARGUMENT 0x02
391#define AML_CLASS_NAMED_OBJECT 0x03
392#define AML_CLASS_CONTROL 0x04
393#define AML_CLASS_ASCII 0x05
394#define AML_CLASS_PREFIX 0x06
395#define AML_CLASS_INTERNAL 0x07
396#define AML_CLASS_RETURN_VALUE 0x08
397#define AML_CLASS_METHOD_CALL 0x09
398#define AML_CLASS_UNKNOWN 0x0A
399
400
401/* Predefined Operation Region space_iDs */
402
403typedef enum
404{
405 REGION_MEMORY = 0,
406 REGION_IO,
407 REGION_PCI_CONFIG,
408 REGION_EC,
409 REGION_SMBUS,
410 REGION_CMOS,
411 REGION_PCI_BAR,
412 REGION_DATA_TABLE, /* Internal use only */
413 REGION_FIXED_HW = 0x7F
414
415} AML_REGION_TYPES;
416
417
418/* Comparison operation codes for match_op operator */
419
420typedef enum
421{
422 MATCH_MTR = 0,
423 MATCH_MEQ = 1,
424 MATCH_MLE = 2,
425 MATCH_MLT = 3,
426 MATCH_MGE = 4,
427 MATCH_MGT = 5
428
429} AML_MATCH_OPERATOR;
430
431#define MAX_MATCH_OPERATOR 5
432
433
434/*
435 * field_flags
436 *
437 * This byte is extracted from the AML and includes three separate
438 * pieces of information about the field:
439 * 1) The field access type
440 * 2) The field update rule
441 * 3) The lock rule for the field
442 *
443 * Bits 00 - 03 : access_type (any_acc, byte_acc, etc.)
444 * 04 : lock_rule (1 == Lock)
445 * 05 - 06 : update_rule
446 */
447#define AML_FIELD_ACCESS_TYPE_MASK 0x0F
448#define AML_FIELD_LOCK_RULE_MASK 0x10
449#define AML_FIELD_UPDATE_RULE_MASK 0x60
450
451
452/* 1) Field Access Types */
453
454typedef enum
455{
456 AML_FIELD_ACCESS_ANY = 0x00,
457 AML_FIELD_ACCESS_BYTE = 0x01,
458 AML_FIELD_ACCESS_WORD = 0x02,
459 AML_FIELD_ACCESS_DWORD = 0x03,
460 AML_FIELD_ACCESS_QWORD = 0x04, /* ACPI 2.0 */
461 AML_FIELD_ACCESS_BUFFER = 0x05 /* ACPI 2.0 */
462
463} AML_ACCESS_TYPE;
464
465
466/* 2) Field Lock Rules */
467
468typedef enum
469{
470 AML_FIELD_LOCK_NEVER = 0x00,
471 AML_FIELD_LOCK_ALWAYS = 0x10
472
473} AML_LOCK_RULE;
474
475
476/* 3) Field Update Rules */
477
478typedef enum
479{
480 AML_FIELD_UPDATE_PRESERVE = 0x00,
481 AML_FIELD_UPDATE_WRITE_AS_ONES = 0x20,
482 AML_FIELD_UPDATE_WRITE_AS_ZEROS = 0x40
483
484} AML_UPDATE_RULE;
485
486
487/*
488 * Field Access Attributes.
489 * This byte is extracted from the AML via the
490 * access_as keyword
491 */
492typedef enum
493{
494 AML_FIELD_ATTRIB_SMB_QUICK = 0x02,
495 AML_FIELD_ATTRIB_SMB_SEND_RCV = 0x04,
496 AML_FIELD_ATTRIB_SMB_BYTE = 0x06,
497 AML_FIELD_ATTRIB_SMB_WORD = 0x08,
498 AML_FIELD_ATTRIB_SMB_BLOCK = 0x0A,
499 AML_FIELD_ATTRIB_SMB_WORD_CALL = 0x0C,
500 AML_FIELD_ATTRIB_SMB_BLOCK_CALL = 0x0D
501
502} AML_ACCESS_ATTRIBUTE;
503
504
505/* Bit fields in method_flags byte */
506
507#define AML_METHOD_ARG_COUNT 0x07
508#define AML_METHOD_SERIALIZED 0x08
509#define AML_METHOD_SYNCH_LEVEL 0xF0
510
511/* METHOD_FLAGS_ARG_COUNT is not used internally, define additional flags */
512
513#define AML_METHOD_INTERNAL_ONLY 0x01
514#define AML_METHOD_RESERVED1 0x02
515#define AML_METHOD_RESERVED2 0x04
516
517
518#endif /* __AMLCODE_H__ */
diff --git a/include/acpi/amlresrc.h b/include/acpi/amlresrc.h
new file mode 100644
index 00000000000..b20ec303df0
--- /dev/null
+++ b/include/acpi/amlresrc.h
@@ -0,0 +1,353 @@
1
2/******************************************************************************
3 *
4 * Module Name: amlresrc.h - AML resource descriptors
5 *
6 *****************************************************************************/
7
8/*
9 * Copyright (C) 2000 - 2005, R. Byron Moore
10 * All rights reserved.
11 *
12 * Redistribution and use in source and binary forms, with or without
13 * modification, are permitted provided that the following conditions
14 * are met:
15 * 1. Redistributions of source code must retain the above copyright
16 * notice, this list of conditions, and the following disclaimer,
17 * without modification.
18 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
19 * substantially similar to the "NO WARRANTY" disclaimer below
20 * ("Disclaimer") and any redistribution must be conditioned upon
21 * including a substantially similar Disclaimer requirement for further
22 * binary redistribution.
23 * 3. Neither the names of the above-listed copyright holders nor the names
24 * of any contributors may be used to endorse or promote products derived
25 * from this software without specific prior written permission.
26 *
27 * Alternatively, this software may be distributed under the terms of the
28 * GNU General Public License ("GPL") version 2 as published by the Free
29 * Software Foundation.
30 *
31 * NO WARRANTY
32 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
33 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
34 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
35 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
36 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
37 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
38 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
39 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
40 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
41 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
42 * POSSIBILITY OF SUCH DAMAGES.
43 */
44
45
46#ifndef __AMLRESRC_H
47#define __AMLRESRC_H
48
49
50#define ASL_RESNAME_ADDRESS "_ADR"
51#define ASL_RESNAME_ALIGNMENT "_ALN"
52#define ASL_RESNAME_ADDRESSSPACE "_ASI"
53#define ASL_RESNAME_ACCESSSIZE "_ASZ"
54#define ASL_RESNAME_TYPESPECIFICATTRIBUTES "_ATT"
55#define ASL_RESNAME_BASEADDRESS "_BAS"
56#define ASL_RESNAME_BUSMASTER "_BM_" /* Master(1), Slave(0) */
57#define ASL_RESNAME_DECODE "_DEC"
58#define ASL_RESNAME_DMA "_DMA"
59#define ASL_RESNAME_DMATYPE "_TYP" /* Compatible(0), A(1), B(2), F(3) */
60#define ASL_RESNAME_GRANULARITY "_GRA"
61#define ASL_RESNAME_INTERRUPT "_INT"
62#define ASL_RESNAME_INTERRUPTLEVEL "_LL_" /* active_lo(1), active_hi(0) */
63#define ASL_RESNAME_INTERRUPTSHARE "_SHR" /* Shareable(1), no_share(0) */
64#define ASL_RESNAME_INTERRUPTTYPE "_HE_" /* Edge(1), Level(0) */
65#define ASL_RESNAME_LENGTH "_LEN"
66#define ASL_RESNAME_MEMATTRIBUTES "_MTP" /* Memory(0), Reserved(1), ACPI(2), NVS(3) */
67#define ASL_RESNAME_MEMTYPE "_MEM" /* non_cache(0), Cacheable(1) Cache+combine(2), Cache+prefetch(3) */
68#define ASL_RESNAME_MAXADDR "_MAX"
69#define ASL_RESNAME_MINADDR "_MIN"
70#define ASL_RESNAME_MAXTYPE "_MAF"
71#define ASL_RESNAME_MINTYPE "_MIF"
72#define ASL_RESNAME_REGISTERBITOFFSET "_RBO"
73#define ASL_RESNAME_REGISTERBITWIDTH "_RBW"
74#define ASL_RESNAME_RANGETYPE "_RNG"
75#define ASL_RESNAME_READWRITETYPE "_RW_" /* read_only(0), Writeable (1) */
76#define ASL_RESNAME_TRANSLATION "_TRA"
77#define ASL_RESNAME_TRANSTYPE "_TRS" /* Sparse(1), Dense(0) */
78#define ASL_RESNAME_TYPE "_TTP" /* Translation(1), Static (0) */
79#define ASL_RESNAME_XFERTYPE "_SIz" /* 8(0), 8_and16(1), 16(2) */
80
81
82/* Default sizes for "small" resource descriptors */
83
84#define ASL_RDESC_IRQ_SIZE 0x02
85#define ASL_RDESC_DMA_SIZE 0x02
86#define ASL_RDESC_ST_DEPEND_SIZE 0x00
87#define ASL_RDESC_END_DEPEND_SIZE 0x00
88#define ASL_RDESC_IO_SIZE 0x07
89#define ASL_RDESC_FIXED_IO_SIZE 0x03
90#define ASL_RDESC_END_TAG_SIZE 0x01
91
92
93struct asl_resource_node
94{
95 u32 buffer_length;
96 void *buffer;
97 struct asl_resource_node *next;
98};
99
100
101/*
102 * Resource descriptors defined in the ACPI specification.
103 *
104 * Packing/alignment must be BYTE because these descriptors
105 * are used to overlay the AML byte stream.
106 */
107#pragma pack(1)
108
109struct asl_irq_format_desc
110{
111 u8 descriptor_type;
112 u16 irq_mask;
113 u8 flags;
114};
115
116
117struct asl_irq_noflags_desc
118{
119 u8 descriptor_type;
120 u16 irq_mask;
121};
122
123
124struct asl_dma_format_desc
125{
126 u8 descriptor_type;
127 u8 dma_channel_mask;
128 u8 flags;
129};
130
131
132struct asl_start_dependent_desc
133{
134 u8 descriptor_type;
135 u8 flags;
136};
137
138
139struct asl_start_dependent_noprio_desc
140{
141 u8 descriptor_type;
142};
143
144
145struct asl_end_dependent_desc
146{
147 u8 descriptor_type;
148};
149
150
151struct asl_io_port_desc
152{
153 u8 descriptor_type;
154 u8 information;
155 u16 address_min;
156 u16 address_max;
157 u8 alignment;
158 u8 length;
159};
160
161
162struct asl_fixed_io_port_desc
163{
164 u8 descriptor_type;
165 u16 base_address;
166 u8 length;
167};
168
169
170struct asl_small_vendor_desc
171{
172 u8 descriptor_type;
173 u8 vendor_defined[7];
174};
175
176
177struct asl_end_tag_desc
178{
179 u8 descriptor_type;
180 u8 checksum;
181};
182
183
184/* LARGE descriptors */
185
186struct asl_memory_24_desc
187{
188 u8 descriptor_type;
189 u16 length;
190 u8 information;
191 u16 address_min;
192 u16 address_max;
193 u16 alignment;
194 u16 range_length;
195};
196
197
198struct asl_large_vendor_desc
199{
200 u8 descriptor_type;
201 u16 length;
202 u8 vendor_defined[1];
203};
204
205
206struct asl_memory_32_desc
207{
208 u8 descriptor_type;
209 u16 length;
210 u8 information;
211 u32 address_min;
212 u32 address_max;
213 u32 alignment;
214 u32 range_length;
215};
216
217
218struct asl_fixed_memory_32_desc
219{
220 u8 descriptor_type;
221 u16 length;
222 u8 information;
223 u32 base_address;
224 u32 range_length;
225};
226
227
228struct asl_extended_address_desc
229{
230 u8 descriptor_type;
231 u16 length;
232 u8 resource_type;
233 u8 flags;
234 u8 specific_flags;
235 u8 revision_iD;
236 u8 reserved;
237 u64 granularity;
238 u64 address_min;
239 u64 address_max;
240 u64 translation_offset;
241 u64 address_length;
242 u64 type_specific_attributes;
243 u8 optional_fields[2]; /* Used for length calculation only */
244};
245
246#define ASL_EXTENDED_ADDRESS_DESC_REVISION 1 /* ACPI 3.0 */
247
248
249struct asl_qword_address_desc
250{
251 u8 descriptor_type;
252 u16 length;
253 u8 resource_type;
254 u8 flags;
255 u8 specific_flags;
256 u64 granularity;
257 u64 address_min;
258 u64 address_max;
259 u64 translation_offset;
260 u64 address_length;
261 u8 optional_fields[2];
262};
263
264
265struct asl_dword_address_desc
266{
267 u8 descriptor_type;
268 u16 length;
269 u8 resource_type;
270 u8 flags;
271 u8 specific_flags;
272 u32 granularity;
273 u32 address_min;
274 u32 address_max;
275 u32 translation_offset;
276 u32 address_length;
277 u8 optional_fields[2];
278};
279
280
281struct asl_word_address_desc
282{
283 u8 descriptor_type;
284 u16 length;
285 u8 resource_type;
286 u8 flags;
287 u8 specific_flags;
288 u16 granularity;
289 u16 address_min;
290 u16 address_max;
291 u16 translation_offset;
292 u16 address_length;
293 u8 optional_fields[2];
294};
295
296
297struct asl_extended_xrupt_desc
298{
299 u8 descriptor_type;
300 u16 length;
301 u8 flags;
302 u8 table_length;
303 u32 interrupt_number[1];
304 /* res_source_index, res_source optional fields follow */
305};
306
307
308struct asl_general_register_desc
309{
310 u8 descriptor_type;
311 u16 length;
312 u8 address_space_id;
313 u8 bit_width;
314 u8 bit_offset;
315 u8 access_size; /* ACPI 3.0, was Reserved */
316 u64 address;
317};
318
319/* restore default alignment */
320
321#pragma pack()
322
323/* Union of all resource descriptors, so we can allocate the worst case */
324
325union asl_resource_desc
326{
327 struct asl_irq_format_desc irq;
328 struct asl_dma_format_desc dma;
329 struct asl_start_dependent_desc std;
330 struct asl_end_dependent_desc end;
331 struct asl_io_port_desc iop;
332 struct asl_fixed_io_port_desc fio;
333 struct asl_small_vendor_desc smv;
334 struct asl_end_tag_desc et;
335
336 struct asl_memory_24_desc M24;
337 struct asl_large_vendor_desc lgv;
338 struct asl_memory_32_desc M32;
339 struct asl_fixed_memory_32_desc F32;
340 struct asl_qword_address_desc qas;
341 struct asl_dword_address_desc das;
342 struct asl_word_address_desc was;
343 struct asl_extended_address_desc eas;
344 struct asl_extended_xrupt_desc exx;
345 struct asl_general_register_desc grg;
346 u32 u32_item;
347 u16 u16_item;
348 u8 U8item;
349};
350
351
352#endif
353
diff --git a/include/acpi/container.h b/include/acpi/container.h
new file mode 100644
index 00000000000..d716df04d9d
--- /dev/null
+++ b/include/acpi/container.h
@@ -0,0 +1,13 @@
1#ifndef __ACPI_CONTAINER_H
2#define __ACPI_CONTAINER_H
3
4#include <linux/kernel.h>
5
6struct acpi_container {
7 acpi_handle handle;
8 unsigned long sun;
9 int state;
10};
11
12#endif /* __ACPI_CONTAINER_H */
13
diff --git a/include/acpi/platform/acenv.h b/include/acpi/platform/acenv.h
new file mode 100644
index 00000000000..57bf9362335
--- /dev/null
+++ b/include/acpi/platform/acenv.h
@@ -0,0 +1,378 @@
1/******************************************************************************
2 *
3 * Name: acenv.h - Generation environment specific items
4 *
5 *****************************************************************************/
6
7/*
8 * Copyright (C) 2000 - 2005, R. Byron Moore
9 * All rights reserved.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions, and the following disclaimer,
16 * without modification.
17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18 * substantially similar to the "NO WARRANTY" disclaimer below
19 * ("Disclaimer") and any redistribution must be conditioned upon
20 * including a substantially similar Disclaimer requirement for further
21 * binary redistribution.
22 * 3. Neither the names of the above-listed copyright holders nor the names
23 * of any contributors may be used to endorse or promote products derived
24 * from this software without specific prior written permission.
25 *
26 * Alternatively, this software may be distributed under the terms of the
27 * GNU General Public License ("GPL") version 2 as published by the Free
28 * Software Foundation.
29 *
30 * NO WARRANTY
31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41 * POSSIBILITY OF SUCH DAMAGES.
42 */
43
44#ifndef __ACENV_H__
45#define __ACENV_H__
46
47
48/*
49 * Configuration for ACPI tools and utilities
50 */
51
52#ifdef _ACPI_DUMP_APP
53#ifndef MSDOS
54#define ACPI_DEBUG_OUTPUT
55#endif
56#define ACPI_APPLICATION
57#define ACPI_DISASSEMBLER
58#define ACPI_NO_METHOD_EXECUTION
59#define ACPI_USE_SYSTEM_CLIBRARY
60#define ACPI_ENABLE_OBJECT_CACHE
61#endif
62
63#ifdef _ACPI_EXEC_APP
64#undef DEBUGGER_THREADING
65#define DEBUGGER_THREADING DEBUGGER_SINGLE_THREADED
66#define ACPI_DEBUG_OUTPUT
67#define ACPI_APPLICATION
68#define ACPI_DEBUGGER
69#define ACPI_DISASSEMBLER
70#define ACPI_USE_SYSTEM_CLIBRARY
71#define ACPI_ENABLE_OBJECT_CACHE
72#endif
73
74#ifdef _ACPI_ASL_COMPILER
75#define ACPI_DEBUG_OUTPUT
76#define ACPI_APPLICATION
77#define ACPI_DISASSEMBLER
78#define ACPI_CONSTANT_EVAL_ONLY
79#define ACPI_USE_SYSTEM_CLIBRARY
80#define ACPI_ENABLE_OBJECT_CACHE
81#endif
82
83/*
84 * Environment configuration. The purpose of this file is to interface to the
85 * local generation environment.
86 *
87 * 1) ACPI_USE_SYSTEM_CLIBRARY - Define this if linking to an actual C library.
88 * Otherwise, local versions of string/memory functions will be used.
89 * 2) ACPI_USE_STANDARD_HEADERS - Define this if linking to a C library and
90 * the standard header files may be used.
91 *
92 * The ACPI subsystem only uses low level C library functions that do not call
93 * operating system services and may therefore be inlined in the code.
94 *
95 * It may be necessary to tailor these include files to the target
96 * generation environment.
97 *
98 *
99 * Functions and constants used from each header:
100 *
101 * string.h: memcpy
102 * memset
103 * strcat
104 * strcmp
105 * strcpy
106 * strlen
107 * strncmp
108 * strncat
109 * strncpy
110 *
111 * stdlib.h: strtoul
112 *
113 * stdarg.h: va_list
114 * va_arg
115 * va_start
116 * va_end
117 *
118 */
119
120/*! [Begin] no source code translation */
121
122#if defined(__linux__)
123#include "aclinux.h"
124
125#elif defined(_AED_EFI)
126#include "acefi.h"
127
128#elif defined(WIN32)
129#include "acwin.h"
130
131#elif defined(WIN64)
132#include "acwin64.h"
133
134#elif defined(MSDOS) /* Must appear after WIN32 and WIN64 check */
135#include "acdos16.h"
136
137#elif defined(__FreeBSD__)
138#include "acfreebsd.h"
139
140#elif defined(__NetBSD__)
141#include "acnetbsd.h"
142
143#elif defined(MODESTO)
144#include "acmodesto.h"
145
146#elif defined(NETWARE)
147#include "acnetware.h"
148
149#else
150
151/* All other environments */
152
153#define ACPI_USE_STANDARD_HEADERS
154
155#define COMPILER_DEPENDENT_INT64 long long
156#define COMPILER_DEPENDENT_UINT64 unsigned long long
157
158/*
159 * This macro is used to tag functions as "printf-like" because
160 * some compilers can catch printf format string problems. MSVC
161 * doesn't, so this is proprocessed away.
162 */
163#define ACPI_PRINTF_LIKE_FUNC
164
165#endif
166
167/*
168 * Memory allocation tracking. Used only if
169 * 1) This is the debug version
170 * 2) This is NOT a 16-bit version of the code (not enough real-mode memory)
171 */
172#ifdef ACPI_DEBUG_OUTPUT
173#if ACPI_MACHINE_WIDTH != 16
174#define ACPI_DBG_TRACK_ALLOCATIONS
175#endif
176#endif
177
178/*! [End] no source code translation !*/
179
180
181/*
182 * Debugger threading model
183 * Use single threaded if the entire subsystem is contained in an application
184 * Use multiple threaded when the subsystem is running in the kernel.
185 *
186 * By default the model is single threaded if ACPI_APPLICATION is set,
187 * multi-threaded if ACPI_APPLICATION is not set.
188 */
189#define DEBUGGER_SINGLE_THREADED 0
190#define DEBUGGER_MULTI_THREADED 1
191
192#ifndef DEBUGGER_THREADING
193#ifdef ACPI_APPLICATION
194#define DEBUGGER_THREADING DEBUGGER_SINGLE_THREADED
195
196#else
197#define DEBUGGER_THREADING DEBUGGER_MULTI_THREADED
198#endif
199#endif /* !DEBUGGER_THREADING */
200
201/******************************************************************************
202 *
203 * C library configuration
204 *
205 *****************************************************************************/
206
207#ifdef ACPI_USE_SYSTEM_CLIBRARY
208/*
209 * Use the standard C library headers.
210 * We want to keep these to a minimum.
211 */
212
213#ifdef ACPI_USE_STANDARD_HEADERS
214/*
215 * Use the standard headers from the standard locations
216 */
217#include <stdarg.h>
218#include <stdlib.h>
219#include <string.h>
220#include <ctype.h>
221
222#endif /* ACPI_USE_STANDARD_HEADERS */
223
224/*
225 * We will be linking to the standard Clib functions
226 */
227
228#define ACPI_STRSTR(s1,s2) strstr((s1), (s2))
229#define ACPI_STRCHR(s1,c) strchr((s1), (c))
230
231#ifdef ACPI_FUTURE_USAGE
232#define ACPI_STRUPR(s) (void) acpi_ut_strupr ((s))
233#endif
234
235#define ACPI_STRLEN(s) (acpi_size) strlen((s))
236#define ACPI_STRCPY(d,s) (void) strcpy((d), (s))
237#define ACPI_STRNCPY(d,s,n) (void) strncpy((d), (s), (acpi_size)(n))
238#define ACPI_STRNCMP(d,s,n) strncmp((d), (s), (acpi_size)(n))
239#define ACPI_STRCMP(d,s) strcmp((d), (s))
240#define ACPI_STRCAT(d,s) (void) strcat((d), (s))
241#define ACPI_STRNCAT(d,s,n) strncat((d), (s), (acpi_size)(n))
242#define ACPI_STRTOUL(d,s,n) strtoul((d), (s), (acpi_size)(n))
243#define ACPI_MEMCMP(s1,s2,n) memcmp((s1), (s2), (acpi_size)(n))
244#define ACPI_MEMCPY(d,s,n) (void) memcpy((d), (s), (acpi_size)(n))
245#define ACPI_MEMSET(d,s,n) (void) memset((d), (s), (acpi_size)(n))
246
247#define ACPI_TOUPPER toupper
248#define ACPI_TOLOWER tolower
249#define ACPI_IS_XDIGIT isxdigit
250#define ACPI_IS_DIGIT isdigit
251#define ACPI_IS_SPACE isspace
252#define ACPI_IS_UPPER isupper
253#define ACPI_IS_PRINT isprint
254#define ACPI_IS_ALPHA isalpha
255#define ACPI_IS_ASCII isascii
256
257/******************************************************************************
258 *
259 * Not using native C library, use local implementations
260 *
261 *****************************************************************************/
262#else
263
264/*
265 * Use local definitions of C library macros and functions
266 * NOTE: The function implementations may not be as efficient
267 * as an inline or assembly code implementation provided by a
268 * native C library.
269 */
270
271#ifndef va_arg
272
273#ifndef _VALIST
274#define _VALIST
275typedef char *va_list;
276#endif /* _VALIST */
277
278/*
279 * Storage alignment properties
280 */
281
282#define _AUPBND (sizeof (acpi_native_int) - 1)
283#define _ADNBND (sizeof (acpi_native_int) - 1)
284
285/*
286 * Variable argument list macro definitions
287 */
288
289#define _bnd(X, bnd) (((sizeof (X)) + (bnd)) & (~(bnd)))
290#define va_arg(ap, T) (*(T *)(((ap) += (_bnd (T, _AUPBND))) - (_bnd (T,_ADNBND))))
291#define va_end(ap) (void) 0
292#define va_start(ap, A) (void) ((ap) = (((char *) &(A)) + (_bnd (A,_AUPBND))))
293
294#endif /* va_arg */
295
296
297#define ACPI_STRSTR(s1,s2) acpi_ut_strstr ((s1), (s2))
298#define ACPI_STRCHR(s1,c) acpi_ut_strchr ((s1), (c))
299
300#ifdef ACPI_FUTURE_USAGE
301#define ACPI_STRUPR(s) (void) acpi_ut_strupr ((s))
302#endif
303
304#define ACPI_STRLEN(s) (acpi_size) acpi_ut_strlen ((s))
305#define ACPI_STRCPY(d,s) (void) acpi_ut_strcpy ((d), (s))
306#define ACPI_STRNCPY(d,s,n) (void) acpi_ut_strncpy ((d), (s), (acpi_size)(n))
307#define ACPI_STRNCMP(d,s,n) acpi_ut_strncmp ((d), (s), (acpi_size)(n))
308#define ACPI_STRCMP(d,s) acpi_ut_strcmp ((d), (s))
309#define ACPI_STRCAT(d,s) (void) acpi_ut_strcat ((d), (s))
310#define ACPI_STRNCAT(d,s,n) acpi_ut_strncat ((d), (s), (acpi_size)(n))
311#define ACPI_STRTOUL(d,s,n) acpi_ut_strtoul ((d), (s), (acpi_size)(n))
312#define ACPI_MEMCMP(s1,s2,n) acpi_ut_memcmp((s1), (s2), (acpi_size)(n))
313#define ACPI_MEMCPY(d,s,n) (void) acpi_ut_memcpy ((d), (s), (acpi_size)(n))
314#define ACPI_MEMSET(d,v,n) (void) acpi_ut_memset ((d), (v), (acpi_size)(n))
315#define ACPI_TOUPPER acpi_ut_to_upper
316#define ACPI_TOLOWER acpi_ut_to_lower
317
318#endif /* ACPI_USE_SYSTEM_CLIBRARY */
319
320
321/******************************************************************************
322 *
323 * Assembly code macros
324 *
325 *****************************************************************************/
326
327/*
328 * Handle platform- and compiler-specific assembly language differences.
329 * These should already have been defined by the platform includes above.
330 *
331 * Notes:
332 * 1) Interrupt 3 is used to break into a debugger
333 * 2) Interrupts are turned off during ACPI register setup
334 */
335
336/* Unrecognized compiler, use defaults */
337
338#ifndef ACPI_ASM_MACROS
339
340/*
341 * Calling conventions:
342 *
343 * ACPI_SYSTEM_XFACE - Interfaces to host OS (handlers, threads)
344 * ACPI_EXTERNAL_XFACE - External ACPI interfaces
345 * ACPI_INTERNAL_XFACE - Internal ACPI interfaces
346 * ACPI_INTERNAL_VAR_XFACE - Internal variable-parameter list interfaces
347 */
348#define ACPI_SYSTEM_XFACE
349#define ACPI_EXTERNAL_XFACE
350#define ACPI_INTERNAL_XFACE
351#define ACPI_INTERNAL_VAR_XFACE
352
353#define ACPI_ASM_MACROS
354#define BREAKPOINT3
355#define ACPI_DISABLE_IRQS()
356#define ACPI_ENABLE_IRQS()
357#define ACPI_ACQUIRE_GLOBAL_LOCK(Glptr, acq)
358#define ACPI_RELEASE_GLOBAL_LOCK(Glptr, acq)
359
360#endif /* ACPI_ASM_MACROS */
361
362
363#ifdef ACPI_APPLICATION
364
365/* Don't want software interrupts within a ring3 application */
366
367#undef BREAKPOINT3
368#define BREAKPOINT3
369#endif
370
371
372/******************************************************************************
373 *
374 * Compiler-specific information is contained in the compiler-specific
375 * headers.
376 *
377 *****************************************************************************/
378#endif /* __ACENV_H__ */
diff --git a/include/acpi/platform/acgcc.h b/include/acpi/platform/acgcc.h
new file mode 100644
index 00000000000..91fda36b042
--- /dev/null
+++ b/include/acpi/platform/acgcc.h
@@ -0,0 +1,59 @@
1/******************************************************************************
2 *
3 * Name: acgcc.h - GCC specific defines, etc.
4 *
5 *****************************************************************************/
6
7/*
8 * Copyright (C) 2000 - 2005, R. Byron Moore
9 * All rights reserved.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions, and the following disclaimer,
16 * without modification.
17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18 * substantially similar to the "NO WARRANTY" disclaimer below
19 * ("Disclaimer") and any redistribution must be conditioned upon
20 * including a substantially similar Disclaimer requirement for further
21 * binary redistribution.
22 * 3. Neither the names of the above-listed copyright holders nor the names
23 * of any contributors may be used to endorse or promote products derived
24 * from this software without specific prior written permission.
25 *
26 * Alternatively, this software may be distributed under the terms of the
27 * GNU General Public License ("GPL") version 2 as published by the Free
28 * Software Foundation.
29 *
30 * NO WARRANTY
31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41 * POSSIBILITY OF SUCH DAMAGES.
42 */
43
44#ifndef __ACGCC_H__
45#define __ACGCC_H__
46
47/* This macro is used to tag functions as "printf-like" because
48 * some compilers (like GCC) can catch printf format string problems.
49 */
50#define ACPI_PRINTF_LIKE_FUNC __attribute__ ((__format__ (__printf__, 4, 5)))
51
52/* Some compilers complain about unused variables. Sometimes we don't want to
53 * use all the variables (most specifically for _THIS_MODULE). This allow us
54 * to to tell the compiler warning in a per-variable manner that a variable
55 * is unused.
56 */
57#define ACPI_UNUSED_VAR __attribute__ ((unused))
58
59#endif /* __ACGCC_H__ */
diff --git a/include/acpi/platform/aclinux.h b/include/acpi/platform/aclinux.h
new file mode 100644
index 00000000000..a3de0db8569
--- /dev/null
+++ b/include/acpi/platform/aclinux.h
@@ -0,0 +1,92 @@
1/******************************************************************************
2 *
3 * Name: aclinux.h - OS specific defines, etc.
4 *
5 *****************************************************************************/
6
7/*
8 * Copyright (C) 2000 - 2005, R. Byron Moore
9 * All rights reserved.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions, and the following disclaimer,
16 * without modification.
17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18 * substantially similar to the "NO WARRANTY" disclaimer below
19 * ("Disclaimer") and any redistribution must be conditioned upon
20 * including a substantially similar Disclaimer requirement for further
21 * binary redistribution.
22 * 3. Neither the names of the above-listed copyright holders nor the names
23 * of any contributors may be used to endorse or promote products derived
24 * from this software without specific prior written permission.
25 *
26 * Alternatively, this software may be distributed under the terms of the
27 * GNU General Public License ("GPL") version 2 as published by the Free
28 * Software Foundation.
29 *
30 * NO WARRANTY
31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41 * POSSIBILITY OF SUCH DAMAGES.
42 */
43
44#ifndef __ACLINUX_H__
45#define __ACLINUX_H__
46
47#define ACPI_USE_SYSTEM_CLIBRARY
48#define ACPI_USE_DO_WHILE_0
49
50#ifdef __KERNEL__
51
52#include <linux/config.h>
53#include <linux/string.h>
54#include <linux/kernel.h>
55#include <linux/ctype.h>
56#include <asm/system.h>
57#include <asm/atomic.h>
58#include <asm/div64.h>
59#include <asm/acpi.h>
60
61#define strtoul simple_strtoul
62
63#define ACPI_MACHINE_WIDTH BITS_PER_LONG
64
65#else /* !__KERNEL__ */
66
67#include <stdarg.h>
68#include <string.h>
69#include <stdlib.h>
70#include <ctype.h>
71#include <unistd.h>
72
73#if defined(__ia64__) || defined(__x86_64__)
74#define ACPI_MACHINE_WIDTH 64
75#define COMPILER_DEPENDENT_INT64 long
76#define COMPILER_DEPENDENT_UINT64 unsigned long
77#else
78#define ACPI_MACHINE_WIDTH 32
79#define COMPILER_DEPENDENT_INT64 long long
80#define COMPILER_DEPENDENT_UINT64 unsigned long long
81#define ACPI_USE_NATIVE_DIVIDE
82#endif
83
84#define __cdecl
85#define ACPI_FLUSH_CPU_CACHE()
86#endif /* __KERNEL__ */
87
88/* Linux uses GCC */
89
90#include "acgcc.h"
91
92#endif /* __ACLINUX_H__ */
diff --git a/include/acpi/processor.h b/include/acpi/processor.h
new file mode 100644
index 00000000000..2f50a5bb0c7
--- /dev/null
+++ b/include/acpi/processor.h
@@ -0,0 +1,235 @@
1#ifndef __ACPI_PROCESSOR_H
2#define __ACPI_PROCESSOR_H
3
4#include <linux/kernel.h>
5#include <linux/config.h>
6
7#define ACPI_PROCESSOR_BUSY_METRIC 10
8
9#define ACPI_PROCESSOR_MAX_POWER 8
10#define ACPI_PROCESSOR_MAX_C2_LATENCY 100
11#define ACPI_PROCESSOR_MAX_C3_LATENCY 1000
12
13#define ACPI_PROCESSOR_MAX_THROTTLING 16
14#define ACPI_PROCESSOR_MAX_THROTTLE 250 /* 25% */
15#define ACPI_PROCESSOR_MAX_DUTY_WIDTH 4
16
17/* Power Management */
18
19struct acpi_processor_cx;
20
21struct acpi_power_register {
22 u8 descriptor;
23 u16 length;
24 u8 space_id;
25 u8 bit_width;
26 u8 bit_offset;
27 u8 reserved;
28 u64 address;
29} __attribute__ ((packed));
30
31
32struct acpi_processor_cx_policy {
33 u32 count;
34 struct acpi_processor_cx *state;
35 struct {
36 u32 time;
37 u32 ticks;
38 u32 count;
39 u32 bm;
40 } threshold;
41};
42
43struct acpi_processor_cx {
44 u8 valid;
45 u8 type;
46 u32 address;
47 u32 latency;
48 u32 latency_ticks;
49 u32 power;
50 u32 usage;
51 struct acpi_processor_cx_policy promotion;
52 struct acpi_processor_cx_policy demotion;
53};
54
55struct acpi_processor_power {
56 struct acpi_processor_cx *state;
57 unsigned long bm_check_timestamp;
58 u32 default_state;
59 u32 bm_activity;
60 int count;
61 struct acpi_processor_cx states[ACPI_PROCESSOR_MAX_POWER];
62};
63
64/* Performance Management */
65
66struct acpi_pct_register {
67 u8 descriptor;
68 u16 length;
69 u8 space_id;
70 u8 bit_width;
71 u8 bit_offset;
72 u8 reserved;
73 u64 address;
74} __attribute__ ((packed));
75
76struct acpi_processor_px {
77 acpi_integer core_frequency; /* megahertz */
78 acpi_integer power; /* milliWatts */
79 acpi_integer transition_latency; /* microseconds */
80 acpi_integer bus_master_latency; /* microseconds */
81 acpi_integer control; /* control value */
82 acpi_integer status; /* success indicator */
83};
84
85#define ACPI_PDC_REVISION_ID 0x1
86
87struct acpi_processor_performance {
88 unsigned int state;
89 unsigned int platform_limit;
90 struct acpi_pct_register control_register;
91 struct acpi_pct_register status_register;
92 unsigned int state_count;
93 struct acpi_processor_px *states;
94
95 /* the _PDC objects passed by the driver, if any */
96 struct acpi_object_list *pdc;
97};
98
99
100
101/* Throttling Control */
102
103struct acpi_processor_tx {
104 u16 power;
105 u16 performance;
106};
107
108struct acpi_processor_throttling {
109 int state;
110 u32 address;
111 u8 duty_offset;
112 u8 duty_width;
113 int state_count;
114 struct acpi_processor_tx states[ACPI_PROCESSOR_MAX_THROTTLING];
115};
116
117/* Limit Interface */
118
119struct acpi_processor_lx {
120 int px; /* performace state */
121 int tx; /* throttle level */
122};
123
124struct acpi_processor_limit {
125 struct acpi_processor_lx state; /* current limit */
126 struct acpi_processor_lx thermal; /* thermal limit */
127 struct acpi_processor_lx user; /* user limit */
128};
129
130
131struct acpi_processor_flags {
132 u8 power:1;
133 u8 performance:1;
134 u8 throttling:1;
135 u8 limit:1;
136 u8 bm_control:1;
137 u8 bm_check:1;
138 u8 has_cst:1;
139 u8 power_setup_done:1;
140};
141
142struct acpi_processor {
143 acpi_handle handle;
144 u32 acpi_id;
145 u32 id;
146 u32 pblk;
147 int performance_platform_limit;
148 struct acpi_processor_flags flags;
149 struct acpi_processor_power power;
150 struct acpi_processor_performance *performance;
151 struct acpi_processor_throttling throttling;
152 struct acpi_processor_limit limit;
153};
154
155struct acpi_processor_errata {
156 u8 smp;
157 struct {
158 u8 throttle:1;
159 u8 fdma:1;
160 u8 reserved:6;
161 u32 bmisx;
162 } piix4;
163};
164
165extern int acpi_processor_register_performance (
166 struct acpi_processor_performance * performance,
167 unsigned int cpu);
168extern void acpi_processor_unregister_performance (
169 struct acpi_processor_performance * performance,
170 unsigned int cpu);
171
172/* note: this locks both the calling module and the processor module
173 if a _PPC object exists, rmmod is disallowed then */
174int acpi_processor_notify_smm(struct module *calling_module);
175
176
177
178/* for communication between multiple parts of the processor kernel module */
179extern struct acpi_processor *processors[NR_CPUS];
180extern struct acpi_processor_errata errata;
181
182/* in processor_perflib.c */
183#ifdef CONFIG_CPU_FREQ
184void acpi_processor_ppc_init(void);
185void acpi_processor_ppc_exit(void);
186int acpi_processor_ppc_has_changed(struct acpi_processor *pr);
187#else
188static inline void acpi_processor_ppc_init(void) { return; }
189static inline void acpi_processor_ppc_exit(void) { return; }
190static inline int acpi_processor_ppc_has_changed(struct acpi_processor *pr) {
191 static unsigned int printout = 1;
192 if (printout) {
193 printk(KERN_WARNING "Warning: Processor Platform Limit event detected, but not handled.\n");
194 printk(KERN_WARNING "Consider compiling CPUfreq support into your kernel.\n");
195 printout = 0;
196 }
197 return 0;
198}
199#endif /* CONFIG_CPU_FREQ */
200
201/* in processor_throttling.c */
202int acpi_processor_get_throttling_info (struct acpi_processor *pr);
203int acpi_processor_set_throttling (struct acpi_processor *pr, int state);
204ssize_t acpi_processor_write_throttling (
205 struct file *file,
206 const char __user *buffer,
207 size_t count,
208 loff_t *data);
209extern struct file_operations acpi_processor_throttling_fops;
210
211/* in processor_idle.c */
212int acpi_processor_power_init(struct acpi_processor *pr, struct acpi_device *device);
213int acpi_processor_cst_has_changed (struct acpi_processor *pr);
214int acpi_processor_power_exit(struct acpi_processor *pr, struct acpi_device *device);
215
216
217/* in processor_thermal.c */
218int acpi_processor_get_limit_info (struct acpi_processor *pr);
219ssize_t acpi_processor_write_limit (
220 struct file *file,
221 const char __user *buffer,
222 size_t count,
223 loff_t *data);
224extern struct file_operations acpi_processor_limit_fops;
225
226#ifdef CONFIG_CPU_FREQ
227void acpi_thermal_cpufreq_init(void);
228void acpi_thermal_cpufreq_exit(void);
229#else
230static inline void acpi_thermal_cpufreq_init(void) { return; }
231static inline void acpi_thermal_cpufreq_exit(void) { return; }
232#endif
233
234
235#endif