diff options
| -rw-r--r-- | drivers/acpi/acpica/tbfadt.c | 5 | ||||
| -rw-r--r-- | include/acpi/actbl.h | 16 |
2 files changed, 20 insertions, 1 deletions
diff --git a/drivers/acpi/acpica/tbfadt.c b/drivers/acpi/acpica/tbfadt.c index 428d44e2d162..6f5588e62c0a 100644 --- a/drivers/acpi/acpica/tbfadt.c +++ b/drivers/acpi/acpica/tbfadt.c | |||
| @@ -384,8 +384,11 @@ static void acpi_tb_convert_fadt(void) | |||
| 384 | * | 384 | * |
| 385 | * The ACPI 1.0 reserved fields that will be zeroed are the bytes located at | 385 | * The ACPI 1.0 reserved fields that will be zeroed are the bytes located at |
| 386 | * offset 45, 55, 95, and the word located at offset 109, 110. | 386 | * offset 45, 55, 95, and the word located at offset 109, 110. |
| 387 | * | ||
| 388 | * Note: The FADT revision value is unreliable. Only the length can be | ||
| 389 | * trusted. | ||
| 387 | */ | 390 | */ |
| 388 | if (acpi_gbl_FADT.header.revision < FADT2_REVISION_ID) { | 391 | if (acpi_gbl_FADT.header.length <= ACPI_FADT_V2_SIZE) { |
| 389 | acpi_gbl_FADT.preferred_profile = 0; | 392 | acpi_gbl_FADT.preferred_profile = 0; |
| 390 | acpi_gbl_FADT.pstate_control = 0; | 393 | acpi_gbl_FADT.pstate_control = 0; |
| 391 | acpi_gbl_FADT.cst_control = 0; | 394 | acpi_gbl_FADT.cst_control = 0; |
diff --git a/include/acpi/actbl.h b/include/acpi/actbl.h index 7e42bfee0e29..d41c94885211 100644 --- a/include/acpi/actbl.h +++ b/include/acpi/actbl.h | |||
| @@ -343,4 +343,20 @@ struct acpi_table_desc { | |||
| 343 | #include <acpi/actbl1.h> | 343 | #include <acpi/actbl1.h> |
| 344 | #include <acpi/actbl2.h> | 344 | #include <acpi/actbl2.h> |
| 345 | 345 | ||
| 346 | /* | ||
| 347 | * Sizes of the various flavors of FADT. We need to look closely | ||
| 348 | * at the FADT length because the version number essentially tells | ||
| 349 | * us nothing because of many BIOS bugs where the version does not | ||
| 350 | * match the expected length. In other words, the length of the | ||
| 351 | * FADT is the bottom line as to what the version really is. | ||
| 352 | * | ||
| 353 | * For reference, the values below are as follows: | ||
| 354 | * FADT V1 size: 0x74 | ||
| 355 | * FADT V2 size: 0x84 | ||
| 356 | * FADT V3+ size: 0xF4 | ||
| 357 | */ | ||
| 358 | #define ACPI_FADT_V1_SIZE (u32) (ACPI_FADT_OFFSET (flags) + 4) | ||
| 359 | #define ACPI_FADT_V2_SIZE (u32) (ACPI_FADT_OFFSET (reserved4[0]) + 3) | ||
| 360 | #define ACPI_FADT_V3_SIZE (u32) (sizeof (struct acpi_table_fadt)) | ||
| 361 | |||
| 346 | #endif /* __ACTBL_H__ */ | 362 | #endif /* __ACTBL_H__ */ |
