aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi/tables
diff options
context:
space:
mode:
authorBob Moore <robert.moore@intel.com>2006-10-02 00:00:00 -0400
committerLen Brown <len.brown@intel.com>2006-03-31 02:19:03 -0500
commit52fc0b026e99b5d5d585095148d997d5634bbc25 (patch)
tree7bf93132cfd3e6957308a84198ee159f7d43cf6f /drivers/acpi/tables
parent46358614ed5b031797522f1020e989c959a8d8a6 (diff)
[ACPI] ACPICA 20060210
Removed a couple of extraneous ACPI_ERROR messages that appeared during normal execution. These became apparent after the conversion from ACPI_DEBUG_PRINT. Fixed a problem where the CreateField operator could hang if the BitIndex or NumBits parameter referred to a named object. From Valery Podrezov. http://bugzilla.kernel.org/show_bug.cgi?id=5359 Fixed a problem where a DeRefOf operation on a buffer object incorrectly failed with an exception. This also fixes a couple of related RefOf and DeRefOf issues. From Valery Podrezov. http://bugzilla.kernel.org/show_bug.cgi?id=5360 http://bugzilla.kernel.org/show_bug.cgi?id=5387 http://bugzilla.kernel.org/show_bug.cgi?id=5392 Fixed a problem where the AE_BUFFER_LIMIT exception was returned instead of AE_STRING_LIMIT on an out-of-bounds Index() operation. From Valery Podrezov. http://bugzilla.kernel.org/show_bug.cgi?id=5480 Implemented a memory cleanup at the end of the execution of each iteration of an AML While() loop, preventing the accumulation of outstanding objects. From Valery Podrezov. http://bugzilla.kernel.org/show_bug.cgi?id=5427 Eliminated a chunk of duplicate code in the object resolution code. From Valery Podrezov. http://bugzilla.kernel.org/show_bug.cgi?id=5336 Fixed several warnings during the 64-bit code generation. Signed-off-by: Bob Moore <robert.moore@intel.com> Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'drivers/acpi/tables')
-rw-r--r--drivers/acpi/tables/tbconvrt.c3
-rw-r--r--drivers/acpi/tables/tbget.c9
-rw-r--r--drivers/acpi/tables/tbgetall.c1
-rw-r--r--drivers/acpi/tables/tbinstal.c1
-rw-r--r--drivers/acpi/tables/tbrsdt.c1
-rw-r--r--drivers/acpi/tables/tbutils.c2
-rw-r--r--drivers/acpi/tables/tbxface.c3
-rw-r--r--drivers/acpi/tables/tbxfroot.c11
8 files changed, 31 insertions, 0 deletions
diff --git a/drivers/acpi/tables/tbconvrt.c b/drivers/acpi/tables/tbconvrt.c
index 03b37d2223bc..254ebdbb7bef 100644
--- a/drivers/acpi/tables/tbconvrt.c
+++ b/drivers/acpi/tables/tbconvrt.c
@@ -147,6 +147,7 @@ acpi_status acpi_tb_convert_to_xsdt(struct acpi_table_desc *table_info)
147 /* Copy the table pointers */ 147 /* Copy the table pointers */
148 148
149 for (i = 0; i < acpi_gbl_rsdt_table_count; i++) { 149 for (i = 0; i < acpi_gbl_rsdt_table_count; i++) {
150
150 /* RSDT pointers are 32 bits, XSDT pointers are 64 bits */ 151 /* RSDT pointers are 32 bits, XSDT pointers are 64 bits */
151 152
152 if (acpi_gbl_root_table_type == ACPI_TABLE_TYPE_RSDT) { 153 if (acpi_gbl_root_table_type == ACPI_TABLE_TYPE_RSDT) {
@@ -515,6 +516,7 @@ acpi_status acpi_tb_convert_table_fadt(void)
515 516
516 if (acpi_gbl_FADT->revision >= FADT2_REVISION_ID) { 517 if (acpi_gbl_FADT->revision >= FADT2_REVISION_ID) {
517 if (acpi_gbl_FADT->length < sizeof(struct fadt_descriptor_rev2)) { 518 if (acpi_gbl_FADT->length < sizeof(struct fadt_descriptor_rev2)) {
519
518 /* Length is too short to be a V2.0 table */ 520 /* Length is too short to be a V2.0 table */
519 521
520 ACPI_WARNING((AE_INFO, 522 ACPI_WARNING((AE_INFO,
@@ -603,6 +605,7 @@ acpi_status acpi_tb_build_common_facs(struct acpi_table_desc *table_info)
603 if ((acpi_gbl_RSDP->revision < 2) || 605 if ((acpi_gbl_RSDP->revision < 2) ||
604 (acpi_gbl_FACS->length < 32) || 606 (acpi_gbl_FACS->length < 32) ||
605 (!(acpi_gbl_FACS->xfirmware_waking_vector))) { 607 (!(acpi_gbl_FACS->xfirmware_waking_vector))) {
608
606 /* ACPI 1.0 FACS or short table or optional X_ field is zero */ 609 /* ACPI 1.0 FACS or short table or optional X_ field is zero */
607 610
608 acpi_gbl_common_fACS.firmware_waking_vector = ACPI_CAST_PTR(u64, 611 acpi_gbl_common_fACS.firmware_waking_vector = ACPI_CAST_PTR(u64,
diff --git a/drivers/acpi/tables/tbget.c b/drivers/acpi/tables/tbget.c
index 09b4ee6dfd60..4615e1afe8de 100644
--- a/drivers/acpi/tables/tbget.c
+++ b/drivers/acpi/tables/tbget.c
@@ -148,6 +148,10 @@ acpi_tb_get_table_header(struct acpi_pointer *address,
148 sizeof(struct acpi_table_header), 148 sizeof(struct acpi_table_header),
149 (void *)&header); 149 (void *)&header);
150 if (ACPI_FAILURE(status)) { 150 if (ACPI_FAILURE(status)) {
151 ACPI_ERROR((AE_INFO,
152 "Could not map memory at %8.8X%8.8X for table header",
153 ACPI_FORMAT_UINT64(address->pointer.
154 physical)));
151 return_ACPI_STATUS(status); 155 return_ACPI_STATUS(status);
152 } 156 }
153 157
@@ -208,6 +212,7 @@ acpi_tb_get_table_body(struct acpi_pointer *address,
208 212
209 status = acpi_tb_table_override(header, table_info); 213 status = acpi_tb_table_override(header, table_info);
210 if (ACPI_SUCCESS(status)) { 214 if (ACPI_SUCCESS(status)) {
215
211 /* Table was overridden by the host OS */ 216 /* Table was overridden by the host OS */
212 217
213 return_ACPI_STATUS(status); 218 return_ACPI_STATUS(status);
@@ -250,6 +255,7 @@ acpi_tb_table_override(struct acpi_table_header *header,
250 */ 255 */
251 status = acpi_os_table_override(header, &new_table); 256 status = acpi_os_table_override(header, &new_table);
252 if (ACPI_FAILURE(status)) { 257 if (ACPI_FAILURE(status)) {
258
253 /* Some severe error from the OSL, but we basically ignore it */ 259 /* Some severe error from the OSL, but we basically ignore it */
254 260
255 ACPI_EXCEPTION((AE_INFO, status, 261 ACPI_EXCEPTION((AE_INFO, status,
@@ -258,6 +264,7 @@ acpi_tb_table_override(struct acpi_table_header *header,
258 } 264 }
259 265
260 if (!new_table) { 266 if (!new_table) {
267
261 /* No table override */ 268 /* No table override */
262 269
263 return_ACPI_STATUS(AE_NO_ACPI_TABLES); 270 return_ACPI_STATUS(AE_NO_ACPI_TABLES);
@@ -381,6 +388,7 @@ acpi_tb_get_this_table(struct acpi_pointer *address,
381 388
382#if (!ACPI_CHECKSUM_ABORT) 389#if (!ACPI_CHECKSUM_ABORT)
383 if (ACPI_FAILURE(status)) { 390 if (ACPI_FAILURE(status)) {
391
384 /* Ignore the error if configuration says so */ 392 /* Ignore the error if configuration says so */
385 393
386 status = AE_OK; 394 status = AE_OK;
@@ -440,6 +448,7 @@ acpi_tb_get_table_ptr(acpi_table_type table_type,
440 * instance is always in the list head. 448 * instance is always in the list head.
441 */ 449 */
442 if (instance == 1) { 450 if (instance == 1) {
451
443 /* Get the first */ 452 /* Get the first */
444 453
445 *table_ptr_loc = NULL; 454 *table_ptr_loc = NULL;
diff --git a/drivers/acpi/tables/tbgetall.c b/drivers/acpi/tables/tbgetall.c
index 134e5dce0bc1..b4ec61d7cf06 100644
--- a/drivers/acpi/tables/tbgetall.c
+++ b/drivers/acpi/tables/tbgetall.c
@@ -223,6 +223,7 @@ acpi_status acpi_tb_get_required_tables(void)
223 * any SSDTs. 223 * any SSDTs.
224 */ 224 */
225 for (i = 0; i < acpi_gbl_rsdt_table_count; i++) { 225 for (i = 0; i < acpi_gbl_rsdt_table_count; i++) {
226
226 /* Get the table address from the common internal XSDT */ 227 /* Get the table address from the common internal XSDT */
227 228
228 address.pointer.value = acpi_gbl_XSDT->table_offset_entry[i]; 229 address.pointer.value = acpi_gbl_XSDT->table_offset_entry[i];
diff --git a/drivers/acpi/tables/tbinstal.c b/drivers/acpi/tables/tbinstal.c
index 7ffd0fddb4e5..ec2cb978b7c4 100644
--- a/drivers/acpi/tables/tbinstal.c
+++ b/drivers/acpi/tables/tbinstal.c
@@ -84,6 +84,7 @@ acpi_tb_match_signature(char *signature,
84 84
85 if (!ACPI_STRNCMP(signature, acpi_gbl_table_data[i].signature, 85 if (!ACPI_STRNCMP(signature, acpi_gbl_table_data[i].signature,
86 acpi_gbl_table_data[i].sig_length)) { 86 acpi_gbl_table_data[i].sig_length)) {
87
87 /* Found a signature match, return index if requested */ 88 /* Found a signature match, return index if requested */
88 89
89 if (table_info) { 90 if (table_info) {
diff --git a/drivers/acpi/tables/tbrsdt.c b/drivers/acpi/tables/tbrsdt.c
index 4d308220225d..946d2f2d611d 100644
--- a/drivers/acpi/tables/tbrsdt.c
+++ b/drivers/acpi/tables/tbrsdt.c
@@ -190,6 +190,7 @@ acpi_status acpi_tb_validate_rsdt(struct acpi_table_header *table_ptr)
190 } 190 }
191 191
192 if (no_match) { 192 if (no_match) {
193
193 /* Invalid RSDT or XSDT signature */ 194 /* Invalid RSDT or XSDT signature */
194 195
195 ACPI_ERROR((AE_INFO, 196 ACPI_ERROR((AE_INFO,
diff --git a/drivers/acpi/tables/tbutils.c b/drivers/acpi/tables/tbutils.c
index bc571592f087..b463d4b88823 100644
--- a/drivers/acpi/tables/tbutils.c
+++ b/drivers/acpi/tables/tbutils.c
@@ -96,6 +96,7 @@ acpi_status acpi_tb_is_table_installed(struct acpi_table_desc *new_table_desc)
96 (!ACPI_MEMCMP 96 (!ACPI_MEMCMP
97 (table_desc->pointer, new_table_desc->pointer, 97 (table_desc->pointer, new_table_desc->pointer,
98 new_table_desc->pointer->length))) { 98 new_table_desc->pointer->length))) {
99
99 /* Match: this table is already installed */ 100 /* Match: this table is already installed */
100 101
101 ACPI_DEBUG_PRINT((ACPI_DB_TABLES, 102 ACPI_DEBUG_PRINT((ACPI_DB_TABLES,
@@ -249,6 +250,7 @@ u8 acpi_tb_generate_checksum(void *buffer, u32 length)
249 u8 sum = 0; 250 u8 sum = 0;
250 251
251 if (buffer && length) { 252 if (buffer && length) {
253
252 /* Buffer and Length are valid */ 254 /* Buffer and Length are valid */
253 255
254 end_buffer = ACPI_ADD_PTR(u8, buffer, length); 256 end_buffer = ACPI_ADD_PTR(u8, buffer, length);
diff --git a/drivers/acpi/tables/tbxface.c b/drivers/acpi/tables/tbxface.c
index 9fe53c9d5b9a..3e902cdb83e1 100644
--- a/drivers/acpi/tables/tbxface.c
+++ b/drivers/acpi/tables/tbxface.c
@@ -174,6 +174,7 @@ acpi_status acpi_load_table(struct acpi_table_header *table_ptr)
174 status = acpi_tb_install_table(&table_info); 174 status = acpi_tb_install_table(&table_info);
175 if (ACPI_FAILURE(status)) { 175 if (ACPI_FAILURE(status)) {
176 if (status == AE_ALREADY_EXISTS) { 176 if (status == AE_ALREADY_EXISTS) {
177
177 /* Table already exists, no error */ 178 /* Table already exists, no error */
178 179
179 status = AE_OK; 180 status = AE_OK;
@@ -208,6 +209,7 @@ acpi_status acpi_load_table(struct acpi_table_header *table_ptr)
208 } 209 }
209 210
210 if (ACPI_FAILURE(status)) { 211 if (ACPI_FAILURE(status)) {
212
211 /* Uninstall table and free the buffer */ 213 /* Uninstall table and free the buffer */
212 214
213 (void)acpi_tb_uninstall_table(table_info.installed_desc); 215 (void)acpi_tb_uninstall_table(table_info.installed_desc);
@@ -397,6 +399,7 @@ acpi_get_table(acpi_table_type table_type,
397 /* Get the table length */ 399 /* Get the table length */
398 400
399 if (table_type == ACPI_TABLE_RSDP) { 401 if (table_type == ACPI_TABLE_RSDP) {
402
400 /* RSD PTR is the only "table" without a header */ 403 /* RSD PTR is the only "table" without a header */
401 404
402 table_length = sizeof(struct rsdp_descriptor); 405 table_length = sizeof(struct rsdp_descriptor);
diff --git a/drivers/acpi/tables/tbxfroot.c b/drivers/acpi/tables/tbxfroot.c
index a62db6af83c9..7f68b759f15a 100644
--- a/drivers/acpi/tables/tbxfroot.c
+++ b/drivers/acpi/tables/tbxfroot.c
@@ -75,6 +75,7 @@ acpi_status acpi_tb_validate_rsdp(struct rsdp_descriptor *rsdp)
75 * The signature and checksum must both be correct 75 * The signature and checksum must both be correct
76 */ 76 */
77 if (ACPI_STRNCMP((char *)rsdp, RSDP_SIG, sizeof(RSDP_SIG) - 1) != 0) { 77 if (ACPI_STRNCMP((char *)rsdp, RSDP_SIG, sizeof(RSDP_SIG) - 1) != 0) {
78
78 /* Nope, BAD Signature */ 79 /* Nope, BAD Signature */
79 80
80 return (AE_BAD_SIGNATURE); 81 return (AE_BAD_SIGNATURE);
@@ -217,6 +218,7 @@ acpi_get_firmware_table(acpi_string signature,
217 /* Ensure that we have a RSDP */ 218 /* Ensure that we have a RSDP */
218 219
219 if (!acpi_gbl_RSDP) { 220 if (!acpi_gbl_RSDP) {
221
220 /* Get the RSDP */ 222 /* Get the RSDP */
221 223
222 status = acpi_os_get_root_pointer(flags, &address); 224 status = acpi_os_get_root_pointer(flags, &address);
@@ -327,10 +329,12 @@ acpi_get_firmware_table(acpi_string signature,
327 /* Compare table signatures and table instance */ 329 /* Compare table signatures and table instance */
328 330
329 if (!ACPI_STRNCMP(header->signature, signature, ACPI_NAME_SIZE)) { 331 if (!ACPI_STRNCMP(header->signature, signature, ACPI_NAME_SIZE)) {
332
330 /* An instance of the table was found */ 333 /* An instance of the table was found */
331 334
332 j++; 335 j++;
333 if (j >= instance) { 336 if (j >= instance) {
337
334 /* Found the correct instance, get the entire table */ 338 /* Found the correct instance, get the entire table */
335 339
336 status = 340 status =
@@ -434,12 +438,14 @@ static u8 *acpi_tb_scan_memory_for_rsdp(u8 * start_address, u32 length)
434 438
435 for (mem_rover = start_address; mem_rover < end_address; 439 for (mem_rover = start_address; mem_rover < end_address;
436 mem_rover += ACPI_RSDP_SCAN_STEP) { 440 mem_rover += ACPI_RSDP_SCAN_STEP) {
441
437 /* The RSDP signature and checksum must both be correct */ 442 /* The RSDP signature and checksum must both be correct */
438 443
439 status = 444 status =
440 acpi_tb_validate_rsdp(ACPI_CAST_PTR 445 acpi_tb_validate_rsdp(ACPI_CAST_PTR
441 (struct rsdp_descriptor, mem_rover)); 446 (struct rsdp_descriptor, mem_rover));
442 if (ACPI_SUCCESS(status)) { 447 if (ACPI_SUCCESS(status)) {
448
443 /* Sig and checksum valid, we have found a real RSDP */ 449 /* Sig and checksum valid, we have found a real RSDP */
444 450
445 ACPI_DEBUG_PRINT((ACPI_DB_INFO, 451 ACPI_DEBUG_PRINT((ACPI_DB_INFO,
@@ -495,6 +501,7 @@ acpi_tb_find_rsdp(struct acpi_table_desc *table_info, u32 flags)
495 * Scan supports either logical addressing or physical addressing 501 * Scan supports either logical addressing or physical addressing
496 */ 502 */
497 if ((flags & ACPI_MEMORY_MODE) == ACPI_LOGICAL_ADDRESSING) { 503 if ((flags & ACPI_MEMORY_MODE) == ACPI_LOGICAL_ADDRESSING) {
504
498 /* 1a) Get the location of the Extended BIOS Data Area (EBDA) */ 505 /* 1a) Get the location of the Extended BIOS Data Area (EBDA) */
499 506
500 status = acpi_os_map_memory((acpi_physical_address) 507 status = acpi_os_map_memory((acpi_physical_address)
@@ -542,6 +549,7 @@ acpi_tb_find_rsdp(struct acpi_table_desc *table_info, u32 flags)
542 acpi_os_unmap_memory(table_ptr, ACPI_EBDA_WINDOW_SIZE); 549 acpi_os_unmap_memory(table_ptr, ACPI_EBDA_WINDOW_SIZE);
543 550
544 if (mem_rover) { 551 if (mem_rover) {
552
545 /* Return the physical address */ 553 /* Return the physical address */
546 554
547 physical_address += 555 physical_address +=
@@ -576,6 +584,7 @@ acpi_tb_find_rsdp(struct acpi_table_desc *table_info, u32 flags)
576 acpi_os_unmap_memory(table_ptr, ACPI_HI_RSDP_WINDOW_SIZE); 584 acpi_os_unmap_memory(table_ptr, ACPI_HI_RSDP_WINDOW_SIZE);
577 585
578 if (mem_rover) { 586 if (mem_rover) {
587
579 /* Return the physical address */ 588 /* Return the physical address */
580 589
581 physical_address = 590 physical_address =
@@ -609,6 +618,7 @@ acpi_tb_find_rsdp(struct acpi_table_desc *table_info, u32 flags)
609 (physical_address), 618 (physical_address),
610 ACPI_EBDA_WINDOW_SIZE); 619 ACPI_EBDA_WINDOW_SIZE);
611 if (mem_rover) { 620 if (mem_rover) {
621
612 /* Return the physical address */ 622 /* Return the physical address */
613 623
614 table_info->physical_address = 624 table_info->physical_address =
@@ -624,6 +634,7 @@ acpi_tb_find_rsdp(struct acpi_table_desc *table_info, u32 flags)
624 (ACPI_HI_RSDP_WINDOW_BASE), 634 (ACPI_HI_RSDP_WINDOW_BASE),
625 ACPI_HI_RSDP_WINDOW_SIZE); 635 ACPI_HI_RSDP_WINDOW_SIZE);
626 if (mem_rover) { 636 if (mem_rover) {
637
627 /* Found it, return the physical address */ 638 /* Found it, return the physical address */
628 639
629 table_info->physical_address = 640 table_info->physical_address =