From 529cddb195e3268bccb8be437d2af64e44c24218 Mon Sep 17 00:00:00 2001 From: Ian Campbell Date: Tue, 12 Apr 2011 13:37:03 +0100 Subject: [PATCH] tools: hvmloader: pass ACPI_PHYSICAL_ADDRESS as a runtime parameter. Instead of hardcoding in a header. Reduces the cross talk between ROMBIOS and hvmloader. Signed-off-by: Ian Campbell Acked-by: Keir Fraser --- tools/firmware/hvmloader/acpi/acpi2_0.h | 2 +- tools/firmware/hvmloader/acpi/build.c | 19 ++++++++++--------- tools/firmware/hvmloader/hvmloader.c | 2 +- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/tools/firmware/hvmloader/acpi/acpi2_0.h b/tools/firmware/hvmloader/acpi/acpi2_0.h index 9ea356b062..183b3cfc1b 100644 --- a/tools/firmware/hvmloader/acpi/acpi2_0.h +++ b/tools/firmware/hvmloader/acpi/acpi2_0.h @@ -382,7 +382,7 @@ struct acpi_20_madt_intsrcovr { #pragma pack () -void acpi_build_tables(void); +void acpi_build_tables(unsigned int physical); extern uint32_t madt_csum_addr, madt_lapic0_addr; #endif /* _ACPI_2_0_H_ */ diff --git a/tools/firmware/hvmloader/acpi/build.c b/tools/firmware/hvmloader/acpi/build.c index dc38c73e95..747aff69d4 100644 --- a/tools/firmware/hvmloader/acpi/build.c +++ b/tools/firmware/hvmloader/acpi/build.c @@ -242,7 +242,9 @@ static int construct_secondary_tables(uint8_t *buf, unsigned long *table_ptrs) return align16(offset); } -static void __acpi_build_tables(uint8_t *buf, int *low_sz, int *high_sz) +static void __acpi_build_tables(unsigned int physical, + uint8_t *buf, + int *low_sz, int *high_sz) { struct acpi_20_rsdp *rsdp; struct acpi_20_rsdt *rsdt; @@ -335,11 +337,11 @@ static void __acpi_build_tables(uint8_t *buf, int *low_sz, int *high_sz) /* * Fill in low-memory data structures: bios_info_table and RSDP. */ - - buf = (uint8_t *)ACPI_PHYSICAL_ADDRESS; + buf = (uint8_t *)physical; offset = 0; rsdp = (struct acpi_20_rsdp *)&buf[offset]; + memcpy(rsdp, &Rsdp, sizeof(struct acpi_20_rsdp)); offset += align16(sizeof(struct acpi_20_rsdp)); rsdp->rsdt_address = (unsigned long)rsdt; @@ -354,24 +356,23 @@ static void __acpi_build_tables(uint8_t *buf, int *low_sz, int *high_sz) *low_sz = offset; } -void acpi_build_tables(void) +void acpi_build_tables(unsigned int physical) { int high_sz, low_sz; uint8_t *buf; /* Find out size of high-memory ACPI data area. */ buf = (uint8_t *)&_end; - __acpi_build_tables(buf, &low_sz, &high_sz); + __acpi_build_tables(physical, buf, &low_sz, &high_sz); memset(buf, 0, high_sz); /* Allocate data area and set up ACPI tables there. */ buf = mem_alloc(high_sz, 0); - __acpi_build_tables(buf, &low_sz, &high_sz); + __acpi_build_tables(physical, buf, &low_sz, &high_sz); - printf(" - Lo data: %08lx-%08lx\n" + printf(" - Lo data: %08x-%08x\n" " - Hi data: %08lx-%08lx\n", - (unsigned long)ACPI_PHYSICAL_ADDRESS, - (unsigned long)ACPI_PHYSICAL_ADDRESS + low_sz - 1, + physical, physical + low_sz - 1, (unsigned long)buf, (unsigned long)buf + high_sz - 1); } diff --git a/tools/firmware/hvmloader/hvmloader.c b/tools/firmware/hvmloader/hvmloader.c index 01e1da2a14..7d54b3c567 100644 --- a/tools/firmware/hvmloader/hvmloader.c +++ b/tools/firmware/hvmloader/hvmloader.c @@ -652,7 +652,7 @@ int main(void) }; printf("Loading ACPI ...\n"); - acpi_build_tables(); + acpi_build_tables(ACPI_PHYSICAL_ADDRESS); hypercall_hvm_op(HVMOP_set_param, &p); } -- 2.39.5