aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBob Moore <robert.moore@intel.com>2005-12-16 17:05:00 -0500
committerLen Brown <len.brown@intel.com>2005-12-28 02:54:59 -0500
commitdefba1d8f233c0d5cf3e1ea6aeb898eca7231860 (patch)
treecd8b1b84da8d8a52ad0d44107daaeeee0a0b65f4
parentcb654695f6b912cef7cb3271665b6ee0d416124c (diff)
[ACPI] ACPICA 20051216
Implemented optional support to allow unresolved names within ASL Package objects. A null object is inserted in the package when a named reference cannot be located in the current namespace. Enabled via the interpreter slack flag which Linux has enabled by default (acpi=strict to disable slack). This should eliminate AE_NOT_FOUND exceptions seen on machines that contain such code. Implemented an optimization to the initialization sequence that can improve boot time. During ACPI device initialization, the _STA method is now run if and only if the _INI method exists. The _STA method is used to determine if the device is present; An _INI can only be run if _STA returns present, but it is a waste of time to run the _STA method if the _INI does not exist. (Prototype and assistance from Dong Wei) Implemented use of the C99 uintptr_t for the pointer casting macros if it is available in the current compiler. Otherwise, the default (void *) cast is used as before. Fixed some possible memory leaks found within the execution path of the Break, Continue, If, and CreateField operators. (Valery Podrezov) Fixed a problem introduced in the 20051202 release where an exception is generated during method execution if a control method attempts to declare another method. Signed-off-by: Bob Moore <robert.moore@intel.com> Signed-off-by: Len Brown <len.brown@intel.com>
-rw-r--r--drivers/acpi/dispatcher/dsmethod.c65
-rw-r--r--drivers/acpi/dispatcher/dsobject.c81
-rw-r--r--drivers/acpi/dispatcher/dswexec.c33
-rw-r--r--drivers/acpi/dispatcher/dswload.c110
-rw-r--r--drivers/acpi/executer/exoparg3.c4
-rw-r--r--drivers/acpi/hardware/hwregs.c3
-rw-r--r--drivers/acpi/namespace/nsinit.c85
-rw-r--r--drivers/acpi/namespace/nssearch.c17
-rw-r--r--drivers/acpi/namespace/nsxfeval.c4
-rw-r--r--drivers/acpi/parser/psargs.c198
-rw-r--r--drivers/acpi/parser/psloop.c9
-rw-r--r--drivers/acpi/parser/psparse.c17
-rw-r--r--drivers/acpi/resources/rsdump.c1
-rw-r--r--drivers/acpi/utilities/utalloc.c4
-rw-r--r--drivers/acpi/utilities/uteval.c20
-rw-r--r--drivers/acpi/utilities/utglobal.c9
-rw-r--r--drivers/acpi/utilities/utmisc.c2
-rw-r--r--drivers/acpi/utilities/utresrc.c109
-rw-r--r--include/acpi/acconfig.h2
-rw-r--r--include/acpi/acdisasm.h22
-rw-r--r--include/acpi/acdispat.h3
-rw-r--r--include/acpi/acglobal.h8
-rw-r--r--include/acpi/aclocal.h31
-rw-r--r--include/acpi/acmacros.h24
-rw-r--r--include/acpi/actbl.h6
-rw-r--r--include/acpi/actypes.h303
-rw-r--r--include/acpi/acutils.h24
27 files changed, 775 insertions, 419 deletions
diff --git a/drivers/acpi/dispatcher/dsmethod.c b/drivers/acpi/dispatcher/dsmethod.c
index 58ad00b31ee9..e7ce86b8d954 100644
--- a/drivers/acpi/dispatcher/dsmethod.c
+++ b/drivers/acpi/dispatcher/dsmethod.c
@@ -47,12 +47,70 @@
47#include <acpi/acdispat.h> 47#include <acpi/acdispat.h>
48#include <acpi/acinterp.h> 48#include <acpi/acinterp.h>
49#include <acpi/acnamesp.h> 49#include <acpi/acnamesp.h>
50#include <acpi/acdisasm.h>
50 51
51#define _COMPONENT ACPI_DISPATCHER 52#define _COMPONENT ACPI_DISPATCHER
52ACPI_MODULE_NAME("dsmethod") 53ACPI_MODULE_NAME("dsmethod")
53 54
54/******************************************************************************* 55/*******************************************************************************
55 * 56 *
57 * FUNCTION: acpi_ds_method_error
58 *
59 * PARAMETERS: Status - Execution status
60 * walk_state - Current state
61 *
62 * RETURN: Status
63 *
64 * DESCRIPTION: Called on method error. Invoke the global exception handler if
65 * present, dump the method data if the disassembler is configured
66 *
67 * Note: Allows the exception handler to change the status code
68 *
69 ******************************************************************************/
70acpi_status
71acpi_ds_method_error(acpi_status status, struct acpi_walk_state *walk_state)
72{
73 ACPI_FUNCTION_ENTRY();
74
75 /* Ignore AE_OK and control exception codes */
76
77 if (ACPI_SUCCESS(status) || (status & AE_CODE_CONTROL)) {
78 return (status);
79 }
80
81 /* Invoke the global exception handler */
82
83 if (acpi_gbl_exception_handler) {
84 /* Exit the interpreter, allow handler to execute methods */
85
86 acpi_ex_exit_interpreter();
87
88 /*
89 * Handler can map the exception code to anything it wants, including
90 * AE_OK, in which case the executing method will not be aborted.
91 */
92 status = acpi_gbl_exception_handler(status,
93 walk_state->method_node ?
94 walk_state->method_node->
95 name.integer : 0,
96 walk_state->opcode,
97 walk_state->aml_offset,
98 NULL);
99 (void)acpi_ex_enter_interpreter();
100 }
101#ifdef ACPI_DISASSEMBLER
102 if (ACPI_FAILURE(status)) {
103 /* Display method locals/args if disassembler is present */
104
105 acpi_dm_dump_method_info(status, walk_state, walk_state->op);
106 }
107#endif
108
109 return (status);
110}
111
112/*******************************************************************************
113 *
56 * FUNCTION: acpi_ds_begin_method_execution 114 * FUNCTION: acpi_ds_begin_method_execution
57 * 115 *
58 * PARAMETERS: method_node - Node of the method 116 * PARAMETERS: method_node - Node of the method
@@ -66,10 +124,11 @@ ACPI_MODULE_NAME("dsmethod")
66 * for clearance to execute. 124 * for clearance to execute.
67 * 125 *
68 ******************************************************************************/ 126 ******************************************************************************/
127
69acpi_status 128acpi_status
70acpi_ds_begin_method_execution(struct acpi_namespace_node *method_node, 129acpi_ds_begin_method_execution(struct acpi_namespace_node * method_node,
71 union acpi_operand_object *obj_desc, 130 union acpi_operand_object * obj_desc,
72 struct acpi_namespace_node *calling_method_node) 131 struct acpi_namespace_node * calling_method_node)
73{ 132{
74 acpi_status status = AE_OK; 133 acpi_status status = AE_OK;
75 134
diff --git a/drivers/acpi/dispatcher/dsobject.c b/drivers/acpi/dispatcher/dsobject.c
index 8ac0cd93adb5..905a84e4b145 100644
--- a/drivers/acpi/dispatcher/dsobject.c
+++ b/drivers/acpi/dispatcher/dsobject.c
@@ -51,6 +51,7 @@
51#define _COMPONENT ACPI_DISPATCHER 51#define _COMPONENT ACPI_DISPATCHER
52ACPI_MODULE_NAME("dsobject") 52ACPI_MODULE_NAME("dsobject")
53 53
54/* Local prototypes */
54static acpi_status 55static acpi_status
55acpi_ds_build_internal_object(struct acpi_walk_state *walk_state, 56acpi_ds_build_internal_object(struct acpi_walk_state *walk_state,
56 union acpi_parse_object *op, 57 union acpi_parse_object *op,
@@ -85,7 +86,7 @@ acpi_ds_build_internal_object(struct acpi_walk_state *walk_state,
85 *obj_desc_ptr = NULL; 86 *obj_desc_ptr = NULL;
86 if (op->common.aml_opcode == AML_INT_NAMEPATH_OP) { 87 if (op->common.aml_opcode == AML_INT_NAMEPATH_OP) {
87 /* 88 /*
88 * This is an named object reference. If this name was 89 * This is a named object reference. If this name was
89 * previously looked up in the namespace, it was stored in this op. 90 * previously looked up in the namespace, it was stored in this op.
90 * Otherwise, go ahead and look it up now 91 * Otherwise, go ahead and look it up now
91 */ 92 */
@@ -96,18 +97,48 @@ acpi_ds_build_internal_object(struct acpi_walk_state *walk_state,
96 ACPI_IMODE_EXECUTE, 97 ACPI_IMODE_EXECUTE,
97 ACPI_NS_SEARCH_PARENT | 98 ACPI_NS_SEARCH_PARENT |
98 ACPI_NS_DONT_OPEN_SCOPE, NULL, 99 ACPI_NS_DONT_OPEN_SCOPE, NULL,
99 (struct acpi_namespace_node **) 100 ACPI_CAST_INDIRECT_PTR(struct
100 &(op->common.node)); 101 acpi_namespace_node,
101 102 &(op->
103 common.
104 node)));
102 if (ACPI_FAILURE(status)) { 105 if (ACPI_FAILURE(status)) {
103 ACPI_REPORT_NSERROR(op->common.value.string, 106 /* Check if we are resolving a named reference within a package */
104 status); 107
108 if ((status == AE_NOT_FOUND)
109 && (acpi_gbl_enable_interpreter_slack)
110 &&
111 ((op->common.parent->common.aml_opcode ==
112 AML_PACKAGE_OP)
113 || (op->common.parent->common.aml_opcode ==
114 AML_VAR_PACKAGE_OP))) {
115 /*
116 * We didn't find the target and we are populating elements
117 * of a package - ignore if slack enabled. Some ASL code
118 * contains dangling invalid references in packages and
119 * expects that no exception will be issued. Leave the
120 * element as a null element. It cannot be used, but it
121 * can be overwritten by subsequent ASL code - this is
122 * typically the case.
123 */
124 ACPI_DEBUG_PRINT((ACPI_DB_INFO,
125 "Ignoring unresolved reference in package [%4.4s]\n",
126 walk_state->
127 scope_info->scope.
128 node->name.ascii));
129
130 return_ACPI_STATUS(AE_OK);
131 } else {
132 ACPI_REPORT_NSERROR(op->common.value.
133 string, status);
134 }
135
105 return_ACPI_STATUS(status); 136 return_ACPI_STATUS(status);
106 } 137 }
107 } 138 }
108 } 139 }
109 140
110 /* Create and init the internal ACPI object */ 141 /* Create and init a new internal ACPI object */
111 142
112 obj_desc = acpi_ut_create_internal_object((acpi_ps_get_opcode_info 143 obj_desc = acpi_ut_create_internal_object((acpi_ps_get_opcode_info
113 (op->common.aml_opcode))-> 144 (op->common.aml_opcode))->
@@ -157,13 +188,13 @@ acpi_ds_build_internal_buffer_obj(struct acpi_walk_state *walk_state,
157 188
158 ACPI_FUNCTION_TRACE("ds_build_internal_buffer_obj"); 189 ACPI_FUNCTION_TRACE("ds_build_internal_buffer_obj");
159 190
191 /*
192 * If we are evaluating a Named buffer object "Name (xxxx, Buffer)".
193 * The buffer object already exists (from the NS node), otherwise it must
194 * be created.
195 */
160 obj_desc = *obj_desc_ptr; 196 obj_desc = *obj_desc_ptr;
161 if (obj_desc) { 197 if (!obj_desc) {
162 /*
163 * We are evaluating a Named buffer object "Name (xxxx, Buffer)".
164 * The buffer object already exists (from the NS node)
165 */
166 } else {
167 /* Create a new buffer object */ 198 /* Create a new buffer object */
168 199
169 obj_desc = acpi_ut_create_internal_object(ACPI_TYPE_BUFFER); 200 obj_desc = acpi_ut_create_internal_object(ACPI_TYPE_BUFFER);
@@ -259,7 +290,7 @@ acpi_ds_build_internal_package_obj(struct acpi_walk_state *walk_state,
259 union acpi_operand_object *obj_desc = NULL; 290 union acpi_operand_object *obj_desc = NULL;
260 u32 package_list_length; 291 u32 package_list_length;
261 acpi_status status = AE_OK; 292 acpi_status status = AE_OK;
262 u32 i; 293 acpi_native_uint i;
263 294
264 ACPI_FUNCTION_TRACE("ds_build_internal_package_obj"); 295 ACPI_FUNCTION_TRACE("ds_build_internal_package_obj");
265 296
@@ -271,13 +302,12 @@ acpi_ds_build_internal_package_obj(struct acpi_walk_state *walk_state,
271 parent = parent->common.parent; 302 parent = parent->common.parent;
272 } 303 }
273 304
305 /*
306 * If we are evaluating a Named package object "Name (xxxx, Package)",
307 * the package object already exists, otherwise it must be created.
308 */
274 obj_desc = *obj_desc_ptr; 309 obj_desc = *obj_desc_ptr;
275 if (obj_desc) { 310 if (!obj_desc) {
276 /*
277 * We are evaluating a Named package object "Name (xxxx, Package)".
278 * Get the existing package object from the NS node
279 */
280 } else {
281 obj_desc = acpi_ut_create_internal_object(ACPI_TYPE_PACKAGE); 311 obj_desc = acpi_ut_create_internal_object(ACPI_TYPE_PACKAGE);
282 *obj_desc_ptr = obj_desc; 312 *obj_desc_ptr = obj_desc;
283 if (!obj_desc) { 313 if (!obj_desc) {
@@ -291,11 +321,9 @@ acpi_ds_build_internal_package_obj(struct acpi_walk_state *walk_state,
291 321
292 /* Count the number of items in the package list */ 322 /* Count the number of items in the package list */
293 323
294 package_list_length = 0;
295 arg = op->common.value.arg; 324 arg = op->common.value.arg;
296 arg = arg->common.next; 325 arg = arg->common.next;
297 while (arg) { 326 for (package_list_length = 0; arg; package_list_length++) {
298 package_list_length++;
299 arg = arg->common.next; 327 arg = arg->common.next;
300 } 328 }
301 329
@@ -322,12 +350,11 @@ acpi_ds_build_internal_package_obj(struct acpi_walk_state *walk_state,
322 } 350 }
323 351
324 /* 352 /*
325 * Now init the elements of the package 353 * Initialize all elements of the package
326 */ 354 */
327 i = 0;
328 arg = op->common.value.arg; 355 arg = op->common.value.arg;
329 arg = arg->common.next; 356 arg = arg->common.next;
330 while (arg) { 357 for (i = 0; arg; i++) {
331 if (arg->common.aml_opcode == AML_INT_RETURN_VALUE_OP) { 358 if (arg->common.aml_opcode == AML_INT_RETURN_VALUE_OP) {
332 /* Object (package or buffer) is already built */ 359 /* Object (package or buffer) is already built */
333 360
@@ -340,8 +367,6 @@ acpi_ds_build_internal_package_obj(struct acpi_walk_state *walk_state,
340 package. 367 package.
341 elements[i]); 368 elements[i]);
342 } 369 }
343
344 i++;
345 arg = arg->common.next; 370 arg = arg->common.next;
346 } 371 }
347 372
diff --git a/drivers/acpi/dispatcher/dswexec.c b/drivers/acpi/dispatcher/dswexec.c
index e522763bb692..74f6996db2d7 100644
--- a/drivers/acpi/dispatcher/dswexec.c
+++ b/drivers/acpi/dispatcher/dswexec.c
@@ -314,12 +314,13 @@ acpi_ds_exec_begin_op(struct acpi_walk_state *walk_state,
314 314
315 case AML_CLASS_EXECUTE: 315 case AML_CLASS_EXECUTE:
316 case AML_CLASS_CREATE: 316 case AML_CLASS_CREATE:
317
318 /* 317 /*
319 * Most operators with arguments. 318 * Most operators with arguments.
320 * Start a new result/operand state 319 * Start a new result/operand state
321 */ 320 */
322 status = acpi_ds_result_stack_push(walk_state); 321 if (walk_state->opcode != AML_CREATE_FIELD_OP) {
322 status = acpi_ds_result_stack_push(walk_state);
323 }
323 break; 324 break;
324 325
325 default: 326 default:
@@ -723,20 +724,6 @@ acpi_status acpi_ds_exec_end_op(struct acpi_walk_state *walk_state)
723 724
724 cleanup: 725 cleanup:
725 726
726 /* Invoke exception handler on error */
727
728 if (ACPI_FAILURE(status) &&
729 acpi_gbl_exception_handler && !(status & AE_CODE_CONTROL)) {
730 acpi_ex_exit_interpreter();
731 status = acpi_gbl_exception_handler(status,
732 walk_state->method_node->
733 name.integer,
734 walk_state->opcode,
735 walk_state->aml_offset,
736 NULL);
737 (void)acpi_ex_enter_interpreter();
738 }
739
740 if (walk_state->result_obj) { 727 if (walk_state->result_obj) {
741 /* Break to debugger to display result */ 728 /* Break to debugger to display result */
742 729
@@ -758,18 +745,14 @@ acpi_status acpi_ds_exec_end_op(struct acpi_walk_state *walk_state)
758 } 745 }
759#endif 746#endif
760 747
761 /* Always clear the object stack */ 748 /* Invoke exception handler on error */
762
763 walk_state->num_operands = 0;
764
765#ifdef ACPI_DISASSEMBLER
766
767 /* On error, display method locals/args */
768 749
769 if (ACPI_FAILURE(status)) { 750 if (ACPI_FAILURE(status)) {
770 acpi_dm_dump_method_info(status, walk_state, op); 751 status = acpi_ds_method_error(status, walk_state);
771 } 752 }
772#endif
773 753
754 /* Always clear the object stack */
755
756 walk_state->num_operands = 0;
774 return_ACPI_STATUS(status); 757 return_ACPI_STATUS(status);
775} 758}
diff --git a/drivers/acpi/dispatcher/dswload.c b/drivers/acpi/dispatcher/dswload.c
index 44d4f4bb2f92..441931cab08a 100644
--- a/drivers/acpi/dispatcher/dswload.c
+++ b/drivers/acpi/dispatcher/dswload.c
@@ -428,43 +428,54 @@ acpi_status acpi_ds_load1_end_op(struct acpi_walk_state *walk_state)
428 } 428 }
429 } 429 }
430 430
431 if (op->common.aml_opcode == AML_METHOD_OP) { 431 /*
432 /* 432 * If we are executing a method, do not create any namespace objects
433 * method_op pkg_length name_string method_flags term_list 433 * during the load phase, only during execution.
434 * 434 */
435 * Note: We must create the method node/object pair as soon as we 435 if (!walk_state->method_node) {
436 * see the method declaration. This allows later pass1 parsing 436 if (op->common.aml_opcode == AML_METHOD_OP) {
437 * of invocations of the method (need to know the number of 437 /*
438 * arguments.) 438 * method_op pkg_length name_string method_flags term_list
439 */ 439 *
440 ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH, 440 * Note: We must create the method node/object pair as soon as we
441 "LOADING-Method: State=%p Op=%p named_obj=%p\n", 441 * see the method declaration. This allows later pass1 parsing
442 walk_state, op, op->named.node)); 442 * of invocations of the method (need to know the number of
443 * arguments.)
444 */
445 ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
446 "LOADING-Method: State=%p Op=%p named_obj=%p\n",
447 walk_state, op, op->named.node));
443 448
444 if (!acpi_ns_get_attached_object(op->named.node)) { 449 if (!acpi_ns_get_attached_object(op->named.node)) {
445 walk_state->operands[0] = (void *)op->named.node; 450 walk_state->operands[0] =
446 walk_state->num_operands = 1; 451 ACPI_CAST_PTR(void, op->named.node);
452 walk_state->num_operands = 1;
447 453
448 status = 454 status =
449 acpi_ds_create_operands(walk_state, 455 acpi_ds_create_operands(walk_state,
450 op->common.value.arg); 456 op->common.value.
451 if (ACPI_SUCCESS(status)) { 457 arg);
452 status = acpi_ex_create_method(op->named.data, 458 if (ACPI_SUCCESS(status)) {
453 op->named.length, 459 status =
454 walk_state); 460 acpi_ex_create_method(op->named.
455 } 461 data,
456 walk_state->operands[0] = NULL; 462 op->named.
457 walk_state->num_operands = 0; 463 length,
464 walk_state);
465 }
466 walk_state->operands[0] = NULL;
467 walk_state->num_operands = 0;
458 468
459 if (ACPI_FAILURE(status)) { 469 if (ACPI_FAILURE(status)) {
460 return_ACPI_STATUS(status); 470 return_ACPI_STATUS(status);
471 }
461 } 472 }
462 } 473 }
463 } 474 }
464 475
465 /* Pop the scope stack */ 476 /* Pop the scope stack (only if loading a table) */
466 477
467 if (acpi_ns_opens_scope(object_type)) { 478 if (!walk_state->method_node && acpi_ns_opens_scope(object_type)) {
468 ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH, 479 ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
469 "(%s): Popping scope for Op %p\n", 480 "(%s): Popping scope for Op %p\n",
470 acpi_ut_get_type_name(object_type), op)); 481 acpi_ut_get_type_name(object_type), op));
@@ -1015,11 +1026,50 @@ acpi_status acpi_ds_load2_end_op(struct acpi_walk_state *walk_state)
1015 1026
1016 status = acpi_ds_create_node(walk_state, node, op); 1027 status = acpi_ds_create_node(walk_state, node, op);
1017 break; 1028 break;
1029
1030 case AML_METHOD_OP:
1031 /*
1032 * method_op pkg_length name_string method_flags term_list
1033 *
1034 * Note: We must create the method node/object pair as soon as we
1035 * see the method declaration. This allows later pass1 parsing
1036 * of invocations of the method (need to know the number of
1037 * arguments.)
1038 */
1039 ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
1040 "LOADING-Method: State=%p Op=%p named_obj=%p\n",
1041 walk_state, op, op->named.node));
1042
1043 if (!acpi_ns_get_attached_object(op->named.node)) {
1044 walk_state->operands[0] =
1045 ACPI_CAST_PTR(void, op->named.node);
1046 walk_state->num_operands = 1;
1047
1048 status =
1049 acpi_ds_create_operands(walk_state,
1050 op->common.value.
1051 arg);
1052 if (ACPI_SUCCESS(status)) {
1053 status =
1054 acpi_ex_create_method(op->named.
1055 data,
1056 op->named.
1057 length,
1058 walk_state);
1059 }
1060 walk_state->operands[0] = NULL;
1061 walk_state->num_operands = 0;
1062
1063 if (ACPI_FAILURE(status)) {
1064 return_ACPI_STATUS(status);
1065 }
1066 }
1067 break;
1068
1018#endif /* ACPI_NO_METHOD_EXECUTION */ 1069#endif /* ACPI_NO_METHOD_EXECUTION */
1019 1070
1020 default: 1071 default:
1021 /* All NAMED_COMPLEX opcodes must be handled above */ 1072 /* All NAMED_COMPLEX opcodes must be handled above */
1022 /* Note: Method objects were already created in Pass 1 */
1023 break; 1073 break;
1024 } 1074 }
1025 break; 1075 break;
diff --git a/drivers/acpi/executer/exoparg3.c b/drivers/acpi/executer/exoparg3.c
index 483365777670..2ea1c322970b 100644
--- a/drivers/acpi/executer/exoparg3.c
+++ b/drivers/acpi/executer/exoparg3.c
@@ -223,8 +223,8 @@ acpi_status acpi_ex_opcode_3A_1T_1R(struct acpi_walk_state *walk_state)
223 goto cleanup; 223 goto cleanup;
224 } 224 }
225 225
226 if (length > 0) { 226 if (buffer) {
227 /* Copy the portion requested */ 227 /* We have a buffer, copy the portion requested */
228 228
229 ACPI_MEMCPY(buffer, operand[0]->string.pointer + index, 229 ACPI_MEMCPY(buffer, operand[0]->string.pointer + index,
230 length); 230 length);
diff --git a/drivers/acpi/hardware/hwregs.c b/drivers/acpi/hardware/hwregs.c
index 536a7aea80c9..b243f20708b7 100644
--- a/drivers/acpi/hardware/hwregs.c
+++ b/drivers/acpi/hardware/hwregs.c
@@ -144,7 +144,8 @@ acpi_get_sleep_type_data(u8 sleep_state, u8 * sleep_type_a, u8 * sleep_type_b)
144 144
145 info.parameters = NULL; 145 info.parameters = NULL;
146 info.return_object = NULL; 146 info.return_object = NULL;
147 sleep_state_name = (char *)acpi_gbl_sleep_state_names[sleep_state]; 147 sleep_state_name =
148 ACPI_CAST_PTR(char, acpi_gbl_sleep_state_names[sleep_state]);
148 149
149 status = acpi_ns_evaluate_by_name(sleep_state_name, &info); 150 status = acpi_ns_evaluate_by_name(sleep_state_name, &info);
150 if (ACPI_FAILURE(status)) { 151 if (ACPI_FAILURE(status)) {
diff --git a/drivers/acpi/namespace/nsinit.c b/drivers/acpi/namespace/nsinit.c
index 0a08d2f04a06..efa3f4233736 100644
--- a/drivers/acpi/namespace/nsinit.c
+++ b/drivers/acpi/namespace/nsinit.c
@@ -336,23 +336,22 @@ acpi_ns_init_one_device(acpi_handle obj_handle,
336 struct acpi_parameter_info pinfo; 336 struct acpi_parameter_info pinfo;
337 u32 flags; 337 u32 flags;
338 acpi_status status; 338 acpi_status status;
339 struct acpi_namespace_node *ini_node;
340 struct acpi_namespace_node *device_node;
339 341
340 ACPI_FUNCTION_TRACE("ns_init_one_device"); 342 ACPI_FUNCTION_TRACE("ns_init_one_device");
341 343
342 pinfo.parameters = NULL; 344 device_node = acpi_ns_map_handle_to_node(obj_handle);
343 pinfo.parameter_type = ACPI_PARAM_ARGS; 345 if (!device_node) {
344
345 pinfo.node = acpi_ns_map_handle_to_node(obj_handle);
346 if (!pinfo.node) {
347 return_ACPI_STATUS(AE_BAD_PARAMETER); 346 return_ACPI_STATUS(AE_BAD_PARAMETER);
348 } 347 }
349 348
350 /* 349 /*
351 * We will run _STA/_INI on Devices, Processors and thermal_zones only 350 * We will run _STA/_INI on Devices, Processors and thermal_zones only
352 */ 351 */
353 if ((pinfo.node->type != ACPI_TYPE_DEVICE) && 352 if ((device_node->type != ACPI_TYPE_DEVICE) &&
354 (pinfo.node->type != ACPI_TYPE_PROCESSOR) && 353 (device_node->type != ACPI_TYPE_PROCESSOR) &&
355 (pinfo.node->type != ACPI_TYPE_THERMAL)) { 354 (device_node->type != ACPI_TYPE_THERMAL)) {
356 return_ACPI_STATUS(AE_OK); 355 return_ACPI_STATUS(AE_OK);
357 } 356 }
358 357
@@ -364,57 +363,69 @@ acpi_ns_init_one_device(acpi_handle obj_handle,
364 info->device_count++; 363 info->device_count++;
365 364
366 /* 365 /*
367 * Run _STA to determine if we can run _INI on the device. 366 * Check if the _INI method exists for this device -
367 * if _INI does not exist, there is no need to run _STA
368 * No _INI means device requires no initialization
369 */
370 status = acpi_ns_search_node(*ACPI_CAST_PTR(u32, METHOD_NAME__INI),
371 device_node, ACPI_TYPE_METHOD, &ini_node);
372 if (ACPI_FAILURE(status)) {
373 /* No _INI method found - move on to next device */
374
375 return_ACPI_STATUS(AE_OK);
376 }
377
378 /*
379 * Run _STA to determine if we can run _INI on the device -
380 * the device must be present before _INI can be run.
381 * However, _STA is not required - assume device present if no _STA
368 */ 382 */
369 ACPI_DEBUG_EXEC(acpi_ut_display_init_pathname(ACPI_TYPE_METHOD, 383 ACPI_DEBUG_EXEC(acpi_ut_display_init_pathname(ACPI_TYPE_METHOD,
370 pinfo.node, 384 device_node,
371 METHOD_NAME__STA)); 385 METHOD_NAME__STA));
372 status = acpi_ut_execute_STA(pinfo.node, &flags);
373 386
387 pinfo.node = device_node;
388 pinfo.parameters = NULL;
389 pinfo.parameter_type = ACPI_PARAM_ARGS;
390
391 status = acpi_ut_execute_STA(pinfo.node, &flags);
374 if (ACPI_FAILURE(status)) { 392 if (ACPI_FAILURE(status)) {
375 if (pinfo.node->type == ACPI_TYPE_DEVICE) { 393 /* Ignore error and move on to next device */
376 /* Ignore error and move on to next device */
377 394
378 return_ACPI_STATUS(AE_OK); 395 return_ACPI_STATUS(AE_OK);
379 } 396 }
380 397
381 /* _STA is not required for Processor or thermal_zone objects */ 398 if (flags != ACPI_UINT32_MAX) {
382 } else {
383 info->num_STA++; 399 info->num_STA++;
400 }
384 401
385 if (!(flags & 0x01)) { 402 if (!(flags & ACPI_STA_DEVICE_PRESENT)) {
386 /* Don't look at children of a not present device */ 403 /* Don't look at children of a not present device */
387 404
388 return_ACPI_STATUS(AE_CTRL_DEPTH); 405 return_ACPI_STATUS(AE_CTRL_DEPTH);
389 }
390 } 406 }
391 407
392 /* 408 /*
393 * The device is present. Run _INI. 409 * The device is present and _INI exists. Run the _INI method.
410 * (We already have the _INI node from above)
394 */ 411 */
395 ACPI_DEBUG_EXEC(acpi_ut_display_init_pathname(ACPI_TYPE_METHOD, 412 ACPI_DEBUG_EXEC(acpi_ut_display_init_pathname(ACPI_TYPE_METHOD,
396 pinfo.node, 413 pinfo.node,
397 METHOD_NAME__INI)); 414 METHOD_NAME__INI));
398 status = acpi_ns_evaluate_relative(METHOD_NAME__INI, &pinfo);
399 if (ACPI_FAILURE(status)) {
400 /* No _INI (AE_NOT_FOUND) means device requires no initialization */
401 415
402 if (status != AE_NOT_FOUND) { 416 pinfo.node = ini_node;
403 /* Ignore error and move on to next device */ 417 status = acpi_ns_evaluate_by_handle(&pinfo);
418 if (ACPI_FAILURE(status)) {
419 /* Ignore error and move on to next device */
404 420
405#ifdef ACPI_DEBUG_OUTPUT 421#ifdef ACPI_DEBUG_OUTPUT
406 char *scope_name = 422 char *scope_name = acpi_ns_get_external_pathname(ini_node);
407 acpi_ns_get_external_pathname(pinfo.node);
408 423
409 ACPI_DEBUG_PRINT((ACPI_DB_WARN, "%s._INI failed: %s\n", 424 ACPI_DEBUG_PRINT((ACPI_DB_WARN, "%s._INI failed: %s\n",
410 scope_name, 425 scope_name, acpi_format_exception(status)));
411 acpi_format_exception(status)));
412 426
413 ACPI_MEM_FREE(scope_name); 427 ACPI_MEM_FREE(scope_name);
414#endif 428#endif
415 }
416
417 status = AE_OK;
418 } else { 429 } else {
419 /* Delete any return object (especially if implicit_return is enabled) */ 430 /* Delete any return object (especially if implicit_return is enabled) */
420 431
@@ -434,5 +445,5 @@ acpi_ns_init_one_device(acpi_handle obj_handle,
434 acpi_gbl_init_handler(pinfo.node, ACPI_INIT_DEVICE_INI); 445 acpi_gbl_init_handler(pinfo.node, ACPI_INIT_DEVICE_INI);
435 } 446 }
436 447
437 return_ACPI_STATUS(status); 448 return_ACPI_STATUS(AE_OK);
438} 449}
diff --git a/drivers/acpi/namespace/nssearch.c b/drivers/acpi/namespace/nssearch.c
index 50a3ca5470ed..c1b1943d4670 100644
--- a/drivers/acpi/namespace/nssearch.c
+++ b/drivers/acpi/namespace/nssearch.c
@@ -99,8 +99,8 @@ acpi_ns_search_node(u32 target_name,
99 if (scope_name) { 99 if (scope_name) {
100 ACPI_DEBUG_PRINT((ACPI_DB_NAMES, 100 ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
101 "Searching %s (%p) For [%4.4s] (%s)\n", 101 "Searching %s (%p) For [%4.4s] (%s)\n",
102 scope_name, node, 102 scope_name, node, ACPI_CAST_PTR(char,
103 (char *)&target_name, 103 &target_name),
104 acpi_ut_get_type_name(type))); 104 acpi_ut_get_type_name(type)));
105 105
106 ACPI_MEM_FREE(scope_name); 106 ACPI_MEM_FREE(scope_name);
@@ -131,7 +131,7 @@ acpi_ns_search_node(u32 target_name,
131 */ 131 */
132 ACPI_DEBUG_PRINT((ACPI_DB_NAMES, 132 ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
133 "Name [%4.4s] (%s) %p found in scope [%4.4s] %p\n", 133 "Name [%4.4s] (%s) %p found in scope [%4.4s] %p\n",
134 (char *)&target_name, 134 ACPI_CAST_PTR(char, &target_name),
135 acpi_ut_get_type_name(next_node-> 135 acpi_ut_get_type_name(next_node->
136 type), 136 type),
137 next_node, 137 next_node,
@@ -160,7 +160,8 @@ acpi_ns_search_node(u32 target_name,
160 160
161 ACPI_DEBUG_PRINT((ACPI_DB_NAMES, 161 ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
162 "Name [%4.4s] (%s) not found in search in scope [%4.4s] %p first child %p\n", 162 "Name [%4.4s] (%s) not found in search in scope [%4.4s] %p first child %p\n",
163 (char *)&target_name, acpi_ut_get_type_name(type), 163 ACPI_CAST_PTR(char, &target_name),
164 acpi_ut_get_type_name(type),
164 acpi_ut_get_node_name(node), node, node->child)); 165 acpi_ut_get_node_name(node), node, node->child));
165 166
166 return_ACPI_STATUS(AE_NOT_FOUND); 167 return_ACPI_STATUS(AE_NOT_FOUND);
@@ -210,14 +211,14 @@ acpi_ns_search_parent_tree(u32 target_name,
210 */ 211 */
211 if (!parent_node) { 212 if (!parent_node) {
212 ACPI_DEBUG_PRINT((ACPI_DB_NAMES, "[%4.4s] has no parent\n", 213 ACPI_DEBUG_PRINT((ACPI_DB_NAMES, "[%4.4s] has no parent\n",
213 (char *)&target_name)); 214 ACPI_CAST_PTR(char, &target_name)));
214 return_ACPI_STATUS(AE_NOT_FOUND); 215 return_ACPI_STATUS(AE_NOT_FOUND);
215 } 216 }
216 217
217 if (acpi_ns_local(type)) { 218 if (acpi_ns_local(type)) {
218 ACPI_DEBUG_PRINT((ACPI_DB_NAMES, 219 ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
219 "[%4.4s] type [%s] must be local to this scope (no parent search)\n", 220 "[%4.4s] type [%s] must be local to this scope (no parent search)\n",
220 (char *)&target_name, 221 ACPI_CAST_PTR(char, &target_name),
221 acpi_ut_get_type_name(type))); 222 acpi_ut_get_type_name(type)));
222 return_ACPI_STATUS(AE_NOT_FOUND); 223 return_ACPI_STATUS(AE_NOT_FOUND);
223 } 224 }
@@ -227,7 +228,7 @@ acpi_ns_search_parent_tree(u32 target_name,
227 ACPI_DEBUG_PRINT((ACPI_DB_NAMES, 228 ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
228 "Searching parent [%4.4s] for [%4.4s]\n", 229 "Searching parent [%4.4s] for [%4.4s]\n",
229 acpi_ut_get_node_name(parent_node), 230 acpi_ut_get_node_name(parent_node),
230 (char *)&target_name)); 231 ACPI_CAST_PTR(char, &target_name)));
231 232
232 /* 233 /*
233 * Search parents until target is found or we have backed up to the root 234 * Search parents until target is found or we have backed up to the root
@@ -360,7 +361,7 @@ acpi_ns_search_and_enter(u32 target_name,
360 if (interpreter_mode == ACPI_IMODE_EXECUTE) { 361 if (interpreter_mode == ACPI_IMODE_EXECUTE) {
361 ACPI_DEBUG_PRINT((ACPI_DB_NAMES, 362 ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
362 "%4.4s Not found in %p [Not adding]\n", 363 "%4.4s Not found in %p [Not adding]\n",
363 (char *)&target_name, node)); 364 ACPI_CAST_PTR(char, &target_name), node));
364 365
365 return_ACPI_STATUS(AE_NOT_FOUND); 366 return_ACPI_STATUS(AE_NOT_FOUND);
366 } 367 }
diff --git a/drivers/acpi/namespace/nsxfeval.c b/drivers/acpi/namespace/nsxfeval.c
index 8167af1fa57b..75b137a6a3c9 100644
--- a/drivers/acpi/namespace/nsxfeval.c
+++ b/drivers/acpi/namespace/nsxfeval.c
@@ -473,8 +473,8 @@ acpi_ns_get_device_callback(acpi_handle obj_handle,
473 return (AE_CTRL_DEPTH); 473 return (AE_CTRL_DEPTH);
474 } 474 }
475 475
476 if (!(flags & 0x01)) { 476 if (!(flags & ACPI_STA_DEVICE_PRESENT)) {
477 /* Don't return at the device or children of the device if not there */ 477 /* Don't examine children of the device if not present */
478 478
479 return (AE_CTRL_DEPTH); 479 return (AE_CTRL_DEPTH);
480 } 480 }
diff --git a/drivers/acpi/parser/psargs.c b/drivers/acpi/parser/psargs.c
index 6eae35febccd..e6d4cb9fd303 100644
--- a/drivers/acpi/parser/psargs.c
+++ b/drivers/acpi/parser/psargs.c
@@ -45,6 +45,7 @@
45#include <acpi/acparser.h> 45#include <acpi/acparser.h>
46#include <acpi/amlcode.h> 46#include <acpi/amlcode.h>
47#include <acpi/acnamesp.h> 47#include <acpi/acnamesp.h>
48#include <acpi/acdispat.h>
48 49
49#define _COMPONENT ACPI_PARSER 50#define _COMPONENT ACPI_PARSER
50ACPI_MODULE_NAME("psargs") 51ACPI_MODULE_NAME("psargs")
@@ -211,7 +212,7 @@ char *acpi_ps_get_next_namestring(struct acpi_parse_state *parser_state)
211 * Arg - Where the namepath will be stored 212 * Arg - Where the namepath will be stored
212 * arg_count - If the namepath points to a control method 213 * arg_count - If the namepath points to a control method
213 * the method's argument is returned here. 214 * the method's argument is returned here.
214 * method_call - Whether the namepath can possibly be the 215 * possible_method_call - Whether the namepath can possibly be the
215 * start of a method call 216 * start of a method call
216 * 217 *
217 * RETURN: Status 218 * RETURN: Status
@@ -227,11 +228,11 @@ char *acpi_ps_get_next_namestring(struct acpi_parse_state *parser_state)
227acpi_status 228acpi_status
228acpi_ps_get_next_namepath(struct acpi_walk_state *walk_state, 229acpi_ps_get_next_namepath(struct acpi_walk_state *walk_state,
229 struct acpi_parse_state *parser_state, 230 struct acpi_parse_state *parser_state,
230 union acpi_parse_object *arg, u8 method_call) 231 union acpi_parse_object *arg, u8 possible_method_call)
231{ 232{
232 char *path; 233 char *path;
233 union acpi_parse_object *name_op; 234 union acpi_parse_object *name_op;
234 acpi_status status = AE_OK; 235 acpi_status status;
235 union acpi_operand_object *method_desc; 236 union acpi_operand_object *method_desc;
236 struct acpi_namespace_node *node; 237 struct acpi_namespace_node *node;
237 union acpi_generic_state scope_info; 238 union acpi_generic_state scope_info;
@@ -239,114 +240,127 @@ acpi_ps_get_next_namepath(struct acpi_walk_state *walk_state,
239 ACPI_FUNCTION_TRACE("ps_get_next_namepath"); 240 ACPI_FUNCTION_TRACE("ps_get_next_namepath");
240 241
241 path = acpi_ps_get_next_namestring(parser_state); 242 path = acpi_ps_get_next_namestring(parser_state);
243 acpi_ps_init_op(arg, AML_INT_NAMEPATH_OP);
242 244
243 /* Null path case is allowed */ 245 /* Null path case is allowed, just exit */
244 246
245 if (path) { 247 if (!path) {
246 /* 248 arg->common.value.name = path;
247 * Lookup the name in the internal namespace 249 return_ACPI_STATUS(AE_OK);
248 */ 250 }
249 scope_info.scope.node = NULL;
250 node = parser_state->start_node;
251 if (node) {
252 scope_info.scope.node = node;
253 }
254 251
255 /* 252 /* Setup search scope info */
256 * Lookup object. We don't want to add anything new to the namespace 253
257 * here, however. So we use MODE_EXECUTE. Allow searching of the 254 scope_info.scope.node = NULL;
258 * parent tree, but don't open a new scope -- we just want to lookup the 255 node = parser_state->start_node;
259 * object (MUST BE mode EXECUTE to perform upsearch) 256 if (node) {
260 */ 257 scope_info.scope.node = node;
261 status = acpi_ns_lookup(&scope_info, path, ACPI_TYPE_ANY, 258 }
262 ACPI_IMODE_EXECUTE,
263 ACPI_NS_SEARCH_PARENT |
264 ACPI_NS_DONT_OPEN_SCOPE, NULL, &node);
265 if (ACPI_SUCCESS(status) && method_call) {
266 if (node->type == ACPI_TYPE_METHOD) {
267 /* This name is actually a control method invocation */
268
269 method_desc = acpi_ns_get_attached_object(node);
270 ACPI_DEBUG_PRINT((ACPI_DB_PARSE,
271 "Control Method - %p Desc %p Path=%p\n",
272 node, method_desc, path));
273
274 name_op = acpi_ps_alloc_op(AML_INT_NAMEPATH_OP);
275 if (!name_op) {
276 return_ACPI_STATUS(AE_NO_MEMORY);
277 }
278 259
279 /* Change arg into a METHOD CALL and attach name to it */ 260 /*
261 * Lookup the name in the internal namespace. We don't want to add
262 * anything new to the namespace here, however, so we use MODE_EXECUTE.
263 * Allow searching of the parent tree, but don't open a new scope -
264 * we just want to lookup the object (must be mode EXECUTE to perform
265 * the upsearch)
266 */
267 status =
268 acpi_ns_lookup(&scope_info, path, ACPI_TYPE_ANY, ACPI_IMODE_EXECUTE,
269 ACPI_NS_SEARCH_PARENT | ACPI_NS_DONT_OPEN_SCOPE,
270 NULL, &node);
280 271
281 acpi_ps_init_op(arg, AML_INT_METHODCALL_OP); 272 /*
282 name_op->common.value.name = path; 273 * If this name is a control method invocation, we must
274 * setup the method call
275 */
276 if (ACPI_SUCCESS(status) &&
277 possible_method_call && (node->type == ACPI_TYPE_METHOD)) {
278 /* This name is actually a control method invocation */
283 279
284 /* Point METHODCALL/NAME to the METHOD Node */ 280 method_desc = acpi_ns_get_attached_object(node);
281 ACPI_DEBUG_PRINT((ACPI_DB_PARSE,
282 "Control Method - %p Desc %p Path=%p\n", node,
283 method_desc, path));
285 284
286 name_op->common.node = node; 285 name_op = acpi_ps_alloc_op(AML_INT_NAMEPATH_OP);
287 acpi_ps_append_arg(arg, name_op); 286 if (!name_op) {
287 return_ACPI_STATUS(AE_NO_MEMORY);
288 }
288 289
289 if (!method_desc) { 290 /* Change Arg into a METHOD CALL and attach name to it */
290 ACPI_REPORT_ERROR(("ps_get_next_namepath: Control Method %p has no attached object\n", node));
291 return_ACPI_STATUS(AE_AML_INTERNAL);
292 }
293 291
294 ACPI_DEBUG_PRINT((ACPI_DB_PARSE, 292 acpi_ps_init_op(arg, AML_INT_METHODCALL_OP);
295 "Control Method - %p Args %X\n", 293 name_op->common.value.name = path;
296 node,
297 method_desc->method.
298 param_count));
299 294
300 /* Get the number of arguments to expect */ 295 /* Point METHODCALL/NAME to the METHOD Node */
301 296
302 walk_state->arg_count = 297 name_op->common.node = node;
303 method_desc->method.param_count; 298 acpi_ps_append_arg(arg, name_op);
304 return_ACPI_STATUS(AE_OK);
305 }
306 299
307 /* 300 if (!method_desc) {
308 * Else this is normal named object reference. 301 ACPI_REPORT_ERROR(("ps_get_next_namepath: Control Method %p has no attached object\n", node));
309 * Just init the NAMEPATH object with the pathname. 302 return_ACPI_STATUS(AE_AML_INTERNAL);
310 * (See code below)
311 */
312 } 303 }
313 304
314 if (ACPI_FAILURE(status)) { 305 ACPI_DEBUG_PRINT((ACPI_DB_PARSE,
315 /* 306 "Control Method - %p Args %X\n",
316 * 1) Any error other than NOT_FOUND is always severe 307 node, method_desc->method.param_count));
317 * 2) NOT_FOUND is only important if we are executing a method. 308
318 * 3) If executing a cond_ref_of opcode, NOT_FOUND is ok. 309 /* Get the number of arguments to expect */
319 */ 310
320 if ((((walk_state-> 311 walk_state->arg_count = method_desc->method.param_count;
321 parse_flags & ACPI_PARSE_MODE_MASK) == 312 return_ACPI_STATUS(AE_OK);
322 ACPI_PARSE_EXECUTE) && (status == AE_NOT_FOUND)
323 && (walk_state->op->common.aml_opcode !=
324 AML_COND_REF_OF_OP))
325 || (status != AE_NOT_FOUND)) {
326 ACPI_REPORT_NSERROR(path, status);
327
328 acpi_os_printf
329 ("search_node %p start_node %p return_node %p\n",
330 scope_info.scope.node,
331 parser_state->start_node, node);
332 } else {
333 /*
334 * We got a NOT_FOUND during table load or we encountered
335 * a cond_ref_of(x) where the target does not exist.
336 * Either case is ok
337 */
338 status = AE_OK;
339 }
340 }
341 } 313 }
342 314
343 /* 315 /*
344 * Regardless of success/failure above, 316 * Special handling if the name was not found during the lookup -
345 * Just initialize the Op with the pathname. 317 * some not_found cases are allowed
346 */ 318 */
347 acpi_ps_init_op(arg, AML_INT_NAMEPATH_OP); 319 if (status == AE_NOT_FOUND) {
348 arg->common.value.name = path; 320 /* 1) not_found is ok during load pass 1/2 (allow forward references) */
321
322 if ((walk_state->parse_flags & ACPI_PARSE_MODE_MASK) !=
323 ACPI_PARSE_EXECUTE) {
324 status = AE_OK;
325 }
326
327 /* 2) not_found during a cond_ref_of(x) is ok by definition */
328
329 else if (walk_state->op->common.aml_opcode ==
330 AML_COND_REF_OF_OP) {
331 status = AE_OK;
332 }
333
334 /*
335 * 3) not_found while building a Package is ok at this point, we
336 * may flag as an error later if slack mode is not enabled.
337 * (Some ASL code depends on allowing this behavior)
338 */
339 else if ((arg->common.parent) &&
340 ((arg->common.parent->common.aml_opcode ==
341 AML_PACKAGE_OP)
342 || (arg->common.parent->common.aml_opcode ==
343 AML_VAR_PACKAGE_OP))) {
344 status = AE_OK;
345 }
346 }
347
348 /* Final exception check (may have been changed from code above) */
349
350 if (ACPI_FAILURE(status)) {
351 ACPI_REPORT_NSERROR(path, status);
352
353 if ((walk_state->parse_flags & ACPI_PARSE_MODE_MASK) ==
354 ACPI_PARSE_EXECUTE) {
355 /* Report a control method execution error */
349 356
357 status = acpi_ds_method_error(status, walk_state);
358 }
359 }
360
361 /* Save the namepath */
362
363 arg->common.value.name = path;
350 return_ACPI_STATUS(status); 364 return_ACPI_STATUS(status);
351} 365}
352 366
diff --git a/drivers/acpi/parser/psloop.c b/drivers/acpi/parser/psloop.c
index 088d33999d90..e81e51b8b3ae 100644
--- a/drivers/acpi/parser/psloop.c
+++ b/drivers/acpi/parser/psloop.c
@@ -704,6 +704,15 @@ acpi_status acpi_ps_parse_loop(struct acpi_walk_state *walk_state)
704 acpi_ps_pop_scope(parser_state, &op, 704 acpi_ps_pop_scope(parser_state, &op,
705 &walk_state->arg_types, 705 &walk_state->arg_types,
706 &walk_state->arg_count); 706 &walk_state->arg_count);
707
708 if (op->common.aml_opcode != AML_WHILE_OP) {
709 status2 =
710 acpi_ds_result_stack_pop
711 (walk_state);
712 if (ACPI_FAILURE(status2)) {
713 return_ACPI_STATUS(status2);
714 }
715 }
707 } 716 }
708 717
709 /* Close this iteration of the While loop */ 718 /* Close this iteration of the While loop */
diff --git a/drivers/acpi/parser/psparse.c b/drivers/acpi/parser/psparse.c
index 7cfa7eb0dfc7..f0979b2956f2 100644
--- a/drivers/acpi/parser/psparse.c
+++ b/drivers/acpi/parser/psparse.c
@@ -333,7 +333,6 @@ acpi_ps_next_parse_state(struct acpi_walk_state *walk_state,
333 333
334 switch (callback_status) { 334 switch (callback_status) {
335 case AE_CTRL_TERMINATE: 335 case AE_CTRL_TERMINATE:
336
337 /* 336 /*
338 * A control method was terminated via a RETURN statement. 337 * A control method was terminated via a RETURN statement.
339 * The walk of this method is complete. 338 * The walk of this method is complete.
@@ -346,13 +345,19 @@ acpi_ps_next_parse_state(struct acpi_walk_state *walk_state,
346 345
347 parser_state->aml = walk_state->aml_last_while; 346 parser_state->aml = walk_state->aml_last_while;
348 walk_state->control_state->common.value = FALSE; 347 walk_state->control_state->common.value = FALSE;
349 status = AE_CTRL_BREAK; 348 status = acpi_ds_result_stack_pop(walk_state);
349 if (ACPI_SUCCESS(status)) {
350 status = AE_CTRL_BREAK;
351 }
350 break; 352 break;
351 353
352 case AE_CTRL_CONTINUE: 354 case AE_CTRL_CONTINUE:
353 355
354 parser_state->aml = walk_state->aml_last_while; 356 parser_state->aml = walk_state->aml_last_while;
355 status = AE_CTRL_CONTINUE; 357 status = acpi_ds_result_stack_pop(walk_state);
358 if (ACPI_SUCCESS(status)) {
359 status = AE_CTRL_CONTINUE;
360 }
356 break; 361 break;
357 362
358 case AE_CTRL_PENDING: 363 case AE_CTRL_PENDING:
@@ -369,16 +374,18 @@ acpi_ps_next_parse_state(struct acpi_walk_state *walk_state,
369#endif 374#endif
370 375
371 case AE_CTRL_TRUE: 376 case AE_CTRL_TRUE:
372
373 /* 377 /*
374 * Predicate of an IF was true, and we are at the matching ELSE. 378 * Predicate of an IF was true, and we are at the matching ELSE.
375 * Just close out this package 379 * Just close out this package
376 */ 380 */
377 parser_state->aml = acpi_ps_get_next_package_end(parser_state); 381 parser_state->aml = acpi_ps_get_next_package_end(parser_state);
382 status = acpi_ds_result_stack_pop(walk_state);
383 if (ACPI_SUCCESS(status)) {
384 status = AE_CTRL_PENDING;
385 }
378 break; 386 break;
379 387
380 case AE_CTRL_FALSE: 388 case AE_CTRL_FALSE:
381
382 /* 389 /*
383 * Either an IF/WHILE Predicate was false or we encountered a BREAK 390 * Either an IF/WHILE Predicate was false or we encountered a BREAK
384 * opcode. In both cases, we do not execute the rest of the 391 * opcode. In both cases, we do not execute the rest of the
diff --git a/drivers/acpi/resources/rsdump.c b/drivers/acpi/resources/rsdump.c
index cebd890d3db5..c24e3eb658c3 100644
--- a/drivers/acpi/resources/rsdump.c
+++ b/drivers/acpi/resources/rsdump.c
@@ -43,7 +43,6 @@
43 43
44#include <acpi/acpi.h> 44#include <acpi/acpi.h>
45#include <acpi/acresrc.h> 45#include <acpi/acresrc.h>
46#include <acpi/acdisasm.h>
47 46
48#define _COMPONENT ACPI_RESOURCES 47#define _COMPONENT ACPI_RESOURCES
49ACPI_MODULE_NAME("rsdump") 48ACPI_MODULE_NAME("rsdump")
diff --git a/drivers/acpi/utilities/utalloc.c b/drivers/acpi/utilities/utalloc.c
index e04b6119a4d7..b11b7ed788c6 100644
--- a/drivers/acpi/utilities/utalloc.c
+++ b/drivers/acpi/utilities/utalloc.c
@@ -47,7 +47,7 @@
47ACPI_MODULE_NAME("utalloc") 47ACPI_MODULE_NAME("utalloc")
48 48
49/* Local prototypes */ 49/* Local prototypes */
50#ifdef ACPI_DBG_TRACK_ALLOCATIONS 50#ifdef ACPI_DBG_TRACK_ALLOCATIONS
51static struct acpi_debug_mem_block *acpi_ut_find_allocation(void *allocation); 51static struct acpi_debug_mem_block *acpi_ut_find_allocation(void *allocation);
52 52
53static acpi_status 53static acpi_status
@@ -58,9 +58,7 @@ acpi_ut_track_allocation(struct acpi_debug_mem_block *address,
58static acpi_status 58static acpi_status
59acpi_ut_remove_allocation(struct acpi_debug_mem_block *address, 59acpi_ut_remove_allocation(struct acpi_debug_mem_block *address,
60 u32 component, char *module, u32 line); 60 u32 component, char *module, u32 line);
61#endif /* ACPI_DBG_TRACK_ALLOCATIONS */
62 61
63#ifdef ACPI_DBG_TRACK_ALLOCATIONS
64static acpi_status 62static acpi_status
65acpi_ut_create_list(char *list_name, 63acpi_ut_create_list(char *list_name,
66 u16 object_size, struct acpi_memory_list **return_cache); 64 u16 object_size, struct acpi_memory_list **return_cache);
diff --git a/drivers/acpi/utilities/uteval.c b/drivers/acpi/utilities/uteval.c
index 7b81d5ef3c32..cd63a2d93fe3 100644
--- a/drivers/acpi/utilities/uteval.c
+++ b/drivers/acpi/utilities/uteval.c
@@ -95,7 +95,9 @@ acpi_status acpi_ut_osi_implementation(struct acpi_walk_state *walk_state)
95 95
96 for (i = 0; i < ACPI_NUM_OSI_STRINGS; i++) { 96 for (i = 0; i < ACPI_NUM_OSI_STRINGS; i++) {
97 if (!ACPI_STRCMP(string_desc->string.pointer, 97 if (!ACPI_STRCMP(string_desc->string.pointer,
98 (char *)acpi_gbl_valid_osi_strings[i])) { 98 ACPI_CAST_PTR(char,
99 acpi_gbl_valid_osi_strings[i])))
100 {
99 /* This string is supported */ 101 /* This string is supported */
100 102
101 return_desc->integer.value = 0xFFFFFFFF; 103 return_desc->integer.value = 0xFFFFFFFF;
@@ -592,7 +594,7 @@ acpi_ut_execute_STA(struct acpi_namespace_node *device_node, u32 * flags)
592 "_STA on %4.4s was not found, assuming device is present\n", 594 "_STA on %4.4s was not found, assuming device is present\n",
593 acpi_ut_get_node_name(device_node))); 595 acpi_ut_get_node_name(device_node)));
594 596
595 *flags = 0x0F; 597 *flags = ACPI_UINT32_MAX;
596 status = AE_OK; 598 status = AE_OK;
597 } 599 }
598 600
@@ -637,17 +639,17 @@ acpi_ut_execute_sxds(struct acpi_namespace_node *device_node, u8 * highest)
637 for (i = 0; i < 4; i++) { 639 for (i = 0; i < 4; i++) {
638 highest[i] = 0xFF; 640 highest[i] = 0xFF;
639 status = acpi_ut_evaluate_object(device_node, 641 status = acpi_ut_evaluate_object(device_node,
640 (char *) 642 ACPI_CAST_PTR(char,
641 acpi_gbl_highest_dstate_names 643 acpi_gbl_highest_dstate_names
642 [i], ACPI_BTYPE_INTEGER, 644 [i]),
643 &obj_desc); 645 ACPI_BTYPE_INTEGER, &obj_desc);
644 if (ACPI_FAILURE(status)) { 646 if (ACPI_FAILURE(status)) {
645 if (status != AE_NOT_FOUND) { 647 if (status != AE_NOT_FOUND) {
646 ACPI_DEBUG_PRINT((ACPI_DB_EXEC, 648 ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
647 "%s on Device %4.4s, %s\n", 649 "%s on Device %4.4s, %s\n",
648 (char *) 650 ACPI_CAST_PTR(char,
649 acpi_gbl_highest_dstate_names 651 acpi_gbl_highest_dstate_names
650 [i], 652 [i]),
651 acpi_ut_get_node_name 653 acpi_ut_get_node_name
652 (device_node), 654 (device_node),
653 acpi_format_exception 655 acpi_format_exception
diff --git a/drivers/acpi/utilities/utglobal.c b/drivers/acpi/utilities/utglobal.c
index 6828c7aefa8a..7c59c2b0d953 100644
--- a/drivers/acpi/utilities/utglobal.c
+++ b/drivers/acpi/utilities/utglobal.c
@@ -485,7 +485,7 @@ char *acpi_ut_get_region_name(u8 space_id)
485 return ("invalid_space_id"); 485 return ("invalid_space_id");
486 } 486 }
487 487
488 return ((char *)acpi_gbl_region_types[space_id]); 488 return (ACPI_CAST_PTR(char, acpi_gbl_region_types[space_id]));
489} 489}
490 490
491/******************************************************************************* 491/*******************************************************************************
@@ -690,11 +690,12 @@ char *acpi_ut_get_descriptor_name(void *object)
690 } 690 }
691 691
692 if (ACPI_GET_DESCRIPTOR_TYPE(object) > ACPI_DESC_TYPE_MAX) { 692 if (ACPI_GET_DESCRIPTOR_TYPE(object) > ACPI_DESC_TYPE_MAX) {
693 return ((char *)acpi_gbl_bad_type); 693 return (ACPI_CAST_PTR(char, acpi_gbl_bad_type));
694 } 694 }
695 695
696 return ((char *) 696 return (ACPI_CAST_PTR(char,
697 acpi_gbl_desc_type_names[ACPI_GET_DESCRIPTOR_TYPE(object)]); 697 acpi_gbl_desc_type_names[ACPI_GET_DESCRIPTOR_TYPE
698 (object)]));
698 699
699} 700}
700 701
diff --git a/drivers/acpi/utilities/utmisc.c b/drivers/acpi/utilities/utmisc.c
index 64dd64b1aa18..48d511d5c04b 100644
--- a/drivers/acpi/utilities/utmisc.c
+++ b/drivers/acpi/utilities/utmisc.c
@@ -179,7 +179,7 @@ void acpi_ut_release_owner_id(acpi_owner_id * owner_id_ptr)
179 179
180 /* Zero is not a valid owner_iD */ 180 /* Zero is not a valid owner_iD */
181 181
182 if ((owner_id == 0) || (owner_id > 255)) { 182 if (owner_id == 0) {
183 ACPI_REPORT_ERROR(("Invalid owner_id: %2.2X\n", owner_id)); 183 ACPI_REPORT_ERROR(("Invalid owner_id: %2.2X\n", owner_id));
184 return_VOID; 184 return_VOID;
185 } 185 }
diff --git a/drivers/acpi/utilities/utresrc.c b/drivers/acpi/utilities/utresrc.c
index 6c0ce7b12194..eaf0edec6efe 100644
--- a/drivers/acpi/utilities/utresrc.c
+++ b/drivers/acpi/utilities/utresrc.c
@@ -47,6 +47,115 @@
47#define _COMPONENT ACPI_UTILITIES 47#define _COMPONENT ACPI_UTILITIES
48ACPI_MODULE_NAME("utmisc") 48ACPI_MODULE_NAME("utmisc")
49 49
50#if defined(ACPI_DISASSEMBLER) || defined (ACPI_DEBUGGER)
51/*
52 * Strings used to decode resource descriptors.
53 * Used by both the disasssembler and the debugger resource dump routines
54 */
55const char *acpi_gbl_BMdecode[2] = {
56 "not_bus_master",
57 "bus_master"
58};
59
60const char *acpi_gbl_config_decode[4] = {
61 "0 - Good Configuration",
62 "1 - Acceptable Configuration",
63 "2 - Suboptimal Configuration",
64 "3 - ***Invalid Configuration***",
65};
66
67const char *acpi_gbl_consume_decode[2] = {
68 "resource_producer",
69 "resource_consumer"
70};
71
72const char *acpi_gbl_DECdecode[2] = {
73 "pos_decode",
74 "sub_decode"
75};
76
77const char *acpi_gbl_HEdecode[2] = {
78 "Level",
79 "Edge"
80};
81
82const char *acpi_gbl_io_decode[2] = {
83 "Decode10",
84 "Decode16"
85};
86
87const char *acpi_gbl_LLdecode[2] = {
88 "active_high",
89 "active_low"
90};
91
92const char *acpi_gbl_max_decode[2] = {
93 "max_not_fixed",
94 "max_fixed"
95};
96
97const char *acpi_gbl_MEMdecode[4] = {
98 "non_cacheable",
99 "Cacheable",
100 "write_combining",
101 "Prefetchable"
102};
103
104const char *acpi_gbl_min_decode[2] = {
105 "min_not_fixed",
106 "min_fixed"
107};
108
109const char *acpi_gbl_MTPdecode[4] = {
110 "address_range_memory",
111 "address_range_reserved",
112 "address_range_aCPI",
113 "address_range_nVS"
114};
115
116const char *acpi_gbl_RNGdecode[4] = {
117 "invalid_ranges",
118 "non_iSAonly_ranges",
119 "ISAonly_ranges",
120 "entire_range"
121};
122
123const char *acpi_gbl_RWdecode[2] = {
124 "read_only",
125 "read_write"
126};
127
128const char *acpi_gbl_SHRdecode[2] = {
129 "Exclusive",
130 "Shared"
131};
132
133const char *acpi_gbl_SIZdecode[4] = {
134 "Transfer8",
135 "Transfer8_16",
136 "Transfer16",
137 "invalid_size"
138};
139
140const char *acpi_gbl_TRSdecode[2] = {
141 "dense_translation",
142 "sparse_translation"
143};
144
145const char *acpi_gbl_TTPdecode[2] = {
146 "type_static",
147 "type_translation"
148};
149
150const char *acpi_gbl_TYPdecode[4] = {
151 "Compatibility",
152 "type_a",
153 "type_b",
154 "type_f"
155};
156
157#endif
158
50/* 159/*
51 * Base sizes of the raw AML resource descriptors, indexed by resource type. 160 * Base sizes of the raw AML resource descriptors, indexed by resource type.
52 * Zero indicates a reserved (and therefore invalid) resource type. 161 * Zero indicates a reserved (and therefore invalid) resource type.
diff --git a/include/acpi/acconfig.h b/include/acpi/acconfig.h
index f48b9ee9a876..1f2477eb95fe 100644
--- a/include/acpi/acconfig.h
+++ b/include/acpi/acconfig.h
@@ -63,7 +63,7 @@
63 63
64/* Current ACPICA subsystem version in YYYYMMDD format */ 64/* Current ACPICA subsystem version in YYYYMMDD format */
65 65
66#define ACPI_CA_VERSION 0x20051202 66#define ACPI_CA_VERSION 0x20051216
67 67
68/* 68/*
69 * OS name, used for the _OS object. The _OS object is essentially obsolete, 69 * OS name, used for the _OS object. The _OS object is essentially obsolete,
diff --git a/include/acpi/acdisasm.h b/include/acpi/acdisasm.h
index 99250ee1b9d1..0a8f49f5d2f1 100644
--- a/include/acpi/acdisasm.h
+++ b/include/acpi/acdisasm.h
@@ -57,27 +57,11 @@ struct acpi_external_list {
57}; 57};
58 58
59extern struct acpi_external_list *acpi_gbl_external_list; 59extern struct acpi_external_list *acpi_gbl_external_list;
60extern const char *acpi_gbl_io_decode[2]; 60
61/* Strings used for decoding flags to ASL keywords */
62
61extern const char *acpi_gbl_word_decode[4]; 63extern const char *acpi_gbl_word_decode[4];
62extern const char *acpi_gbl_consume_decode[2];
63extern const char *acpi_gbl_config_decode[4];
64extern const char *acpi_gbl_min_decode[2];
65extern const char *acpi_gbl_max_decode[2];
66extern const char *acpi_gbl_DECdecode[2];
67extern const char *acpi_gbl_RNGdecode[4];
68extern const char *acpi_gbl_MEMdecode[4];
69extern const char *acpi_gbl_RWdecode[2];
70extern const char *acpi_gbl_irq_decode[2]; 64extern const char *acpi_gbl_irq_decode[2];
71extern const char *acpi_gbl_HEdecode[2];
72extern const char *acpi_gbl_LLdecode[2];
73extern const char *acpi_gbl_SHRdecode[2];
74extern const char *acpi_gbl_TYPdecode[4];
75extern const char *acpi_gbl_BMdecode[2];
76extern const char *acpi_gbl_SIZdecode[4];
77extern const char *acpi_gbl_TTPdecode[2];
78extern const char *acpi_gbl_MTPdecode[4];
79extern const char *acpi_gbl_TRSdecode[2];
80
81extern const char *acpi_gbl_lock_rule[ACPI_NUM_LOCK_RULES]; 65extern const char *acpi_gbl_lock_rule[ACPI_NUM_LOCK_RULES];
82extern const char *acpi_gbl_access_types[ACPI_NUM_ACCESS_TYPES]; 66extern const char *acpi_gbl_access_types[ACPI_NUM_ACCESS_TYPES];
83extern const char *acpi_gbl_update_rules[ACPI_NUM_UPDATE_RULES]; 67extern const char *acpi_gbl_update_rules[ACPI_NUM_UPDATE_RULES];
diff --git a/include/acpi/acdispat.h b/include/acpi/acdispat.h
index 065f24a77cfc..cc6407eef701 100644
--- a/include/acpi/acdispat.h
+++ b/include/acpi/acdispat.h
@@ -201,6 +201,9 @@ acpi_ds_begin_method_execution(struct acpi_namespace_node *method_node,
201 union acpi_operand_object *obj_desc, 201 union acpi_operand_object *obj_desc,
202 struct acpi_namespace_node *calling_method_node); 202 struct acpi_namespace_node *calling_method_node);
203 203
204acpi_status
205acpi_ds_method_error(acpi_status status, struct acpi_walk_state *walk_state);
206
204/* 207/*
205 * dsinit 208 * dsinit
206 */ 209 */
diff --git a/include/acpi/acglobal.h b/include/acpi/acglobal.h
index 3f37560c26ab..dfb3b2493ae5 100644
--- a/include/acpi/acglobal.h
+++ b/include/acpi/acglobal.h
@@ -98,11 +98,15 @@ ACPI_EXTERN u32 acpi_gbl_trace_flags;
98/* 98/*
99 * Enable "slack" in the AML interpreter? Default is FALSE, and the 99 * Enable "slack" in the AML interpreter? Default is FALSE, and the
100 * interpreter strictly follows the ACPI specification. Setting to TRUE 100 * interpreter strictly follows the ACPI specification. Setting to TRUE
101 * allows the interpreter to forgive certain bad AML constructs. Currently: 101 * allows the interpreter to ignore certain errors and/or bad AML constructs.
102 *
103 * Currently, these features are enabled by this flag:
104 *
102 * 1) Allow "implicit return" of last value in a control method 105 * 1) Allow "implicit return" of last value in a control method
103 * 2) Allow access beyond end of operation region 106 * 2) Allow access beyond the end of an operation region
104 * 3) Allow access to uninitialized locals/args (auto-init to integer 0) 107 * 3) Allow access to uninitialized locals/args (auto-init to integer 0)
105 * 4) Allow ANY object type to be a source operand for the Store() operator 108 * 4) Allow ANY object type to be a source operand for the Store() operator
109 * 5) Allow unresolved references (invalid target name) in package objects
106 */ 110 */
107ACPI_EXTERN u8 ACPI_INIT_GLOBAL(acpi_gbl_enable_interpreter_slack, FALSE); 111ACPI_EXTERN u8 ACPI_INIT_GLOBAL(acpi_gbl_enable_interpreter_slack, FALSE);
108 112
diff --git a/include/acpi/aclocal.h b/include/acpi/aclocal.h
index 0cb61a72d971..da7f1cb96f5d 100644
--- a/include/acpi/aclocal.h
+++ b/include/acpi/aclocal.h
@@ -276,6 +276,37 @@ struct acpi_create_field_info {
276 u8 field_type; 276 u8 field_type;
277}; 277};
278 278
279/*
280 * Bitmapped ACPI types. Used internally only
281 */
282#define ACPI_BTYPE_ANY 0x00000000
283#define ACPI_BTYPE_INTEGER 0x00000001
284#define ACPI_BTYPE_STRING 0x00000002
285#define ACPI_BTYPE_BUFFER 0x00000004
286#define ACPI_BTYPE_PACKAGE 0x00000008
287#define ACPI_BTYPE_FIELD_UNIT 0x00000010
288#define ACPI_BTYPE_DEVICE 0x00000020
289#define ACPI_BTYPE_EVENT 0x00000040
290#define ACPI_BTYPE_METHOD 0x00000080
291#define ACPI_BTYPE_MUTEX 0x00000100
292#define ACPI_BTYPE_REGION 0x00000200
293#define ACPI_BTYPE_POWER 0x00000400
294#define ACPI_BTYPE_PROCESSOR 0x00000800
295#define ACPI_BTYPE_THERMAL 0x00001000
296#define ACPI_BTYPE_BUFFER_FIELD 0x00002000
297#define ACPI_BTYPE_DDB_HANDLE 0x00004000
298#define ACPI_BTYPE_DEBUG_OBJECT 0x00008000
299#define ACPI_BTYPE_REFERENCE 0x00010000
300#define ACPI_BTYPE_RESOURCE 0x00020000
301
302#define ACPI_BTYPE_COMPUTE_DATA (ACPI_BTYPE_INTEGER | ACPI_BTYPE_STRING | ACPI_BTYPE_BUFFER)
303
304#define ACPI_BTYPE_DATA (ACPI_BTYPE_COMPUTE_DATA | ACPI_BTYPE_PACKAGE)
305#define ACPI_BTYPE_DATA_REFERENCE (ACPI_BTYPE_DATA | ACPI_BTYPE_REFERENCE | ACPI_BTYPE_DDB_HANDLE)
306#define ACPI_BTYPE_DEVICE_OBJECTS (ACPI_BTYPE_DEVICE | ACPI_BTYPE_THERMAL | ACPI_BTYPE_PROCESSOR)
307#define ACPI_BTYPE_OBJECTS_AND_REFS 0x0001FFFF /* ARG or LOCAL */
308#define ACPI_BTYPE_ALL_OBJECTS 0x0000FFFF
309
279/***************************************************************************** 310/*****************************************************************************
280 * 311 *
281 * Event typedefs and structs 312 * Event typedefs and structs
diff --git a/include/acpi/acmacros.h b/include/acpi/acmacros.h
index 65a1a5c1a689..0fa8f72dbace 100644
--- a/include/acpi/acmacros.h
+++ b/include/acpi/acmacros.h
@@ -60,7 +60,7 @@
60 60
61/* 61/*
62 * For 16-bit addresses, we have to assume that the upper 32 bits 62 * For 16-bit addresses, we have to assume that the upper 32 bits
63 * are zero. 63 * (out of 64) are zero.
64 */ 64 */
65#define ACPI_LODWORD(l) ((u32)(l)) 65#define ACPI_LODWORD(l) ((u32)(l))
66#define ACPI_HIDWORD(l) ((u32)(0)) 66#define ACPI_HIDWORD(l) ((u32)(0))
@@ -104,8 +104,9 @@
104#define ACPI_FORMAT_UINT64(i) ACPI_HIDWORD(i),ACPI_LODWORD(i) 104#define ACPI_FORMAT_UINT64(i) ACPI_HIDWORD(i),ACPI_LODWORD(i)
105 105
106/* 106/*
107 * Extract a byte of data using a pointer. Any more than a byte and we 107 * Extract data using a pointer. Any more than a byte and we
108 * get into potential aligment issues -- see the STORE macros below 108 * get into potential aligment issues -- see the STORE macros below.
109 * Use with care.
109 */ 110 */
110#define ACPI_GET8(ptr) *ACPI_CAST_PTR (u8, ptr) 111#define ACPI_GET8(ptr) *ACPI_CAST_PTR (u8, ptr)
111#define ACPI_GET16(ptr) *ACPI_CAST_PTR (u16, ptr) 112#define ACPI_GET16(ptr) *ACPI_CAST_PTR (u16, ptr)
@@ -116,16 +117,17 @@
116#define ACPI_SET32(ptr) *ACPI_CAST_PTR (u32, ptr) 117#define ACPI_SET32(ptr) *ACPI_CAST_PTR (u32, ptr)
117#define ACPI_SET64(ptr) *ACPI_CAST_PTR (u64, ptr) 118#define ACPI_SET64(ptr) *ACPI_CAST_PTR (u64, ptr)
118 119
119/* Pointer manipulation */ 120/*
120 121 * Pointer manipulation
121#define ACPI_CAST_PTR(t, p) ((t *)(void *)(p)) 122 */
122#define ACPI_CAST_INDIRECT_PTR(t, p) ((t **)(void *)(p)) 123#define ACPI_CAST_PTR(t, p) ((t *) (acpi_uintptr_t) (p))
123#define ACPI_ADD_PTR(t,a,b) ACPI_CAST_PTR (t, (ACPI_CAST_PTR (u8, (a)) + (acpi_native_uint)(b))) 124#define ACPI_CAST_INDIRECT_PTR(t, p) ((t **) (acpi_uintptr_t) (p))
124#define ACPI_PTR_DIFF(a,b) (acpi_native_uint) ((char *)(a) - (char *)(b)) 125#define ACPI_ADD_PTR(t,a,b) ACPI_CAST_PTR (t, (ACPI_CAST_PTR (u8,(a)) + (acpi_native_uint)(b)))
126#define ACPI_PTR_DIFF(a,b) (acpi_native_uint) (ACPI_CAST_PTR (u8,(a)) - ACPI_CAST_PTR (u8,(b)))
125 127
126/* Pointer/Integer type conversions */ 128/* Pointer/Integer type conversions */
127 129
128#define ACPI_TO_POINTER(i) ACPI_ADD_PTR (void, (void *) NULL,(acpi_native_uint)i) 130#define ACPI_TO_POINTER(i) ACPI_ADD_PTR (void,(void *) NULL,(acpi_native_uint) i)
129#define ACPI_TO_INTEGER(p) ACPI_PTR_DIFF (p,(void *) NULL) 131#define ACPI_TO_INTEGER(p) ACPI_PTR_DIFF (p,(void *) NULL)
130#define ACPI_OFFSET(d,f) (acpi_size) ACPI_PTR_DIFF (&(((d *)0)->f),(void *) NULL) 132#define ACPI_OFFSET(d,f) (acpi_size) ACPI_PTR_DIFF (&(((d *)0)->f),(void *) NULL)
131#define ACPI_FADT_OFFSET(f) ACPI_OFFSET (FADT_DESCRIPTOR, f) 133#define ACPI_FADT_OFFSET(f) ACPI_OFFSET (FADT_DESCRIPTOR, f)
@@ -133,7 +135,7 @@
133#if ACPI_MACHINE_WIDTH == 16 135#if ACPI_MACHINE_WIDTH == 16
134#define ACPI_STORE_POINTER(d,s) ACPI_MOVE_32_TO_32(d,s) 136#define ACPI_STORE_POINTER(d,s) ACPI_MOVE_32_TO_32(d,s)
135#define ACPI_PHYSADDR_TO_PTR(i) (void *)(i) 137#define ACPI_PHYSADDR_TO_PTR(i) (void *)(i)
136#define ACPI_PTR_TO_PHYSADDR(i) (u32) (char *)(i) 138#define ACPI_PTR_TO_PHYSADDR(i) (u32) ACPI_CAST_PTR (u8,(i))
137#else 139#else
138#define ACPI_PHYSADDR_TO_PTR(i) ACPI_TO_POINTER(i) 140#define ACPI_PHYSADDR_TO_PTR(i) ACPI_TO_POINTER(i)
139#define ACPI_PTR_TO_PHYSADDR(i) ACPI_TO_INTEGER(i) 141#define ACPI_PTR_TO_PHYSADDR(i) ACPI_TO_INTEGER(i)
diff --git a/include/acpi/actbl.h b/include/acpi/actbl.h
index a46f406e1c94..ef2ddcadfe61 100644
--- a/include/acpi/actbl.h
+++ b/include/acpi/actbl.h
@@ -45,6 +45,12 @@
45#define __ACTBL_H__ 45#define __ACTBL_H__
46 46
47/* 47/*
48 * Note about bitfields: The u8 type is used for bitfields in ACPI tables.
49 * This is the only type that is even remotely portable. Anything else is not
50 * portable, so do not use any other bitfield types.
51 */
52
53/*
48 * Values for description table header signatures 54 * Values for description table header signatures
49 */ 55 */
50#define RSDP_NAME "RSDP" 56#define RSDP_NAME "RSDP"
diff --git a/include/acpi/actypes.h b/include/acpi/actypes.h
index 11847592ed1b..18e1338c5c7f 100644
--- a/include/acpi/actypes.h
+++ b/include/acpi/actypes.h
@@ -44,7 +44,15 @@
44#ifndef __ACTYPES_H__ 44#ifndef __ACTYPES_H__
45#define __ACTYPES_H__ 45#define __ACTYPES_H__
46 46
47/*! [Begin] no source code translation (keep the typedefs) */ 47/*
48 * ACPI_MACHINE_WIDTH must be specified in an OS- or compiler-dependent header
49 * and must be either 16, 32, or 64
50 */
51#ifndef ACPI_MACHINE_WIDTH
52#error ACPI_MACHINE_WIDTH not defined
53#endif
54
55/*! [Begin] no source code translation */
48 56
49/* 57/*
50 * Data type ranges 58 * Data type ranges
@@ -58,154 +66,210 @@
58#define ACPI_UINT64_MAX (UINT64)(~((UINT64) 0)) /* 0xFFFFFFFFFFFFFFFF */ 66#define ACPI_UINT64_MAX (UINT64)(~((UINT64) 0)) /* 0xFFFFFFFFFFFFFFFF */
59#define ACPI_ASCII_MAX 0x7F 67#define ACPI_ASCII_MAX 0x7F
60 68
61#ifdef DEFINE_ALTERNATE_TYPES
62/* 69/*
63 * Types used only in translated source, defined here to enable 70 * Architecture-specific ACPICA Subsystem Data Types
64 * cross-platform compilation only. 71 *
72 * The goal of these types is to provide source code portability across
73 * 16-bit, 32-bit, and 64-bit targets.
74 *
75 * 1) The following types are of fixed size for all targets (16/32/64):
76 *
77 * BOOLEAN Logical boolean
78 *
79 * UINT8 8-bit (1 byte) unsigned value
80 * UINT16 16-bit (2 byte) unsigned value
81 * UINT32 32-bit (4 byte) unsigned value
82 * UINT64 64-bit (8 byte) unsigned value
83 *
84 * INT16 16-bit (2 byte) signed value
85 * INT32 32-bit (4 byte) signed value
86 * INT64 64-bit (8 byte) signed value
87 *
88 * COMPILER_DEPENDENT_UINT64/INT64 - These types are defined in the
89 * compiler-dependent header(s) and were introduced because there is no common
90 * 64-bit integer type across the various compilation models, as shown in
91 * the table below.
92 *
93 * Datatype LP64 ILP64 LLP64 ILP32 LP32 16bit
94 * char 8 8 8 8 8 8
95 * short 16 16 16 16 16 16
96 * _int32 32
97 * int 32 64 32 32 16 16
98 * long 64 64 32 32 32 32
99 * long long 64 64
100 * pointer 64 64 64 32 32 32
101 *
102 * Note: ILP64 and LP32 are currently not supported.
103 *
104 *
105 * 2) These types represent the native word size of the target mode of the
106 * processor, and may be 16-bit, 32-bit, or 64-bit as required. They are
107 * usually used for memory allocation, efficient loop counters, and array
108 * indexes. The types are similar to the size_t type in the C library and are
109 * required because there is no C type that consistently represents the native
110 * data width.
111 *
112 * ACPI_SIZE 16/32/64-bit unsigned value
113 * ACPI_NATIVE_UINT 16/32/64-bit unsigned value
114 * ACPI_NATIVE_INT 16/32/64-bit signed value
115 *
65 */ 116 */
66typedef int s32;
67typedef unsigned char u8;
68typedef unsigned short u16;
69typedef unsigned int u32;
70typedef COMPILER_DEPENDENT_UINT64 u64;
71 117
72#endif 118/*******************************************************************************
73
74/*
75 * Data types - Fixed across all compilation models (16/32/64)
76 * 119 *
77 * BOOLEAN Logical Boolean. 120 * Common types for all compilers, all targets
78 * INT8 8-bit (1 byte) signed value 121 *
79 * UINT8 8-bit (1 byte) unsigned value 122 ******************************************************************************/
80 * INT16 16-bit (2 byte) signed value 123
81 * UINT16 16-bit (2 byte) unsigned value 124typedef unsigned char BOOLEAN;
82 * INT32 32-bit (4 byte) signed value 125typedef unsigned char UINT8;
83 * UINT32 32-bit (4 byte) unsigned value 126typedef unsigned short UINT16;
84 * INT64 64-bit (8 byte) signed value 127typedef COMPILER_DEPENDENT_UINT64 UINT64;
85 * UINT64 64-bit (8 byte) unsigned value 128typedef COMPILER_DEPENDENT_INT64 INT64;
86 * ACPI_NATIVE_UINT 32-bit on IA-32, 64-bit on x86_64/IA-64 unsigned value
87 */
88 129
89typedef unsigned long acpi_native_uint; 130/*! [End] no source code translation !*/
90 131
91#ifndef ACPI_MACHINE_WIDTH 132/*******************************************************************************
92#error ACPI_MACHINE_WIDTH not defined 133 *
93#endif 134 * Types specific to 64-bit targets
135 *
136 ******************************************************************************/
94 137
95#if ACPI_MACHINE_WIDTH == 64 138#if ACPI_MACHINE_WIDTH == 64
96 139
97/*! [Begin] no source code translation (keep the typedefs) */ 140/*! [Begin] no source code translation (keep the typedefs as-is) */
98 141
99/*
100 * 64-bit type definitions
101 */
102typedef unsigned char UINT8;
103typedef unsigned char BOOLEAN;
104typedef unsigned short UINT16;
105typedef int INT32;
106typedef unsigned int UINT32; 142typedef unsigned int UINT32;
107typedef COMPILER_DEPENDENT_INT64 INT64; 143typedef int INT32;
108typedef COMPILER_DEPENDENT_UINT64 UINT64;
109 144
110/*! [End] no source code translation !*/ 145/*! [End] no source code translation !*/
111 146
147typedef u64 acpi_native_uint;
148typedef s64 acpi_native_int;
149
112typedef u64 acpi_table_ptr; 150typedef u64 acpi_table_ptr;
113typedef u64 acpi_io_address; 151typedef u64 acpi_io_address;
114typedef u64 acpi_physical_address; 152typedef u64 acpi_physical_address;
115typedef u64 acpi_size;
116 153
117#define ALIGNED_ADDRESS_BOUNDARY 0x00000008 /* No hardware alignment support in IA64 */
118#define ACPI_USE_NATIVE_DIVIDE /* Native 64-bit integer support */
119#define ACPI_MAX_PTR ACPI_UINT64_MAX 154#define ACPI_MAX_PTR ACPI_UINT64_MAX
120#define ACPI_SIZE_MAX ACPI_UINT64_MAX 155#define ACPI_SIZE_MAX ACPI_UINT64_MAX
121 156
157#define ALIGNED_ADDRESS_BOUNDARY 0x00000008
158#define ACPI_USE_NATIVE_DIVIDE /* Has native 64-bit integer support */
159
122/* 160/*
123 * In the case of the Itanium Processor Family (IPF), the hardware does not 161 * In the case of the Itanium Processor Family (IPF), the hardware does not
124 * support misaligned memory transfers. Set the MISALIGNMENT_NOT_SUPPORTED flag 162 * support misaligned memory transfers. Set the MISALIGNMENT_NOT_SUPPORTED flag
125 * to indicate that special precautions must be taken to avoid alignment faults. 163 * to indicate that special precautions must be taken to avoid alignment faults.
126 * (IA64 or ia64 is currently used by existing compilers to indicate IPF.) 164 * (IA64 or ia64 is currently used by existing compilers to indicate IPF.)
127 * 165 *
128 * Note: Em64_t and other X86-64 processors do support misaligned transfers, 166 * Note: Em64_t and other X86-64 processors support misaligned transfers,
129 * so there is no need to define this flag. 167 * so there is no need to define this flag.
130 */ 168 */
131#if defined (__IA64__) || defined (__ia64__) 169#if defined (__IA64__) || defined (__ia64__)
132#define ACPI_MISALIGNMENT_NOT_SUPPORTED 170#define ACPI_MISALIGNMENT_NOT_SUPPORTED
133#endif 171#endif
134 172
173/*******************************************************************************
174 *
175 * Types specific to 32-bit targets
176 *
177 ******************************************************************************/
178
179#elif ACPI_MACHINE_WIDTH == 32
180
181/*! [Begin] no source code translation (keep the typedefs as-is) */
182
183typedef unsigned int UINT32;
184typedef int INT32;
185
186/*! [End] no source code translation !*/
187
188typedef u32 acpi_native_uint;
189typedef s32 acpi_native_int;
190
191typedef u64 acpi_table_ptr;
192typedef u32 acpi_io_address;
193typedef u64 acpi_physical_address;
194
195#define ACPI_MAX_PTR ACPI_UINT32_MAX
196#define ACPI_SIZE_MAX ACPI_UINT32_MAX
197
198#define ALIGNED_ADDRESS_BOUNDARY 0x00000004
199
200/*******************************************************************************
201 *
202 * Types specific to 16-bit targets
203 *
204 ******************************************************************************/
205
135#elif ACPI_MACHINE_WIDTH == 16 206#elif ACPI_MACHINE_WIDTH == 16
136 207
137/*! [Begin] no source code translation (keep the typedefs as-is) */ 208/*! [Begin] no source code translation (keep the typedefs as-is) */
138 209
139/*
140 * 16-bit type definitions
141 */
142typedef unsigned char UINT8;
143typedef unsigned char BOOLEAN;
144typedef unsigned int UINT16;
145typedef long INT32;
146typedef int INT16;
147typedef unsigned long UINT32; 210typedef unsigned long UINT32;
148 211typedef short INT16;
149struct { 212typedef long INT32;
150 UINT32 Lo;
151 UINT32 Hi;
152};
153 213
154/*! [End] no source code translation !*/ 214/*! [End] no source code translation !*/
155 215
216typedef u16 acpi_native_uint;
217typedef s16 acpi_native_int;
218
156typedef u32 acpi_table_ptr; 219typedef u32 acpi_table_ptr;
157typedef u32 acpi_io_address; 220typedef u32 acpi_io_address;
158typedef char *acpi_physical_address; 221typedef char *acpi_physical_address;
159typedef u16 acpi_size;
160 222
161#define ALIGNED_ADDRESS_BOUNDARY 0x00000002
162#define ACPI_USE_NATIVE_DIVIDE /* No 64-bit integers, ok to use native divide */
163#define ACPI_MAX_PTR ACPI_UINT16_MAX 223#define ACPI_MAX_PTR ACPI_UINT16_MAX
164#define ACPI_SIZE_MAX ACPI_UINT16_MAX 224#define ACPI_SIZE_MAX ACPI_UINT16_MAX
165 225
166/* 226#define ALIGNED_ADDRESS_BOUNDARY 0x00000002
167 * (16-bit only) internal integers must be 32-bits, so 227#define ACPI_USE_NATIVE_DIVIDE /* No 64-bit integers, ok to use native divide */
168 * 64-bit integers cannot be supported
169 */
170#define ACPI_NO_INTEGER64_SUPPORT
171 228
172#elif ACPI_MACHINE_WIDTH == 32 229/* 64-bit integers cannot be supported */
173 230
174/*! [Begin] no source code translation (keep the typedefs) */ 231#define ACPI_NO_INTEGER64_SUPPORT
175 232
176/* 233#else
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 234
187/*! [End] no source code translation !*/ 235/* ACPI_MACHINE_WIDTH must be either 64, 32, or 16 */
188 236
189typedef u64 acpi_table_ptr; 237#error unknown ACPI_MACHINE_WIDTH
190typedef u32 acpi_io_address; 238#endif
191typedef u64 acpi_physical_address;
192typedef u32 acpi_size;
193 239
194#define ALIGNED_ADDRESS_BOUNDARY 0x00000004 240/*******************************************************************************
195#define ACPI_MAX_PTR ACPI_UINT32_MAX 241 *
196#define ACPI_SIZE_MAX ACPI_UINT32_MAX 242 * OS- or compiler-dependent types
243 *
244 ******************************************************************************/
197 245
198#else 246/*
199#error unknown ACPI_MACHINE_WIDTH 247 * If acpi_uintptr_t was not defined in the OS- or compiler-dependent header,
248 * define it now (use C99 uintptr_t for pointer casting if available,
249 * "void *" otherwise)
250 */
251#ifndef acpi_uintptr_t
252#define acpi_uintptr_t void *
200#endif 253#endif
201 254
202/* 255/*
203 * This type is used for bitfields in ACPI tables. The only type that is 256 * If acpi_cache_t was not defined in the OS-dependent header,
204 * even remotely portable is u8. Anything else is not portable, so 257 * define it now. This is typically the case where the local cache
205 * do not add any more bitfield types. 258 * manager implementation is to be used (ACPI_USE_LOCAL_CACHE)
206 */ 259 */
207typedef u8 UINT8_BIT; 260#ifndef acpi_cache_t
208typedef acpi_native_uint ACPI_PTRDIFF; 261#define acpi_cache_t struct acpi_memory_list
262#endif
263
264/* Variable-width type, used instead of clib size_t */
265
266typedef acpi_native_uint acpi_size;
267
268/*******************************************************************************
269 *
270 * Independent types
271 *
272 ******************************************************************************/
209 273
210/* 274/*
211 * Pointer overlays to avoid lots of typecasting for 275 * Pointer overlays to avoid lots of typecasting for
@@ -237,18 +301,8 @@ struct acpi_pointer {
237#define ACPI_LOGMODE_PHYSPTR ACPI_LOGICAL_ADDRESSING | ACPI_PHYSICAL_POINTER 301#define ACPI_LOGMODE_PHYSPTR ACPI_LOGICAL_ADDRESSING | ACPI_PHYSICAL_POINTER
238#define ACPI_LOGMODE_LOGPTR ACPI_LOGICAL_ADDRESSING | ACPI_LOGICAL_POINTER 302#define ACPI_LOGMODE_LOGPTR ACPI_LOGICAL_ADDRESSING | ACPI_LOGICAL_POINTER
239 303
240/* 304/* Logical defines and NULL */
241 * If acpi_cache_t was not defined in the OS-dependent header,
242 * define it now. This is typically the case where the local cache
243 * manager implementation is to be used (ACPI_USE_LOCAL_CACHE)
244 */
245#ifndef acpi_cache_t
246#define acpi_cache_t struct acpi_memory_list
247#endif
248 305
249/*
250 * Useful defines
251 */
252#ifdef FALSE 306#ifdef FALSE
253#undef FALSE 307#undef FALSE
254#endif 308#endif
@@ -264,12 +318,12 @@ struct acpi_pointer {
264#endif 318#endif
265 319
266/* 320/*
267 * Local datatypes 321 * Mescellaneous types
268 */ 322 */
269typedef u32 acpi_status; /* All ACPI Exceptions */ 323typedef u32 acpi_status; /* All ACPI Exceptions */
270typedef u32 acpi_name; /* 4-byte ACPI name */ 324typedef u32 acpi_name; /* 4-byte ACPI name */
271typedef char *acpi_string; /* Null terminated ASCII string */ 325typedef char *acpi_string; /* Null terminated ASCII string */
272typedef void *acpi_handle; /* Actually a ptr to an Node */ 326typedef void *acpi_handle; /* Actually a ptr to a NS Node */
273 327
274struct uint64_struct { 328struct uint64_struct {
275 u32 lo; 329 u32 lo;
@@ -473,37 +527,6 @@ typedef u32 acpi_object_type;
473#define ACPI_TYPE_NOT_FOUND 0xFF 527#define ACPI_TYPE_NOT_FOUND 0xFF
474 528
475/* 529/*
476 * Bitmapped ACPI types. Used internally only
477 */
478#define ACPI_BTYPE_ANY 0x00000000
479#define ACPI_BTYPE_INTEGER 0x00000001
480#define ACPI_BTYPE_STRING 0x00000002
481#define ACPI_BTYPE_BUFFER 0x00000004
482#define ACPI_BTYPE_PACKAGE 0x00000008
483#define ACPI_BTYPE_FIELD_UNIT 0x00000010
484#define ACPI_BTYPE_DEVICE 0x00000020
485#define ACPI_BTYPE_EVENT 0x00000040
486#define ACPI_BTYPE_METHOD 0x00000080
487#define ACPI_BTYPE_MUTEX 0x00000100
488#define ACPI_BTYPE_REGION 0x00000200
489#define ACPI_BTYPE_POWER 0x00000400
490#define ACPI_BTYPE_PROCESSOR 0x00000800
491#define ACPI_BTYPE_THERMAL 0x00001000
492#define ACPI_BTYPE_BUFFER_FIELD 0x00002000
493#define ACPI_BTYPE_DDB_HANDLE 0x00004000
494#define ACPI_BTYPE_DEBUG_OBJECT 0x00008000
495#define ACPI_BTYPE_REFERENCE 0x00010000
496#define ACPI_BTYPE_RESOURCE 0x00020000
497
498#define ACPI_BTYPE_COMPUTE_DATA (ACPI_BTYPE_INTEGER | ACPI_BTYPE_STRING | ACPI_BTYPE_BUFFER)
499
500#define ACPI_BTYPE_DATA (ACPI_BTYPE_COMPUTE_DATA | ACPI_BTYPE_PACKAGE)
501#define ACPI_BTYPE_DATA_REFERENCE (ACPI_BTYPE_DATA | ACPI_BTYPE_REFERENCE | ACPI_BTYPE_DDB_HANDLE)
502#define ACPI_BTYPE_DEVICE_OBJECTS (ACPI_BTYPE_DEVICE | ACPI_BTYPE_THERMAL | ACPI_BTYPE_PROCESSOR)
503#define ACPI_BTYPE_OBJECTS_AND_REFS 0x0001FFFF /* ARG or LOCAL */
504#define ACPI_BTYPE_ALL_OBJECTS 0x0000FFFF
505
506/*
507 * All I/O 530 * All I/O
508 */ 531 */
509#define ACPI_READ 0 532#define ACPI_READ 0
@@ -856,6 +879,14 @@ struct acpi_compatible_id_list {
856#define ACPI_VALID_CID 0x0010 879#define ACPI_VALID_CID 0x0010
857#define ACPI_VALID_SXDS 0x0020 880#define ACPI_VALID_SXDS 0x0020
858 881
882/* Flags for _STA method */
883
884#define ACPI_STA_DEVICE_PRESENT 0x01
885#define ACPI_STA_DEVICE_ENABLED 0x02
886#define ACPI_STA_DEVICE_UI 0x04
887#define ACPI_STA_DEVICE_OK 0x08
888#define ACPI_STA_BATTERY_PRESENT 0x10
889
859#define ACPI_COMMON_OBJ_INFO \ 890#define ACPI_COMMON_OBJ_INFO \
860 acpi_object_type type; /* ACPI object type */ \ 891 acpi_object_type type; /* ACPI object type */ \
861 acpi_name name /* ACPI object Name */ 892 acpi_name name /* ACPI object Name */
@@ -921,7 +952,9 @@ typedef u32 acpi_rsdesc_size; /* Max Resource Descriptor size is (length+3) = (6
921#define ACPI_ISA_ONLY_RANGES (u8) 0x02 952#define ACPI_ISA_ONLY_RANGES (u8) 0x02
922#define ACPI_ENTIRE_RANGE (ACPI_NON_ISA_ONLY_RANGES | ACPI_ISA_ONLY_RANGES) 953#define ACPI_ENTIRE_RANGE (ACPI_NON_ISA_ONLY_RANGES | ACPI_ISA_ONLY_RANGES)
923 954
924#define ACPI_SPARSE_TRANSLATION (u8) 0x03 955/* Type of translation - 1=Sparse, 0=Dense */
956
957#define ACPI_SPARSE_TRANSLATION (u8) 0x01
925 958
926/* 959/*
927 * IO Port Descriptor Decode 960 * IO Port Descriptor Decode
diff --git a/include/acpi/acutils.h b/include/acpi/acutils.h
index 4ff963323de3..5fa21e03a62f 100644
--- a/include/acpi/acutils.h
+++ b/include/acpi/acutils.h
@@ -46,6 +46,30 @@
46 46
47extern const u8 acpi_gbl_resource_aml_sizes[]; 47extern const u8 acpi_gbl_resource_aml_sizes[];
48 48
49/* Strings used by the disassembler and debugger resource dump routines */
50
51#if defined(ACPI_DISASSEMBLER) || defined (ACPI_DEBUGGER)
52
53extern const char *acpi_gbl_BMdecode[2];
54extern const char *acpi_gbl_config_decode[4];
55extern const char *acpi_gbl_consume_decode[2];
56extern const char *acpi_gbl_DECdecode[2];
57extern const char *acpi_gbl_HEdecode[2];
58extern const char *acpi_gbl_io_decode[2];
59extern const char *acpi_gbl_LLdecode[2];
60extern const char *acpi_gbl_max_decode[2];
61extern const char *acpi_gbl_MEMdecode[4];
62extern const char *acpi_gbl_min_decode[2];
63extern const char *acpi_gbl_MTPdecode[4];
64extern const char *acpi_gbl_RNGdecode[4];
65extern const char *acpi_gbl_RWdecode[2];
66extern const char *acpi_gbl_SHRdecode[2];
67extern const char *acpi_gbl_SIZdecode[4];
68extern const char *acpi_gbl_TRSdecode[2];
69extern const char *acpi_gbl_TTPdecode[2];
70extern const char *acpi_gbl_TYPdecode[4];
71#endif
72
49/* Types for Resource descriptor entries */ 73/* Types for Resource descriptor entries */
50 74
51#define ACPI_INVALID_RESOURCE 0 75#define ACPI_INVALID_RESOURCE 0