1 /******************************************************************************
3 * Name: acinterp.h - Interpreter subcomponent prototypes and defines
6 *****************************************************************************/
9 * Copyright (C) 2000, 2001 R. Byron Moore
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by
13 * the Free Software Foundation; either version 2 of the License, or
14 * (at your option) any later version.
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, write to the Free Software
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
26 #ifndef __ACINTERP_H__
27 #define __ACINTERP_H__
30 #define WALK_OPERANDS &(walk_state->operands [walk_state->num_operands -1])
33 /* Interpreter constants */
35 #define AML_END_OF_BLOCK -1
36 #define PUSH_PKG_LENGTH 1
37 #define DO_NOT_PUSH_PKG_LENGTH 0
41 #define STACK_BOTTOM (u32) -1
43 /* Constants for global "When_to_parse_methods" */
45 #define METHOD_PARSE_AT_INIT 0x0
46 #define METHOD_PARSE_JUST_IN_TIME 0x1
47 #define METHOD_DELETE_AT_COMPLETION 0x2
51 acpi_aml_resolve_operands (
53 ACPI_OPERAND_OBJECT
**stack_ptr
,
54 ACPI_WALK_STATE
*walk_state
);
58 * amxface - External interpreter interfaces
63 ACPI_TABLE_TYPE table_id
);
66 acpi_aml_execute_method (
67 ACPI_NAMESPACE_NODE
*method_node
,
68 ACPI_OPERAND_OBJECT
**params
,
69 ACPI_OPERAND_OBJECT
**return_obj_desc
);
73 * amconvrt - object conversion
77 acpi_aml_convert_to_integer (
78 ACPI_OPERAND_OBJECT
**obj_desc
,
79 ACPI_WALK_STATE
*walk_state
);
82 acpi_aml_convert_to_buffer (
83 ACPI_OPERAND_OBJECT
**obj_desc
,
84 ACPI_WALK_STATE
*walk_state
);
87 acpi_aml_convert_to_string (
88 ACPI_OPERAND_OBJECT
**obj_desc
,
89 ACPI_WALK_STATE
*walk_state
);
92 acpi_aml_convert_to_target_type (
93 OBJECT_TYPE_INTERNAL destination_type
,
94 ACPI_OPERAND_OBJECT
**obj_desc
,
95 ACPI_WALK_STATE
*walk_state
);
99 * amfield - ACPI AML (p-code) execution - field manipulation
103 acpi_aml_read_field (
104 ACPI_OPERAND_OBJECT
*obj_desc
,
110 u32 byte_granularity
);
113 acpi_aml_write_field (
114 ACPI_OPERAND_OBJECT
*obj_desc
,
120 u32 byte_granularity
);
123 acpi_aml_setup_field (
124 ACPI_OPERAND_OBJECT
*obj_desc
,
125 ACPI_OPERAND_OBJECT
*rgn_desc
,
126 u32 field_bit_width
);
129 acpi_aml_read_field_data (
130 ACPI_OPERAND_OBJECT
*obj_desc
,
131 u32 field_byte_offset
,
136 acpi_aml_access_named_field (
138 ACPI_HANDLE named_field
,
143 * ammisc - ACPI AML (p-code) execution - specific opcodes
147 acpi_aml_exec_create_field (
150 ACPI_NAMESPACE_NODE
*node
,
151 ACPI_WALK_STATE
*walk_state
);
154 acpi_aml_exec_reconfiguration (
156 ACPI_WALK_STATE
*walk_state
);
159 acpi_aml_exec_fatal (
160 ACPI_WALK_STATE
*walk_state
);
163 acpi_aml_exec_index (
164 ACPI_WALK_STATE
*walk_state
,
165 ACPI_OPERAND_OBJECT
**return_desc
);
168 acpi_aml_exec_match (
169 ACPI_WALK_STATE
*walk_state
,
170 ACPI_OPERAND_OBJECT
**return_desc
);
173 acpi_aml_exec_create_mutex (
174 ACPI_WALK_STATE
*walk_state
);
177 acpi_aml_exec_create_processor (
178 ACPI_PARSE_OBJECT
*op
,
179 ACPI_HANDLE processor_nTE
);
182 acpi_aml_exec_create_power_resource (
183 ACPI_PARSE_OBJECT
*op
,
184 ACPI_HANDLE processor_nTE
);
187 acpi_aml_exec_create_region (
191 ACPI_WALK_STATE
*walk_state
);
194 acpi_aml_exec_create_event (
195 ACPI_WALK_STATE
*walk_state
);
198 acpi_aml_exec_create_alias (
199 ACPI_WALK_STATE
*walk_state
);
202 acpi_aml_exec_create_method (
210 * ammutex - mutex support
214 acpi_aml_acquire_mutex (
215 ACPI_OPERAND_OBJECT
*time_desc
,
216 ACPI_OPERAND_OBJECT
*obj_desc
,
217 ACPI_WALK_STATE
*walk_state
);
220 acpi_aml_release_mutex (
221 ACPI_OPERAND_OBJECT
*obj_desc
,
222 ACPI_WALK_STATE
*walk_state
);
225 acpi_aml_release_all_mutexes (
226 ACPI_OPERAND_OBJECT
*mutex_list
);
229 acpi_aml_unlink_mutex (
230 ACPI_OPERAND_OBJECT
*obj_desc
);
234 * amprep - ACPI AML (p-code) execution - prep utilities
238 acpi_aml_prep_def_field_value (
239 ACPI_NAMESPACE_NODE
*node
,
247 acpi_aml_prep_bank_field_value (
248 ACPI_NAMESPACE_NODE
*node
,
250 ACPI_HANDLE bank_reg
,
258 acpi_aml_prep_index_field_value (
259 ACPI_NAMESPACE_NODE
*node
,
260 ACPI_HANDLE index_reg
,
261 ACPI_HANDLE data_reg
,
269 * amsystem - Interface to OS services
273 acpi_aml_system_do_notify_op (
274 ACPI_OPERAND_OBJECT
*value
,
275 ACPI_OPERAND_OBJECT
*obj_desc
);
278 acpi_aml_system_do_suspend(
282 acpi_aml_system_do_stall (
286 acpi_aml_system_acquire_mutex(
287 ACPI_OPERAND_OBJECT
*time
,
288 ACPI_OPERAND_OBJECT
*obj_desc
);
291 acpi_aml_system_release_mutex(
292 ACPI_OPERAND_OBJECT
*obj_desc
);
295 acpi_aml_system_signal_event(
296 ACPI_OPERAND_OBJECT
*obj_desc
);
299 acpi_aml_system_wait_event(
300 ACPI_OPERAND_OBJECT
*time
,
301 ACPI_OPERAND_OBJECT
*obj_desc
);
304 acpi_aml_system_reset_event(
305 ACPI_OPERAND_OBJECT
*obj_desc
);
308 acpi_aml_system_wait_semaphore (
309 ACPI_HANDLE semaphore
,
314 * ammonadic - ACPI AML (p-code) execution, monadic operators
318 acpi_aml_exec_monadic1 (
320 ACPI_WALK_STATE
*walk_state
);
323 acpi_aml_exec_monadic2 (
325 ACPI_WALK_STATE
*walk_state
,
326 ACPI_OPERAND_OBJECT
**return_desc
);
329 acpi_aml_exec_monadic2_r (
331 ACPI_WALK_STATE
*walk_state
,
332 ACPI_OPERAND_OBJECT
**return_desc
);
336 * amdyadic - ACPI AML (p-code) execution, dyadic operators
340 acpi_aml_exec_dyadic1 (
342 ACPI_WALK_STATE
*walk_state
);
345 acpi_aml_exec_dyadic2 (
347 ACPI_WALK_STATE
*walk_state
,
348 ACPI_OPERAND_OBJECT
**return_desc
);
351 acpi_aml_exec_dyadic2_r (
353 ACPI_WALK_STATE
*walk_state
,
354 ACPI_OPERAND_OBJECT
**return_desc
);
357 acpi_aml_exec_dyadic2_s (
359 ACPI_WALK_STATE
*walk_state
,
360 ACPI_OPERAND_OBJECT
**return_desc
);
364 * amresolv - Object resolution and get value functions
368 acpi_aml_resolve_to_value (
369 ACPI_OPERAND_OBJECT
**stack_ptr
,
370 ACPI_WALK_STATE
*walk_state
);
373 acpi_aml_resolve_node_to_value (
374 ACPI_NAMESPACE_NODE
**stack_ptr
,
375 ACPI_WALK_STATE
*walk_state
);
378 acpi_aml_resolve_object_to_value (
379 ACPI_OPERAND_OBJECT
**stack_ptr
,
380 ACPI_WALK_STATE
*walk_state
);
383 acpi_aml_get_field_unit_value (
384 ACPI_OPERAND_OBJECT
*field_desc
,
385 ACPI_OPERAND_OBJECT
*result_desc
);
389 * amdump - Scanner debug output routines
393 acpi_aml_show_hex_value (
400 acpi_aml_dump_operand (
401 ACPI_OPERAND_OBJECT
*entry_desc
);
404 acpi_aml_dump_operands (
405 ACPI_OPERAND_OBJECT
**operands
,
406 OPERATING_MODE interpreter_mode
,
410 NATIVE_CHAR
*module_name
,
414 acpi_aml_dump_object_descriptor (
415 ACPI_OPERAND_OBJECT
*object
,
421 ACPI_NAMESPACE_NODE
*node
,
426 * amnames - interpreter/scanner name load/execute
430 acpi_aml_allocate_name_string (
439 acpi_aml_exec_name_segment (
441 NATIVE_CHAR
*name_string
);
444 acpi_aml_get_name_string (
445 OBJECT_TYPE_INTERNAL data_type
,
447 NATIVE_CHAR
**out_name_string
,
448 u32
*out_name_length
);
452 ACPI_OBJECT_TYPE data_type
,
453 OPERATING_MODE load_exec_mode
);
457 * amstore - Object store support
461 acpi_aml_exec_store (
462 ACPI_OPERAND_OBJECT
*val_desc
,
463 ACPI_OPERAND_OBJECT
*dest_desc
,
464 ACPI_WALK_STATE
*walk_state
);
467 acpi_aml_store_object_to_index (
468 ACPI_OPERAND_OBJECT
*val_desc
,
469 ACPI_OPERAND_OBJECT
*dest_desc
,
470 ACPI_WALK_STATE
*walk_state
);
473 acpi_aml_store_object_to_node (
474 ACPI_OPERAND_OBJECT
*source_desc
,
475 ACPI_NAMESPACE_NODE
*node
,
476 ACPI_WALK_STATE
*walk_state
);
479 acpi_aml_store_object_to_object (
480 ACPI_OPERAND_OBJECT
*source_desc
,
481 ACPI_OPERAND_OBJECT
*dest_desc
,
482 ACPI_WALK_STATE
*walk_state
);
490 acpi_aml_resolve_object (
491 ACPI_OPERAND_OBJECT
**source_desc_ptr
,
492 OBJECT_TYPE_INTERNAL target_type
,
493 ACPI_WALK_STATE
*walk_state
);
496 acpi_aml_store_object (
497 ACPI_OPERAND_OBJECT
*source_desc
,
498 OBJECT_TYPE_INTERNAL target_type
,
499 ACPI_OPERAND_OBJECT
**target_desc_ptr
,
500 ACPI_WALK_STATE
*walk_state
);
504 * amcopy - object copy
508 acpi_aml_copy_buffer_to_buffer (
509 ACPI_OPERAND_OBJECT
*source_desc
,
510 ACPI_OPERAND_OBJECT
*target_desc
);
513 acpi_aml_copy_string_to_string (
514 ACPI_OPERAND_OBJECT
*source_desc
,
515 ACPI_OPERAND_OBJECT
*target_desc
);
518 acpi_aml_copy_integer_to_index_field (
519 ACPI_OPERAND_OBJECT
*source_desc
,
520 ACPI_OPERAND_OBJECT
*target_desc
);
523 acpi_aml_copy_integer_to_bank_field (
524 ACPI_OPERAND_OBJECT
*source_desc
,
525 ACPI_OPERAND_OBJECT
*target_desc
);
528 acpi_aml_copy_data_to_named_field (
529 ACPI_OPERAND_OBJECT
*source_desc
,
530 ACPI_NAMESPACE_NODE
*node
);
533 acpi_aml_copy_integer_to_field_unit (
534 ACPI_OPERAND_OBJECT
*source_desc
,
535 ACPI_OPERAND_OBJECT
*target_desc
);
538 * amutils - interpreter/scanner utilities
542 acpi_aml_enter_interpreter (
546 acpi_aml_exit_interpreter (
550 acpi_aml_truncate_for32bit_table (
551 ACPI_OPERAND_OBJECT
*obj_desc
,
552 ACPI_WALK_STATE
*walk_state
);
555 acpi_aml_validate_object_type (
556 ACPI_OBJECT_TYPE type
);
559 acpi_aml_acquire_global_lock (
563 acpi_aml_release_global_lock (
567 acpi_aml_digits_needed (
572 acpi_aml_eisa_id_to_string (
574 NATIVE_CHAR
*out_string
);
577 acpi_aml_unsigned_integer_to_string (
579 NATIVE_CHAR
*out_string
);
583 * amregion - default Op_region handlers
587 acpi_aml_system_memory_space_handler (
589 ACPI_PHYSICAL_ADDRESS address
,
592 void *handler_context
,
593 void *region_context
);
596 acpi_aml_system_io_space_handler (
598 ACPI_PHYSICAL_ADDRESS address
,
601 void *handler_context
,
602 void *region_context
);
605 acpi_aml_pci_config_space_handler (
607 ACPI_PHYSICAL_ADDRESS address
,
610 void *handler_context
,
611 void *region_context
);
614 acpi_aml_embedded_controller_space_handler (
616 ACPI_PHYSICAL_ADDRESS address
,
619 void *handler_context
,
620 void *region_context
);
623 acpi_aml_sm_bus_space_handler (
625 ACPI_PHYSICAL_ADDRESS address
,
628 void *handler_context
,
629 void *region_context
);
632 #endif /* __INTERP_H__ */