diff options
author | Vladimir Serbinenko <phcoder@gmail.com> | 2014-10-16 12:48:19 +0200 |
---|---|---|
committer | Vladimir Serbinenko <phcoder@gmail.com> | 2014-10-18 10:35:38 +0200 |
commit | c21e07385f9b4048d6ddb67989b23999f566951d (patch) | |
tree | ef19cbff3e134e9b8034cba1f517da3469d14e26 /src/arch/x86 | |
parent | e4626bfc5be5f61f62af32733cbe551275094dd5 (diff) |
i945: Consolidate FADT code
Change-Id: I076cba7d21926cabf90d485de50268ae40c435f3
Signed-off-by: Vladimir Serbinenko <phcoder@gmail.com>
Reviewed-on: http://review.coreboot.org/7087
Tested-by: build bot (Jenkins)
Reviewed-by: Patrick Georgi <pgeorgi@google.com>
Diffstat (limited to 'src/arch/x86')
-rw-r--r-- | src/arch/x86/boot/acpi.c | 36 | ||||
-rw-r--r-- | src/arch/x86/include/arch/acpi.h | 4 |
2 files changed, 40 insertions, 0 deletions
diff --git a/src/arch/x86/boot/acpi.c b/src/arch/x86/boot/acpi.c index b9fbc8162e..3859bc1854 100644 --- a/src/arch/x86/boot/acpi.c +++ b/src/arch/x86/boot/acpi.c @@ -652,6 +652,42 @@ void acpi_write_hest(acpi_hest_t *hest) header->checksum = acpi_checksum((void *)hest, header->length); } +#if IS_ENABLED(CONFIG_COMMON_FADT) +void acpi_create_fadt(acpi_fadt_t *fadt,acpi_facs_t *facs, void *dsdt) +{ + acpi_header_t *header = &(fadt->header); + + memset((void *) fadt, 0, sizeof(acpi_fadt_t)); + memcpy(header->signature, "FACP", 4); + header->length = sizeof(acpi_fadt_t); + header->revision = 3; + memcpy(header->oem_id, OEM_ID, 6); + memcpy(header->oem_table_id, ACPI_TABLE_CREATOR, 8); + memcpy(header->asl_compiler_id, ASLC, 4); + header->asl_compiler_revision = 0; + + fadt->firmware_ctrl = (unsigned long) facs; + fadt->dsdt = (unsigned long) dsdt; + + fadt->x_firmware_ctl_l = (unsigned long)facs; + fadt->x_firmware_ctl_h = 0; + fadt->x_dsdt_l = (unsigned long)dsdt; + fadt->x_dsdt_h = 0; + + if(IS_ENABLED(CONFIG_SYSTEM_TYPE_LAPTOP)) { + fadt->preferred_pm_profile = PM_MOBILE; + } else { + fadt->preferred_pm_profile = PM_DESKTOP; + } + + southbridge_fill_fadt(fadt); + mainboard_fill_fadt(fadt); + + header->checksum = + acpi_checksum((void *) fadt, header->length); +} +#endif + #if IS_ENABLED(CONFIG_PER_DEVICE_ACPI_TABLES) extern const unsigned char AmlCode[]; diff --git a/src/arch/x86/include/arch/acpi.h b/src/arch/x86/include/arch/acpi.h index 34e777dc5c..f00d5f436a 100644 --- a/src/arch/x86/include/arch/acpi.h +++ b/src/arch/x86/include/arch/acpi.h @@ -494,6 +494,10 @@ unsigned long acpi_fill_ssdt_generator(unsigned long current, #endif void acpi_create_ssdt_generator(acpi_header_t *ssdt, const char *oem_table_id); void acpi_create_fadt(acpi_fadt_t *fadt,acpi_facs_t *facs, void *dsdt); +#if IS_ENABLED(CONFIG_COMMON_FADT) +void southbridge_fill_fadt(acpi_fadt_t * fadt); +void mainboard_fill_fadt(acpi_fadt_t * fadt); +#endif void update_ssdt(void *ssdt); void update_ssdtx(void *ssdtx, int i); |