aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi/executer/exfldio.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/exfldio.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/exfldio.c')
-rw-r--r--drivers/acpi/executer/exfldio.c65
1 files changed, 42 insertions, 23 deletions
diff --git a/drivers/acpi/executer/exfldio.c b/drivers/acpi/executer/exfldio.c
index 9fe27fd04a2f..bd1af35f7fcf 100644
--- a/drivers/acpi/executer/exfldio.c
+++ b/drivers/acpi/executer/exfldio.c
@@ -94,9 +94,9 @@ acpi_ex_setup_region(union acpi_operand_object *obj_desc,
94 /* We must have a valid region */ 94 /* We must have a valid region */
95 95
96 if (ACPI_GET_OBJECT_TYPE(rgn_desc) != ACPI_TYPE_REGION) { 96 if (ACPI_GET_OBJECT_TYPE(rgn_desc) != ACPI_TYPE_REGION) {
97 ACPI_REPORT_ERROR(("Needed Region, found type %X (%s)\n", 97 ACPI_ERROR((AE_INFO, "Needed Region, found type %X (%s)",
98 ACPI_GET_OBJECT_TYPE(rgn_desc), 98 ACPI_GET_OBJECT_TYPE(rgn_desc),
99 acpi_ut_get_object_type_name(rgn_desc))); 99 acpi_ut_get_object_type_name(rgn_desc)));
100 100
101 return_ACPI_STATUS(AE_AML_OPERAND_TYPE); 101 return_ACPI_STATUS(AE_AML_OPERAND_TYPE);
102 } 102 }
@@ -161,14 +161,28 @@ acpi_ex_setup_region(union acpi_operand_object *obj_desc,
161 * than the region itself. For example, a region of length one 161 * than the region itself. For example, a region of length one
162 * byte, and a field with Dword access specified. 162 * byte, and a field with Dword access specified.
163 */ 163 */
164 ACPI_REPORT_ERROR(("Field [%4.4s] access width (%d bytes) too large for region [%4.4s] (length %X)\n", acpi_ut_get_node_name(obj_desc->common_field.node), obj_desc->common_field.access_byte_width, acpi_ut_get_node_name(rgn_desc->region.node), rgn_desc->region.length)); 164 ACPI_ERROR((AE_INFO,
165 "Field [%4.4s] access width (%d bytes) too large for region [%4.4s] (length %X)",
166 acpi_ut_get_node_name(obj_desc->
167 common_field.node),
168 obj_desc->common_field.access_byte_width,
169 acpi_ut_get_node_name(rgn_desc->region.
170 node),
171 rgn_desc->region.length));
165 } 172 }
166 173
167 /* 174 /*
168 * Offset rounded up to next multiple of field width 175 * Offset rounded up to next multiple of field width
169 * exceeds region length, indicate an error 176 * exceeds region length, indicate an error
170 */ 177 */
171 ACPI_REPORT_ERROR(("Field [%4.4s] Base+Offset+Width %X+%X+%X is beyond end of region [%4.4s] (length %X)\n", acpi_ut_get_node_name(obj_desc->common_field.node), obj_desc->common_field.base_byte_offset, field_datum_byte_offset, obj_desc->common_field.access_byte_width, acpi_ut_get_node_name(rgn_desc->region.node), rgn_desc->region.length)); 178 ACPI_ERROR((AE_INFO,
179 "Field [%4.4s] Base+Offset+Width %X+%X+%X is beyond end of region [%4.4s] (length %X)",
180 acpi_ut_get_node_name(obj_desc->common_field.node),
181 obj_desc->common_field.base_byte_offset,
182 field_datum_byte_offset,
183 obj_desc->common_field.access_byte_width,
184 acpi_ut_get_node_name(rgn_desc->region.node),
185 rgn_desc->region.length));
172 186
173 return_ACPI_STATUS(AE_AML_REGION_LIMIT); 187 return_ACPI_STATUS(AE_AML_REGION_LIMIT);
174 } 188 }
@@ -252,17 +266,17 @@ acpi_ex_access_region(union acpi_operand_object *obj_desc,
252 266
253 if (ACPI_FAILURE(status)) { 267 if (ACPI_FAILURE(status)) {
254 if (status == AE_NOT_IMPLEMENTED) { 268 if (status == AE_NOT_IMPLEMENTED) {
255 ACPI_REPORT_ERROR(("Region %s(%X) not implemented\n", 269 ACPI_ERROR((AE_INFO,
256 acpi_ut_get_region_name(rgn_desc-> 270 "Region %s(%X) not implemented",
257 region. 271 acpi_ut_get_region_name(rgn_desc->region.
258 space_id), 272 space_id),
259 rgn_desc->region.space_id)); 273 rgn_desc->region.space_id));
260 } else if (status == AE_NOT_EXIST) { 274 } else if (status == AE_NOT_EXIST) {
261 ACPI_REPORT_ERROR(("Region %s(%X) has no handler\n", 275 ACPI_ERROR((AE_INFO,
262 acpi_ut_get_region_name(rgn_desc-> 276 "Region %s(%X) has no handler",
263 region. 277 acpi_ut_get_region_name(rgn_desc->region.
264 space_id), 278 space_id),
265 rgn_desc->region.space_id)); 279 rgn_desc->region.space_id));
266 } 280 }
267 } 281 }
268 282
@@ -495,8 +509,8 @@ acpi_ex_field_datum_io(union acpi_operand_object *obj_desc,
495 509
496 default: 510 default:
497 511
498 ACPI_REPORT_ERROR(("Wrong object type in field I/O %X\n", 512 ACPI_ERROR((AE_INFO, "Wrong object type in field I/O %X",
499 ACPI_GET_OBJECT_TYPE(obj_desc))); 513 ACPI_GET_OBJECT_TYPE(obj_desc)));
500 status = AE_AML_INTERNAL; 514 status = AE_AML_INTERNAL;
501 break; 515 break;
502 } 516 }
@@ -599,10 +613,11 @@ acpi_ex_write_with_update_rule(union acpi_operand_object *obj_desc,
599 613
600 default: 614 default:
601 615
602 ACPI_REPORT_ERROR(("Unknown update_rule value: %X\n", 616 ACPI_ERROR((AE_INFO,
603 (obj_desc->common_field. 617 "Unknown update_rule value: %X",
604 field_flags & 618 (obj_desc->common_field.
605 AML_FIELD_UPDATE_RULE_MASK))); 619 field_flags &
620 AML_FIELD_UPDATE_RULE_MASK)));
606 return_ACPI_STATUS(AE_AML_OPERAND_VALUE); 621 return_ACPI_STATUS(AE_AML_OPERAND_VALUE);
607 } 622 }
608 } 623 }
@@ -657,7 +672,9 @@ acpi_ex_extract_from_field(union acpi_operand_object *obj_desc,
657 672
658 if (buffer_length < 673 if (buffer_length <
659 ACPI_ROUND_BITS_UP_TO_BYTES(obj_desc->common_field.bit_length)) { 674 ACPI_ROUND_BITS_UP_TO_BYTES(obj_desc->common_field.bit_length)) {
660 ACPI_REPORT_ERROR(("Field size %X (bits) is too large for buffer (%X)\n", obj_desc->common_field.bit_length, buffer_length)); 675 ACPI_ERROR((AE_INFO,
676 "Field size %X (bits) is too large for buffer (%X)",
677 obj_desc->common_field.bit_length, buffer_length));
661 678
662 return_ACPI_STATUS(AE_BUFFER_OVERFLOW); 679 return_ACPI_STATUS(AE_BUFFER_OVERFLOW);
663 } 680 }
@@ -769,7 +786,9 @@ acpi_ex_insert_into_field(union acpi_operand_object *obj_desc,
769 786
770 if (buffer_length < 787 if (buffer_length <
771 ACPI_ROUND_BITS_UP_TO_BYTES(obj_desc->common_field.bit_length)) { 788 ACPI_ROUND_BITS_UP_TO_BYTES(obj_desc->common_field.bit_length)) {
772 ACPI_REPORT_ERROR(("Field size %X (bits) is too large for buffer (%X)\n", obj_desc->common_field.bit_length, buffer_length)); 789 ACPI_ERROR((AE_INFO,
790 "Field size %X (bits) is too large for buffer (%X)",
791 obj_desc->common_field.bit_length, buffer_length));
773 792
774 return_ACPI_STATUS(AE_BUFFER_OVERFLOW); 793 return_ACPI_STATUS(AE_BUFFER_OVERFLOW);
775 } 794 }