diff options
author | Bob Moore <robert.moore@intel.com> | 2012-07-15 21:39:54 -0400 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2012-07-17 00:05:49 -0400 |
commit | 3b3ea7759ce484fffce387cf20a2dd39d1be3858 (patch) | |
tree | 734739bcfb6b2fc184fd678d74c7106d387efb78 /drivers | |
parent | 62cdd14191cdc6749fbc5e489cf80f5149c9ca15 (diff) |
ACPICA: Table manager: deploy new firmware error/warning interfaces
Emit firmware error/warning messages where appropriate for table
and FADT errors.
Signed-off-by: Bob Moore <robert.moore@intel.com>
Signed-off-by: Lin Ming <ming.m.lin@intel.com>
Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/acpi/acpica/tbfadt.c | 102 | ||||
-rw-r--r-- | drivers/acpi/acpica/tbinstal.c | 15 | ||||
-rw-r--r-- | drivers/acpi/acpica/tbutils.c | 34 | ||||
-rw-r--r-- | drivers/acpi/acpica/tbxfroot.c | 2 |
4 files changed, 80 insertions, 73 deletions
diff --git a/drivers/acpi/acpica/tbfadt.c b/drivers/acpi/acpica/tbfadt.c index d919f4055dba..b3e3fd030765 100644 --- a/drivers/acpi/acpica/tbfadt.c +++ b/drivers/acpi/acpica/tbfadt.c | |||
@@ -303,11 +303,11 @@ void acpi_tb_create_local_fadt(struct acpi_table_header *table, u32 length) | |||
303 | * a warning. | 303 | * a warning. |
304 | */ | 304 | */ |
305 | if (length > sizeof(struct acpi_table_fadt)) { | 305 | if (length > sizeof(struct acpi_table_fadt)) { |
306 | ACPI_WARNING((AE_INFO, | 306 | ACPI_BIOS_WARNING((AE_INFO, |
307 | "FADT (revision %u) is longer than ACPI 5.0 version, " | 307 | "FADT (revision %u) is longer than ACPI 5.0 version, " |
308 | "truncating length %u to %u", | 308 | "truncating length %u to %u", |
309 | table->revision, length, | 309 | table->revision, length, |
310 | (u32)sizeof(struct acpi_table_fadt))); | 310 | (u32)sizeof(struct acpi_table_fadt))); |
311 | } | 311 | } |
312 | 312 | ||
313 | /* Clear the entire local FADT */ | 313 | /* Clear the entire local FADT */ |
@@ -452,11 +452,13 @@ static void acpi_tb_convert_fadt(void) | |||
452 | * they must match. | 452 | * they must match. |
453 | */ | 453 | */ |
454 | if (address64->address && address32 && | 454 | if (address64->address && address32 && |
455 | (address64->address != (u64) address32)) { | 455 | (address64->address != (u64)address32)) { |
456 | ACPI_ERROR((AE_INFO, | 456 | ACPI_BIOS_ERROR((AE_INFO, |
457 | "32/64X address mismatch in %s: 0x%8.8X/0x%8.8X%8.8X, using 32", | 457 | "32/64X address mismatch in FADT/%s: " |
458 | fadt_info_table[i].name, address32, | 458 | "0x%8.8X/0x%8.8X%8.8X, using 32", |
459 | ACPI_FORMAT_UINT64(address64->address))); | 459 | fadt_info_table[i].name, address32, |
460 | ACPI_FORMAT_UINT64(address64-> | ||
461 | address))); | ||
460 | } | 462 | } |
461 | 463 | ||
462 | /* Always use 32-bit address if it is valid (non-null) */ | 464 | /* Always use 32-bit address if it is valid (non-null) */ |
@@ -511,25 +513,25 @@ static void acpi_tb_validate_fadt(void) | |||
511 | * DSDT/X_DSDT) would indicate the presence of two FACS or two DSDT tables. | 513 | * DSDT/X_DSDT) would indicate the presence of two FACS or two DSDT tables. |
512 | */ | 514 | */ |
513 | if (acpi_gbl_FADT.facs && | 515 | if (acpi_gbl_FADT.facs && |
514 | (acpi_gbl_FADT.Xfacs != (u64) acpi_gbl_FADT.facs)) { | 516 | (acpi_gbl_FADT.Xfacs != (u64)acpi_gbl_FADT.facs)) { |
515 | ACPI_WARNING((AE_INFO, | 517 | ACPI_BIOS_WARNING((AE_INFO, |
516 | "32/64X FACS address mismatch in FADT - " | 518 | "32/64X FACS address mismatch in FADT - " |
517 | "0x%8.8X/0x%8.8X%8.8X, using 32", | 519 | "0x%8.8X/0x%8.8X%8.8X, using 32", |
518 | acpi_gbl_FADT.facs, | 520 | acpi_gbl_FADT.facs, |
519 | ACPI_FORMAT_UINT64(acpi_gbl_FADT.Xfacs))); | 521 | ACPI_FORMAT_UINT64(acpi_gbl_FADT.Xfacs))); |
520 | 522 | ||
521 | acpi_gbl_FADT.Xfacs = (u64) acpi_gbl_FADT.facs; | 523 | acpi_gbl_FADT.Xfacs = (u64)acpi_gbl_FADT.facs; |
522 | } | 524 | } |
523 | 525 | ||
524 | if (acpi_gbl_FADT.dsdt && | 526 | if (acpi_gbl_FADT.dsdt && |
525 | (acpi_gbl_FADT.Xdsdt != (u64) acpi_gbl_FADT.dsdt)) { | 527 | (acpi_gbl_FADT.Xdsdt != (u64)acpi_gbl_FADT.dsdt)) { |
526 | ACPI_WARNING((AE_INFO, | 528 | ACPI_BIOS_WARNING((AE_INFO, |
527 | "32/64X DSDT address mismatch in FADT - " | 529 | "32/64X DSDT address mismatch in FADT - " |
528 | "0x%8.8X/0x%8.8X%8.8X, using 32", | 530 | "0x%8.8X/0x%8.8X%8.8X, using 32", |
529 | acpi_gbl_FADT.dsdt, | 531 | acpi_gbl_FADT.dsdt, |
530 | ACPI_FORMAT_UINT64(acpi_gbl_FADT.Xdsdt))); | 532 | ACPI_FORMAT_UINT64(acpi_gbl_FADT.Xdsdt))); |
531 | 533 | ||
532 | acpi_gbl_FADT.Xdsdt = (u64) acpi_gbl_FADT.dsdt; | 534 | acpi_gbl_FADT.Xdsdt = (u64)acpi_gbl_FADT.dsdt; |
533 | } | 535 | } |
534 | 536 | ||
535 | /* If Hardware Reduced flag is set, we are all done */ | 537 | /* If Hardware Reduced flag is set, we are all done */ |
@@ -559,10 +561,10 @@ static void acpi_tb_validate_fadt(void) | |||
559 | */ | 561 | */ |
560 | if (address64->address && | 562 | if (address64->address && |
561 | (address64->bit_width != ACPI_MUL_8(length))) { | 563 | (address64->bit_width != ACPI_MUL_8(length))) { |
562 | ACPI_WARNING((AE_INFO, | 564 | ACPI_BIOS_WARNING((AE_INFO, |
563 | "32/64X length mismatch in %s: %u/%u", | 565 | "32/64X length mismatch in FADT/%s: %u/%u", |
564 | name, ACPI_MUL_8(length), | 566 | name, ACPI_MUL_8(length), |
565 | address64->bit_width)); | 567 | address64->bit_width)); |
566 | } | 568 | } |
567 | 569 | ||
568 | if (fadt_info_table[i].type & ACPI_FADT_REQUIRED) { | 570 | if (fadt_info_table[i].type & ACPI_FADT_REQUIRED) { |
@@ -571,13 +573,13 @@ static void acpi_tb_validate_fadt(void) | |||
571 | * Both the address and length must be non-zero. | 573 | * Both the address and length must be non-zero. |
572 | */ | 574 | */ |
573 | if (!address64->address || !length) { | 575 | if (!address64->address || !length) { |
574 | ACPI_ERROR((AE_INFO, | 576 | ACPI_BIOS_ERROR((AE_INFO, |
575 | "Required field %s has zero address and/or length:" | 577 | "Required FADT field %s has zero address and/or length: " |
576 | " 0x%8.8X%8.8X/0x%X", | 578 | "0x%8.8X%8.8X/0x%X", |
577 | name, | 579 | name, |
578 | ACPI_FORMAT_UINT64(address64-> | 580 | ACPI_FORMAT_UINT64(address64-> |
579 | address), | 581 | address), |
580 | length)); | 582 | length)); |
581 | } | 583 | } |
582 | } else if (fadt_info_table[i].type & ACPI_FADT_SEPARATE_LENGTH) { | 584 | } else if (fadt_info_table[i].type & ACPI_FADT_SEPARATE_LENGTH) { |
583 | /* | 585 | /* |
@@ -587,13 +589,13 @@ static void acpi_tb_validate_fadt(void) | |||
587 | */ | 589 | */ |
588 | if ((address64->address && !length) || | 590 | if ((address64->address && !length) || |
589 | (!address64->address && length)) { | 591 | (!address64->address && length)) { |
590 | ACPI_WARNING((AE_INFO, | 592 | ACPI_BIOS_WARNING((AE_INFO, |
591 | "Optional field %s has zero address or length: " | 593 | "Optional FADT field %s has zero address or length: " |
592 | "0x%8.8X%8.8X/0x%X", | 594 | "0x%8.8X%8.8X/0x%X", |
593 | name, | 595 | name, |
594 | ACPI_FORMAT_UINT64(address64-> | 596 | ACPI_FORMAT_UINT64 |
595 | address), | 597 | (address64->address), |
596 | length)); | 598 | length)); |
597 | } | 599 | } |
598 | } | 600 | } |
599 | } | 601 | } |
@@ -638,12 +640,12 @@ static void acpi_tb_setup_fadt_registers(void) | |||
638 | (fadt_info_table[i].default_length > 0) && | 640 | (fadt_info_table[i].default_length > 0) && |
639 | (fadt_info_table[i].default_length != | 641 | (fadt_info_table[i].default_length != |
640 | target64->bit_width)) { | 642 | target64->bit_width)) { |
641 | ACPI_WARNING((AE_INFO, | 643 | ACPI_BIOS_WARNING((AE_INFO, |
642 | "Invalid length for %s: %u, using default %u", | 644 | "Invalid length for FADT/%s: %u, using default %u", |
643 | fadt_info_table[i].name, | 645 | fadt_info_table[i].name, |
644 | target64->bit_width, | 646 | target64->bit_width, |
645 | fadt_info_table[i]. | 647 | fadt_info_table[i]. |
646 | default_length)); | 648 | default_length)); |
647 | 649 | ||
648 | /* Incorrect size, set width to the default */ | 650 | /* Incorrect size, set width to the default */ |
649 | 651 | ||
diff --git a/drivers/acpi/acpica/tbinstal.c b/drivers/acpi/acpica/tbinstal.c index c03500b4cc7a..a265d4ab40ac 100644 --- a/drivers/acpi/acpica/tbinstal.c +++ b/drivers/acpi/acpica/tbinstal.c | |||
@@ -138,13 +138,14 @@ acpi_tb_add_table(struct acpi_table_desc *table_desc, u32 *table_index) | |||
138 | if ((table_desc->pointer->signature[0] != 0x00) && | 138 | if ((table_desc->pointer->signature[0] != 0x00) && |
139 | (!ACPI_COMPARE_NAME(table_desc->pointer->signature, ACPI_SIG_SSDT)) | 139 | (!ACPI_COMPARE_NAME(table_desc->pointer->signature, ACPI_SIG_SSDT)) |
140 | && (ACPI_STRNCMP(table_desc->pointer->signature, "OEM", 3))) { | 140 | && (ACPI_STRNCMP(table_desc->pointer->signature, "OEM", 3))) { |
141 | ACPI_ERROR((AE_INFO, | 141 | ACPI_BIOS_ERROR((AE_INFO, |
142 | "Table has invalid signature [%4.4s] (0x%8.8X), must be SSDT or OEMx", | 142 | "Table has invalid signature [%4.4s] (0x%8.8X), " |
143 | acpi_ut_valid_acpi_name(*(u32 *)table_desc-> | 143 | "must be SSDT or OEMx", |
144 | pointer-> | 144 | acpi_ut_valid_acpi_name(*(u32 *)table_desc-> |
145 | signature) ? table_desc-> | 145 | pointer-> |
146 | pointer->signature : "????", | 146 | signature) ? |
147 | *(u32 *)table_desc->pointer->signature)); | 147 | table_desc->pointer->signature : "????", |
148 | *(u32 *)table_desc->pointer->signature)); | ||
148 | 149 | ||
149 | return_ACPI_STATUS(AE_BAD_SIGNATURE); | 150 | return_ACPI_STATUS(AE_BAD_SIGNATURE); |
150 | } | 151 | } |
diff --git a/drivers/acpi/acpica/tbutils.c b/drivers/acpi/acpica/tbutils.c index 0a706cac37de..6818b31954c8 100644 --- a/drivers/acpi/acpica/tbutils.c +++ b/drivers/acpi/acpica/tbutils.c | |||
@@ -317,10 +317,11 @@ acpi_status acpi_tb_verify_checksum(struct acpi_table_header *table, u32 length) | |||
317 | /* Checksum ok? (should be zero) */ | 317 | /* Checksum ok? (should be zero) */ |
318 | 318 | ||
319 | if (checksum) { | 319 | if (checksum) { |
320 | ACPI_WARNING((AE_INFO, | 320 | ACPI_BIOS_WARNING((AE_INFO, |
321 | "Incorrect checksum in table [%4.4s] - 0x%2.2X, should be 0x%2.2X", | 321 | "Incorrect checksum in table [%4.4s] - 0x%2.2X, " |
322 | table->signature, table->checksum, | 322 | "should be 0x%2.2X", |
323 | (u8) (table->checksum - checksum))); | 323 | table->signature, table->checksum, |
324 | (u8)(table->checksum - checksum))); | ||
324 | 325 | ||
325 | #if (ACPI_CHECKSUM_ABORT) | 326 | #if (ACPI_CHECKSUM_ABORT) |
326 | 327 | ||
@@ -377,8 +378,9 @@ void acpi_tb_check_dsdt_header(void) | |||
377 | 378 | ||
378 | if (acpi_gbl_original_dsdt_header.length != acpi_gbl_DSDT->length || | 379 | if (acpi_gbl_original_dsdt_header.length != acpi_gbl_DSDT->length || |
379 | acpi_gbl_original_dsdt_header.checksum != acpi_gbl_DSDT->checksum) { | 380 | acpi_gbl_original_dsdt_header.checksum != acpi_gbl_DSDT->checksum) { |
380 | ACPI_ERROR((AE_INFO, | 381 | ACPI_BIOS_ERROR((AE_INFO, |
381 | "The DSDT has been corrupted or replaced - old, new headers below")); | 382 | "The DSDT has been corrupted or replaced - " |
383 | "old, new headers below")); | ||
382 | acpi_tb_print_table_header(0, &acpi_gbl_original_dsdt_header); | 384 | acpi_tb_print_table_header(0, &acpi_gbl_original_dsdt_header); |
383 | acpi_tb_print_table_header(0, acpi_gbl_DSDT); | 385 | acpi_tb_print_table_header(0, acpi_gbl_DSDT); |
384 | 386 | ||
@@ -480,9 +482,10 @@ acpi_tb_install_table(acpi_physical_address address, | |||
480 | /* If a particular signature is expected (DSDT/FACS), it must match */ | 482 | /* If a particular signature is expected (DSDT/FACS), it must match */ |
481 | 483 | ||
482 | if (signature && !ACPI_COMPARE_NAME(table->signature, signature)) { | 484 | if (signature && !ACPI_COMPARE_NAME(table->signature, signature)) { |
483 | ACPI_ERROR((AE_INFO, | 485 | ACPI_BIOS_ERROR((AE_INFO, |
484 | "Invalid signature 0x%X for ACPI table, expected [%s]", | 486 | "Invalid signature 0x%X for ACPI table, expected [%s]", |
485 | *ACPI_CAST_PTR(u32, table->signature), signature)); | 487 | *ACPI_CAST_PTR(u32, table->signature), |
488 | signature)); | ||
486 | goto unmap_and_exit; | 489 | goto unmap_and_exit; |
487 | } | 490 | } |
488 | 491 | ||
@@ -589,10 +592,10 @@ acpi_tb_get_root_table_entry(u8 *table_entry, u32 table_entry_size) | |||
589 | 592 | ||
590 | /* Will truncate 64-bit address to 32 bits, issue warning */ | 593 | /* Will truncate 64-bit address to 32 bits, issue warning */ |
591 | 594 | ||
592 | ACPI_WARNING((AE_INFO, | 595 | ACPI_BIOS_WARNING((AE_INFO, |
593 | "64-bit Physical Address in XSDT is too large (0x%8.8X%8.8X)," | 596 | "64-bit Physical Address in XSDT is too large (0x%8.8X%8.8X)," |
594 | " truncating", | 597 | " truncating", |
595 | ACPI_FORMAT_UINT64(address64))); | 598 | ACPI_FORMAT_UINT64(address64))); |
596 | } | 599 | } |
597 | #endif | 600 | #endif |
598 | return ((acpi_physical_address) (address64)); | 601 | return ((acpi_physical_address) (address64)); |
@@ -694,8 +697,9 @@ acpi_tb_parse_root_table(acpi_physical_address rsdp_address) | |||
694 | acpi_os_unmap_memory(table, sizeof(struct acpi_table_header)); | 697 | acpi_os_unmap_memory(table, sizeof(struct acpi_table_header)); |
695 | 698 | ||
696 | if (length < sizeof(struct acpi_table_header)) { | 699 | if (length < sizeof(struct acpi_table_header)) { |
697 | ACPI_ERROR((AE_INFO, "Invalid length 0x%X in RSDT/XSDT", | 700 | ACPI_BIOS_ERROR((AE_INFO, |
698 | length)); | 701 | "Invalid table length 0x%X in RSDT/XSDT", |
702 | length)); | ||
699 | return_ACPI_STATUS(AE_INVALID_TABLE_LENGTH); | 703 | return_ACPI_STATUS(AE_INVALID_TABLE_LENGTH); |
700 | } | 704 | } |
701 | 705 | ||
diff --git a/drivers/acpi/acpica/tbxfroot.c b/drivers/acpi/acpica/tbxfroot.c index 4258f647ca3d..5f6f7445c37c 100644 --- a/drivers/acpi/acpica/tbxfroot.c +++ b/drivers/acpi/acpica/tbxfroot.c | |||
@@ -216,7 +216,7 @@ acpi_status acpi_find_root_pointer(acpi_size *table_address) | |||
216 | 216 | ||
217 | /* A valid RSDP was not found */ | 217 | /* A valid RSDP was not found */ |
218 | 218 | ||
219 | ACPI_ERROR((AE_INFO, "A valid RSDP was not found")); | 219 | ACPI_BIOS_ERROR((AE_INFO, "A valid RSDP was not found")); |
220 | return_ACPI_STATUS(AE_NOT_FOUND); | 220 | return_ACPI_STATUS(AE_NOT_FOUND); |
221 | } | 221 | } |
222 | 222 | ||