aboutsummaryrefslogtreecommitdiff
path: root/sys/amd64
diff options
context:
space:
mode:
authorJohn Baldwin <jhb@FreeBSD.org>2008-01-31 16:51:43 +0000
committerJohn Baldwin <jhb@FreeBSD.org>2008-01-31 16:51:43 +0000
commit7157eae462b94ce5305a9d2611be2ecb6b8f917d (patch)
treee79558f411fb99d94f5cb10284ba0d2713fa82db /sys/amd64
parent990132f07db39b80c1ed103e5832adf200834e5f (diff)
Notes
Diffstat (limited to 'sys/amd64')
-rw-r--r--sys/amd64/acpica/madt.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/sys/amd64/acpica/madt.c b/sys/amd64/acpica/madt.c
index fcd40c8ad70b..3ed1ea703db0 100644
--- a/sys/amd64/acpica/madt.c
+++ b/sys/amd64/acpica/madt.c
@@ -109,9 +109,11 @@ static struct apic_enumerator madt_enumerator = {
/*
* Code to abuse the crashdump map to map in the tables for the early
* probe. We cheat and make the following assumptions about how we
- * use this KVA: page 0 is used to map in the first page of each table
- * found via the RSDT or XSDT and pages 1 to n are used to map in the
- * RSDT or XSDT. The offset is in pages; the length is in bytes.
+ * use this KVA: pages 0 and 1 are used to map in the header of each
+ * table found via the RSDT or XSDT and pages 2 to n are used to map
+ * in the RSDT or XSDT. We have to use 2 pages for the table headers
+ * in case a header spans a page boundary. The offset is in pages;
+ * the length is in bytes.
*/
static void *
madt_map(vm_paddr_t pa, int offset, vm_offset_t length)
@@ -232,7 +234,7 @@ madt_probe(void)
printf("MADT: RSDP failed extended checksum\n");
return (ENXIO);
}
- xsdt = madt_map_table(rsdp->XsdtPhysicalAddress, 1,
+ xsdt = madt_map_table(rsdp->XsdtPhysicalAddress, 2,
ACPI_SIG_XSDT);
if (xsdt == NULL) {
if (bootverbose)
@@ -246,7 +248,7 @@ madt_probe(void)
break;
madt_unmap_table(xsdt);
} else {
- rsdt = madt_map_table(rsdp->RsdtPhysicalAddress, 1,
+ rsdt = madt_map_table(rsdp->RsdtPhysicalAddress, 2,
ACPI_SIG_RSDT);
if (rsdt == NULL) {
if (bootverbose)