qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH v15 2/2] patch dsdt to use passed-in pvpanic ioport


From: Hu Tao
Subject: [Qemu-devel] [PATCH v15 2/2] patch dsdt to use passed-in pvpanic ioport
Date: Thu, 21 Mar 2013 17:08:34 +0800

Signed-off-by: Hu Tao <address@hidden>
---
 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);
-- 
1.8.1.4




reply via email to

[Prev in Thread] Current Thread [Next in Thread]