Signed-off-by: Hu Tao hutao@cn.fujitsu.com --- src/acpi-dsdt-isa.dsl | 14 ++++++++++++-- src/acpi.c | 9 +++++++++ 2 files changed, 21 insertions(+), 2 deletions(-)
diff --git a/src/acpi-dsdt-isa.dsl b/src/acpi-dsdt-isa.dsl index 87a31b9..43fe719 100644 --- a/src/acpi-dsdt-isa.dsl +++ b/src/acpi-dsdt-isa.dsl @@ -102,7 +102,9 @@ Scope(_SB.PCI0.ISA) {
Device(PEVT) { Name(_HID, "QEMU0001") - OperationRegion(PEOR, SystemIO, 0x0505, 0x01) + ACPI_EXTRACT_NAME_WORD_CONST dsdt_isa_pest + Name(PEST, 0x505) + OperationRegion(PEOR, SystemIO, PEST, 0x01) Field(PEOR, ByteAcc, NoLock, Preserve) { PEPT, 8, } @@ -126,7 +128,15 @@ Scope(_SB.PCI0.ISA) { }
Name(_CRS, ResourceTemplate() { - IO(Decode16, 0x0505, 0x0505, 0x01, 0x01) + IO(Decode16, 0x0505, 0x0505, 0x01, 0x01, IO) }) + + CreateWordField(_CRS, IO._MIN, IOMN) + CreateWordField(_CRS, IO._MAX, IOMX) + + Method(_INI, 0, NotSerialized) { + Store(PEST, IOMN) + Store(PEST, IOMX) + } } } diff --git a/src/acpi.c b/src/acpi.c index 119d1c1..42fa06e 100644 --- a/src/acpi.c +++ b/src/acpi.c @@ -286,11 +286,20 @@ static const struct pci_device_id fadt_init_tbl[] = { PCI_DEVICE_END };
+static void patch_dsdt(void *dsdt) +{ + u8 *dsdt_ptr = dsdt; + int pvpanic_port = romfile_loadint("etc/pvpanic-port", 0x505); + + *(u16 *)(dsdt_ptr + *dsdt_isa_pest) = pvpanic_port; +} + static void fill_dsdt(struct fadt_descriptor_rev1 *fadt, void *dsdt) { if (fadt->dsdt) { free((void *)le32_to_cpu(fadt->dsdt)); } + patch_dsdt(dsdt); fadt->dsdt = cpu_to_le32((u32)dsdt); fadt->checksum -= checksum(fadt, sizeof(*fadt)); dprintf(1, "ACPI DSDT=%p\n", dsdt);