aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi/executer/exresop.c
diff options
context:
space:
mode:
authorBob Moore <robert.moore@intel.com>2006-01-27 16:43:00 -0500
committerLen Brown <len.brown@intel.com>2006-01-31 03:25:09 -0500
commitb8e4d89357fc434618a59c1047cac72641191805 (patch)
treeac97fcc6fdc277c682365900663872c96f2420bd /drivers/acpi/executer/exresop.c
parent292dd876ee765c478b27c93cc51e93a558ed58bf (diff)
[ACPI] ACPICA 20060127
Implemented support in the Resource Manager to allow unresolved namestring references within resource package objects for the _PRT method. This support is in addition to the previously implemented unresolved reference support within the AML parser. If the interpreter slack mode is enabled (true on Linux unless acpi=strict), these unresolved references will be passed through to the caller as a NULL package entry. http://bugzilla.kernel.org/show_bug.cgi?id=5741 Implemented and deployed new macros and functions for error and warning messages across the subsystem. These macros are simpler and generate less code than their predecessors. The new macros ACPI_ERROR, ACPI_EXCEPTION, ACPI_WARNING, and ACPI_INFO replace the ACPI_REPORT_* macros. Implemented the acpi_cpu_flags type to simplify host OS integration of the Acquire/Release Lock OSL interfaces. Suggested by Steven Rostedt and Andrew Morton. Fixed a problem where Alias ASL operators are sometimes not correctly resolved. causing AE_AML_INTERNAL http://bugzilla.kernel.org/show_bug.cgi?id=5189 http://bugzilla.kernel.org/show_bug.cgi?id=5674 Fixed several problems with the implementation of the ConcatenateResTemplate ASL operator. As per the ACPI specification, zero length buffers are now treated as a single EndTag. One-length buffers always cause a fatal exception. Non-zero length buffers that do not end with a full 2-byte EndTag cause a fatal exception. Fixed a possible structure overwrite in the AcpiGetObjectInfo external interface. (With assistance from Thomas Renninger) Signed-off-by: Bob Moore <robert.moore@intel.com> Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'drivers/acpi/executer/exresop.c')
-rw-r--r--drivers/acpi/executer/exresop.c96
1 files changed, 74 insertions, 22 deletions
diff --git a/drivers/acpi/executer/exresop.c b/drivers/acpi/executer/exresop.c
index 804faebf825c..a1c000f5a415 100644
--- a/drivers/acpi/executer/exresop.c
+++ b/drivers/acpi/executer/exresop.c
@@ -46,6 +46,7 @@
46#include <acpi/amlcode.h> 46#include <acpi/amlcode.h>
47#include <acpi/acparser.h> 47#include <acpi/acparser.h>
48#include <acpi/acinterp.h> 48#include <acpi/acinterp.h>
49#include <acpi/acnamesp.h>
49 50
50#define _COMPONENT ACPI_EXECUTER 51#define _COMPONENT ACPI_EXECUTER
51ACPI_MODULE_NAME("exresop") 52ACPI_MODULE_NAME("exresop")
@@ -95,9 +96,10 @@ acpi_ex_check_object_type(acpi_object_type type_needed,
95 } 96 }
96 97
97 if (type_needed != this_type) { 98 if (type_needed != this_type) {
98 ACPI_REPORT_ERROR(("Needed type [%s], found [%s] %p\n", 99 ACPI_ERROR((AE_INFO,
99 acpi_ut_get_type_name(type_needed), 100 "Needed type [%s], found [%s] %p",
100 acpi_ut_get_type_name(this_type), object)); 101 acpi_ut_get_type_name(type_needed),
102 acpi_ut_get_type_name(this_type), object));
101 103
102 return (AE_AML_OPERAND_TYPE); 104 return (AE_AML_OPERAND_TYPE);
103 } 105 }
@@ -150,7 +152,7 @@ acpi_ex_resolve_operands(u16 opcode,
150 152
151 arg_types = op_info->runtime_args; 153 arg_types = op_info->runtime_args;
152 if (arg_types == ARGI_INVALID_OPCODE) { 154 if (arg_types == ARGI_INVALID_OPCODE) {
153 ACPI_REPORT_ERROR(("Unknown AML opcode %X\n", opcode)); 155 ACPI_ERROR((AE_INFO, "Unknown AML opcode %X", opcode));
154 156
155 return_ACPI_STATUS(AE_AML_INTERNAL); 157 return_ACPI_STATUS(AE_AML_INTERNAL);
156 } 158 }
@@ -168,8 +170,8 @@ acpi_ex_resolve_operands(u16 opcode,
168 */ 170 */
169 while (GET_CURRENT_ARG_TYPE(arg_types)) { 171 while (GET_CURRENT_ARG_TYPE(arg_types)) {
170 if (!stack_ptr || !*stack_ptr) { 172 if (!stack_ptr || !*stack_ptr) {
171 ACPI_REPORT_ERROR(("Null stack entry at %p\n", 173 ACPI_ERROR((AE_INFO, "Null stack entry at %p",
172 stack_ptr)); 174 stack_ptr));
173 175
174 return_ACPI_STATUS(AE_AML_INTERNAL); 176 return_ACPI_STATUS(AE_AML_INTERNAL);
175 } 177 }
@@ -187,6 +189,22 @@ acpi_ex_resolve_operands(u16 opcode,
187 189
188 object_type = 190 object_type =
189 ((struct acpi_namespace_node *)obj_desc)->type; 191 ((struct acpi_namespace_node *)obj_desc)->type;
192
193 /*
194 * Resolve an alias object. The construction of these objects
195 * guarantees that there is only one level of alias indirection;
196 * thus, the attached object is always the aliased namespace node
197 */
198 if (object_type == ACPI_TYPE_LOCAL_ALIAS) {
199 obj_desc =
200 acpi_ns_get_attached_object((struct
201 acpi_namespace_node
202 *)obj_desc);
203 *stack_ptr = obj_desc;
204 object_type =
205 ((struct acpi_namespace_node *)obj_desc)->
206 type;
207 }
190 break; 208 break;
191 209
192 case ACPI_DESC_TYPE_OPERAND: 210 case ACPI_DESC_TYPE_OPERAND:
@@ -198,7 +216,9 @@ acpi_ex_resolve_operands(u16 opcode,
198 /* Check for bad acpi_object_type */ 216 /* Check for bad acpi_object_type */
199 217
200 if (!acpi_ut_valid_object_type(object_type)) { 218 if (!acpi_ut_valid_object_type(object_type)) {
201 ACPI_REPORT_ERROR(("Bad operand object type [%X]\n", object_type)); 219 ACPI_ERROR((AE_INFO,
220 "Bad operand object type [%X]",
221 object_type));
202 222
203 return_ACPI_STATUS(AE_AML_OPERAND_TYPE); 223 return_ACPI_STATUS(AE_AML_OPERAND_TYPE);
204 } 224 }
@@ -236,7 +256,10 @@ acpi_ex_resolve_operands(u16 opcode,
236 break; 256 break;
237 257
238 default: 258 default:
239 ACPI_REPORT_ERROR(("Operand is a Reference, Unknown Reference Opcode: %X\n", obj_desc->reference.opcode)); 259 ACPI_ERROR((AE_INFO,
260 "Operand is a Reference, Unknown Reference Opcode: %X",
261 obj_desc->reference.
262 opcode));
240 263
241 return_ACPI_STATUS(AE_AML_OPERAND_TYPE); 264 return_ACPI_STATUS(AE_AML_OPERAND_TYPE);
242 } 265 }
@@ -247,10 +270,10 @@ acpi_ex_resolve_operands(u16 opcode,
247 270
248 /* Invalid descriptor */ 271 /* Invalid descriptor */
249 272
250 ACPI_REPORT_ERROR(("Invalid descriptor %p [%s]\n", 273 ACPI_ERROR((AE_INFO,
251 obj_desc, 274 "Invalid descriptor %p [%s]",
252 acpi_ut_get_descriptor_name 275 obj_desc,
253 (obj_desc))); 276 acpi_ut_get_descriptor_name(obj_desc)));
254 277
255 return_ACPI_STATUS(AE_AML_OPERAND_TYPE); 278 return_ACPI_STATUS(AE_AML_OPERAND_TYPE);
256 } 279 }
@@ -408,7 +431,10 @@ acpi_ex_resolve_operands(u16 opcode,
408 acpi_ex_convert_to_integer(obj_desc, stack_ptr, 16); 431 acpi_ex_convert_to_integer(obj_desc, stack_ptr, 16);
409 if (ACPI_FAILURE(status)) { 432 if (ACPI_FAILURE(status)) {
410 if (status == AE_TYPE) { 433 if (status == AE_TYPE) {
411 ACPI_REPORT_ERROR(("Needed [Integer/String/Buffer], found [%s] %p\n", acpi_ut_get_object_type_name(obj_desc), obj_desc)); 434 ACPI_ERROR((AE_INFO,
435 "Needed [Integer/String/Buffer], found [%s] %p",
436 acpi_ut_get_object_type_name
437 (obj_desc), obj_desc));
412 438
413 return_ACPI_STATUS(AE_AML_OPERAND_TYPE); 439 return_ACPI_STATUS(AE_AML_OPERAND_TYPE);
414 } 440 }
@@ -431,7 +457,10 @@ acpi_ex_resolve_operands(u16 opcode,
431 status = acpi_ex_convert_to_buffer(obj_desc, stack_ptr); 457 status = acpi_ex_convert_to_buffer(obj_desc, stack_ptr);
432 if (ACPI_FAILURE(status)) { 458 if (ACPI_FAILURE(status)) {
433 if (status == AE_TYPE) { 459 if (status == AE_TYPE) {
434 ACPI_REPORT_ERROR(("Needed [Integer/String/Buffer], found [%s] %p\n", acpi_ut_get_object_type_name(obj_desc), obj_desc)); 460 ACPI_ERROR((AE_INFO,
461 "Needed [Integer/String/Buffer], found [%s] %p",
462 acpi_ut_get_object_type_name
463 (obj_desc), obj_desc));
435 464
436 return_ACPI_STATUS(AE_AML_OPERAND_TYPE); 465 return_ACPI_STATUS(AE_AML_OPERAND_TYPE);
437 } 466 }
@@ -455,7 +484,10 @@ acpi_ex_resolve_operands(u16 opcode,
455 ACPI_IMPLICIT_CONVERT_HEX); 484 ACPI_IMPLICIT_CONVERT_HEX);
456 if (ACPI_FAILURE(status)) { 485 if (ACPI_FAILURE(status)) {
457 if (status == AE_TYPE) { 486 if (status == AE_TYPE) {
458 ACPI_REPORT_ERROR(("Needed [Integer/String/Buffer], found [%s] %p\n", acpi_ut_get_object_type_name(obj_desc), obj_desc)); 487 ACPI_ERROR((AE_INFO,
488 "Needed [Integer/String/Buffer], found [%s] %p",
489 acpi_ut_get_object_type_name
490 (obj_desc), obj_desc));
459 491
460 return_ACPI_STATUS(AE_AML_OPERAND_TYPE); 492 return_ACPI_STATUS(AE_AML_OPERAND_TYPE);
461 } 493 }
@@ -481,7 +513,10 @@ acpi_ex_resolve_operands(u16 opcode,
481 break; 513 break;
482 514
483 default: 515 default:
484 ACPI_REPORT_ERROR(("Needed [Integer/String/Buffer], found [%s] %p\n", acpi_ut_get_object_type_name(obj_desc), obj_desc)); 516 ACPI_ERROR((AE_INFO,
517 "Needed [Integer/String/Buffer], found [%s] %p",
518 acpi_ut_get_object_type_name
519 (obj_desc), obj_desc));
485 520
486 return_ACPI_STATUS(AE_AML_OPERAND_TYPE); 521 return_ACPI_STATUS(AE_AML_OPERAND_TYPE);
487 } 522 }
@@ -515,7 +550,10 @@ acpi_ex_resolve_operands(u16 opcode,
515 break; 550 break;
516 551
517 default: 552 default:
518 ACPI_REPORT_ERROR(("Needed [Integer/String/Buffer], found [%s] %p\n", acpi_ut_get_object_type_name(obj_desc), obj_desc)); 553 ACPI_ERROR((AE_INFO,
554 "Needed [Integer/String/Buffer], found [%s] %p",
555 acpi_ut_get_object_type_name
556 (obj_desc), obj_desc));
519 557
520 return_ACPI_STATUS(AE_AML_OPERAND_TYPE); 558 return_ACPI_STATUS(AE_AML_OPERAND_TYPE);
521 } 559 }
@@ -539,7 +577,10 @@ acpi_ex_resolve_operands(u16 opcode,
539 break; 577 break;
540 578
541 default: 579 default:
542 ACPI_REPORT_ERROR(("Needed [Buffer/String/Package/Reference], found [%s] %p\n", acpi_ut_get_object_type_name(obj_desc), obj_desc)); 580 ACPI_ERROR((AE_INFO,
581 "Needed [Buffer/String/Package/Reference], found [%s] %p",
582 acpi_ut_get_object_type_name
583 (obj_desc), obj_desc));
543 584
544 return_ACPI_STATUS(AE_AML_OPERAND_TYPE); 585 return_ACPI_STATUS(AE_AML_OPERAND_TYPE);
545 } 586 }
@@ -558,7 +599,10 @@ acpi_ex_resolve_operands(u16 opcode,
558 break; 599 break;
559 600
560 default: 601 default:
561 ACPI_REPORT_ERROR(("Needed [Buffer/String/Package], found [%s] %p\n", acpi_ut_get_object_type_name(obj_desc), obj_desc)); 602 ACPI_ERROR((AE_INFO,
603 "Needed [Buffer/String/Package], found [%s] %p",
604 acpi_ut_get_object_type_name
605 (obj_desc), obj_desc));
562 606
563 return_ACPI_STATUS(AE_AML_OPERAND_TYPE); 607 return_ACPI_STATUS(AE_AML_OPERAND_TYPE);
564 } 608 }
@@ -578,7 +622,10 @@ acpi_ex_resolve_operands(u16 opcode,
578 break; 622 break;
579 623
580 default: 624 default:
581 ACPI_REPORT_ERROR(("Needed [Region/region_field], found [%s] %p\n", acpi_ut_get_object_type_name(obj_desc), obj_desc)); 625 ACPI_ERROR((AE_INFO,
626 "Needed [Region/region_field], found [%s] %p",
627 acpi_ut_get_object_type_name
628 (obj_desc), obj_desc));
582 629
583 return_ACPI_STATUS(AE_AML_OPERAND_TYPE); 630 return_ACPI_STATUS(AE_AML_OPERAND_TYPE);
584 } 631 }
@@ -620,7 +667,10 @@ acpi_ex_resolve_operands(u16 opcode,
620 break; 667 break;
621 } 668 }
622 669
623 ACPI_REPORT_ERROR(("Needed Integer/Buffer/String/Package/Ref/Ddb], found [%s] %p\n", acpi_ut_get_object_type_name(obj_desc), obj_desc)); 670 ACPI_ERROR((AE_INFO,
671 "Needed Integer/Buffer/String/Package/Ref/Ddb], found [%s] %p",
672 acpi_ut_get_object_type_name
673 (obj_desc), obj_desc));
624 674
625 return_ACPI_STATUS(AE_AML_OPERAND_TYPE); 675 return_ACPI_STATUS(AE_AML_OPERAND_TYPE);
626 } 676 }
@@ -630,7 +680,9 @@ acpi_ex_resolve_operands(u16 opcode,
630 680
631 /* Unknown type */ 681 /* Unknown type */
632 682
633 ACPI_REPORT_ERROR(("Internal - Unknown ARGI (required operand) type %X\n", this_arg_type)); 683 ACPI_ERROR((AE_INFO,
684 "Internal - Unknown ARGI (required operand) type %X",
685 this_arg_type));
634 686
635 return_ACPI_STATUS(AE_BAD_PARAMETER); 687 return_ACPI_STATUS(AE_BAD_PARAMETER);
636 } 688 }