aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi/dispatcher/dswexec.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/dispatcher/dswexec.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/dispatcher/dswexec.c')
-rw-r--r--drivers/acpi/dispatcher/dswexec.c31
1 files changed, 21 insertions, 10 deletions
diff --git a/drivers/acpi/dispatcher/dswexec.c b/drivers/acpi/dispatcher/dswexec.c
index 5a9b91fe93d2..f1af655ff113 100644
--- a/drivers/acpi/dispatcher/dswexec.c
+++ b/drivers/acpi/dispatcher/dswexec.c
@@ -100,7 +100,8 @@ acpi_ds_get_predicate_value(struct acpi_walk_state *walk_state,
100 if (result_obj) { 100 if (result_obj) {
101 status = acpi_ds_result_pop(&obj_desc, walk_state); 101 status = acpi_ds_result_pop(&obj_desc, walk_state);
102 if (ACPI_FAILURE(status)) { 102 if (ACPI_FAILURE(status)) {
103 ACPI_REPORT_ERROR(("Could not get result from predicate evaluation, %s\n", acpi_format_exception(status))); 103 ACPI_EXCEPTION((AE_INFO, status,
104 "Could not get result from predicate evaluation"));
104 105
105 return_ACPI_STATUS(status); 106 return_ACPI_STATUS(status);
106 } 107 }
@@ -121,8 +122,9 @@ acpi_ds_get_predicate_value(struct acpi_walk_state *walk_state,
121 } 122 }
122 123
123 if (!obj_desc) { 124 if (!obj_desc) {
124 ACPI_REPORT_ERROR(("No predicate obj_desc=%p State=%p\n", 125 ACPI_ERROR((AE_INFO,
125 obj_desc, walk_state)); 126 "No predicate obj_desc=%p State=%p",
127 obj_desc, walk_state));
126 128
127 return_ACPI_STATUS(AE_AML_NO_OPERAND); 129 return_ACPI_STATUS(AE_AML_NO_OPERAND);
128 } 130 }
@@ -137,7 +139,10 @@ acpi_ds_get_predicate_value(struct acpi_walk_state *walk_state,
137 } 139 }
138 140
139 if (ACPI_GET_OBJECT_TYPE(local_obj_desc) != ACPI_TYPE_INTEGER) { 141 if (ACPI_GET_OBJECT_TYPE(local_obj_desc) != ACPI_TYPE_INTEGER) {
140 ACPI_REPORT_ERROR(("Bad predicate (not an integer) obj_desc=%p State=%p Type=%X\n", obj_desc, walk_state, ACPI_GET_OBJECT_TYPE(obj_desc))); 142 ACPI_ERROR((AE_INFO,
143 "Bad predicate (not an integer) obj_desc=%p State=%p Type=%X",
144 obj_desc, walk_state,
145 ACPI_GET_OBJECT_TYPE(obj_desc)));
141 146
142 status = AE_AML_OPERAND_TYPE; 147 status = AE_AML_OPERAND_TYPE;
143 goto cleanup; 148 goto cleanup;
@@ -356,8 +361,8 @@ acpi_status acpi_ds_exec_end_op(struct acpi_walk_state *walk_state)
356 op_class = walk_state->op_info->class; 361 op_class = walk_state->op_info->class;
357 362
358 if (op_class == AML_CLASS_UNKNOWN) { 363 if (op_class == AML_CLASS_UNKNOWN) {
359 ACPI_REPORT_ERROR(("Unknown opcode %X\n", 364 ACPI_ERROR((AE_INFO, "Unknown opcode %X",
360 op->common.aml_opcode)); 365 op->common.aml_opcode));
361 return_ACPI_STATUS(AE_NOT_IMPLEMENTED); 366 return_ACPI_STATUS(AE_NOT_IMPLEMENTED);
362 } 367 }
363 368
@@ -447,7 +452,10 @@ acpi_status acpi_ds_exec_end_op(struct acpi_walk_state *walk_state)
447 walk_state->operands[1]->reference.offset)) { 452 walk_state->operands[1]->reference.offset)) {
448 status = AE_OK; 453 status = AE_OK;
449 } else { 454 } else {
450 ACPI_REPORT_ERROR(("[%s]: Could not resolve operands, %s\n", acpi_ps_get_opcode_name(walk_state->opcode), acpi_format_exception(status))); 455 ACPI_EXCEPTION((AE_INFO, status,
456 "While resolving operands for [%s]",
457 acpi_ps_get_opcode_name
458 (walk_state->opcode)));
451 } 459 }
452 } 460 }
453 461
@@ -666,8 +674,8 @@ acpi_status acpi_ds_exec_end_op(struct acpi_walk_state *walk_state)
666 674
667 case AML_TYPE_UNDEFINED: 675 case AML_TYPE_UNDEFINED:
668 676
669 ACPI_REPORT_ERROR(("Undefined opcode type Op=%p\n", 677 ACPI_ERROR((AE_INFO,
670 op)); 678 "Undefined opcode type Op=%p", op));
671 return_ACPI_STATUS(AE_NOT_IMPLEMENTED); 679 return_ACPI_STATUS(AE_NOT_IMPLEMENTED);
672 680
673 case AML_TYPE_BOGUS: 681 case AML_TYPE_BOGUS:
@@ -679,7 +687,10 @@ acpi_status acpi_ds_exec_end_op(struct acpi_walk_state *walk_state)
679 687
680 default: 688 default:
681 689
682 ACPI_REPORT_ERROR(("Unimplemented opcode, class=%X type=%X Opcode=%X Op=%p\n", op_class, op_type, op->common.aml_opcode, op)); 690 ACPI_ERROR((AE_INFO,
691 "Unimplemented opcode, class=%X type=%X Opcode=%X Op=%p",
692 op_class, op_type, op->common.aml_opcode,
693 op));
683 694
684 status = AE_NOT_IMPLEMENTED; 695 status = AE_NOT_IMPLEMENTED;
685 break; 696 break;