diff options
| author | Keir Fraser <keir.fraser@citrix.com> | 2009-01-08 16:59:21 +0000 |
|---|---|---|
| committer | Keir Fraser <keir.fraser@citrix.com> | 2009-01-08 16:59:21 +0000 |
| commit | e3a9e577ae1e3aed1e537e436c3930b54de932aa (patch) | |
| tree | 2c15237584306e80abbb86905ebab9ccbeb9e4c5 /tools/firmware/hvmloader/acpi | |
| parent | da510a16e2144f3179c65448a05eaf3930421692 (diff) | |
| download | xen-e3a9e577ae1e3aed1e537e436c3930b54de932aa.tar.gz xen-e3a9e577ae1e3aed1e537e436c3930b54de932aa.tar.bz2 xen-e3a9e577ae1e3aed1e537e436c3930b54de932aa.zip | |
hvmloader: Reserve BIOS memory and VGA memory at top of 4GB memory hole.
To make memory management easier in hvmloader, defer building a
generic E820 map until the end of hvmloader bootstrap.
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
Diffstat (limited to 'tools/firmware/hvmloader/acpi')
| -rw-r--r-- | tools/firmware/hvmloader/acpi/build.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/tools/firmware/hvmloader/acpi/build.c b/tools/firmware/hvmloader/acpi/build.c index 657b7662dd..2bd1d3eb74 100644 --- a/tools/firmware/hvmloader/acpi/build.c +++ b/tools/firmware/hvmloader/acpi/build.c @@ -199,6 +199,7 @@ static int construct_secondary_tables(uint8_t *buf, unsigned long *table_ptrs) struct acpi_20_tcpa *tcpa; static const uint16_t tis_signature[] = {0x0001, 0x0001, 0x0001}; uint16_t *tis_hdr; + void *lasa; /* MADT. */ if ( (hvm_info->nr_vcpus > 1) || hvm_info->apic_mode ) @@ -246,11 +247,11 @@ static int construct_secondary_tables(uint8_t *buf, unsigned long *table_ptrs) tcpa->header.oem_revision = ACPI_OEM_REVISION; tcpa->header.creator_id = ACPI_CREATOR_ID; tcpa->header.creator_revision = ACPI_CREATOR_REVISION; - tcpa->lasa = e820_malloc(ACPI_2_0_TCPA_LAML_SIZE, 0); - if ( tcpa->lasa ) + if ( (lasa = mem_alloc(ACPI_2_0_TCPA_LAML_SIZE, 0)) != NULL ) { + tcpa->lasa = virt_to_phys(lasa); tcpa->laml = ACPI_2_0_TCPA_LAML_SIZE; - memset((char *)(unsigned long)tcpa->lasa, 0, tcpa->laml); + memset(lasa, 0, tcpa->laml); set_checksum(tcpa, offsetof(struct acpi_header, checksum), tcpa->header.length); @@ -376,7 +377,7 @@ void acpi_build_tables(void) memset(buf, 0, high_sz); /* Allocate data area and set up ACPI tables there. */ - buf = (uint8_t *)e820_malloc(high_sz, 0); + buf = mem_alloc(high_sz, 0); __acpi_build_tables(buf, &low_sz, &high_sz); printf(" - Lo data: %08lx-%08lx\n" |
