aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi/events/evgpeblk.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/events/evgpeblk.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/events/evgpeblk.c')
-rw-r--r--drivers/acpi/events/evgpeblk.c50
1 files changed, 33 insertions, 17 deletions
diff --git a/drivers/acpi/events/evgpeblk.c b/drivers/acpi/events/evgpeblk.c
index 3b9bbdda551d..0fd00b5ad650 100644
--- a/drivers/acpi/events/evgpeblk.c
+++ b/drivers/acpi/events/evgpeblk.c
@@ -136,7 +136,7 @@ acpi_status acpi_ev_walk_gpe_list(ACPI_GPE_CALLBACK gpe_walk_callback)
136 struct acpi_gpe_block_info *gpe_block; 136 struct acpi_gpe_block_info *gpe_block;
137 struct acpi_gpe_xrupt_info *gpe_xrupt_info; 137 struct acpi_gpe_xrupt_info *gpe_xrupt_info;
138 acpi_status status = AE_OK; 138 acpi_status status = AE_OK;
139 acpi_native_uint flags; 139 acpi_cpu_flags flags;
140 140
141 ACPI_FUNCTION_TRACE("ev_walk_gpe_list"); 141 ACPI_FUNCTION_TRACE("ev_walk_gpe_list");
142 142
@@ -279,7 +279,9 @@ acpi_ev_save_method_info(acpi_handle obj_handle,
279 default: 279 default:
280 /* Unknown method type, just ignore it! */ 280 /* Unknown method type, just ignore it! */
281 281
282 ACPI_REPORT_ERROR(("Unknown GPE method type: %s (name not of form _Lxx or _Exx)\n", name)); 282 ACPI_ERROR((AE_INFO,
283 "Unknown GPE method type: %s (name not of form _Lxx or _Exx)",
284 name));
283 return_ACPI_STATUS(AE_OK); 285 return_ACPI_STATUS(AE_OK);
284 } 286 }
285 287
@@ -289,7 +291,9 @@ acpi_ev_save_method_info(acpi_handle obj_handle,
289 if (gpe_number == ACPI_UINT32_MAX) { 291 if (gpe_number == ACPI_UINT32_MAX) {
290 /* Conversion failed; invalid method, just ignore it */ 292 /* Conversion failed; invalid method, just ignore it */
291 293
292 ACPI_REPORT_ERROR(("Could not extract GPE number from name: %s (name is not of form _Lxx or _Exx)\n", name)); 294 ACPI_ERROR((AE_INFO,
295 "Could not extract GPE number from name: %s (name is not of form _Lxx or _Exx)",
296 name));
293 return_ACPI_STATUS(AE_OK); 297 return_ACPI_STATUS(AE_OK);
294 } 298 }
295 299
@@ -476,7 +480,7 @@ static struct acpi_gpe_xrupt_info *acpi_ev_get_gpe_xrupt_block(u32
476 struct acpi_gpe_xrupt_info *next_gpe_xrupt; 480 struct acpi_gpe_xrupt_info *next_gpe_xrupt;
477 struct acpi_gpe_xrupt_info *gpe_xrupt; 481 struct acpi_gpe_xrupt_info *gpe_xrupt;
478 acpi_status status; 482 acpi_status status;
479 acpi_native_uint flags; 483 acpi_cpu_flags flags;
480 484
481 ACPI_FUNCTION_TRACE("ev_get_gpe_xrupt_block"); 485 ACPI_FUNCTION_TRACE("ev_get_gpe_xrupt_block");
482 486
@@ -523,7 +527,9 @@ static struct acpi_gpe_xrupt_info *acpi_ev_get_gpe_xrupt_block(u32
523 acpi_ev_gpe_xrupt_handler, 527 acpi_ev_gpe_xrupt_handler,
524 gpe_xrupt); 528 gpe_xrupt);
525 if (ACPI_FAILURE(status)) { 529 if (ACPI_FAILURE(status)) {
526 ACPI_REPORT_ERROR(("Could not install GPE interrupt handler at level 0x%X\n", interrupt_number)); 530 ACPI_ERROR((AE_INFO,
531 "Could not install GPE interrupt handler at level 0x%X",
532 interrupt_number));
527 return_PTR(NULL); 533 return_PTR(NULL);
528 } 534 }
529 } 535 }
@@ -548,7 +554,7 @@ static acpi_status
548acpi_ev_delete_gpe_xrupt(struct acpi_gpe_xrupt_info *gpe_xrupt) 554acpi_ev_delete_gpe_xrupt(struct acpi_gpe_xrupt_info *gpe_xrupt)
549{ 555{
550 acpi_status status; 556 acpi_status status;
551 acpi_native_uint flags; 557 acpi_cpu_flags flags;
552 558
553 ACPI_FUNCTION_TRACE("ev_delete_gpe_xrupt"); 559 ACPI_FUNCTION_TRACE("ev_delete_gpe_xrupt");
554 560
@@ -606,7 +612,7 @@ acpi_ev_install_gpe_block(struct acpi_gpe_block_info *gpe_block,
606 struct acpi_gpe_block_info *next_gpe_block; 612 struct acpi_gpe_block_info *next_gpe_block;
607 struct acpi_gpe_xrupt_info *gpe_xrupt_block; 613 struct acpi_gpe_xrupt_info *gpe_xrupt_block;
608 acpi_status status; 614 acpi_status status;
609 acpi_native_uint flags; 615 acpi_cpu_flags flags;
610 616
611 ACPI_FUNCTION_TRACE("ev_install_gpe_block"); 617 ACPI_FUNCTION_TRACE("ev_install_gpe_block");
612 618
@@ -659,7 +665,7 @@ acpi_ev_install_gpe_block(struct acpi_gpe_block_info *gpe_block,
659acpi_status acpi_ev_delete_gpe_block(struct acpi_gpe_block_info *gpe_block) 665acpi_status acpi_ev_delete_gpe_block(struct acpi_gpe_block_info *gpe_block)
660{ 666{
661 acpi_status status; 667 acpi_status status;
662 acpi_native_uint flags; 668 acpi_cpu_flags flags;
663 669
664 ACPI_FUNCTION_TRACE("ev_install_gpe_block"); 670 ACPI_FUNCTION_TRACE("ev_install_gpe_block");
665 671
@@ -739,7 +745,8 @@ acpi_ev_create_gpe_info_blocks(struct acpi_gpe_block_info *gpe_block)
739 sizeof(struct 745 sizeof(struct
740 acpi_gpe_register_info)); 746 acpi_gpe_register_info));
741 if (!gpe_register_info) { 747 if (!gpe_register_info) {
742 ACPI_REPORT_ERROR(("Could not allocate the gpe_register_info table\n")); 748 ACPI_ERROR((AE_INFO,
749 "Could not allocate the gpe_register_info table"));
743 return_ACPI_STATUS(AE_NO_MEMORY); 750 return_ACPI_STATUS(AE_NO_MEMORY);
744 } 751 }
745 752
@@ -752,7 +759,8 @@ acpi_ev_create_gpe_info_blocks(struct acpi_gpe_block_info *gpe_block)
752 ACPI_GPE_REGISTER_WIDTH) * 759 ACPI_GPE_REGISTER_WIDTH) *
753 sizeof(struct acpi_gpe_event_info)); 760 sizeof(struct acpi_gpe_event_info));
754 if (!gpe_event_info) { 761 if (!gpe_event_info) {
755 ACPI_REPORT_ERROR(("Could not allocate the gpe_event_info table\n")); 762 ACPI_ERROR((AE_INFO,
763 "Could not allocate the gpe_event_info table"));
756 status = AE_NO_MEMORY; 764 status = AE_NO_MEMORY;
757 goto error_exit; 765 goto error_exit;
758 } 766 }
@@ -1032,8 +1040,8 @@ acpi_ev_initialize_gpe_block(struct acpi_namespace_node *gpe_device,
1032 1040
1033 status = acpi_hw_enable_runtime_gpe_block(NULL, gpe_block); 1041 status = acpi_hw_enable_runtime_gpe_block(NULL, gpe_block);
1034 if (ACPI_FAILURE(status)) { 1042 if (ACPI_FAILURE(status)) {
1035 ACPI_REPORT_ERROR(("Could not enable GPEs in gpe_block %p\n", 1043 ACPI_ERROR((AE_INFO, "Could not enable GPEs in gpe_block %p",
1036 gpe_block)); 1044 gpe_block));
1037 } 1045 }
1038 1046
1039 return_ACPI_STATUS(status); 1047 return_ACPI_STATUS(status);
@@ -1107,8 +1115,8 @@ acpi_status acpi_ev_gpe_initialize(void)
1107 &acpi_gbl_gpe_fadt_blocks[0]); 1115 &acpi_gbl_gpe_fadt_blocks[0]);
1108 1116
1109 if (ACPI_FAILURE(status)) { 1117 if (ACPI_FAILURE(status)) {
1110 ACPI_REPORT_ERROR(("Could not create GPE Block 0, %s\n", 1118 ACPI_EXCEPTION((AE_INFO, status,
1111 acpi_format_exception(status))); 1119 "Could not create GPE Block 0"));
1112 } 1120 }
1113 } 1121 }
1114 1122
@@ -1121,7 +1129,12 @@ acpi_status acpi_ev_gpe_initialize(void)
1121 1129
1122 if ((register_count0) && 1130 if ((register_count0) &&
1123 (gpe_number_max >= acpi_gbl_FADT->gpe1_base)) { 1131 (gpe_number_max >= acpi_gbl_FADT->gpe1_base)) {
1124 ACPI_REPORT_ERROR(("GPE0 block (GPE 0 to %d) overlaps the GPE1 block (GPE %d to %d) - Ignoring GPE1\n", gpe_number_max, acpi_gbl_FADT->gpe1_base, acpi_gbl_FADT->gpe1_base + ((register_count1 * ACPI_GPE_REGISTER_WIDTH) - 1))); 1132 ACPI_ERROR((AE_INFO,
1133 "GPE0 block (GPE 0 to %d) overlaps the GPE1 block (GPE %d to %d) - Ignoring GPE1",
1134 gpe_number_max, acpi_gbl_FADT->gpe1_base,
1135 acpi_gbl_FADT->gpe1_base +
1136 ((register_count1 *
1137 ACPI_GPE_REGISTER_WIDTH) - 1)));
1125 1138
1126 /* Ignore GPE1 block by setting the register count to zero */ 1139 /* Ignore GPE1 block by setting the register count to zero */
1127 1140
@@ -1139,7 +1152,8 @@ acpi_status acpi_ev_gpe_initialize(void)
1139 [1]); 1152 [1]);
1140 1153
1141 if (ACPI_FAILURE(status)) { 1154 if (ACPI_FAILURE(status)) {
1142 ACPI_REPORT_ERROR(("Could not create GPE Block 1, %s\n", acpi_format_exception(status))); 1155 ACPI_EXCEPTION((AE_INFO, status,
1156 "Could not create GPE Block 1"));
1143 } 1157 }
1144 1158
1145 /* 1159 /*
@@ -1165,7 +1179,9 @@ acpi_status acpi_ev_gpe_initialize(void)
1165 /* Check for Max GPE number out-of-range */ 1179 /* Check for Max GPE number out-of-range */
1166 1180
1167 if (gpe_number_max > ACPI_GPE_MAX) { 1181 if (gpe_number_max > ACPI_GPE_MAX) {
1168 ACPI_REPORT_ERROR(("Maximum GPE number from FADT is too large: 0x%X\n", gpe_number_max)); 1182 ACPI_ERROR((AE_INFO,
1183 "Maximum GPE number from FADT is too large: 0x%X",
1184 gpe_number_max));
1169 status = AE_BAD_VALUE; 1185 status = AE_BAD_VALUE;
1170 goto cleanup; 1186 goto cleanup;
1171 } 1187 }