qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v2] target-i386: move generic memory hotplug methods to DSDTs
@ 2014-10-15  7:45 Paolo Bonzini
  2014-10-15 13:19 ` Igor Mammedov
  2014-11-11 17:13 ` Paolo Bonzini
  0 siblings, 2 replies; 7+ messages in thread
From: Paolo Bonzini @ 2014-10-15  7:45 UTC (permalink / raw)
  To: qemu-devel; +Cc: imammedo, mst

This makes it simpler to keep the SSDT byte-for-byte identical for a
given machine type, which is a goal we want to have for 2.2 and newer
types.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
        v1->v2: do not define the same Device twice (Igor)

 hw/i386/acpi-dsdt-mem-hotplug.dsl   | 176 ++++++++
 hw/i386/acpi-dsdt.dsl               |   3 +-
 hw/i386/acpi-dsdt.hex.generated     | 795 +++++++++++++++++++++++++++++++++-
 hw/i386/q35-acpi-dsdt.dsl           |   3 +-
 hw/i386/q35-acpi-dsdt.hex.generated | 797 +++++++++++++++++++++++++++++++++-
 hw/i386/ssdt-mem.hex.generated      |   8 +-
 hw/i386/ssdt-misc.dsl               | 165 +------
 hw/i386/ssdt-misc.hex.generated     | 834 ++----------------------------------
 tests/acpi-test-data/pc/DSDT        | Bin 2807 -> 3592 bytes
 tests/acpi-test-data/pc/SSDT        | Bin 3065 -> 2279 bytes
 tests/acpi-test-data/q35/DSDT       | Bin 7397 -> 8182 bytes
 tests/acpi-test-data/q35/SSDT       | Bin 1346 -> 560 bytes
 12 files changed, 1789 insertions(+), 992 deletions(-)
 create mode 100644 hw/i386/acpi-dsdt-mem-hotplug.dsl

diff --git a/hw/i386/acpi-dsdt-mem-hotplug.dsl b/hw/i386/acpi-dsdt-mem-hotplug.dsl
new file mode 100644
index 0000000..2a36c47
--- /dev/null
+++ b/hw/i386/acpi-dsdt-mem-hotplug.dsl
@@ -0,0 +1,176 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+    External(MEMORY_SLOT_NOTIFY_METHOD, MethodObj)
+
+    Scope(\_SB.PCI0) {
+        Device(MEMORY_HOTPLUG_DEVICE) {
+            Name(_HID, "PNP0A06")
+            Name(_UID, "Memory hotplug resources")
+            External(MEMORY_SLOTS_NUMBER, IntObj)
+
+            /* Memory hotplug IO registers */
+            OperationRegion(MEMORY_HOTPLUG_IO_REGION, SystemIO,
+                            ACPI_MEMORY_HOTPLUG_BASE,
+                            ACPI_MEMORY_HOTPLUG_IO_LEN)
+
+            Name(_CRS, ResourceTemplate() {
+                IO(Decode16, ACPI_MEMORY_HOTPLUG_BASE, ACPI_MEMORY_HOTPLUG_BASE,
+                   0, ACPI_MEMORY_HOTPLUG_IO_LEN, IO)
+            })
+
+            Method(_STA, 0) {
+                If (LEqual(MEMORY_SLOTS_NUMBER, Zero)) {
+                    Return(0x0)
+                }
+                /* present, functioning, decoding, not shown in UI */
+                Return(0xB)
+            }
+
+            Field(MEMORY_HOTPLUG_IO_REGION, DWordAcc, NoLock, Preserve) {
+                MEMORY_SLOT_ADDR_LOW, 32,  // read only
+                MEMORY_SLOT_ADDR_HIGH, 32, // read only
+                MEMORY_SLOT_SIZE_LOW, 32,  // read only
+                MEMORY_SLOT_SIZE_HIGH, 32, // read only
+                MEMORY_SLOT_PROXIMITY, 32, // read only
+            }
+            Field(MEMORY_HOTPLUG_IO_REGION, ByteAcc, NoLock, Preserve) {
+                Offset(20),
+                MEMORY_SLOT_ENABLED,  1, // 1 if enabled, read only
+                MEMORY_SLOT_INSERT_EVENT, 1, // (read) 1 if has a insert event. (write) 1 to clear event
+            }
+
+            Mutex (MEMORY_SLOT_LOCK, 0)
+            Field (MEMORY_HOTPLUG_IO_REGION, DWordAcc, NoLock, Preserve) {
+                MEMORY_SLOT_SLECTOR, 32,  // DIMM selector, write only
+                MEMORY_SLOT_OST_EVENT, 32,  // _OST event code, write only
+                MEMORY_SLOT_OST_STATUS, 32,  // _OST status code, write only
+            }
+
+            Method(MEMORY_SLOT_SCAN_METHOD, 0) {
+                If (LEqual(MEMORY_SLOTS_NUMBER, Zero)) {
+                     Return(Zero)
+                }
+
+                Store(Zero, Local0) // Mem devs iterrator
+                Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
+                while (LLess(Local0, MEMORY_SLOTS_NUMBER)) {
+                    Store(Local0, MEMORY_SLOT_SLECTOR) // select Local0 DIMM
+                    If (LEqual(MEMORY_SLOT_INSERT_EVENT, One)) { // Memory device needs check
+                        MEMORY_SLOT_NOTIFY_METHOD(Local0, 1)
+                        Store(1, MEMORY_SLOT_INSERT_EVENT)
+                    }
+                    // TODO: handle memory eject request
+                    Add(Local0, One, Local0) // goto next DIMM
+                }
+                Release(MEMORY_SLOT_LOCK)
+                Return(One)
+            }
+
+            Method(MEMORY_SLOT_STATUS_METHOD, 1) {
+                Store(Zero, Local0)
+
+                Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
+                Store(ToInteger(Arg0), MEMORY_SLOT_SLECTOR) // select DIMM
+
+                If (LEqual(MEMORY_SLOT_ENABLED, One)) {
+                    Store(0xF, Local0)
+                }
+
+                Release(MEMORY_SLOT_LOCK)
+                Return(Local0)
+            }
+
+            Method(MEMORY_SLOT_CRS_METHOD, 1, Serialized) {
+                Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
+                Store(ToInteger(Arg0), MEMORY_SLOT_SLECTOR) // select DIMM
+
+                Name(MR64, ResourceTemplate() {
+                    QWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed,
+                    Cacheable, ReadWrite,
+                    0x0000000000000000,        // Address Space Granularity
+                    0x0000000000000000,        // Address Range Minimum
+                    0xFFFFFFFFFFFFFFFE,        // Address Range Maximum
+                    0x0000000000000000,        // Address Translation Offset
+                    0xFFFFFFFFFFFFFFFF,        // Address Length
+                    ,, MW64, AddressRangeMemory, TypeStatic)
+                })
+
+                CreateDWordField(MR64, 14, MINL)
+                CreateDWordField(MR64, 18, MINH)
+                CreateDWordField(MR64, 38, LENL)
+                CreateDWordField(MR64, 42, LENH)
+                CreateDWordField(MR64, 22, MAXL)
+                CreateDWordField(MR64, 26, MAXH)
+
+                Store(MEMORY_SLOT_ADDR_HIGH, MINH)
+                Store(MEMORY_SLOT_ADDR_LOW, MINL)
+                Store(MEMORY_SLOT_SIZE_HIGH, LENH)
+                Store(MEMORY_SLOT_SIZE_LOW, LENL)
+
+                // 64-bit math: MAX = MIN + LEN - 1
+                Add(MINL, LENL, MAXL)
+                Add(MINH, LENH, MAXH)
+                If (LLess(MAXL, MINL)) {
+                    Add(MAXH, One, MAXH)
+                }
+                If (LLess(MAXL, One)) {
+                    Subtract(MAXH, One, MAXH)
+                }
+                Subtract(MAXL, One, MAXL)
+
+                If (LEqual(MAXH, Zero)){
+                    Name(MR32, ResourceTemplate() {
+                        DWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed,
+                        Cacheable, ReadWrite,
+                        0x00000000,        // Address Space Granularity
+                        0x00000000,        // Address Range Minimum
+                        0xFFFFFFFE,        // Address Range Maximum
+                        0x00000000,        // Address Translation Offset
+                        0xFFFFFFFF,        // Address Length
+                        ,, MW32, AddressRangeMemory, TypeStatic)
+                    })
+                    CreateDWordField(MR32, MW32._MIN, MIN)
+                    CreateDWordField(MR32, MW32._MAX, MAX)
+                    CreateDWordField(MR32, MW32._LEN, LEN)
+                    Store(MINL, MIN)
+                    Store(MAXL, MAX)
+                    Store(LENL, LEN)
+
+                    Release(MEMORY_SLOT_LOCK)
+                    Return(MR32)
+                }
+
+                Release(MEMORY_SLOT_LOCK)
+                Return(MR64)
+            }
+
+            Method(MEMORY_SLOT_PROXIMITY_METHOD, 1) {
+                Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
+                Store(ToInteger(Arg0), MEMORY_SLOT_SLECTOR) // select DIMM
+                Store(MEMORY_SLOT_PROXIMITY, Local0)
+                Release(MEMORY_SLOT_LOCK)
+                Return(Local0)
+            }
+
+            Method(MEMORY_SLOT_OST_METHOD, 4) {
+                Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
+                Store(ToInteger(Arg0), MEMORY_SLOT_SLECTOR) // select DIMM
+                Store(Arg1, MEMORY_SLOT_OST_EVENT)
+                Store(Arg2, MEMORY_SLOT_OST_STATUS)
+                Release(MEMORY_SLOT_LOCK)
+            }
+        } // Device()
+    } // Scope()
diff --git a/hw/i386/acpi-dsdt.dsl b/hw/i386/acpi-dsdt.dsl
index 559f4b6..a611e07 100644
--- a/hw/i386/acpi-dsdt.dsl
+++ b/hw/i386/acpi-dsdt.dsl
@@ -297,13 +297,12 @@ DefinitionBlock (
 #include "hw/acpi/pc-hotplug.h"
 #define CPU_STATUS_BASE PIIX4_CPU_HOTPLUG_IO_BASE
 #include "acpi-dsdt-cpu-hotplug.dsl"
+#include "acpi-dsdt-mem-hotplug.dsl"
 
 
 /****************************************************************
  * General purpose events
  ****************************************************************/
-    External(\_SB.PCI0.MEMORY_HOTPLUG_DEVICE.MEMORY_SLOT_SCAN_METHOD, MethodObj)
-
     Scope(\_GPE) {
         Name(_HID, "ACPI0006")
 
diff --git a/hw/i386/acpi-dsdt.hex.generated b/hw/i386/acpi-dsdt.hex.generated
index a21bf41..875570e 100644
--- a/hw/i386/acpi-dsdt.hex.generated
+++ b/hw/i386/acpi-dsdt.hex.generated
@@ -3,12 +3,12 @@ static unsigned char AcpiDsdtAmlCode[] = {
 0x53,
 0x44,
 0x54,
-0xf7,
-0xa,
+0x8,
+0xe,
 0x0,
 0x0,
 0x1,
-0x1f,
+0xfc,
 0x42,
 0x58,
 0x50,
@@ -32,8 +32,8 @@ static unsigned char AcpiDsdtAmlCode[] = {
 0x54,
 0x4c,
 0x28,
-0x5,
-0x10,
+0x8,
+0x14,
 0x20,
 0x10,
 0x49,
@@ -2593,6 +2593,791 @@ static unsigned char AcpiDsdtAmlCode[] = {
 0xa,
 0xb,
 0x10,
+0x40,
+0x31,
+0x2e,
+0x5f,
+0x53,
+0x42,
+0x5f,
+0x50,
+0x43,
+0x49,
+0x30,
+0x5b,
+0x82,
+0x43,
+0x30,
+0x4d,
+0x48,
+0x50,
+0x44,
+0x8,
+0x5f,
+0x48,
+0x49,
+0x44,
+0xd,
+0x50,
+0x4e,
+0x50,
+0x30,
+0x41,
+0x30,
+0x36,
+0x0,
+0x8,
+0x5f,
+0x55,
+0x49,
+0x44,
+0xd,
+0x4d,
+0x65,
+0x6d,
+0x6f,
+0x72,
+0x79,
+0x20,
+0x68,
+0x6f,
+0x74,
+0x70,
+0x6c,
+0x75,
+0x67,
+0x20,
+0x72,
+0x65,
+0x73,
+0x6f,
+0x75,
+0x72,
+0x63,
+0x65,
+0x73,
+0x0,
+0x5b,
+0x80,
+0x48,
+0x50,
+0x4d,
+0x52,
+0x1,
+0xb,
+0x0,
+0xa,
+0xa,
+0x18,
+0x8,
+0x5f,
+0x43,
+0x52,
+0x53,
+0x11,
+0xd,
+0xa,
+0xa,
+0x47,
+0x1,
+0x0,
+0xa,
+0x0,
+0xa,
+0x0,
+0x18,
+0x79,
+0x0,
+0x14,
+0x13,
+0x5f,
+0x53,
+0x54,
+0x41,
+0x0,
+0xa0,
+0x9,
+0x93,
+0x4d,
+0x44,
+0x4e,
+0x52,
+0x0,
+0xa4,
+0x0,
+0xa4,
+0xa,
+0xb,
+0x5b,
+0x81,
+0x1f,
+0x48,
+0x50,
+0x4d,
+0x52,
+0x3,
+0x4d,
+0x52,
+0x42,
+0x4c,
+0x20,
+0x4d,
+0x52,
+0x42,
+0x48,
+0x20,
+0x4d,
+0x52,
+0x4c,
+0x4c,
+0x20,
+0x4d,
+0x52,
+0x4c,
+0x48,
+0x20,
+0x4d,
+0x50,
+0x58,
+0x5f,
+0x20,
+0x5b,
+0x81,
+0x13,
+0x48,
+0x50,
+0x4d,
+0x52,
+0x1,
+0x0,
+0x40,
+0xa,
+0x4d,
+0x45,
+0x53,
+0x5f,
+0x1,
+0x4d,
+0x49,
+0x4e,
+0x53,
+0x1,
+0x5b,
+0x1,
+0x4d,
+0x4c,
+0x43,
+0x4b,
+0x0,
+0x5b,
+0x81,
+0x15,
+0x48,
+0x50,
+0x4d,
+0x52,
+0x3,
+0x4d,
+0x53,
+0x45,
+0x4c,
+0x20,
+0x4d,
+0x4f,
+0x45,
+0x56,
+0x20,
+0x4d,
+0x4f,
+0x53,
+0x43,
+0x20,
+0x14,
+0x4a,
+0x4,
+0x4d,
+0x53,
+0x43,
+0x4e,
+0x0,
+0xa0,
+0x9,
+0x93,
+0x4d,
+0x44,
+0x4e,
+0x52,
+0x0,
+0xa4,
+0x0,
+0x70,
+0x0,
+0x60,
+0x5b,
+0x23,
+0x4d,
+0x4c,
+0x43,
+0x4b,
+0xff,
+0xff,
+0xa2,
+0x25,
+0x95,
+0x60,
+0x4d,
+0x44,
+0x4e,
+0x52,
+0x70,
+0x60,
+0x4d,
+0x53,
+0x45,
+0x4c,
+0xa0,
+0x13,
+0x93,
+0x4d,
+0x49,
+0x4e,
+0x53,
+0x1,
+0x4d,
+0x54,
+0x46,
+0x59,
+0x60,
+0x1,
+0x70,
+0x1,
+0x4d,
+0x49,
+0x4e,
+0x53,
+0x72,
+0x60,
+0x1,
+0x60,
+0x5b,
+0x27,
+0x4d,
+0x4c,
+0x43,
+0x4b,
+0xa4,
+0x1,
+0x14,
+0x2d,
+0x4d,
+0x52,
+0x53,
+0x54,
+0x1,
+0x70,
+0x0,
+0x60,
+0x5b,
+0x23,
+0x4d,
+0x4c,
+0x43,
+0x4b,
+0xff,
+0xff,
+0x70,
+0x99,
+0x68,
+0x0,
+0x4d,
+0x53,
+0x45,
+0x4c,
+0xa0,
+0xb,
+0x93,
+0x4d,
+0x45,
+0x53,
+0x5f,
+0x1,
+0x70,
+0xa,
+0xf,
+0x60,
+0x5b,
+0x27,
+0x4d,
+0x4c,
+0x43,
+0x4b,
+0xa4,
+0x60,
+0x14,
+0x41,
+0x18,
+0x4d,
+0x43,
+0x52,
+0x53,
+0x9,
+0x5b,
+0x23,
+0x4d,
+0x4c,
+0x43,
+0x4b,
+0xff,
+0xff,
+0x70,
+0x99,
+0x68,
+0x0,
+0x4d,
+0x53,
+0x45,
+0x4c,
+0x8,
+0x4d,
+0x52,
+0x36,
+0x34,
+0x11,
+0x33,
+0xa,
+0x30,
+0x8a,
+0x2b,
+0x0,
+0x0,
+0xc,
+0x3,
+0x0,
+0x0,
+0x0,
+0x0,
+0x0,
+0x0,
+0x0,
+0x0,
+0x0,
+0x0,
+0x0,
+0x0,
+0x0,
+0x0,
+0x0,
+0x0,
+0xfe,
+0xff,
+0xff,
+0xff,
+0xff,
+0xff,
+0xff,
+0xff,
+0x0,
+0x0,
+0x0,
+0x0,
+0x0,
+0x0,
+0x0,
+0x0,
+0xff,
+0xff,
+0xff,
+0xff,
+0xff,
+0xff,
+0xff,
+0xff,
+0x79,
+0x0,
+0x8a,
+0x4d,
+0x52,
+0x36,
+0x34,
+0xa,
+0xe,
+0x4d,
+0x49,
+0x4e,
+0x4c,
+0x8a,
+0x4d,
+0x52,
+0x36,
+0x34,
+0xa,
+0x12,
+0x4d,
+0x49,
+0x4e,
+0x48,
+0x8a,
+0x4d,
+0x52,
+0x36,
+0x34,
+0xa,
+0x26,
+0x4c,
+0x45,
+0x4e,
+0x4c,
+0x8a,
+0x4d,
+0x52,
+0x36,
+0x34,
+0xa,
+0x2a,
+0x4c,
+0x45,
+0x4e,
+0x48,
+0x8a,
+0x4d,
+0x52,
+0x36,
+0x34,
+0xa,
+0x16,
+0x4d,
+0x41,
+0x58,
+0x4c,
+0x8a,
+0x4d,
+0x52,
+0x36,
+0x34,
+0xa,
+0x1a,
+0x4d,
+0x41,
+0x58,
+0x48,
+0x70,
+0x4d,
+0x52,
+0x42,
+0x48,
+0x4d,
+0x49,
+0x4e,
+0x48,
+0x70,
+0x4d,
+0x52,
+0x42,
+0x4c,
+0x4d,
+0x49,
+0x4e,
+0x4c,
+0x70,
+0x4d,
+0x52,
+0x4c,
+0x48,
+0x4c,
+0x45,
+0x4e,
+0x48,
+0x70,
+0x4d,
+0x52,
+0x4c,
+0x4c,
+0x4c,
+0x45,
+0x4e,
+0x4c,
+0x72,
+0x4d,
+0x49,
+0x4e,
+0x4c,
+0x4c,
+0x45,
+0x4e,
+0x4c,
+0x4d,
+0x41,
+0x58,
+0x4c,
+0x72,
+0x4d,
+0x49,
+0x4e,
+0x48,
+0x4c,
+0x45,
+0x4e,
+0x48,
+0x4d,
+0x41,
+0x58,
+0x48,
+0xa0,
+0x14,
+0x95,
+0x4d,
+0x41,
+0x58,
+0x4c,
+0x4d,
+0x49,
+0x4e,
+0x4c,
+0x72,
+0x4d,
+0x41,
+0x58,
+0x48,
+0x1,
+0x4d,
+0x41,
+0x58,
+0x48,
+0xa0,
+0x11,
+0x95,
+0x4d,
+0x41,
+0x58,
+0x4c,
+0x1,
+0x74,
+0x4d,
+0x41,
+0x58,
+0x48,
+0x1,
+0x4d,
+0x41,
+0x58,
+0x48,
+0x74,
+0x4d,
+0x41,
+0x58,
+0x4c,
+0x1,
+0x4d,
+0x41,
+0x58,
+0x4c,
+0xa0,
+0x44,
+0x7,
+0x93,
+0x4d,
+0x41,
+0x58,
+0x48,
+0x0,
+0x8,
+0x4d,
+0x52,
+0x33,
+0x32,
+0x11,
+0x1f,
+0xa,
+0x1c,
+0x87,
+0x17,
+0x0,
+0x0,
+0xc,
+0x3,
+0x0,
+0x0,
+0x0,
+0x0,
+0x0,
+0x0,
+0x0,
+0x0,
+0xfe,
+0xff,
+0xff,
+0xff,
+0x0,
+0x0,
+0x0,
+0x0,
+0xff,
+0xff,
+0xff,
+0xff,
+0x79,
+0x0,
+0x8a,
+0x4d,
+0x52,
+0x33,
+0x32,
+0xa,
+0xa,
+0x4d,
+0x49,
+0x4e,
+0x5f,
+0x8a,
+0x4d,
+0x52,
+0x33,
+0x32,
+0xa,
+0xe,
+0x4d,
+0x41,
+0x58,
+0x5f,
+0x8a,
+0x4d,
+0x52,
+0x33,
+0x32,
+0xa,
+0x16,
+0x4c,
+0x45,
+0x4e,
+0x5f,
+0x70,
+0x4d,
+0x49,
+0x4e,
+0x4c,
+0x4d,
+0x49,
+0x4e,
+0x5f,
+0x70,
+0x4d,
+0x41,
+0x58,
+0x4c,
+0x4d,
+0x41,
+0x58,
+0x5f,
+0x70,
+0x4c,
+0x45,
+0x4e,
+0x4c,
+0x4c,
+0x45,
+0x4e,
+0x5f,
+0x5b,
+0x27,
+0x4d,
+0x4c,
+0x43,
+0x4b,
+0xa4,
+0x4d,
+0x52,
+0x33,
+0x32,
+0x5b,
+0x27,
+0x4d,
+0x4c,
+0x43,
+0x4b,
+0xa4,
+0x4d,
+0x52,
+0x36,
+0x34,
+0x14,
+0x24,
+0x4d,
+0x50,
+0x58,
+0x4d,
+0x1,
+0x5b,
+0x23,
+0x4d,
+0x4c,
+0x43,
+0x4b,
+0xff,
+0xff,
+0x70,
+0x99,
+0x68,
+0x0,
+0x4d,
+0x53,
+0x45,
+0x4c,
+0x70,
+0x4d,
+0x50,
+0x58,
+0x5f,
+0x60,
+0x5b,
+0x27,
+0x4d,
+0x4c,
+0x43,
+0x4b,
+0xa4,
+0x60,
+0x14,
+0x28,
+0x4d,
+0x4f,
+0x53,
+0x54,
+0x4,
+0x5b,
+0x23,
+0x4d,
+0x4c,
+0x43,
+0x4b,
+0xff,
+0xff,
+0x70,
+0x99,
+0x68,
+0x0,
+0x4d,
+0x53,
+0x45,
+0x4c,
+0x70,
+0x69,
+0x4d,
+0x4f,
+0x45,
+0x56,
+0x70,
+0x6a,
+0x4d,
+0x4f,
+0x53,
+0x43,
+0x5b,
+0x27,
+0x4d,
+0x4c,
+0x43,
+0x4b,
+0x10,
 0x45,
 0xd,
 0x5f,
diff --git a/hw/i386/q35-acpi-dsdt.dsl b/hw/i386/q35-acpi-dsdt.dsl
index 054b035..e1cee5d 100644
--- a/hw/i386/q35-acpi-dsdt.dsl
+++ b/hw/i386/q35-acpi-dsdt.dsl
@@ -405,13 +405,12 @@ DefinitionBlock (
 #include "hw/acpi/pc-hotplug.h"
 #define CPU_STATUS_BASE ICH9_CPU_HOTPLUG_IO_BASE
 #include "acpi-dsdt-cpu-hotplug.dsl"
+#include "acpi-dsdt-mem-hotplug.dsl"
 
 
 /****************************************************************
  * General purpose events
  ****************************************************************/
-    External(\_SB.PCI0.MEMORY_HOTPLUG_DEVICE.MEMORY_SLOT_SCAN_METHOD, MethodObj)
-
     Scope(\_GPE) {
         Name(_HID, "ACPI0006")
 
diff --git a/hw/i386/q35-acpi-dsdt.hex.generated b/hw/i386/q35-acpi-dsdt.hex.generated
index c9eb4ac..4807bdf 100644
--- a/hw/i386/q35-acpi-dsdt.hex.generated
+++ b/hw/i386/q35-acpi-dsdt.hex.generated
@@ -3,12 +3,12 @@ static unsigned char Q35AcpiDsdtAmlCode[] = {
 0x53,
 0x44,
 0x54,
-0xe5,
-0x1c,
+0xf6,
+0x1f,
 0x0,
 0x0,
 0x1,
-0xb7,
+0x91,
 0x42,
 0x58,
 0x50,
@@ -31,9 +31,9 @@ static unsigned char Q35AcpiDsdtAmlCode[] = {
 0x4e,
 0x54,
 0x4c,
-0x15,
-0x11,
-0x13,
+0x28,
+0x8,
+0x14,
 0x20,
 0x10,
 0x49,
@@ -7234,6 +7234,791 @@ static unsigned char Q35AcpiDsdtAmlCode[] = {
 0xa,
 0xb,
 0x10,
+0x40,
+0x31,
+0x2e,
+0x5f,
+0x53,
+0x42,
+0x5f,
+0x50,
+0x43,
+0x49,
+0x30,
+0x5b,
+0x82,
+0x43,
+0x30,
+0x4d,
+0x48,
+0x50,
+0x44,
+0x8,
+0x5f,
+0x48,
+0x49,
+0x44,
+0xd,
+0x50,
+0x4e,
+0x50,
+0x30,
+0x41,
+0x30,
+0x36,
+0x0,
+0x8,
+0x5f,
+0x55,
+0x49,
+0x44,
+0xd,
+0x4d,
+0x65,
+0x6d,
+0x6f,
+0x72,
+0x79,
+0x20,
+0x68,
+0x6f,
+0x74,
+0x70,
+0x6c,
+0x75,
+0x67,
+0x20,
+0x72,
+0x65,
+0x73,
+0x6f,
+0x75,
+0x72,
+0x63,
+0x65,
+0x73,
+0x0,
+0x5b,
+0x80,
+0x48,
+0x50,
+0x4d,
+0x52,
+0x1,
+0xb,
+0x0,
+0xa,
+0xa,
+0x18,
+0x8,
+0x5f,
+0x43,
+0x52,
+0x53,
+0x11,
+0xd,
+0xa,
+0xa,
+0x47,
+0x1,
+0x0,
+0xa,
+0x0,
+0xa,
+0x0,
+0x18,
+0x79,
+0x0,
+0x14,
+0x13,
+0x5f,
+0x53,
+0x54,
+0x41,
+0x0,
+0xa0,
+0x9,
+0x93,
+0x4d,
+0x44,
+0x4e,
+0x52,
+0x0,
+0xa4,
+0x0,
+0xa4,
+0xa,
+0xb,
+0x5b,
+0x81,
+0x1f,
+0x48,
+0x50,
+0x4d,
+0x52,
+0x3,
+0x4d,
+0x52,
+0x42,
+0x4c,
+0x20,
+0x4d,
+0x52,
+0x42,
+0x48,
+0x20,
+0x4d,
+0x52,
+0x4c,
+0x4c,
+0x20,
+0x4d,
+0x52,
+0x4c,
+0x48,
+0x20,
+0x4d,
+0x50,
+0x58,
+0x5f,
+0x20,
+0x5b,
+0x81,
+0x13,
+0x48,
+0x50,
+0x4d,
+0x52,
+0x1,
+0x0,
+0x40,
+0xa,
+0x4d,
+0x45,
+0x53,
+0x5f,
+0x1,
+0x4d,
+0x49,
+0x4e,
+0x53,
+0x1,
+0x5b,
+0x1,
+0x4d,
+0x4c,
+0x43,
+0x4b,
+0x0,
+0x5b,
+0x81,
+0x15,
+0x48,
+0x50,
+0x4d,
+0x52,
+0x3,
+0x4d,
+0x53,
+0x45,
+0x4c,
+0x20,
+0x4d,
+0x4f,
+0x45,
+0x56,
+0x20,
+0x4d,
+0x4f,
+0x53,
+0x43,
+0x20,
+0x14,
+0x4a,
+0x4,
+0x4d,
+0x53,
+0x43,
+0x4e,
+0x0,
+0xa0,
+0x9,
+0x93,
+0x4d,
+0x44,
+0x4e,
+0x52,
+0x0,
+0xa4,
+0x0,
+0x70,
+0x0,
+0x60,
+0x5b,
+0x23,
+0x4d,
+0x4c,
+0x43,
+0x4b,
+0xff,
+0xff,
+0xa2,
+0x25,
+0x95,
+0x60,
+0x4d,
+0x44,
+0x4e,
+0x52,
+0x70,
+0x60,
+0x4d,
+0x53,
+0x45,
+0x4c,
+0xa0,
+0x13,
+0x93,
+0x4d,
+0x49,
+0x4e,
+0x53,
+0x1,
+0x4d,
+0x54,
+0x46,
+0x59,
+0x60,
+0x1,
+0x70,
+0x1,
+0x4d,
+0x49,
+0x4e,
+0x53,
+0x72,
+0x60,
+0x1,
+0x60,
+0x5b,
+0x27,
+0x4d,
+0x4c,
+0x43,
+0x4b,
+0xa4,
+0x1,
+0x14,
+0x2d,
+0x4d,
+0x52,
+0x53,
+0x54,
+0x1,
+0x70,
+0x0,
+0x60,
+0x5b,
+0x23,
+0x4d,
+0x4c,
+0x43,
+0x4b,
+0xff,
+0xff,
+0x70,
+0x99,
+0x68,
+0x0,
+0x4d,
+0x53,
+0x45,
+0x4c,
+0xa0,
+0xb,
+0x93,
+0x4d,
+0x45,
+0x53,
+0x5f,
+0x1,
+0x70,
+0xa,
+0xf,
+0x60,
+0x5b,
+0x27,
+0x4d,
+0x4c,
+0x43,
+0x4b,
+0xa4,
+0x60,
+0x14,
+0x41,
+0x18,
+0x4d,
+0x43,
+0x52,
+0x53,
+0x9,
+0x5b,
+0x23,
+0x4d,
+0x4c,
+0x43,
+0x4b,
+0xff,
+0xff,
+0x70,
+0x99,
+0x68,
+0x0,
+0x4d,
+0x53,
+0x45,
+0x4c,
+0x8,
+0x4d,
+0x52,
+0x36,
+0x34,
+0x11,
+0x33,
+0xa,
+0x30,
+0x8a,
+0x2b,
+0x0,
+0x0,
+0xc,
+0x3,
+0x0,
+0x0,
+0x0,
+0x0,
+0x0,
+0x0,
+0x0,
+0x0,
+0x0,
+0x0,
+0x0,
+0x0,
+0x0,
+0x0,
+0x0,
+0x0,
+0xfe,
+0xff,
+0xff,
+0xff,
+0xff,
+0xff,
+0xff,
+0xff,
+0x0,
+0x0,
+0x0,
+0x0,
+0x0,
+0x0,
+0x0,
+0x0,
+0xff,
+0xff,
+0xff,
+0xff,
+0xff,
+0xff,
+0xff,
+0xff,
+0x79,
+0x0,
+0x8a,
+0x4d,
+0x52,
+0x36,
+0x34,
+0xa,
+0xe,
+0x4d,
+0x49,
+0x4e,
+0x4c,
+0x8a,
+0x4d,
+0x52,
+0x36,
+0x34,
+0xa,
+0x12,
+0x4d,
+0x49,
+0x4e,
+0x48,
+0x8a,
+0x4d,
+0x52,
+0x36,
+0x34,
+0xa,
+0x26,
+0x4c,
+0x45,
+0x4e,
+0x4c,
+0x8a,
+0x4d,
+0x52,
+0x36,
+0x34,
+0xa,
+0x2a,
+0x4c,
+0x45,
+0x4e,
+0x48,
+0x8a,
+0x4d,
+0x52,
+0x36,
+0x34,
+0xa,
+0x16,
+0x4d,
+0x41,
+0x58,
+0x4c,
+0x8a,
+0x4d,
+0x52,
+0x36,
+0x34,
+0xa,
+0x1a,
+0x4d,
+0x41,
+0x58,
+0x48,
+0x70,
+0x4d,
+0x52,
+0x42,
+0x48,
+0x4d,
+0x49,
+0x4e,
+0x48,
+0x70,
+0x4d,
+0x52,
+0x42,
+0x4c,
+0x4d,
+0x49,
+0x4e,
+0x4c,
+0x70,
+0x4d,
+0x52,
+0x4c,
+0x48,
+0x4c,
+0x45,
+0x4e,
+0x48,
+0x70,
+0x4d,
+0x52,
+0x4c,
+0x4c,
+0x4c,
+0x45,
+0x4e,
+0x4c,
+0x72,
+0x4d,
+0x49,
+0x4e,
+0x4c,
+0x4c,
+0x45,
+0x4e,
+0x4c,
+0x4d,
+0x41,
+0x58,
+0x4c,
+0x72,
+0x4d,
+0x49,
+0x4e,
+0x48,
+0x4c,
+0x45,
+0x4e,
+0x48,
+0x4d,
+0x41,
+0x58,
+0x48,
+0xa0,
+0x14,
+0x95,
+0x4d,
+0x41,
+0x58,
+0x4c,
+0x4d,
+0x49,
+0x4e,
+0x4c,
+0x72,
+0x4d,
+0x41,
+0x58,
+0x48,
+0x1,
+0x4d,
+0x41,
+0x58,
+0x48,
+0xa0,
+0x11,
+0x95,
+0x4d,
+0x41,
+0x58,
+0x4c,
+0x1,
+0x74,
+0x4d,
+0x41,
+0x58,
+0x48,
+0x1,
+0x4d,
+0x41,
+0x58,
+0x48,
+0x74,
+0x4d,
+0x41,
+0x58,
+0x4c,
+0x1,
+0x4d,
+0x41,
+0x58,
+0x4c,
+0xa0,
+0x44,
+0x7,
+0x93,
+0x4d,
+0x41,
+0x58,
+0x48,
+0x0,
+0x8,
+0x4d,
+0x52,
+0x33,
+0x32,
+0x11,
+0x1f,
+0xa,
+0x1c,
+0x87,
+0x17,
+0x0,
+0x0,
+0xc,
+0x3,
+0x0,
+0x0,
+0x0,
+0x0,
+0x0,
+0x0,
+0x0,
+0x0,
+0xfe,
+0xff,
+0xff,
+0xff,
+0x0,
+0x0,
+0x0,
+0x0,
+0xff,
+0xff,
+0xff,
+0xff,
+0x79,
+0x0,
+0x8a,
+0x4d,
+0x52,
+0x33,
+0x32,
+0xa,
+0xa,
+0x4d,
+0x49,
+0x4e,
+0x5f,
+0x8a,
+0x4d,
+0x52,
+0x33,
+0x32,
+0xa,
+0xe,
+0x4d,
+0x41,
+0x58,
+0x5f,
+0x8a,
+0x4d,
+0x52,
+0x33,
+0x32,
+0xa,
+0x16,
+0x4c,
+0x45,
+0x4e,
+0x5f,
+0x70,
+0x4d,
+0x49,
+0x4e,
+0x4c,
+0x4d,
+0x49,
+0x4e,
+0x5f,
+0x70,
+0x4d,
+0x41,
+0x58,
+0x4c,
+0x4d,
+0x41,
+0x58,
+0x5f,
+0x70,
+0x4c,
+0x45,
+0x4e,
+0x4c,
+0x4c,
+0x45,
+0x4e,
+0x5f,
+0x5b,
+0x27,
+0x4d,
+0x4c,
+0x43,
+0x4b,
+0xa4,
+0x4d,
+0x52,
+0x33,
+0x32,
+0x5b,
+0x27,
+0x4d,
+0x4c,
+0x43,
+0x4b,
+0xa4,
+0x4d,
+0x52,
+0x36,
+0x34,
+0x14,
+0x24,
+0x4d,
+0x50,
+0x58,
+0x4d,
+0x1,
+0x5b,
+0x23,
+0x4d,
+0x4c,
+0x43,
+0x4b,
+0xff,
+0xff,
+0x70,
+0x99,
+0x68,
+0x0,
+0x4d,
+0x53,
+0x45,
+0x4c,
+0x70,
+0x4d,
+0x50,
+0x58,
+0x5f,
+0x60,
+0x5b,
+0x27,
+0x4d,
+0x4c,
+0x43,
+0x4b,
+0xa4,
+0x60,
+0x14,
+0x28,
+0x4d,
+0x4f,
+0x53,
+0x54,
+0x4,
+0x5b,
+0x23,
+0x4d,
+0x4c,
+0x43,
+0x4b,
+0xff,
+0xff,
+0x70,
+0x99,
+0x68,
+0x0,
+0x4d,
+0x53,
+0x45,
+0x4c,
+0x70,
+0x69,
+0x4d,
+0x4f,
+0x45,
+0x56,
+0x70,
+0x6a,
+0x4d,
+0x4f,
+0x53,
+0x43,
+0x5b,
+0x27,
+0x4d,
+0x4c,
+0x43,
+0x4b,
+0x10,
 0x42,
 0xa,
 0x5f,
diff --git a/hw/i386/ssdt-mem.hex.generated b/hw/i386/ssdt-mem.hex.generated
index 00bd34d..b3bfbbd 100644
--- a/hw/i386/ssdt-mem.hex.generated
+++ b/hw/i386/ssdt-mem.hex.generated
@@ -11,7 +11,7 @@ static unsigned char ssdm_mem_aml[] = {
 0x0,
 0x0,
 0x2,
-0x71,
+0x66,
 0x42,
 0x58,
 0x50,
@@ -34,9 +34,9 @@ static unsigned char ssdm_mem_aml[] = {
 0x4e,
 0x54,
 0x4c,
-0x15,
-0x11,
-0x13,
+0x28,
+0x8,
+0x14,
 0x20,
 0x10,
 0x42,
diff --git a/hw/i386/ssdt-misc.dsl b/hw/i386/ssdt-misc.dsl
index 0fd4480..1e3baae 100644
--- a/hw/i386/ssdt-misc.dsl
+++ b/hw/i386/ssdt-misc.dsl
@@ -36,6 +36,8 @@ DefinitionBlock ("ssdt-misc.aml", "SSDT", 0x01, "BXPC", "BXSSDTSUSP", 0x1)
        Name(P1E, Buffer() { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 })
        ACPI_EXTRACT_NAME_BUFFER8 acpi_pci64_length
        Name(P1L, Buffer() { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 })
+       ACPI_EXTRACT_NAME_DWORD_CONST ssdt_mctrl_nr_slots
+       Name(MEMORY_SLOTS_NUMBER, 0x12345678)
     }
 
 
@@ -117,167 +119,4 @@ DefinitionBlock ("ssdt-misc.aml", "SSDT", 0x01, "BXPC", "BXSSDTSUSP", 0x1)
             }
         }
     }
-
-    External(MEMORY_SLOT_NOTIFY_METHOD, MethodObj)
-    Scope(\_SB.PCI0) {
-        Device(MEMORY_HOTPLUG_DEVICE) {
-            Name(_HID, "PNP0A06")
-            Name(_UID, "Memory hotplug resources")
-
-            ACPI_EXTRACT_NAME_DWORD_CONST ssdt_mctrl_nr_slots
-            Name(MEMORY_SLOTS_NUMBER, 0x12345678)
-
-            /* Memory hotplug IO registers */
-            OperationRegion(MEMORY_HOTPLUG_IO_REGION, SystemIO,
-                            ACPI_MEMORY_HOTPLUG_BASE,
-                            ACPI_MEMORY_HOTPLUG_IO_LEN)
-
-            Name(_CRS, ResourceTemplate() {
-                IO(Decode16, ACPI_MEMORY_HOTPLUG_BASE, ACPI_MEMORY_HOTPLUG_BASE,
-                   0, ACPI_MEMORY_HOTPLUG_IO_LEN, IO)
-            })
-
-            Method(_STA, 0) {
-                If (LEqual(MEMORY_SLOTS_NUMBER, Zero)) {
-                    Return(0x0)
-                }
-                /* present, functioning, decoding, not shown in UI */
-                Return(0xB)
-            }
-
-            Field(MEMORY_HOTPLUG_IO_REGION, DWordAcc, NoLock, Preserve) {
-                MEMORY_SLOT_ADDR_LOW, 32,  // read only
-                MEMORY_SLOT_ADDR_HIGH, 32, // read only
-                MEMORY_SLOT_SIZE_LOW, 32,  // read only
-                MEMORY_SLOT_SIZE_HIGH, 32, // read only
-                MEMORY_SLOT_PROXIMITY, 32, // read only
-            }
-            Field(MEMORY_HOTPLUG_IO_REGION, ByteAcc, NoLock, Preserve) {
-                Offset(20),
-                MEMORY_SLOT_ENABLED,  1, // 1 if enabled, read only
-                MEMORY_SLOT_INSERT_EVENT, 1, // (read) 1 if has a insert event. (write) 1 to clear event
-            }
-
-            Mutex (MEMORY_SLOT_LOCK, 0)
-            Field (MEMORY_HOTPLUG_IO_REGION, DWordAcc, NoLock, Preserve) {
-                MEMORY_SLOT_SLECTOR, 32,  // DIMM selector, write only
-                MEMORY_SLOT_OST_EVENT, 32,  // _OST event code, write only
-                MEMORY_SLOT_OST_STATUS, 32,  // _OST status code, write only
-            }
-
-            Method(MEMORY_SLOT_SCAN_METHOD, 0) {
-                If (LEqual(MEMORY_SLOTS_NUMBER, Zero)) {
-                     Return(Zero)
-                }
-
-                Store(Zero, Local0) // Mem devs iterrator
-                Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
-                while (LLess(Local0, MEMORY_SLOTS_NUMBER)) {
-                    Store(Local0, MEMORY_SLOT_SLECTOR) // select Local0 DIMM
-                    If (LEqual(MEMORY_SLOT_INSERT_EVENT, One)) { // Memory device needs check
-                        MEMORY_SLOT_NOTIFY_METHOD(Local0, 1)
-                        Store(1, MEMORY_SLOT_INSERT_EVENT)
-                    }
-                    // TODO: handle memory eject request
-                    Add(Local0, One, Local0) // goto next DIMM
-                }
-                Release(MEMORY_SLOT_LOCK)
-                Return(One)
-            }
-
-            Method(MEMORY_SLOT_STATUS_METHOD, 1) {
-                Store(Zero, Local0)
-
-                Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
-                Store(ToInteger(Arg0), MEMORY_SLOT_SLECTOR) // select DIMM
-
-                If (LEqual(MEMORY_SLOT_ENABLED, One)) {
-                    Store(0xF, Local0)
-                }
-
-                Release(MEMORY_SLOT_LOCK)
-                Return(Local0)
-            }
-
-            Method(MEMORY_SLOT_CRS_METHOD, 1, Serialized) {
-                Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
-                Store(ToInteger(Arg0), MEMORY_SLOT_SLECTOR) // select DIMM
-
-                Name(MR64, ResourceTemplate() {
-                    QWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed,
-                    Cacheable, ReadWrite,
-                    0x0000000000000000,        // Address Space Granularity
-                    0x0000000000000000,        // Address Range Minimum
-                    0xFFFFFFFFFFFFFFFE,        // Address Range Maximum
-                    0x0000000000000000,        // Address Translation Offset
-                    0xFFFFFFFFFFFFFFFF,        // Address Length
-                    ,, MW64, AddressRangeMemory, TypeStatic)
-                })
-
-                CreateDWordField(MR64, 14, MINL)
-                CreateDWordField(MR64, 18, MINH)
-                CreateDWordField(MR64, 38, LENL)
-                CreateDWordField(MR64, 42, LENH)
-                CreateDWordField(MR64, 22, MAXL)
-                CreateDWordField(MR64, 26, MAXH)
-
-                Store(MEMORY_SLOT_ADDR_HIGH, MINH)
-                Store(MEMORY_SLOT_ADDR_LOW, MINL)
-                Store(MEMORY_SLOT_SIZE_HIGH, LENH)
-                Store(MEMORY_SLOT_SIZE_LOW, LENL)
-
-                // 64-bit math: MAX = MIN + LEN - 1
-                Add(MINL, LENL, MAXL)
-                Add(MINH, LENH, MAXH)
-                If (LLess(MAXL, MINL)) {
-                    Add(MAXH, One, MAXH)
-                }
-                If (LLess(MAXL, One)) {
-                    Subtract(MAXH, One, MAXH)
-                }
-                Subtract(MAXL, One, MAXL)
-
-                If (LEqual(MAXH, Zero)){
-                    Name(MR32, ResourceTemplate() {
-                        DWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed,
-                        Cacheable, ReadWrite,
-                        0x00000000,        // Address Space Granularity
-                        0x00000000,        // Address Range Minimum
-                        0xFFFFFFFE,        // Address Range Maximum
-                        0x00000000,        // Address Translation Offset
-                        0xFFFFFFFF,        // Address Length
-                        ,, MW32, AddressRangeMemory, TypeStatic)
-                    })
-                    CreateDWordField(MR32, MW32._MIN, MIN)
-                    CreateDWordField(MR32, MW32._MAX, MAX)
-                    CreateDWordField(MR32, MW32._LEN, LEN)
-                    Store(MINL, MIN)
-                    Store(MAXL, MAX)
-                    Store(LENL, LEN)
-
-                    Release(MEMORY_SLOT_LOCK)
-                    Return(MR32)
-                }
-
-                Release(MEMORY_SLOT_LOCK)
-                Return(MR64)
-            }
-
-            Method(MEMORY_SLOT_PROXIMITY_METHOD, 1) {
-                Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
-                Store(ToInteger(Arg0), MEMORY_SLOT_SLECTOR) // select DIMM
-                Store(MEMORY_SLOT_PROXIMITY, Local0)
-                Release(MEMORY_SLOT_LOCK)
-                Return(Local0)
-            }
-
-            Method(MEMORY_SLOT_OST_METHOD, 4) {
-                Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
-                Store(ToInteger(Arg0), MEMORY_SLOT_SLECTOR) // select DIMM
-                Store(Arg1, MEMORY_SLOT_OST_EVENT)
-                Store(Arg2, MEMORY_SLOT_OST_STATUS)
-                Release(MEMORY_SLOT_LOCK)
-            }
-        } // Device()
-    } // Scope()
 }
diff --git a/hw/i386/ssdt-misc.hex.generated b/hw/i386/ssdt-misc.hex.generated
index ba4268a..cbcf61d 100644
--- a/hw/i386/ssdt-misc.hex.generated
+++ b/hw/i386/ssdt-misc.hex.generated
@@ -2,13 +2,13 @@ static unsigned char acpi_pci64_length[] = {
 0x6f
 };
 static unsigned char acpi_s4_pkg[] = {
-0x8f
+0x99
 };
-static unsigned short ssdt_mctrl_nr_slots[] = {
-0x1aa
+static unsigned char ssdt_mctrl_nr_slots[] = {
+0x7d
 };
 static unsigned char acpi_s3_name[] = {
-0x7c
+0x86
 };
 static unsigned char acpi_pci32_start[] = {
 0x2f
@@ -21,12 +21,12 @@ static unsigned char ssdp_misc_aml[] = {
 0x53,
 0x44,
 0x54,
-0x7e,
-0x4,
+0x6c,
+0x1,
 0x0,
 0x0,
 0x1,
-0x8b,
+0x3,
 0x42,
 0x58,
 0x50,
@@ -49,12 +49,12 @@ static unsigned char ssdp_misc_aml[] = {
 0x4e,
 0x54,
 0x4c,
-0x15,
-0x11,
-0x13,
+0x28,
+0x8,
+0x14,
 0x20,
 0x10,
-0x42,
+0x4c,
 0x5,
 0x5c,
 0x0,
@@ -136,6 +136,16 @@ static unsigned char ssdp_misc_aml[] = {
 0x0,
 0x0,
 0x0,
+0x8,
+0x4d,
+0x44,
+0x4e,
+0x52,
+0xc,
+0x78,
+0x56,
+0x34,
+0x12,
 0x10,
 0x29,
 0x5c,
@@ -370,809 +380,13 @@ static unsigned char ssdp_misc_aml[] = {
 0x49,
 0x4f,
 0x4d,
-0x58,
-0x10,
-0x4b,
-0x31,
-0x5c,
-0x2e,
-0x5f,
-0x53,
-0x42,
-0x5f,
-0x50,
-0x43,
-0x49,
-0x30,
-0x5b,
-0x82,
-0x4d,
-0x30,
-0x4d,
-0x48,
-0x50,
-0x44,
-0x8,
-0x5f,
-0x48,
-0x49,
-0x44,
-0xd,
-0x50,
-0x4e,
-0x50,
-0x30,
-0x41,
-0x30,
-0x36,
-0x0,
-0x8,
-0x5f,
-0x55,
-0x49,
-0x44,
-0xd,
-0x4d,
-0x65,
-0x6d,
-0x6f,
-0x72,
-0x79,
-0x20,
-0x68,
-0x6f,
-0x74,
-0x70,
-0x6c,
-0x75,
-0x67,
-0x20,
-0x72,
-0x65,
-0x73,
-0x6f,
-0x75,
-0x72,
-0x63,
-0x65,
-0x73,
-0x0,
-0x8,
-0x4d,
-0x44,
-0x4e,
-0x52,
-0xc,
-0x78,
-0x56,
-0x34,
-0x12,
-0x5b,
-0x80,
-0x48,
-0x50,
-0x4d,
-0x52,
-0x1,
-0xb,
-0x0,
-0xa,
-0xa,
-0x18,
-0x8,
-0x5f,
-0x43,
-0x52,
-0x53,
-0x11,
-0xd,
-0xa,
-0xa,
-0x47,
-0x1,
-0x0,
-0xa,
-0x0,
-0xa,
-0x0,
-0x18,
-0x79,
-0x0,
-0x14,
-0x13,
-0x5f,
-0x53,
-0x54,
-0x41,
-0x0,
-0xa0,
-0x9,
-0x93,
-0x4d,
-0x44,
-0x4e,
-0x52,
-0x0,
-0xa4,
-0x0,
-0xa4,
-0xa,
-0xb,
-0x5b,
-0x81,
-0x1f,
-0x48,
-0x50,
-0x4d,
-0x52,
-0x3,
-0x4d,
-0x52,
-0x42,
-0x4c,
-0x20,
-0x4d,
-0x52,
-0x42,
-0x48,
-0x20,
-0x4d,
-0x52,
-0x4c,
-0x4c,
-0x20,
-0x4d,
-0x52,
-0x4c,
-0x48,
-0x20,
-0x4d,
-0x50,
-0x58,
-0x5f,
-0x20,
-0x5b,
-0x81,
-0x13,
-0x48,
-0x50,
-0x4d,
-0x52,
-0x1,
-0x0,
-0x40,
-0xa,
-0x4d,
-0x45,
-0x53,
-0x5f,
-0x1,
-0x4d,
-0x49,
-0x4e,
-0x53,
-0x1,
-0x5b,
-0x1,
-0x4d,
-0x4c,
-0x43,
-0x4b,
-0x0,
-0x5b,
-0x81,
-0x15,
-0x48,
-0x50,
-0x4d,
-0x52,
-0x3,
-0x4d,
-0x53,
-0x45,
-0x4c,
-0x20,
-0x4d,
-0x4f,
-0x45,
-0x56,
-0x20,
-0x4d,
-0x4f,
-0x53,
-0x43,
-0x20,
-0x14,
-0x4a,
-0x4,
-0x4d,
-0x53,
-0x43,
-0x4e,
-0x0,
-0xa0,
-0x9,
-0x93,
-0x4d,
-0x44,
-0x4e,
-0x52,
-0x0,
-0xa4,
-0x0,
-0x70,
-0x0,
-0x60,
-0x5b,
-0x23,
-0x4d,
-0x4c,
-0x43,
-0x4b,
-0xff,
-0xff,
-0xa2,
-0x25,
-0x95,
-0x60,
-0x4d,
-0x44,
-0x4e,
-0x52,
-0x70,
-0x60,
-0x4d,
-0x53,
-0x45,
-0x4c,
-0xa0,
-0x13,
-0x93,
-0x4d,
-0x49,
-0x4e,
-0x53,
-0x1,
-0x4d,
-0x54,
-0x46,
-0x59,
-0x60,
-0x1,
-0x70,
-0x1,
-0x4d,
-0x49,
-0x4e,
-0x53,
-0x72,
-0x60,
-0x1,
-0x60,
-0x5b,
-0x27,
-0x4d,
-0x4c,
-0x43,
-0x4b,
-0xa4,
-0x1,
-0x14,
-0x2d,
-0x4d,
-0x52,
-0x53,
-0x54,
-0x1,
-0x70,
-0x0,
-0x60,
-0x5b,
-0x23,
-0x4d,
-0x4c,
-0x43,
-0x4b,
-0xff,
-0xff,
-0x70,
-0x99,
-0x68,
-0x0,
-0x4d,
-0x53,
-0x45,
-0x4c,
-0xa0,
-0xb,
-0x93,
-0x4d,
-0x45,
-0x53,
-0x5f,
-0x1,
-0x70,
-0xa,
-0xf,
-0x60,
-0x5b,
-0x27,
-0x4d,
-0x4c,
-0x43,
-0x4b,
-0xa4,
-0x60,
-0x14,
-0x41,
-0x18,
-0x4d,
-0x43,
-0x52,
-0x53,
-0x9,
-0x5b,
-0x23,
-0x4d,
-0x4c,
-0x43,
-0x4b,
-0xff,
-0xff,
-0x70,
-0x99,
-0x68,
-0x0,
-0x4d,
-0x53,
-0x45,
-0x4c,
-0x8,
-0x4d,
-0x52,
-0x36,
-0x34,
-0x11,
-0x33,
-0xa,
-0x30,
-0x8a,
-0x2b,
-0x0,
-0x0,
-0xc,
-0x3,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0xfe,
-0xff,
-0xff,
-0xff,
-0xff,
-0xff,
-0xff,
-0xff,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0xff,
-0xff,
-0xff,
-0xff,
-0xff,
-0xff,
-0xff,
-0xff,
-0x79,
-0x0,
-0x8a,
-0x4d,
-0x52,
-0x36,
-0x34,
-0xa,
-0xe,
-0x4d,
-0x49,
-0x4e,
-0x4c,
-0x8a,
-0x4d,
-0x52,
-0x36,
-0x34,
-0xa,
-0x12,
-0x4d,
-0x49,
-0x4e,
-0x48,
-0x8a,
-0x4d,
-0x52,
-0x36,
-0x34,
-0xa,
-0x26,
-0x4c,
-0x45,
-0x4e,
-0x4c,
-0x8a,
-0x4d,
-0x52,
-0x36,
-0x34,
-0xa,
-0x2a,
-0x4c,
-0x45,
-0x4e,
-0x48,
-0x8a,
-0x4d,
-0x52,
-0x36,
-0x34,
-0xa,
-0x16,
-0x4d,
-0x41,
-0x58,
-0x4c,
-0x8a,
-0x4d,
-0x52,
-0x36,
-0x34,
-0xa,
-0x1a,
-0x4d,
-0x41,
-0x58,
-0x48,
-0x70,
-0x4d,
-0x52,
-0x42,
-0x48,
-0x4d,
-0x49,
-0x4e,
-0x48,
-0x70,
-0x4d,
-0x52,
-0x42,
-0x4c,
-0x4d,
-0x49,
-0x4e,
-0x4c,
-0x70,
-0x4d,
-0x52,
-0x4c,
-0x48,
-0x4c,
-0x45,
-0x4e,
-0x48,
-0x70,
-0x4d,
-0x52,
-0x4c,
-0x4c,
-0x4c,
-0x45,
-0x4e,
-0x4c,
-0x72,
-0x4d,
-0x49,
-0x4e,
-0x4c,
-0x4c,
-0x45,
-0x4e,
-0x4c,
-0x4d,
-0x41,
-0x58,
-0x4c,
-0x72,
-0x4d,
-0x49,
-0x4e,
-0x48,
-0x4c,
-0x45,
-0x4e,
-0x48,
-0x4d,
-0x41,
-0x58,
-0x48,
-0xa0,
-0x14,
-0x95,
-0x4d,
-0x41,
-0x58,
-0x4c,
-0x4d,
-0x49,
-0x4e,
-0x4c,
-0x72,
-0x4d,
-0x41,
-0x58,
-0x48,
-0x1,
-0x4d,
-0x41,
-0x58,
-0x48,
-0xa0,
-0x11,
-0x95,
-0x4d,
-0x41,
-0x58,
-0x4c,
-0x1,
-0x74,
-0x4d,
-0x41,
-0x58,
-0x48,
-0x1,
-0x4d,
-0x41,
-0x58,
-0x48,
-0x74,
-0x4d,
-0x41,
-0x58,
-0x4c,
-0x1,
-0x4d,
-0x41,
-0x58,
-0x4c,
-0xa0,
-0x44,
-0x7,
-0x93,
-0x4d,
-0x41,
-0x58,
-0x48,
-0x0,
-0x8,
-0x4d,
-0x52,
-0x33,
-0x32,
-0x11,
-0x1f,
-0xa,
-0x1c,
-0x87,
-0x17,
-0x0,
-0x0,
-0xc,
-0x3,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0xfe,
-0xff,
-0xff,
-0xff,
-0x0,
-0x0,
-0x0,
-0x0,
-0xff,
-0xff,
-0xff,
-0xff,
-0x79,
-0x0,
-0x8a,
-0x4d,
-0x52,
-0x33,
-0x32,
-0xa,
-0xa,
-0x4d,
-0x49,
-0x4e,
-0x5f,
-0x8a,
-0x4d,
-0x52,
-0x33,
-0x32,
-0xa,
-0xe,
-0x4d,
-0x41,
-0x58,
-0x5f,
-0x8a,
-0x4d,
-0x52,
-0x33,
-0x32,
-0xa,
-0x16,
-0x4c,
-0x45,
-0x4e,
-0x5f,
-0x70,
-0x4d,
-0x49,
-0x4e,
-0x4c,
-0x4d,
-0x49,
-0x4e,
-0x5f,
-0x70,
-0x4d,
-0x41,
-0x58,
-0x4c,
-0x4d,
-0x41,
-0x58,
-0x5f,
-0x70,
-0x4c,
-0x45,
-0x4e,
-0x4c,
-0x4c,
-0x45,
-0x4e,
-0x5f,
-0x5b,
-0x27,
-0x4d,
-0x4c,
-0x43,
-0x4b,
-0xa4,
-0x4d,
-0x52,
-0x33,
-0x32,
-0x5b,
-0x27,
-0x4d,
-0x4c,
-0x43,
-0x4b,
-0xa4,
-0x4d,
-0x52,
-0x36,
-0x34,
-0x14,
-0x24,
-0x4d,
-0x50,
-0x58,
-0x4d,
-0x1,
-0x5b,
-0x23,
-0x4d,
-0x4c,
-0x43,
-0x4b,
-0xff,
-0xff,
-0x70,
-0x99,
-0x68,
-0x0,
-0x4d,
-0x53,
-0x45,
-0x4c,
-0x70,
-0x4d,
-0x50,
-0x58,
-0x5f,
-0x60,
-0x5b,
-0x27,
-0x4d,
-0x4c,
-0x43,
-0x4b,
-0xa4,
-0x60,
-0x14,
-0x28,
-0x4d,
-0x4f,
-0x53,
-0x54,
-0x4,
-0x5b,
-0x23,
-0x4d,
-0x4c,
-0x43,
-0x4b,
-0xff,
-0xff,
-0x70,
-0x99,
-0x68,
-0x0,
-0x4d,
-0x53,
-0x45,
-0x4c,
-0x70,
-0x69,
-0x4d,
-0x4f,
-0x45,
-0x56,
-0x70,
-0x6a,
-0x4d,
-0x4f,
-0x53,
-0x43,
-0x5b,
-0x27,
-0x4d,
-0x4c,
-0x43,
-0x4b
+0x58
 };
 static unsigned char ssdt_isa_pest[] = {
-0xd0
+0xda
 };
 static unsigned char acpi_s4_name[] = {
-0x88
+0x92
 };
 static unsigned char acpi_pci64_start[] = {
 0x4d
diff --git a/tests/acpi-test-data/pc/DSDT b/tests/acpi-test-data/pc/DSDT
index d37ec34454e6f3db5e91b777f94e03be67a5f583..ee9cc6781cea3a9515b9a176eea3459f8e4d8655 100644
GIT binary patch
delta 814
zcmZ8fO>fgc5ZzTP;cjS9h#MkQsYZMX1TsyPb5lFuz;3W?Qx*BJmfDDdKv}u%Atw_q
zpkA#WxJ4*`fIq`u;f9%6$0h1o8ohlp@9mCv{%m~TWNzq2Mx79P^ozAww)^~<4ELn(
z4D9%;V++rB4e1Tsb${sFJ-bT``4)C!^m&|4tmE;i`gHc*N=GN-v-EIuLgFu;F9KR4
zjI|Bv1Yu*Hv6qxE_}UX<Hf0#~$ZRba?l2&8GH11Tx`mn*5$y5Ig6Kiu90MT#Kw9y%
zsa?q~6a7$9F&Kt4rh+@KNj%*s)nOkbZ~FTXLdP;+t%}eYE}f)E65mBhQT)7rk>L3%
z5ulnib8RT17w@u!Ds7)8G>IQ#`J9?hMG!`G$w2)$CR$p{^@S9>QB@~quPvbOwd$~{
z)(}B=r_o{d`4d8}uaGP2Z-FZ-ii+2J2orLSN>+zU@)F(z=#}sR?^o<&fD5)IdIyWz
z+W<X<e-%XtI2r-q9tsd}G)a-p5TO`%I*;<1d4U`jq`0S=Y-p06UNVR{=J?FLmLpA|
z>CSdzi*0_pwcIo|i+y5`y1&jgV_+{c=n8Nh#Il4fxRF$NH0Bk$V^ZNoF|~LklwHE^
pj(HCTN6@Qppm3c2ztkfbm1uRjsD-bpKHwawk2pxBXMTtM{s%^7?%e<Y

delta 23
ecmeB>`7X-k66_N4or{5iv0)>Z1lMF^-m3sr#Rl;J

diff --git a/tests/acpi-test-data/pc/SSDT b/tests/acpi-test-data/pc/SSDT
index eb2d8b698ce6a3a910a05244a3b6cf80bf818fb9..558e4c85b031ec081045aec6cc382a680e9c6009 100644
GIT binary patch
delta 38
ucmew<{#=kNIM^lRIR^s+Bi}?WX-1!kYJqGVzAk=2JQIsQY_4aiVg~@)a|=)a

delta 833
zcmZ8fO>fgc5ZzTP)!np3CZ>%5sYXCSR3Ot-Ig{7{hwcXBHK@pyYzajaRFsw59wH7V
zT#(8sihAG{q5K1W6c_$LFN7I?l!&#oe*0$M+nt^HrC)3?DV^Y=LJ0jfVmD}OwDoc{
z{GIMSK6n(#R^-_oEBqoX;d+i1xgBTK>v~qxY7i}Y1uN0}*iQ!LVgE!OoxU@Z-f{ml
zdD}ZCnsB=Q3V{)Rc0J+K3Sq3KMYb>XRmPrC!r-e7h*6DX&?J-PF)GNEOj#vNhnpx`
z5PplBFu5>sL>!Q}ADQ8>nz@oEOtfW0MW-uiNCmg|NI1Nfi)9-mFWRqRlD26)Ulh{r
z&Yh%49NtFBZ1&^sd5q_)Sb%DhR>zs62%f%)smkn=n8x8f+&-noL*dJS&Kaohha{6$
z#@U4wyHf6sjb=?i-pl1-<z7wrja|LYtg~%GRu=HFijijjKeK$4Y_XgT$Qdfx8r+fR
z@G3wzhg-Z|vJU_j?7C>~7kjS*bQQiTiV$!#0>E7q07yAUmjrnPD8@w=NBP7!M-Jl&
zu4zW<8A(qr8AKdoeBvyPk%q?b>pS`;yZLovK55Jq^TZqnB!yJ!JB)#Ul*2U;7jPYJ
z6e&C!!wTIosPLi~DvE>-m$0#G+=0ds^#2+tY^Q&fx(}@qEQYs=wkRv5-eVuB57<b#
K=g%YhY3VN!sP#$!

diff --git a/tests/acpi-test-data/q35/DSDT b/tests/acpi-test-data/q35/DSDT
index 2d2bc4adaf54666fe7864e7f39203411b7c308f7..ef0c75f4236de3e6f727e21991533f2bf8279dee 100644
GIT binary patch
delta 793
zcmZ8f&1(}u6rZ65w-Z~5S!<L)7U~y*614<+vdM0Aqcd^YS*0?<EJ(15l408(a$4g>
z@VfNiEolA$|0u5>d+=a<Z$D~r7KY#Z`2F5{JMZVt$wTHzFFI)xLVy2YJFRs0-d!#G
zI&g;_^~voBKkzK=554tZ6m)u>F0u4;u*CSoB$+z<lSA|V=#7(%4<<*+>+u0mAN@dt
zv_=?fTG|a|eVwt#lrZ?3Q(`x?jCy3gmI-eZk_B0?nwqtdvm(MiPaU{@xH!iPP_U;R
zHEZOmWS5D7)Km;dk}4{=`;@5JrGhO7KzTNJ0he?g`^l=1?&wS<Lt?dsl;!f<_2U@p
zn^*vA-pF!65j}eODyAlvPhuLYo0z_!_8k$*h@KHJU-wB)tz~&bhFz$#W4qTBF!x$j
ztje`S_KRLg37kL6;vmLTn#(EqBEs%A+kk#}0WSjd3wVPMD(`K8rFT>G_R8F=0DXf$
z5J?C)3IX6g5)h;uRTA_gKr$M69O-lW7=0K|(5AVwo;&H`sRt3q7@vFRGISG5gb(i5
z+pP8ZG9l+ziph#us~KUw6tfrueGO9q+yHV3H=!eKur!7Zs$<Y#qZlgR18JwQyKP^C
o9TD{Z-)(Sn{yoYq*otUXZ8^mTRF7ib;>wtJxHE-j)^C0P3owxI%m4rY

delta 23
ecmexn|J0JpCD<k8sSE=Hqv%F1OPR?b@{0gro(Eh2

diff --git a/tests/acpi-test-data/q35/SSDT b/tests/acpi-test-data/q35/SSDT
index 778b79bf428b5d7602b7b80c9434e38c79718bb2..4e45510181c4038505ae1815b76799a2cd0e8808 100644
GIT binary patch
delta 37
tcmX@awSk2zIM^k`fQf;D@!~`-X-1!kYJqGVzAk=2JQIsQOs;1+3;?*r3h)2`

literal 1346
zcmZWp-%r#)5Z;vo%iaNZM@3>xxWwNWwZ|d)NUyD4q1#)#1u-SrCWd$z4b1@$ya^<l
z;Nyh{-%fM?hyG=pGwmH9_M!deoBd{Ic4sQ39o9z)p?<w-HDsl}AuI_TC4?ZxZ?QhQ
zNi<<dRRHS`AV(GY{oiMrsIDspuBud}Jk!9NK0r8E3GW}G_y{5@SySb)9ECjqFRHSZ
zV}wBju%4p_gB6zxo6km+tSe!;hAT}K9dRa{^-xm{*PeLe@HN9Qs*r^v!#p9;7vVGm
ziWZFy^8-VKnm(&!Xp#gyad)f}lOFk*>#-?)GO$I64iUz^STDQ{L`ahs+M2QgS(;$%
zHJ${a^niRvid}P?+|OVR;08o@eK(7au5=r86j!U8Plx$K?gnoNJIh`8!Z3{`sCNx2
z;ai_~+6R@^&R+6q|3js{wY#(5e!sO#G;aF=9zE375ImrH!r1KP%<$M|4~RaUR@fcy
zpaRP4v3ztmhnf){)V&J48u0QEd4R-*szis=X;8AvxFZ$it}kgsxo54C=<r4+mJUdo
z&N{rLRnb>+Tv|T4*eD@!bO$B<{;zwdF>as498}%uP8yJhuinKpNu#%88b=Rsb&u*#
zcmNl5NuT^^kyM%Qr1>OlYPdSq%~=kIKR(=RxK`uA(qgH`jFZQN6h`o<E<b1e>=|+c
zvwuKNP{<}BMK6P8fQ<~^_naX+4{*TFaC2j@_7=cKf@g{%1Re$g;5ATyz{4PIq!FMN
zjns|mu6~Lf`rByJlq{tr-8*LxdFb=H_Vo_Z&=f&!p)|*Cf4h0PWGofS#1hl;Y72}(
zcm*{9oCNIv&Okyc!JW~aU~qIMm?ydhH-xftxU{I>g{I;3>IEd&N*CAk5ZWZn{kLcv
zTPXR6J(Ptk9v29XMs!>swS-}07o@qi!rw|d-=-y8nC}-vpHkcmNzW48#06mEID;+2
zf$gjq)Dq4Lnk~KTL(g67<~uD$zGC!k%@R$&Y{L{6S916}iH@eEVJJ<R_F%w{=B4rS
YoS;O9e^J$jQ9`gV1ho{53Cj=3Um|f`5C8xG

-- 
2.1.0

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [Qemu-devel] [PATCH v2] target-i386: move generic memory hotplug methods to DSDTs
  2014-10-15  7:45 [Qemu-devel] [PATCH v2] target-i386: move generic memory hotplug methods to DSDTs Paolo Bonzini
@ 2014-10-15 13:19 ` Igor Mammedov
  2014-10-15 13:34   ` Michael S. Tsirkin
  2014-10-16  7:43   ` Paolo Bonzini
  2014-11-11 17:13 ` Paolo Bonzini
  1 sibling, 2 replies; 7+ messages in thread
From: Igor Mammedov @ 2014-10-15 13:19 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: qemu-devel, mst

On Wed, 15 Oct 2014 09:45:44 +0200
Paolo Bonzini <pbonzini@redhat.com> wrote:

> This makes it simpler to keep the SSDT byte-for-byte identical for a
> given machine type, which is a goal we want to have for 2.2 and newer
> types.
> 
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Moving static code to DSDT is resonable, hence

Reviewed-by: Igor Mammedov <imammedo@redhat.com>

tested with xp3/ws2003 wich were happy with this patch.

---
however I'm not sure that SSDT byte-for-byte compatible will make
things better.
Since SSDT includes snippets of AML compiled by IASL, hex-templates
could be different depending on IASL version. Ultimately
that would make us to keep versioned by machine type binary templates
so that we could guaranty byte-to-byte identity.

Perhaps we should reconsider and think one more time about
http://lists.gnu.org/archive/html/qemu-stable/2014-07/msg00205.html

which solves migration size issue and doesn't tie us to maintanance
nightmare with versioned tables. I'd preffer to keep tables
un-versioned as long as possible.


> ---
>         v1->v2: do not define the same Device twice (Igor)
> 
>  hw/i386/acpi-dsdt-mem-hotplug.dsl   | 176 ++++++++
>  hw/i386/acpi-dsdt.dsl               |   3 +-
>  hw/i386/acpi-dsdt.hex.generated     | 795
> +++++++++++++++++++++++++++++++++-
> hw/i386/q35-acpi-dsdt.dsl           |   3 +-
> hw/i386/q35-acpi-dsdt.hex.generated | 797
> +++++++++++++++++++++++++++++++++-
> hw/i386/ssdt-mem.hex.generated      |   8 +-
> hw/i386/ssdt-misc.dsl               | 165 +------
> hw/i386/ssdt-misc.hex.generated     | 834
> ++----------------------------------
> tests/acpi-test-data/pc/DSDT        | Bin 2807 -> 3592 bytes
> tests/acpi-test-data/pc/SSDT        | Bin 3065 -> 2279 bytes
> tests/acpi-test-data/q35/DSDT       | Bin 7397 -> 8182 bytes
> tests/acpi-test-data/q35/SSDT       | Bin 1346 -> 560 bytes 12 files
> changed, 1789 insertions(+), 992 deletions(-) create mode 100644
> hw/i386/acpi-dsdt-mem-hotplug.dsl
> 
> diff --git a/hw/i386/acpi-dsdt-mem-hotplug.dsl
> b/hw/i386/acpi-dsdt-mem-hotplug.dsl new file mode 100644
> index 0000000..2a36c47
> --- /dev/null
> +++ b/hw/i386/acpi-dsdt-mem-hotplug.dsl
> @@ -0,0 +1,176 @@
> +/*
> + * This program is free software; you can redistribute it and/or
> modify
> + * it under the terms of the GNU General Public License as published
> by
> + * the Free Software Foundation; either version 2 of the License, or
> + * (at your option) any later version.
> +
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> +
> + * You should have received a copy of the GNU General Public License
> along
> + * with this program; if not, see <http://www.gnu.org/licenses/>.
> + */
> +
> +    External(MEMORY_SLOT_NOTIFY_METHOD, MethodObj)
> +
> +    Scope(\_SB.PCI0) {
> +        Device(MEMORY_HOTPLUG_DEVICE) {
> +            Name(_HID, "PNP0A06")
> +            Name(_UID, "Memory hotplug resources")
> +            External(MEMORY_SLOTS_NUMBER, IntObj)
> +
> +            /* Memory hotplug IO registers */
> +            OperationRegion(MEMORY_HOTPLUG_IO_REGION, SystemIO,
> +                            ACPI_MEMORY_HOTPLUG_BASE,
> +                            ACPI_MEMORY_HOTPLUG_IO_LEN)
> +
> +            Name(_CRS, ResourceTemplate() {
> +                IO(Decode16, ACPI_MEMORY_HOTPLUG_BASE,
> ACPI_MEMORY_HOTPLUG_BASE,
> +                   0, ACPI_MEMORY_HOTPLUG_IO_LEN, IO)
> +            })
> +
> +            Method(_STA, 0) {
> +                If (LEqual(MEMORY_SLOTS_NUMBER, Zero)) {
> +                    Return(0x0)
> +                }
> +                /* present, functioning, decoding, not shown in UI */
> +                Return(0xB)
> +            }
> +
> +            Field(MEMORY_HOTPLUG_IO_REGION, DWordAcc, NoLock,
> Preserve) {
> +                MEMORY_SLOT_ADDR_LOW, 32,  // read only
> +                MEMORY_SLOT_ADDR_HIGH, 32, // read only
> +                MEMORY_SLOT_SIZE_LOW, 32,  // read only
> +                MEMORY_SLOT_SIZE_HIGH, 32, // read only
> +                MEMORY_SLOT_PROXIMITY, 32, // read only
> +            }
> +            Field(MEMORY_HOTPLUG_IO_REGION, ByteAcc, NoLock,
> Preserve) {
> +                Offset(20),
> +                MEMORY_SLOT_ENABLED,  1, // 1 if enabled, read only
> +                MEMORY_SLOT_INSERT_EVENT, 1, // (read) 1 if has a
> insert event. (write) 1 to clear event
> +            }
> +
> +            Mutex (MEMORY_SLOT_LOCK, 0)
> +            Field (MEMORY_HOTPLUG_IO_REGION, DWordAcc, NoLock,
> Preserve) {
> +                MEMORY_SLOT_SLECTOR, 32,  // DIMM selector, write
> only
> +                MEMORY_SLOT_OST_EVENT, 32,  // _OST event code,
> write only
> +                MEMORY_SLOT_OST_STATUS, 32,  // _OST status code,
> write only
> +            }
> +
> +            Method(MEMORY_SLOT_SCAN_METHOD, 0) {
> +                If (LEqual(MEMORY_SLOTS_NUMBER, Zero)) {
> +                     Return(Zero)
> +                }
> +
> +                Store(Zero, Local0) // Mem devs iterrator
> +                Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
> +                while (LLess(Local0, MEMORY_SLOTS_NUMBER)) {
> +                    Store(Local0, MEMORY_SLOT_SLECTOR) // select
> Local0 DIMM
> +                    If (LEqual(MEMORY_SLOT_INSERT_EVENT, One)) { //
> Memory device needs check
> +                        MEMORY_SLOT_NOTIFY_METHOD(Local0, 1)
> +                        Store(1, MEMORY_SLOT_INSERT_EVENT)
> +                    }
> +                    // TODO: handle memory eject request
> +                    Add(Local0, One, Local0) // goto next DIMM
> +                }
> +                Release(MEMORY_SLOT_LOCK)
> +                Return(One)
> +            }
> +
> +            Method(MEMORY_SLOT_STATUS_METHOD, 1) {
> +                Store(Zero, Local0)
> +
> +                Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
> +                Store(ToInteger(Arg0), MEMORY_SLOT_SLECTOR) //
> select DIMM +
> +                If (LEqual(MEMORY_SLOT_ENABLED, One)) {
> +                    Store(0xF, Local0)
> +                }
> +
> +                Release(MEMORY_SLOT_LOCK)
> +                Return(Local0)
> +            }
> +
> +            Method(MEMORY_SLOT_CRS_METHOD, 1, Serialized) {
> +                Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
> +                Store(ToInteger(Arg0), MEMORY_SLOT_SLECTOR) //
> select DIMM +
> +                Name(MR64, ResourceTemplate() {
> +                    QWordMemory(ResourceProducer, PosDecode,
> MinFixed, MaxFixed,
> +                    Cacheable, ReadWrite,
> +                    0x0000000000000000,        // Address Space
> Granularity
> +                    0x0000000000000000,        // Address Range
> Minimum
> +                    0xFFFFFFFFFFFFFFFE,        // Address Range
> Maximum
> +                    0x0000000000000000,        // Address
> Translation Offset
> +                    0xFFFFFFFFFFFFFFFF,        // Address Length
> +                    ,, MW64, AddressRangeMemory, TypeStatic)
> +                })
> +
> +                CreateDWordField(MR64, 14, MINL)
> +                CreateDWordField(MR64, 18, MINH)
> +                CreateDWordField(MR64, 38, LENL)
> +                CreateDWordField(MR64, 42, LENH)
> +                CreateDWordField(MR64, 22, MAXL)
> +                CreateDWordField(MR64, 26, MAXH)
> +
> +                Store(MEMORY_SLOT_ADDR_HIGH, MINH)
> +                Store(MEMORY_SLOT_ADDR_LOW, MINL)
> +                Store(MEMORY_SLOT_SIZE_HIGH, LENH)
> +                Store(MEMORY_SLOT_SIZE_LOW, LENL)
> +
> +                // 64-bit math: MAX = MIN + LEN - 1
> +                Add(MINL, LENL, MAXL)
> +                Add(MINH, LENH, MAXH)
> +                If (LLess(MAXL, MINL)) {
> +                    Add(MAXH, One, MAXH)
> +                }
> +                If (LLess(MAXL, One)) {
> +                    Subtract(MAXH, One, MAXH)
> +                }
> +                Subtract(MAXL, One, MAXL)
> +
> +                If (LEqual(MAXH, Zero)){
> +                    Name(MR32, ResourceTemplate() {
> +                        DWordMemory(ResourceProducer, PosDecode,
> MinFixed, MaxFixed,
> +                        Cacheable, ReadWrite,
> +                        0x00000000,        // Address Space
> Granularity
> +                        0x00000000,        // Address Range Minimum
> +                        0xFFFFFFFE,        // Address Range Maximum
> +                        0x00000000,        // Address Translation
> Offset
> +                        0xFFFFFFFF,        // Address Length
> +                        ,, MW32, AddressRangeMemory, TypeStatic)
> +                    })
> +                    CreateDWordField(MR32, MW32._MIN, MIN)
> +                    CreateDWordField(MR32, MW32._MAX, MAX)
> +                    CreateDWordField(MR32, MW32._LEN, LEN)
> +                    Store(MINL, MIN)
> +                    Store(MAXL, MAX)
> +                    Store(LENL, LEN)
> +
> +                    Release(MEMORY_SLOT_LOCK)
> +                    Return(MR32)
> +                }
> +
> +                Release(MEMORY_SLOT_LOCK)
> +                Return(MR64)
> +            }
> +
> +            Method(MEMORY_SLOT_PROXIMITY_METHOD, 1) {
> +                Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
> +                Store(ToInteger(Arg0), MEMORY_SLOT_SLECTOR) //
> select DIMM
> +                Store(MEMORY_SLOT_PROXIMITY, Local0)
> +                Release(MEMORY_SLOT_LOCK)
> +                Return(Local0)
> +            }
> +
> +            Method(MEMORY_SLOT_OST_METHOD, 4) {
> +                Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
> +                Store(ToInteger(Arg0), MEMORY_SLOT_SLECTOR) //
> select DIMM
> +                Store(Arg1, MEMORY_SLOT_OST_EVENT)
> +                Store(Arg2, MEMORY_SLOT_OST_STATUS)
> +                Release(MEMORY_SLOT_LOCK)
> +            }
> +        } // Device()
> +    } // Scope()
> diff --git a/hw/i386/acpi-dsdt.dsl b/hw/i386/acpi-dsdt.dsl
> index 559f4b6..a611e07 100644
> --- a/hw/i386/acpi-dsdt.dsl
> +++ b/hw/i386/acpi-dsdt.dsl
> @@ -297,13 +297,12 @@ DefinitionBlock (
>  #include "hw/acpi/pc-hotplug.h"
>  #define CPU_STATUS_BASE PIIX4_CPU_HOTPLUG_IO_BASE
>  #include "acpi-dsdt-cpu-hotplug.dsl"
> +#include "acpi-dsdt-mem-hotplug.dsl"
>  
>  
>  /****************************************************************
>   * General purpose events
>   ****************************************************************/
> -
> External(\_SB.PCI0.MEMORY_HOTPLUG_DEVICE.MEMORY_SLOT_SCAN_METHOD,
> MethodObj) - Scope(\_GPE) {
>          Name(_HID, "ACPI0006")
>  
> diff --git a/hw/i386/acpi-dsdt.hex.generated
> b/hw/i386/acpi-dsdt.hex.generated index a21bf41..875570e 100644
> --- a/hw/i386/acpi-dsdt.hex.generated
> +++ b/hw/i386/acpi-dsdt.hex.generated
> @@ -3,12 +3,12 @@ static unsigned char AcpiDsdtAmlCode[] = {
>  0x53,
>  0x44,
>  0x54,
> -0xf7,
> -0xa,
> +0x8,
> +0xe,
>  0x0,
>  0x0,
>  0x1,
> -0x1f,
> +0xfc,
>  0x42,
>  0x58,
>  0x50,
> @@ -32,8 +32,8 @@ static unsigned char AcpiDsdtAmlCode[] = {
>  0x54,
>  0x4c,
>  0x28,
> -0x5,
> -0x10,
> +0x8,
> +0x14,
>  0x20,
>  0x10,
>  0x49,
> @@ -2593,6 +2593,791 @@ static unsigned char AcpiDsdtAmlCode[] = {
>  0xa,
>  0xb,
>  0x10,
> +0x40,
> +0x31,
> +0x2e,
> +0x5f,
> +0x53,
> +0x42,
> +0x5f,
> +0x50,
> +0x43,
> +0x49,
> +0x30,
> +0x5b,
> +0x82,
> +0x43,
> +0x30,
> +0x4d,
> +0x48,
> +0x50,
> +0x44,
> +0x8,
> +0x5f,
> +0x48,
> +0x49,
> +0x44,
> +0xd,
> +0x50,
> +0x4e,
> +0x50,
> +0x30,
> +0x41,
> +0x30,
> +0x36,
> +0x0,
> +0x8,
> +0x5f,
> +0x55,
> +0x49,
> +0x44,
> +0xd,
> +0x4d,
> +0x65,
> +0x6d,
> +0x6f,
> +0x72,
> +0x79,
> +0x20,
> +0x68,
> +0x6f,
> +0x74,
> +0x70,
> +0x6c,
> +0x75,
> +0x67,
> +0x20,
> +0x72,
> +0x65,
> +0x73,
> +0x6f,
> +0x75,
> +0x72,
> +0x63,
> +0x65,
> +0x73,
> +0x0,
> +0x5b,
> +0x80,
> +0x48,
> +0x50,
> +0x4d,
> +0x52,
> +0x1,
> +0xb,
> +0x0,
> +0xa,
> +0xa,
> +0x18,
> +0x8,
> +0x5f,
> +0x43,
> +0x52,
> +0x53,
> +0x11,
> +0xd,
> +0xa,
> +0xa,
> +0x47,
> +0x1,
> +0x0,
> +0xa,
> +0x0,
> +0xa,
> +0x0,
> +0x18,
> +0x79,
> +0x0,
> +0x14,
> +0x13,
> +0x5f,
> +0x53,
> +0x54,
> +0x41,
> +0x0,
> +0xa0,
> +0x9,
> +0x93,
> +0x4d,
> +0x44,
> +0x4e,
> +0x52,
> +0x0,
> +0xa4,
> +0x0,
> +0xa4,
> +0xa,
> +0xb,
> +0x5b,
> +0x81,
> +0x1f,
> +0x48,
> +0x50,
> +0x4d,
> +0x52,
> +0x3,
> +0x4d,
> +0x52,
> +0x42,
> +0x4c,
> +0x20,
> +0x4d,
> +0x52,
> +0x42,
> +0x48,
> +0x20,
> +0x4d,
> +0x52,
> +0x4c,
> +0x4c,
> +0x20,
> +0x4d,
> +0x52,
> +0x4c,
> +0x48,
> +0x20,
> +0x4d,
> +0x50,
> +0x58,
> +0x5f,
> +0x20,
> +0x5b,
> +0x81,
> +0x13,
> +0x48,
> +0x50,
> +0x4d,
> +0x52,
> +0x1,
> +0x0,
> +0x40,
> +0xa,
> +0x4d,
> +0x45,
> +0x53,
> +0x5f,
> +0x1,
> +0x4d,
> +0x49,
> +0x4e,
> +0x53,
> +0x1,
> +0x5b,
> +0x1,
> +0x4d,
> +0x4c,
> +0x43,
> +0x4b,
> +0x0,
> +0x5b,
> +0x81,
> +0x15,
> +0x48,
> +0x50,
> +0x4d,
> +0x52,
> +0x3,
> +0x4d,
> +0x53,
> +0x45,
> +0x4c,
> +0x20,
> +0x4d,
> +0x4f,
> +0x45,
> +0x56,
> +0x20,
> +0x4d,
> +0x4f,
> +0x53,
> +0x43,
> +0x20,
> +0x14,
> +0x4a,
> +0x4,
> +0x4d,
> +0x53,
> +0x43,
> +0x4e,
> +0x0,
> +0xa0,
> +0x9,
> +0x93,
> +0x4d,
> +0x44,
> +0x4e,
> +0x52,
> +0x0,
> +0xa4,
> +0x0,
> +0x70,
> +0x0,
> +0x60,
> +0x5b,
> +0x23,
> +0x4d,
> +0x4c,
> +0x43,
> +0x4b,
> +0xff,
> +0xff,
> +0xa2,
> +0x25,
> +0x95,
> +0x60,
> +0x4d,
> +0x44,
> +0x4e,
> +0x52,
> +0x70,
> +0x60,
> +0x4d,
> +0x53,
> +0x45,
> +0x4c,
> +0xa0,
> +0x13,
> +0x93,
> +0x4d,
> +0x49,
> +0x4e,
> +0x53,
> +0x1,
> +0x4d,
> +0x54,
> +0x46,
> +0x59,
> +0x60,
> +0x1,
> +0x70,
> +0x1,
> +0x4d,
> +0x49,
> +0x4e,
> +0x53,
> +0x72,
> +0x60,
> +0x1,
> +0x60,
> +0x5b,
> +0x27,
> +0x4d,
> +0x4c,
> +0x43,
> +0x4b,
> +0xa4,
> +0x1,
> +0x14,
> +0x2d,
> +0x4d,
> +0x52,
> +0x53,
> +0x54,
> +0x1,
> +0x70,
> +0x0,
> +0x60,
> +0x5b,
> +0x23,
> +0x4d,
> +0x4c,
> +0x43,
> +0x4b,
> +0xff,
> +0xff,
> +0x70,
> +0x99,
> +0x68,
> +0x0,
> +0x4d,
> +0x53,
> +0x45,
> +0x4c,
> +0xa0,
> +0xb,
> +0x93,
> +0x4d,
> +0x45,
> +0x53,
> +0x5f,
> +0x1,
> +0x70,
> +0xa,
> +0xf,
> +0x60,
> +0x5b,
> +0x27,
> +0x4d,
> +0x4c,
> +0x43,
> +0x4b,
> +0xa4,
> +0x60,
> +0x14,
> +0x41,
> +0x18,
> +0x4d,
> +0x43,
> +0x52,
> +0x53,
> +0x9,
> +0x5b,
> +0x23,
> +0x4d,
> +0x4c,
> +0x43,
> +0x4b,
> +0xff,
> +0xff,
> +0x70,
> +0x99,
> +0x68,
> +0x0,
> +0x4d,
> +0x53,
> +0x45,
> +0x4c,
> +0x8,
> +0x4d,
> +0x52,
> +0x36,
> +0x34,
> +0x11,
> +0x33,
> +0xa,
> +0x30,
> +0x8a,
> +0x2b,
> +0x0,
> +0x0,
> +0xc,
> +0x3,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0xfe,
> +0xff,
> +0xff,
> +0xff,
> +0xff,
> +0xff,
> +0xff,
> +0xff,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0xff,
> +0xff,
> +0xff,
> +0xff,
> +0xff,
> +0xff,
> +0xff,
> +0xff,
> +0x79,
> +0x0,
> +0x8a,
> +0x4d,
> +0x52,
> +0x36,
> +0x34,
> +0xa,
> +0xe,
> +0x4d,
> +0x49,
> +0x4e,
> +0x4c,
> +0x8a,
> +0x4d,
> +0x52,
> +0x36,
> +0x34,
> +0xa,
> +0x12,
> +0x4d,
> +0x49,
> +0x4e,
> +0x48,
> +0x8a,
> +0x4d,
> +0x52,
> +0x36,
> +0x34,
> +0xa,
> +0x26,
> +0x4c,
> +0x45,
> +0x4e,
> +0x4c,
> +0x8a,
> +0x4d,
> +0x52,
> +0x36,
> +0x34,
> +0xa,
> +0x2a,
> +0x4c,
> +0x45,
> +0x4e,
> +0x48,
> +0x8a,
> +0x4d,
> +0x52,
> +0x36,
> +0x34,
> +0xa,
> +0x16,
> +0x4d,
> +0x41,
> +0x58,
> +0x4c,
> +0x8a,
> +0x4d,
> +0x52,
> +0x36,
> +0x34,
> +0xa,
> +0x1a,
> +0x4d,
> +0x41,
> +0x58,
> +0x48,
> +0x70,
> +0x4d,
> +0x52,
> +0x42,
> +0x48,
> +0x4d,
> +0x49,
> +0x4e,
> +0x48,
> +0x70,
> +0x4d,
> +0x52,
> +0x42,
> +0x4c,
> +0x4d,
> +0x49,
> +0x4e,
> +0x4c,
> +0x70,
> +0x4d,
> +0x52,
> +0x4c,
> +0x48,
> +0x4c,
> +0x45,
> +0x4e,
> +0x48,
> +0x70,
> +0x4d,
> +0x52,
> +0x4c,
> +0x4c,
> +0x4c,
> +0x45,
> +0x4e,
> +0x4c,
> +0x72,
> +0x4d,
> +0x49,
> +0x4e,
> +0x4c,
> +0x4c,
> +0x45,
> +0x4e,
> +0x4c,
> +0x4d,
> +0x41,
> +0x58,
> +0x4c,
> +0x72,
> +0x4d,
> +0x49,
> +0x4e,
> +0x48,
> +0x4c,
> +0x45,
> +0x4e,
> +0x48,
> +0x4d,
> +0x41,
> +0x58,
> +0x48,
> +0xa0,
> +0x14,
> +0x95,
> +0x4d,
> +0x41,
> +0x58,
> +0x4c,
> +0x4d,
> +0x49,
> +0x4e,
> +0x4c,
> +0x72,
> +0x4d,
> +0x41,
> +0x58,
> +0x48,
> +0x1,
> +0x4d,
> +0x41,
> +0x58,
> +0x48,
> +0xa0,
> +0x11,
> +0x95,
> +0x4d,
> +0x41,
> +0x58,
> +0x4c,
> +0x1,
> +0x74,
> +0x4d,
> +0x41,
> +0x58,
> +0x48,
> +0x1,
> +0x4d,
> +0x41,
> +0x58,
> +0x48,
> +0x74,
> +0x4d,
> +0x41,
> +0x58,
> +0x4c,
> +0x1,
> +0x4d,
> +0x41,
> +0x58,
> +0x4c,
> +0xa0,
> +0x44,
> +0x7,
> +0x93,
> +0x4d,
> +0x41,
> +0x58,
> +0x48,
> +0x0,
> +0x8,
> +0x4d,
> +0x52,
> +0x33,
> +0x32,
> +0x11,
> +0x1f,
> +0xa,
> +0x1c,
> +0x87,
> +0x17,
> +0x0,
> +0x0,
> +0xc,
> +0x3,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0xfe,
> +0xff,
> +0xff,
> +0xff,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0xff,
> +0xff,
> +0xff,
> +0xff,
> +0x79,
> +0x0,
> +0x8a,
> +0x4d,
> +0x52,
> +0x33,
> +0x32,
> +0xa,
> +0xa,
> +0x4d,
> +0x49,
> +0x4e,
> +0x5f,
> +0x8a,
> +0x4d,
> +0x52,
> +0x33,
> +0x32,
> +0xa,
> +0xe,
> +0x4d,
> +0x41,
> +0x58,
> +0x5f,
> +0x8a,
> +0x4d,
> +0x52,
> +0x33,
> +0x32,
> +0xa,
> +0x16,
> +0x4c,
> +0x45,
> +0x4e,
> +0x5f,
> +0x70,
> +0x4d,
> +0x49,
> +0x4e,
> +0x4c,
> +0x4d,
> +0x49,
> +0x4e,
> +0x5f,
> +0x70,
> +0x4d,
> +0x41,
> +0x58,
> +0x4c,
> +0x4d,
> +0x41,
> +0x58,
> +0x5f,
> +0x70,
> +0x4c,
> +0x45,
> +0x4e,
> +0x4c,
> +0x4c,
> +0x45,
> +0x4e,
> +0x5f,
> +0x5b,
> +0x27,
> +0x4d,
> +0x4c,
> +0x43,
> +0x4b,
> +0xa4,
> +0x4d,
> +0x52,
> +0x33,
> +0x32,
> +0x5b,
> +0x27,
> +0x4d,
> +0x4c,
> +0x43,
> +0x4b,
> +0xa4,
> +0x4d,
> +0x52,
> +0x36,
> +0x34,
> +0x14,
> +0x24,
> +0x4d,
> +0x50,
> +0x58,
> +0x4d,
> +0x1,
> +0x5b,
> +0x23,
> +0x4d,
> +0x4c,
> +0x43,
> +0x4b,
> +0xff,
> +0xff,
> +0x70,
> +0x99,
> +0x68,
> +0x0,
> +0x4d,
> +0x53,
> +0x45,
> +0x4c,
> +0x70,
> +0x4d,
> +0x50,
> +0x58,
> +0x5f,
> +0x60,
> +0x5b,
> +0x27,
> +0x4d,
> +0x4c,
> +0x43,
> +0x4b,
> +0xa4,
> +0x60,
> +0x14,
> +0x28,
> +0x4d,
> +0x4f,
> +0x53,
> +0x54,
> +0x4,
> +0x5b,
> +0x23,
> +0x4d,
> +0x4c,
> +0x43,
> +0x4b,
> +0xff,
> +0xff,
> +0x70,
> +0x99,
> +0x68,
> +0x0,
> +0x4d,
> +0x53,
> +0x45,
> +0x4c,
> +0x70,
> +0x69,
> +0x4d,
> +0x4f,
> +0x45,
> +0x56,
> +0x70,
> +0x6a,
> +0x4d,
> +0x4f,
> +0x53,
> +0x43,
> +0x5b,
> +0x27,
> +0x4d,
> +0x4c,
> +0x43,
> +0x4b,
> +0x10,
>  0x45,
>  0xd,
>  0x5f,
> diff --git a/hw/i386/q35-acpi-dsdt.dsl b/hw/i386/q35-acpi-dsdt.dsl
> index 054b035..e1cee5d 100644
> --- a/hw/i386/q35-acpi-dsdt.dsl
> +++ b/hw/i386/q35-acpi-dsdt.dsl
> @@ -405,13 +405,12 @@ DefinitionBlock (
>  #include "hw/acpi/pc-hotplug.h"
>  #define CPU_STATUS_BASE ICH9_CPU_HOTPLUG_IO_BASE
>  #include "acpi-dsdt-cpu-hotplug.dsl"
> +#include "acpi-dsdt-mem-hotplug.dsl"
>  
>  
>  /****************************************************************
>   * General purpose events
>   ****************************************************************/
> -
> External(\_SB.PCI0.MEMORY_HOTPLUG_DEVICE.MEMORY_SLOT_SCAN_METHOD,
> MethodObj) - Scope(\_GPE) {
>          Name(_HID, "ACPI0006")
>  
> diff --git a/hw/i386/q35-acpi-dsdt.hex.generated
> b/hw/i386/q35-acpi-dsdt.hex.generated index c9eb4ac..4807bdf 100644
> --- a/hw/i386/q35-acpi-dsdt.hex.generated
> +++ b/hw/i386/q35-acpi-dsdt.hex.generated
> @@ -3,12 +3,12 @@ static unsigned char Q35AcpiDsdtAmlCode[] = {
>  0x53,
>  0x44,
>  0x54,
> -0xe5,
> -0x1c,
> +0xf6,
> +0x1f,
>  0x0,
>  0x0,
>  0x1,
> -0xb7,
> +0x91,
>  0x42,
>  0x58,
>  0x50,
> @@ -31,9 +31,9 @@ static unsigned char Q35AcpiDsdtAmlCode[] = {
>  0x4e,
>  0x54,
>  0x4c,
> -0x15,
> -0x11,
> -0x13,
> +0x28,
> +0x8,
> +0x14,
>  0x20,
>  0x10,
>  0x49,
> @@ -7234,6 +7234,791 @@ static unsigned char Q35AcpiDsdtAmlCode[] = {
>  0xa,
>  0xb,
>  0x10,
> +0x40,
> +0x31,
> +0x2e,
> +0x5f,
> +0x53,
> +0x42,
> +0x5f,
> +0x50,
> +0x43,
> +0x49,
> +0x30,
> +0x5b,
> +0x82,
> +0x43,
> +0x30,
> +0x4d,
> +0x48,
> +0x50,
> +0x44,
> +0x8,
> +0x5f,
> +0x48,
> +0x49,
> +0x44,
> +0xd,
> +0x50,
> +0x4e,
> +0x50,
> +0x30,
> +0x41,
> +0x30,
> +0x36,
> +0x0,
> +0x8,
> +0x5f,
> +0x55,
> +0x49,
> +0x44,
> +0xd,
> +0x4d,
> +0x65,
> +0x6d,
> +0x6f,
> +0x72,
> +0x79,
> +0x20,
> +0x68,
> +0x6f,
> +0x74,
> +0x70,
> +0x6c,
> +0x75,
> +0x67,
> +0x20,
> +0x72,
> +0x65,
> +0x73,
> +0x6f,
> +0x75,
> +0x72,
> +0x63,
> +0x65,
> +0x73,
> +0x0,
> +0x5b,
> +0x80,
> +0x48,
> +0x50,
> +0x4d,
> +0x52,
> +0x1,
> +0xb,
> +0x0,
> +0xa,
> +0xa,
> +0x18,
> +0x8,
> +0x5f,
> +0x43,
> +0x52,
> +0x53,
> +0x11,
> +0xd,
> +0xa,
> +0xa,
> +0x47,
> +0x1,
> +0x0,
> +0xa,
> +0x0,
> +0xa,
> +0x0,
> +0x18,
> +0x79,
> +0x0,
> +0x14,
> +0x13,
> +0x5f,
> +0x53,
> +0x54,
> +0x41,
> +0x0,
> +0xa0,
> +0x9,
> +0x93,
> +0x4d,
> +0x44,
> +0x4e,
> +0x52,
> +0x0,
> +0xa4,
> +0x0,
> +0xa4,
> +0xa,
> +0xb,
> +0x5b,
> +0x81,
> +0x1f,
> +0x48,
> +0x50,
> +0x4d,
> +0x52,
> +0x3,
> +0x4d,
> +0x52,
> +0x42,
> +0x4c,
> +0x20,
> +0x4d,
> +0x52,
> +0x42,
> +0x48,
> +0x20,
> +0x4d,
> +0x52,
> +0x4c,
> +0x4c,
> +0x20,
> +0x4d,
> +0x52,
> +0x4c,
> +0x48,
> +0x20,
> +0x4d,
> +0x50,
> +0x58,
> +0x5f,
> +0x20,
> +0x5b,
> +0x81,
> +0x13,
> +0x48,
> +0x50,
> +0x4d,
> +0x52,
> +0x1,
> +0x0,
> +0x40,
> +0xa,
> +0x4d,
> +0x45,
> +0x53,
> +0x5f,
> +0x1,
> +0x4d,
> +0x49,
> +0x4e,
> +0x53,
> +0x1,
> +0x5b,
> +0x1,
> +0x4d,
> +0x4c,
> +0x43,
> +0x4b,
> +0x0,
> +0x5b,
> +0x81,
> +0x15,
> +0x48,
> +0x50,
> +0x4d,
> +0x52,
> +0x3,
> +0x4d,
> +0x53,
> +0x45,
> +0x4c,
> +0x20,
> +0x4d,
> +0x4f,
> +0x45,
> +0x56,
> +0x20,
> +0x4d,
> +0x4f,
> +0x53,
> +0x43,
> +0x20,
> +0x14,
> +0x4a,
> +0x4,
> +0x4d,
> +0x53,
> +0x43,
> +0x4e,
> +0x0,
> +0xa0,
> +0x9,
> +0x93,
> +0x4d,
> +0x44,
> +0x4e,
> +0x52,
> +0x0,
> +0xa4,
> +0x0,
> +0x70,
> +0x0,
> +0x60,
> +0x5b,
> +0x23,
> +0x4d,
> +0x4c,
> +0x43,
> +0x4b,
> +0xff,
> +0xff,
> +0xa2,
> +0x25,
> +0x95,
> +0x60,
> +0x4d,
> +0x44,
> +0x4e,
> +0x52,
> +0x70,
> +0x60,
> +0x4d,
> +0x53,
> +0x45,
> +0x4c,
> +0xa0,
> +0x13,
> +0x93,
> +0x4d,
> +0x49,
> +0x4e,
> +0x53,
> +0x1,
> +0x4d,
> +0x54,
> +0x46,
> +0x59,
> +0x60,
> +0x1,
> +0x70,
> +0x1,
> +0x4d,
> +0x49,
> +0x4e,
> +0x53,
> +0x72,
> +0x60,
> +0x1,
> +0x60,
> +0x5b,
> +0x27,
> +0x4d,
> +0x4c,
> +0x43,
> +0x4b,
> +0xa4,
> +0x1,
> +0x14,
> +0x2d,
> +0x4d,
> +0x52,
> +0x53,
> +0x54,
> +0x1,
> +0x70,
> +0x0,
> +0x60,
> +0x5b,
> +0x23,
> +0x4d,
> +0x4c,
> +0x43,
> +0x4b,
> +0xff,
> +0xff,
> +0x70,
> +0x99,
> +0x68,
> +0x0,
> +0x4d,
> +0x53,
> +0x45,
> +0x4c,
> +0xa0,
> +0xb,
> +0x93,
> +0x4d,
> +0x45,
> +0x53,
> +0x5f,
> +0x1,
> +0x70,
> +0xa,
> +0xf,
> +0x60,
> +0x5b,
> +0x27,
> +0x4d,
> +0x4c,
> +0x43,
> +0x4b,
> +0xa4,
> +0x60,
> +0x14,
> +0x41,
> +0x18,
> +0x4d,
> +0x43,
> +0x52,
> +0x53,
> +0x9,
> +0x5b,
> +0x23,
> +0x4d,
> +0x4c,
> +0x43,
> +0x4b,
> +0xff,
> +0xff,
> +0x70,
> +0x99,
> +0x68,
> +0x0,
> +0x4d,
> +0x53,
> +0x45,
> +0x4c,
> +0x8,
> +0x4d,
> +0x52,
> +0x36,
> +0x34,
> +0x11,
> +0x33,
> +0xa,
> +0x30,
> +0x8a,
> +0x2b,
> +0x0,
> +0x0,
> +0xc,
> +0x3,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0xfe,
> +0xff,
> +0xff,
> +0xff,
> +0xff,
> +0xff,
> +0xff,
> +0xff,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0xff,
> +0xff,
> +0xff,
> +0xff,
> +0xff,
> +0xff,
> +0xff,
> +0xff,
> +0x79,
> +0x0,
> +0x8a,
> +0x4d,
> +0x52,
> +0x36,
> +0x34,
> +0xa,
> +0xe,
> +0x4d,
> +0x49,
> +0x4e,
> +0x4c,
> +0x8a,
> +0x4d,
> +0x52,
> +0x36,
> +0x34,
> +0xa,
> +0x12,
> +0x4d,
> +0x49,
> +0x4e,
> +0x48,
> +0x8a,
> +0x4d,
> +0x52,
> +0x36,
> +0x34,
> +0xa,
> +0x26,
> +0x4c,
> +0x45,
> +0x4e,
> +0x4c,
> +0x8a,
> +0x4d,
> +0x52,
> +0x36,
> +0x34,
> +0xa,
> +0x2a,
> +0x4c,
> +0x45,
> +0x4e,
> +0x48,
> +0x8a,
> +0x4d,
> +0x52,
> +0x36,
> +0x34,
> +0xa,
> +0x16,
> +0x4d,
> +0x41,
> +0x58,
> +0x4c,
> +0x8a,
> +0x4d,
> +0x52,
> +0x36,
> +0x34,
> +0xa,
> +0x1a,
> +0x4d,
> +0x41,
> +0x58,
> +0x48,
> +0x70,
> +0x4d,
> +0x52,
> +0x42,
> +0x48,
> +0x4d,
> +0x49,
> +0x4e,
> +0x48,
> +0x70,
> +0x4d,
> +0x52,
> +0x42,
> +0x4c,
> +0x4d,
> +0x49,
> +0x4e,
> +0x4c,
> +0x70,
> +0x4d,
> +0x52,
> +0x4c,
> +0x48,
> +0x4c,
> +0x45,
> +0x4e,
> +0x48,
> +0x70,
> +0x4d,
> +0x52,
> +0x4c,
> +0x4c,
> +0x4c,
> +0x45,
> +0x4e,
> +0x4c,
> +0x72,
> +0x4d,
> +0x49,
> +0x4e,
> +0x4c,
> +0x4c,
> +0x45,
> +0x4e,
> +0x4c,
> +0x4d,
> +0x41,
> +0x58,
> +0x4c,
> +0x72,
> +0x4d,
> +0x49,
> +0x4e,
> +0x48,
> +0x4c,
> +0x45,
> +0x4e,
> +0x48,
> +0x4d,
> +0x41,
> +0x58,
> +0x48,
> +0xa0,
> +0x14,
> +0x95,
> +0x4d,
> +0x41,
> +0x58,
> +0x4c,
> +0x4d,
> +0x49,
> +0x4e,
> +0x4c,
> +0x72,
> +0x4d,
> +0x41,
> +0x58,
> +0x48,
> +0x1,
> +0x4d,
> +0x41,
> +0x58,
> +0x48,
> +0xa0,
> +0x11,
> +0x95,
> +0x4d,
> +0x41,
> +0x58,
> +0x4c,
> +0x1,
> +0x74,
> +0x4d,
> +0x41,
> +0x58,
> +0x48,
> +0x1,
> +0x4d,
> +0x41,
> +0x58,
> +0x48,
> +0x74,
> +0x4d,
> +0x41,
> +0x58,
> +0x4c,
> +0x1,
> +0x4d,
> +0x41,
> +0x58,
> +0x4c,
> +0xa0,
> +0x44,
> +0x7,
> +0x93,
> +0x4d,
> +0x41,
> +0x58,
> +0x48,
> +0x0,
> +0x8,
> +0x4d,
> +0x52,
> +0x33,
> +0x32,
> +0x11,
> +0x1f,
> +0xa,
> +0x1c,
> +0x87,
> +0x17,
> +0x0,
> +0x0,
> +0xc,
> +0x3,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0xfe,
> +0xff,
> +0xff,
> +0xff,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0xff,
> +0xff,
> +0xff,
> +0xff,
> +0x79,
> +0x0,
> +0x8a,
> +0x4d,
> +0x52,
> +0x33,
> +0x32,
> +0xa,
> +0xa,
> +0x4d,
> +0x49,
> +0x4e,
> +0x5f,
> +0x8a,
> +0x4d,
> +0x52,
> +0x33,
> +0x32,
> +0xa,
> +0xe,
> +0x4d,
> +0x41,
> +0x58,
> +0x5f,
> +0x8a,
> +0x4d,
> +0x52,
> +0x33,
> +0x32,
> +0xa,
> +0x16,
> +0x4c,
> +0x45,
> +0x4e,
> +0x5f,
> +0x70,
> +0x4d,
> +0x49,
> +0x4e,
> +0x4c,
> +0x4d,
> +0x49,
> +0x4e,
> +0x5f,
> +0x70,
> +0x4d,
> +0x41,
> +0x58,
> +0x4c,
> +0x4d,
> +0x41,
> +0x58,
> +0x5f,
> +0x70,
> +0x4c,
> +0x45,
> +0x4e,
> +0x4c,
> +0x4c,
> +0x45,
> +0x4e,
> +0x5f,
> +0x5b,
> +0x27,
> +0x4d,
> +0x4c,
> +0x43,
> +0x4b,
> +0xa4,
> +0x4d,
> +0x52,
> +0x33,
> +0x32,
> +0x5b,
> +0x27,
> +0x4d,
> +0x4c,
> +0x43,
> +0x4b,
> +0xa4,
> +0x4d,
> +0x52,
> +0x36,
> +0x34,
> +0x14,
> +0x24,
> +0x4d,
> +0x50,
> +0x58,
> +0x4d,
> +0x1,
> +0x5b,
> +0x23,
> +0x4d,
> +0x4c,
> +0x43,
> +0x4b,
> +0xff,
> +0xff,
> +0x70,
> +0x99,
> +0x68,
> +0x0,
> +0x4d,
> +0x53,
> +0x45,
> +0x4c,
> +0x70,
> +0x4d,
> +0x50,
> +0x58,
> +0x5f,
> +0x60,
> +0x5b,
> +0x27,
> +0x4d,
> +0x4c,
> +0x43,
> +0x4b,
> +0xa4,
> +0x60,
> +0x14,
> +0x28,
> +0x4d,
> +0x4f,
> +0x53,
> +0x54,
> +0x4,
> +0x5b,
> +0x23,
> +0x4d,
> +0x4c,
> +0x43,
> +0x4b,
> +0xff,
> +0xff,
> +0x70,
> +0x99,
> +0x68,
> +0x0,
> +0x4d,
> +0x53,
> +0x45,
> +0x4c,
> +0x70,
> +0x69,
> +0x4d,
> +0x4f,
> +0x45,
> +0x56,
> +0x70,
> +0x6a,
> +0x4d,
> +0x4f,
> +0x53,
> +0x43,
> +0x5b,
> +0x27,
> +0x4d,
> +0x4c,
> +0x43,
> +0x4b,
> +0x10,
>  0x42,
>  0xa,
>  0x5f,
> diff --git a/hw/i386/ssdt-mem.hex.generated
> b/hw/i386/ssdt-mem.hex.generated index 00bd34d..b3bfbbd 100644
> --- a/hw/i386/ssdt-mem.hex.generated
> +++ b/hw/i386/ssdt-mem.hex.generated
> @@ -11,7 +11,7 @@ static unsigned char ssdm_mem_aml[] = {
>  0x0,
>  0x0,
>  0x2,
> -0x71,
> +0x66,
>  0x42,
>  0x58,
>  0x50,
> @@ -34,9 +34,9 @@ static unsigned char ssdm_mem_aml[] = {
>  0x4e,
>  0x54,
>  0x4c,
> -0x15,
> -0x11,
> -0x13,
> +0x28,
> +0x8,
> +0x14,
>  0x20,
>  0x10,
>  0x42,
> diff --git a/hw/i386/ssdt-misc.dsl b/hw/i386/ssdt-misc.dsl
> index 0fd4480..1e3baae 100644
> --- a/hw/i386/ssdt-misc.dsl
> +++ b/hw/i386/ssdt-misc.dsl
> @@ -36,6 +36,8 @@ DefinitionBlock ("ssdt-misc.aml", "SSDT", 0x01,
> "BXPC", "BXSSDTSUSP", 0x1) Name(P1E, Buffer() { 0x00, 0x00, 0x00,
> 0x00, 0x00, 0x00, 0x00, 0x00 }) ACPI_EXTRACT_NAME_BUFFER8
> acpi_pci64_length Name(P1L, Buffer() { 0x00, 0x00, 0x00, 0x00, 0x00,
> 0x00, 0x00, 0x00 })
> +       ACPI_EXTRACT_NAME_DWORD_CONST ssdt_mctrl_nr_slots
> +       Name(MEMORY_SLOTS_NUMBER, 0x12345678)
>      }
>  
>  
> @@ -117,167 +119,4 @@ DefinitionBlock ("ssdt-misc.aml", "SSDT", 0x01,
> "BXPC", "BXSSDTSUSP", 0x1) }
>          }
>      }
> -
> -    External(MEMORY_SLOT_NOTIFY_METHOD, MethodObj)
> -    Scope(\_SB.PCI0) {
> -        Device(MEMORY_HOTPLUG_DEVICE) {
> -            Name(_HID, "PNP0A06")
> -            Name(_UID, "Memory hotplug resources")
> -
> -            ACPI_EXTRACT_NAME_DWORD_CONST ssdt_mctrl_nr_slots
> -            Name(MEMORY_SLOTS_NUMBER, 0x12345678)
> -
> -            /* Memory hotplug IO registers */
> -            OperationRegion(MEMORY_HOTPLUG_IO_REGION, SystemIO,
> -                            ACPI_MEMORY_HOTPLUG_BASE,
> -                            ACPI_MEMORY_HOTPLUG_IO_LEN)
> -
> -            Name(_CRS, ResourceTemplate() {
> -                IO(Decode16, ACPI_MEMORY_HOTPLUG_BASE,
> ACPI_MEMORY_HOTPLUG_BASE,
> -                   0, ACPI_MEMORY_HOTPLUG_IO_LEN, IO)
> -            })
> -
> -            Method(_STA, 0) {
> -                If (LEqual(MEMORY_SLOTS_NUMBER, Zero)) {
> -                    Return(0x0)
> -                }
> -                /* present, functioning, decoding, not shown in UI */
> -                Return(0xB)
> -            }
> -
> -            Field(MEMORY_HOTPLUG_IO_REGION, DWordAcc, NoLock,
> Preserve) {
> -                MEMORY_SLOT_ADDR_LOW, 32,  // read only
> -                MEMORY_SLOT_ADDR_HIGH, 32, // read only
> -                MEMORY_SLOT_SIZE_LOW, 32,  // read only
> -                MEMORY_SLOT_SIZE_HIGH, 32, // read only
> -                MEMORY_SLOT_PROXIMITY, 32, // read only
> -            }
> -            Field(MEMORY_HOTPLUG_IO_REGION, ByteAcc, NoLock,
> Preserve) {
> -                Offset(20),
> -                MEMORY_SLOT_ENABLED,  1, // 1 if enabled, read only
> -                MEMORY_SLOT_INSERT_EVENT, 1, // (read) 1 if has a
> insert event. (write) 1 to clear event
> -            }
> -
> -            Mutex (MEMORY_SLOT_LOCK, 0)
> -            Field (MEMORY_HOTPLUG_IO_REGION, DWordAcc, NoLock,
> Preserve) {
> -                MEMORY_SLOT_SLECTOR, 32,  // DIMM selector, write
> only
> -                MEMORY_SLOT_OST_EVENT, 32,  // _OST event code,
> write only
> -                MEMORY_SLOT_OST_STATUS, 32,  // _OST status code,
> write only
> -            }
> -
> -            Method(MEMORY_SLOT_SCAN_METHOD, 0) {
> -                If (LEqual(MEMORY_SLOTS_NUMBER, Zero)) {
> -                     Return(Zero)
> -                }
> -
> -                Store(Zero, Local0) // Mem devs iterrator
> -                Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
> -                while (LLess(Local0, MEMORY_SLOTS_NUMBER)) {
> -                    Store(Local0, MEMORY_SLOT_SLECTOR) // select
> Local0 DIMM
> -                    If (LEqual(MEMORY_SLOT_INSERT_EVENT, One)) { //
> Memory device needs check
> -                        MEMORY_SLOT_NOTIFY_METHOD(Local0, 1)
> -                        Store(1, MEMORY_SLOT_INSERT_EVENT)
> -                    }
> -                    // TODO: handle memory eject request
> -                    Add(Local0, One, Local0) // goto next DIMM
> -                }
> -                Release(MEMORY_SLOT_LOCK)
> -                Return(One)
> -            }
> -
> -            Method(MEMORY_SLOT_STATUS_METHOD, 1) {
> -                Store(Zero, Local0)
> -
> -                Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
> -                Store(ToInteger(Arg0), MEMORY_SLOT_SLECTOR) //
> select DIMM -
> -                If (LEqual(MEMORY_SLOT_ENABLED, One)) {
> -                    Store(0xF, Local0)
> -                }
> -
> -                Release(MEMORY_SLOT_LOCK)
> -                Return(Local0)
> -            }
> -
> -            Method(MEMORY_SLOT_CRS_METHOD, 1, Serialized) {
> -                Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
> -                Store(ToInteger(Arg0), MEMORY_SLOT_SLECTOR) //
> select DIMM -
> -                Name(MR64, ResourceTemplate() {
> -                    QWordMemory(ResourceProducer, PosDecode,
> MinFixed, MaxFixed,
> -                    Cacheable, ReadWrite,
> -                    0x0000000000000000,        // Address Space
> Granularity
> -                    0x0000000000000000,        // Address Range
> Minimum
> -                    0xFFFFFFFFFFFFFFFE,        // Address Range
> Maximum
> -                    0x0000000000000000,        // Address
> Translation Offset
> -                    0xFFFFFFFFFFFFFFFF,        // Address Length
> -                    ,, MW64, AddressRangeMemory, TypeStatic)
> -                })
> -
> -                CreateDWordField(MR64, 14, MINL)
> -                CreateDWordField(MR64, 18, MINH)
> -                CreateDWordField(MR64, 38, LENL)
> -                CreateDWordField(MR64, 42, LENH)
> -                CreateDWordField(MR64, 22, MAXL)
> -                CreateDWordField(MR64, 26, MAXH)
> -
> -                Store(MEMORY_SLOT_ADDR_HIGH, MINH)
> -                Store(MEMORY_SLOT_ADDR_LOW, MINL)
> -                Store(MEMORY_SLOT_SIZE_HIGH, LENH)
> -                Store(MEMORY_SLOT_SIZE_LOW, LENL)
> -
> -                // 64-bit math: MAX = MIN + LEN - 1
> -                Add(MINL, LENL, MAXL)
> -                Add(MINH, LENH, MAXH)
> -                If (LLess(MAXL, MINL)) {
> -                    Add(MAXH, One, MAXH)
> -                }
> -                If (LLess(MAXL, One)) {
> -                    Subtract(MAXH, One, MAXH)
> -                }
> -                Subtract(MAXL, One, MAXL)
> -
> -                If (LEqual(MAXH, Zero)){
> -                    Name(MR32, ResourceTemplate() {
> -                        DWordMemory(ResourceProducer, PosDecode,
> MinFixed, MaxFixed,
> -                        Cacheable, ReadWrite,
> -                        0x00000000,        // Address Space
> Granularity
> -                        0x00000000,        // Address Range Minimum
> -                        0xFFFFFFFE,        // Address Range Maximum
> -                        0x00000000,        // Address Translation
> Offset
> -                        0xFFFFFFFF,        // Address Length
> -                        ,, MW32, AddressRangeMemory, TypeStatic)
> -                    })
> -                    CreateDWordField(MR32, MW32._MIN, MIN)
> -                    CreateDWordField(MR32, MW32._MAX, MAX)
> -                    CreateDWordField(MR32, MW32._LEN, LEN)
> -                    Store(MINL, MIN)
> -                    Store(MAXL, MAX)
> -                    Store(LENL, LEN)
> -
> -                    Release(MEMORY_SLOT_LOCK)
> -                    Return(MR32)
> -                }
> -
> -                Release(MEMORY_SLOT_LOCK)
> -                Return(MR64)
> -            }
> -
> -            Method(MEMORY_SLOT_PROXIMITY_METHOD, 1) {
> -                Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
> -                Store(ToInteger(Arg0), MEMORY_SLOT_SLECTOR) //
> select DIMM
> -                Store(MEMORY_SLOT_PROXIMITY, Local0)
> -                Release(MEMORY_SLOT_LOCK)
> -                Return(Local0)
> -            }
> -
> -            Method(MEMORY_SLOT_OST_METHOD, 4) {
> -                Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
> -                Store(ToInteger(Arg0), MEMORY_SLOT_SLECTOR) //
> select DIMM
> -                Store(Arg1, MEMORY_SLOT_OST_EVENT)
> -                Store(Arg2, MEMORY_SLOT_OST_STATUS)
> -                Release(MEMORY_SLOT_LOCK)
> -            }
> -        } // Device()
> -    } // Scope()
>  }
> diff --git a/hw/i386/ssdt-misc.hex.generated
> b/hw/i386/ssdt-misc.hex.generated index ba4268a..cbcf61d 100644
> --- a/hw/i386/ssdt-misc.hex.generated
> +++ b/hw/i386/ssdt-misc.hex.generated
> @@ -2,13 +2,13 @@ static unsigned char acpi_pci64_length[] = {
>  0x6f
>  };
>  static unsigned char acpi_s4_pkg[] = {
> -0x8f
> +0x99
>  };
> -static unsigned short ssdt_mctrl_nr_slots[] = {
> -0x1aa
> +static unsigned char ssdt_mctrl_nr_slots[] = {
> +0x7d
>  };
>  static unsigned char acpi_s3_name[] = {
> -0x7c
> +0x86
>  };
>  static unsigned char acpi_pci32_start[] = {
>  0x2f
> @@ -21,12 +21,12 @@ static unsigned char ssdp_misc_aml[] = {
>  0x53,
>  0x44,
>  0x54,
> -0x7e,
> -0x4,
> +0x6c,
> +0x1,
>  0x0,
>  0x0,
>  0x1,
> -0x8b,
> +0x3,
>  0x42,
>  0x58,
>  0x50,
> @@ -49,12 +49,12 @@ static unsigned char ssdp_misc_aml[] = {
>  0x4e,
>  0x54,
>  0x4c,
> -0x15,
> -0x11,
> -0x13,
> +0x28,
> +0x8,
> +0x14,
>  0x20,
>  0x10,
> -0x42,
> +0x4c,
>  0x5,
>  0x5c,
>  0x0,
> @@ -136,6 +136,16 @@ static unsigned char ssdp_misc_aml[] = {
>  0x0,
>  0x0,
>  0x0,
> +0x8,
> +0x4d,
> +0x44,
> +0x4e,
> +0x52,
> +0xc,
> +0x78,
> +0x56,
> +0x34,
> +0x12,
>  0x10,
>  0x29,
>  0x5c,
> @@ -370,809 +380,13 @@ static unsigned char ssdp_misc_aml[] = {
>  0x49,
>  0x4f,
>  0x4d,
> -0x58,
> -0x10,
> -0x4b,
> -0x31,
> -0x5c,
> -0x2e,
> -0x5f,
> -0x53,
> -0x42,
> -0x5f,
> -0x50,
> -0x43,
> -0x49,
> -0x30,
> -0x5b,
> -0x82,
> -0x4d,
> -0x30,
> -0x4d,
> -0x48,
> -0x50,
> -0x44,
> -0x8,
> -0x5f,
> -0x48,
> -0x49,
> -0x44,
> -0xd,
> -0x50,
> -0x4e,
> -0x50,
> -0x30,
> -0x41,
> -0x30,
> -0x36,
> -0x0,
> -0x8,
> -0x5f,
> -0x55,
> -0x49,
> -0x44,
> -0xd,
> -0x4d,
> -0x65,
> -0x6d,
> -0x6f,
> -0x72,
> -0x79,
> -0x20,
> -0x68,
> -0x6f,
> -0x74,
> -0x70,
> -0x6c,
> -0x75,
> -0x67,
> -0x20,
> -0x72,
> -0x65,
> -0x73,
> -0x6f,
> -0x75,
> -0x72,
> -0x63,
> -0x65,
> -0x73,
> -0x0,
> -0x8,
> -0x4d,
> -0x44,
> -0x4e,
> -0x52,
> -0xc,
> -0x78,
> -0x56,
> -0x34,
> -0x12,
> -0x5b,
> -0x80,
> -0x48,
> -0x50,
> -0x4d,
> -0x52,
> -0x1,
> -0xb,
> -0x0,
> -0xa,
> -0xa,
> -0x18,
> -0x8,
> -0x5f,
> -0x43,
> -0x52,
> -0x53,
> -0x11,
> -0xd,
> -0xa,
> -0xa,
> -0x47,
> -0x1,
> -0x0,
> -0xa,
> -0x0,
> -0xa,
> -0x0,
> -0x18,
> -0x79,
> -0x0,
> -0x14,
> -0x13,
> -0x5f,
> -0x53,
> -0x54,
> -0x41,
> -0x0,
> -0xa0,
> -0x9,
> -0x93,
> -0x4d,
> -0x44,
> -0x4e,
> -0x52,
> -0x0,
> -0xa4,
> -0x0,
> -0xa4,
> -0xa,
> -0xb,
> -0x5b,
> -0x81,
> -0x1f,
> -0x48,
> -0x50,
> -0x4d,
> -0x52,
> -0x3,
> -0x4d,
> -0x52,
> -0x42,
> -0x4c,
> -0x20,
> -0x4d,
> -0x52,
> -0x42,
> -0x48,
> -0x20,
> -0x4d,
> -0x52,
> -0x4c,
> -0x4c,
> -0x20,
> -0x4d,
> -0x52,
> -0x4c,
> -0x48,
> -0x20,
> -0x4d,
> -0x50,
> -0x58,
> -0x5f,
> -0x20,
> -0x5b,
> -0x81,
> -0x13,
> -0x48,
> -0x50,
> -0x4d,
> -0x52,
> -0x1,
> -0x0,
> -0x40,
> -0xa,
> -0x4d,
> -0x45,
> -0x53,
> -0x5f,
> -0x1,
> -0x4d,
> -0x49,
> -0x4e,
> -0x53,
> -0x1,
> -0x5b,
> -0x1,
> -0x4d,
> -0x4c,
> -0x43,
> -0x4b,
> -0x0,
> -0x5b,
> -0x81,
> -0x15,
> -0x48,
> -0x50,
> -0x4d,
> -0x52,
> -0x3,
> -0x4d,
> -0x53,
> -0x45,
> -0x4c,
> -0x20,
> -0x4d,
> -0x4f,
> -0x45,
> -0x56,
> -0x20,
> -0x4d,
> -0x4f,
> -0x53,
> -0x43,
> -0x20,
> -0x14,
> -0x4a,
> -0x4,
> -0x4d,
> -0x53,
> -0x43,
> -0x4e,
> -0x0,
> -0xa0,
> -0x9,
> -0x93,
> -0x4d,
> -0x44,
> -0x4e,
> -0x52,
> -0x0,
> -0xa4,
> -0x0,
> -0x70,
> -0x0,
> -0x60,
> -0x5b,
> -0x23,
> -0x4d,
> -0x4c,
> -0x43,
> -0x4b,
> -0xff,
> -0xff,
> -0xa2,
> -0x25,
> -0x95,
> -0x60,
> -0x4d,
> -0x44,
> -0x4e,
> -0x52,
> -0x70,
> -0x60,
> -0x4d,
> -0x53,
> -0x45,
> -0x4c,
> -0xa0,
> -0x13,
> -0x93,
> -0x4d,
> -0x49,
> -0x4e,
> -0x53,
> -0x1,
> -0x4d,
> -0x54,
> -0x46,
> -0x59,
> -0x60,
> -0x1,
> -0x70,
> -0x1,
> -0x4d,
> -0x49,
> -0x4e,
> -0x53,
> -0x72,
> -0x60,
> -0x1,
> -0x60,
> -0x5b,
> -0x27,
> -0x4d,
> -0x4c,
> -0x43,
> -0x4b,
> -0xa4,
> -0x1,
> -0x14,
> -0x2d,
> -0x4d,
> -0x52,
> -0x53,
> -0x54,
> -0x1,
> -0x70,
> -0x0,
> -0x60,
> -0x5b,
> -0x23,
> -0x4d,
> -0x4c,
> -0x43,
> -0x4b,
> -0xff,
> -0xff,
> -0x70,
> -0x99,
> -0x68,
> -0x0,
> -0x4d,
> -0x53,
> -0x45,
> -0x4c,
> -0xa0,
> -0xb,
> -0x93,
> -0x4d,
> -0x45,
> -0x53,
> -0x5f,
> -0x1,
> -0x70,
> -0xa,
> -0xf,
> -0x60,
> -0x5b,
> -0x27,
> -0x4d,
> -0x4c,
> -0x43,
> -0x4b,
> -0xa4,
> -0x60,
> -0x14,
> -0x41,
> -0x18,
> -0x4d,
> -0x43,
> -0x52,
> -0x53,
> -0x9,
> -0x5b,
> -0x23,
> -0x4d,
> -0x4c,
> -0x43,
> -0x4b,
> -0xff,
> -0xff,
> -0x70,
> -0x99,
> -0x68,
> -0x0,
> -0x4d,
> -0x53,
> -0x45,
> -0x4c,
> -0x8,
> -0x4d,
> -0x52,
> -0x36,
> -0x34,
> -0x11,
> -0x33,
> -0xa,
> -0x30,
> -0x8a,
> -0x2b,
> -0x0,
> -0x0,
> -0xc,
> -0x3,
> -0x0,
> -0x0,
> -0x0,
> -0x0,
> -0x0,
> -0x0,
> -0x0,
> -0x0,
> -0x0,
> -0x0,
> -0x0,
> -0x0,
> -0x0,
> -0x0,
> -0x0,
> -0x0,
> -0xfe,
> -0xff,
> -0xff,
> -0xff,
> -0xff,
> -0xff,
> -0xff,
> -0xff,
> -0x0,
> -0x0,
> -0x0,
> -0x0,
> -0x0,
> -0x0,
> -0x0,
> -0x0,
> -0xff,
> -0xff,
> -0xff,
> -0xff,
> -0xff,
> -0xff,
> -0xff,
> -0xff,
> -0x79,
> -0x0,
> -0x8a,
> -0x4d,
> -0x52,
> -0x36,
> -0x34,
> -0xa,
> -0xe,
> -0x4d,
> -0x49,
> -0x4e,
> -0x4c,
> -0x8a,
> -0x4d,
> -0x52,
> -0x36,
> -0x34,
> -0xa,
> -0x12,
> -0x4d,
> -0x49,
> -0x4e,
> -0x48,
> -0x8a,
> -0x4d,
> -0x52,
> -0x36,
> -0x34,
> -0xa,
> -0x26,
> -0x4c,
> -0x45,
> -0x4e,
> -0x4c,
> -0x8a,
> -0x4d,
> -0x52,
> -0x36,
> -0x34,
> -0xa,
> -0x2a,
> -0x4c,
> -0x45,
> -0x4e,
> -0x48,
> -0x8a,
> -0x4d,
> -0x52,
> -0x36,
> -0x34,
> -0xa,
> -0x16,
> -0x4d,
> -0x41,
> -0x58,
> -0x4c,
> -0x8a,
> -0x4d,
> -0x52,
> -0x36,
> -0x34,
> -0xa,
> -0x1a,
> -0x4d,
> -0x41,
> -0x58,
> -0x48,
> -0x70,
> -0x4d,
> -0x52,
> -0x42,
> -0x48,
> -0x4d,
> -0x49,
> -0x4e,
> -0x48,
> -0x70,
> -0x4d,
> -0x52,
> -0x42,
> -0x4c,
> -0x4d,
> -0x49,
> -0x4e,
> -0x4c,
> -0x70,
> -0x4d,
> -0x52,
> -0x4c,
> -0x48,
> -0x4c,
> -0x45,
> -0x4e,
> -0x48,
> -0x70,
> -0x4d,
> -0x52,
> -0x4c,
> -0x4c,
> -0x4c,
> -0x45,
> -0x4e,
> -0x4c,
> -0x72,
> -0x4d,
> -0x49,
> -0x4e,
> -0x4c,
> -0x4c,
> -0x45,
> -0x4e,
> -0x4c,
> -0x4d,
> -0x41,
> -0x58,
> -0x4c,
> -0x72,
> -0x4d,
> -0x49,
> -0x4e,
> -0x48,
> -0x4c,
> -0x45,
> -0x4e,
> -0x48,
> -0x4d,
> -0x41,
> -0x58,
> -0x48,
> -0xa0,
> -0x14,
> -0x95,
> -0x4d,
> -0x41,
> -0x58,
> -0x4c,
> -0x4d,
> -0x49,
> -0x4e,
> -0x4c,
> -0x72,
> -0x4d,
> -0x41,
> -0x58,
> -0x48,
> -0x1,
> -0x4d,
> -0x41,
> -0x58,
> -0x48,
> -0xa0,
> -0x11,
> -0x95,
> -0x4d,
> -0x41,
> -0x58,
> -0x4c,
> -0x1,
> -0x74,
> -0x4d,
> -0x41,
> -0x58,
> -0x48,
> -0x1,
> -0x4d,
> -0x41,
> -0x58,
> -0x48,
> -0x74,
> -0x4d,
> -0x41,
> -0x58,
> -0x4c,
> -0x1,
> -0x4d,
> -0x41,
> -0x58,
> -0x4c,
> -0xa0,
> -0x44,
> -0x7,
> -0x93,
> -0x4d,
> -0x41,
> -0x58,
> -0x48,
> -0x0,
> -0x8,
> -0x4d,
> -0x52,
> -0x33,
> -0x32,
> -0x11,
> -0x1f,
> -0xa,
> -0x1c,
> -0x87,
> -0x17,
> -0x0,
> -0x0,
> -0xc,
> -0x3,
> -0x0,
> -0x0,
> -0x0,
> -0x0,
> -0x0,
> -0x0,
> -0x0,
> -0x0,
> -0xfe,
> -0xff,
> -0xff,
> -0xff,
> -0x0,
> -0x0,
> -0x0,
> -0x0,
> -0xff,
> -0xff,
> -0xff,
> -0xff,
> -0x79,
> -0x0,
> -0x8a,
> -0x4d,
> -0x52,
> -0x33,
> -0x32,
> -0xa,
> -0xa,
> -0x4d,
> -0x49,
> -0x4e,
> -0x5f,
> -0x8a,
> -0x4d,
> -0x52,
> -0x33,
> -0x32,
> -0xa,
> -0xe,
> -0x4d,
> -0x41,
> -0x58,
> -0x5f,
> -0x8a,
> -0x4d,
> -0x52,
> -0x33,
> -0x32,
> -0xa,
> -0x16,
> -0x4c,
> -0x45,
> -0x4e,
> -0x5f,
> -0x70,
> -0x4d,
> -0x49,
> -0x4e,
> -0x4c,
> -0x4d,
> -0x49,
> -0x4e,
> -0x5f,
> -0x70,
> -0x4d,
> -0x41,
> -0x58,
> -0x4c,
> -0x4d,
> -0x41,
> -0x58,
> -0x5f,
> -0x70,
> -0x4c,
> -0x45,
> -0x4e,
> -0x4c,
> -0x4c,
> -0x45,
> -0x4e,
> -0x5f,
> -0x5b,
> -0x27,
> -0x4d,
> -0x4c,
> -0x43,
> -0x4b,
> -0xa4,
> -0x4d,
> -0x52,
> -0x33,
> -0x32,
> -0x5b,
> -0x27,
> -0x4d,
> -0x4c,
> -0x43,
> -0x4b,
> -0xa4,
> -0x4d,
> -0x52,
> -0x36,
> -0x34,
> -0x14,
> -0x24,
> -0x4d,
> -0x50,
> -0x58,
> -0x4d,
> -0x1,
> -0x5b,
> -0x23,
> -0x4d,
> -0x4c,
> -0x43,
> -0x4b,
> -0xff,
> -0xff,
> -0x70,
> -0x99,
> -0x68,
> -0x0,
> -0x4d,
> -0x53,
> -0x45,
> -0x4c,
> -0x70,
> -0x4d,
> -0x50,
> -0x58,
> -0x5f,
> -0x60,
> -0x5b,
> -0x27,
> -0x4d,
> -0x4c,
> -0x43,
> -0x4b,
> -0xa4,
> -0x60,
> -0x14,
> -0x28,
> -0x4d,
> -0x4f,
> -0x53,
> -0x54,
> -0x4,
> -0x5b,
> -0x23,
> -0x4d,
> -0x4c,
> -0x43,
> -0x4b,
> -0xff,
> -0xff,
> -0x70,
> -0x99,
> -0x68,
> -0x0,
> -0x4d,
> -0x53,
> -0x45,
> -0x4c,
> -0x70,
> -0x69,
> -0x4d,
> -0x4f,
> -0x45,
> -0x56,
> -0x70,
> -0x6a,
> -0x4d,
> -0x4f,
> -0x53,
> -0x43,
> -0x5b,
> -0x27,
> -0x4d,
> -0x4c,
> -0x43,
> -0x4b
> +0x58
>  };
>  static unsigned char ssdt_isa_pest[] = {
> -0xd0
> +0xda
>  };
>  static unsigned char acpi_s4_name[] = {
> -0x88
> +0x92
>  };
>  static unsigned char acpi_pci64_start[] = {
>  0x4d
> diff --git a/tests/acpi-test-data/pc/DSDT
> b/tests/acpi-test-data/pc/DSDT index
> d37ec34454e6f3db5e91b777f94e03be67a5f583..ee9cc6781cea3a9515b9a176eea3459f8e4d8655
> 100644 GIT binary patch delta 814
> zcmZ8fO>fgc5ZzTP;cjS9h#MkQsYZMX1TsyPb5lFuz;3W?Qx*BJmfDDdKv}u%Atw_q
> zpkA#WxJ4*`fIq`u;f9%6$0h1o8ohlp@9mCv{%m~TWNzq2Mx79P^ozAww)^~<4ELn(
> z4D9%;V++rB4e1Tsb${sFJ-bT``4)C!^m&|4tmE;i`gHc*N=GN-v-EIuLgFu;F9KR4
> zjI|Bv1Yu*Hv6qxE_}UX<Hf0#~$ZRba?l2&8GH11Tx`mn*5$y5Ig6Kiu90MT#Kw9y%
> zsa?q~6a7$9F&Kt4rh+@KNj%*s)nOkbZ~FTXLdP;+t%}eYE}f)E65mBhQT)7rk>L3%
> z5ulnib8RT17w@u!Ds7)8G>IQ#`J9?hMG!`G$w2)$CR$p{^@S9>QB@~quPvbOwd$~{
> z)(}B=r_o{d`4d8}uaGP2Z-FZ-ii+2J2orLSN>+zU@)F(z=#}sR?^o<&fD5)IdIyWz
> z+W<X<e-%XtI2r-q9tsd}G)a-p5TO`%I*;<1d4U`jq`0S=Y-p06UNVR{=J?FLmLpA|
> z>CSdzi*0_pwcIo|i+y5`y1&jgV_+{c=n8Nh#Il4fxRF$NH0Bk$V^ZNoF|~LklwHE^
> pj(HCTN6@Qppm3c2ztkfbm1uRjsD-bpKHwawk2pxBXMTtM{s%^7?%e<Y
> 
> delta 23
> ecmeB>`7X-k66_N4or{5iv0)>Z1lMF^-m3sr#Rl;J
> 
> diff --git a/tests/acpi-test-data/pc/SSDT
> b/tests/acpi-test-data/pc/SSDT index
> eb2d8b698ce6a3a910a05244a3b6cf80bf818fb9..558e4c85b031ec081045aec6cc382a680e9c6009
> 100644 GIT binary patch delta 38
> ucmew<{#=kNIM^lRIR^s+Bi}?WX-1!kYJqGVzAk=2JQIsQY_4aiVg~@)a|=)a
> 
> delta 833
> zcmZ8fO>fgc5ZzTP)!np3CZ>%5sYXCSR3Ot-Ig{7{hwcXBHK@pyYzajaRFsw59wH7V
> zT#(8sihAG{q5K1W6c_$LFN7I?l!&#oe*0$M+nt^HrC)3?DV^Y=LJ0jfVmD}OwDoc{
> z{GIMSK6n(#R^-_oEBqoX;d+i1xgBTK>v~qxY7i}Y1uN0}*iQ!LVgE!OoxU@Z-f{ml
> zdD}ZCnsB=Q3V{)Rc0J+K3Sq3KMYb>XRmPrC!r-e7h*6DX&?J-PF)GNEOj#vNhnpx`
> z5PplBFu5>sL>!Q}ADQ8>nz@oEOtfW0MW-uiNCmg|NI1Nfi)9-mFWRqRlD26)Ulh{r
> z&Yh%49NtFBZ1&^sd5q_)Sb%DhR>zs62%f%)smkn=n8x8f+&-noL*dJS&Kaohha{6$
> z#@U4wyHf6sjb=?i-pl1-<z7wrja|LYtg~%GRu=HFijijjKeK$4Y_XgT$Qdfx8r+fR
> z@G3wzhg-Z|vJU_j?7C>~7kjS*bQQiTiV$!#0>E7q07yAUmjrnPD8@w=NBP7!M-Jl&
> zu4zW<8A(qr8AKdoeBvyPk%q?b>pS`;yZLovK55Jq^TZqnB!yJ!JB)#Ul*2U;7jPYJ
> z6e&C!!wTIosPLi~DvE>-m$0#G+=0ds^#2+tY^Q&fx(}@qEQYs=wkRv5-eVuB57<b#
> K=g%YhY3VN!sP#$!
> 
> diff --git a/tests/acpi-test-data/q35/DSDT
> b/tests/acpi-test-data/q35/DSDT index
> 2d2bc4adaf54666fe7864e7f39203411b7c308f7..ef0c75f4236de3e6f727e21991533f2bf8279dee
> 100644 GIT binary patch delta 793
> zcmZ8f&1(}u6rZ65w-Z~5S!<L)7U~y*614<+vdM0Aqcd^YS*0?<EJ(15l408(a$4g>
> z@VfNiEolA$|0u5>d+=a<Z$D~r7KY#Z`2F5{JMZVt$wTHzFFI)xLVy2YJFRs0-d!#G
> zI&g;_^~voBKkzK=554tZ6m)u>F0u4;u*CSoB$+z<lSA|V=#7(%4<<*+>+u0mAN@dt
> zv_=?fTG|a|eVwt#lrZ?3Q(`x?jCy3gmI-eZk_B0?nwqtdvm(MiPaU{@xH!iPP_U;R
> zHEZOmWS5D7)Km;dk}4{=`;@5JrGhO7KzTNJ0he?g`^l=1?&wS<Lt?dsl;!f<_2U@p
> zn^*vA-pF!65j}eODyAlvPhuLYo0z_!_8k$*h@KHJU-wB)tz~&bhFz$#W4qTBF!x$j
> ztje`S_KRLg37kL6;vmLTn#(EqBEs%A+kk#}0WSjd3wVPMD(`K8rFT>G_R8F=0DXf$
> z5J?C)3IX6g5)h;uRTA_gKr$M69O-lW7=0K|(5AVwo;&H`sRt3q7@vFRGISG5gb(i5
> z+pP8ZG9l+ziph#us~KUw6tfrueGO9q+yHV3H=!eKur!7Zs$<Y#qZlgR18JwQyKP^C
> o9TD{Z-)(Sn{yoYq*otUXZ8^mTRF7ib;>wtJxHE-j)^C0P3owxI%m4rY
> 
> delta 23
> ecmexn|J0JpCD<k8sSE=Hqv%F1OPR?b@{0gro(Eh2
> 
> diff --git a/tests/acpi-test-data/q35/SSDT
> b/tests/acpi-test-data/q35/SSDT index
> 778b79bf428b5d7602b7b80c9434e38c79718bb2..4e45510181c4038505ae1815b76799a2cd0e8808
> 100644 GIT binary patch delta 37
> tcmX@awSk2zIM^k`fQf;D@!~`-X-1!kYJqGVzAk=2JQIsQOs;1+3;?*r3h)2`
> 
> literal 1346
> zcmZWp-%r#)5Z;vo%iaNZM@3>xxWwNWwZ|d)NUyD4q1#)#1u-SrCWd$z4b1@$ya^<l
> z;Nyh{-%fM?hyG=pGwmH9_M!deoBd{Ic4sQ39o9z)p?<w-HDsl}AuI_TC4?ZxZ?QhQ
> zNi<<dRRHS`AV(GY{oiMrsIDspuBud}Jk!9NK0r8E3GW}G_y{5@SySb)9ECjqFRHSZ
> zV}wBju%4p_gB6zxo6km+tSe!;hAT}K9dRa{^-xm{*PeLe@HN9Qs*r^v!#p9;7vVGm
> ziWZFy^8-VKnm(&!Xp#gyad)f}lOFk*>#-?)GO$I64iUz^STDQ{L`ahs+M2QgS(;$%
> zHJ${a^niRvid}P?+|OVR;08o@eK(7au5=r86j!U8Plx$K?gnoNJIh`8!Z3{`sCNx2
> z;ai_~+6R@^&R+6q|3js{wY#(5e!sO#G;aF=9zE375ImrH!r1KP%<$M|4~RaUR@fcy
> zpaRP4v3ztmhnf){)V&J48u0QEd4R-*szis=X;8AvxFZ$it}kgsxo54C=<r4+mJUdo
> z&N{rLRnb>+Tv|T4*eD@!bO$B<{;zwdF>as498}%uP8yJhuinKpNu#%88b=Rsb&u*#
> zcmNl5NuT^^kyM%Qr1>OlYPdSq%~=kIKR(=RxK`uA(qgH`jFZQN6h`o<E<b1e>=|+c
> zvwuKNP{<}BMK6P8fQ<~^_naX+4{*TFaC2j@_7=cKf@g{%1Re$g;5ATyz{4PIq!FMN
> zjns|mu6~Lf`rByJlq{tr-8*LxdFb=H_Vo_Z&=f&!p)|*Cf4h0PWGofS#1hl;Y72}(
> zcm*{9oCNIv&Okyc!JW~aU~qIMm?ydhH-xftxU{I>g{I;3>IEd&N*CAk5ZWZn{kLcv
> zTPXR6J(Ptk9v29XMs!>swS-}07o@qi!rw|d-=-y8nC}-vpHkcmNzW48#06mEID;+2
> zf$gjq)Dq4Lnk~KTL(g67<~uD$zGC!k%@R$&Y{L{6S916}iH@eEVJJ<R_F%w{=B4rS
> YoS;O9e^J$jQ9`gV1ho{53Cj=3Um|f`5C8xG
> 

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Qemu-devel] [PATCH v2] target-i386: move generic memory hotplug methods to DSDTs
  2014-10-15 13:19 ` Igor Mammedov
@ 2014-10-15 13:34   ` Michael S. Tsirkin
  2014-10-16  7:43   ` Paolo Bonzini
  1 sibling, 0 replies; 7+ messages in thread
From: Michael S. Tsirkin @ 2014-10-15 13:34 UTC (permalink / raw)
  To: Igor Mammedov; +Cc: Paolo Bonzini, qemu-devel

On Wed, Oct 15, 2014 at 03:19:00PM +0200, Igor Mammedov wrote:
> On Wed, 15 Oct 2014 09:45:44 +0200
> Paolo Bonzini <pbonzini@redhat.com> wrote:
> 
> > This makes it simpler to keep the SSDT byte-for-byte identical for a
> > given machine type, which is a goal we want to have for 2.2 and newer
> > types.
> > 
> > Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> Moving static code to DSDT is resonable, hence
> 
> Reviewed-by: Igor Mammedov <imammedo@redhat.com>
> 
> tested with xp3/ws2003 wich were happy with this patch.
> 
> ---
> however I'm not sure that SSDT byte-for-byte compatible will make
> things better.
> Since SSDT includes snippets of AML compiled by IASL, hex-templates
> could be different depending on IASL version. Ultimately
> that would make us to keep versioned by machine type binary templates
> so that we could guaranty byte-to-byte identity.
> 
> Perhaps we should reconsider and think one more time about
> http://lists.gnu.org/archive/html/qemu-stable/2014-07/msg00205.html
> 
> which solves migration size issue and doesn't tie us to maintanance
> nightmare with versioned tables. I'd preffer to keep tables
> un-versioned as long as possible.

Yes, this is more or less what I am saying as well.
I would like to fix it both ways though, migrate
size without thinking about it being bigger
or smaller than previously.


> 
> > ---
> >         v1->v2: do not define the same Device twice (Igor)
> > 
> >  hw/i386/acpi-dsdt-mem-hotplug.dsl   | 176 ++++++++
> >  hw/i386/acpi-dsdt.dsl               |   3 +-
> >  hw/i386/acpi-dsdt.hex.generated     | 795
> > +++++++++++++++++++++++++++++++++-
> > hw/i386/q35-acpi-dsdt.dsl           |   3 +-
> > hw/i386/q35-acpi-dsdt.hex.generated | 797
> > +++++++++++++++++++++++++++++++++-
> > hw/i386/ssdt-mem.hex.generated      |   8 +-
> > hw/i386/ssdt-misc.dsl               | 165 +------
> > hw/i386/ssdt-misc.hex.generated     | 834
> > ++----------------------------------
> > tests/acpi-test-data/pc/DSDT        | Bin 2807 -> 3592 bytes
> > tests/acpi-test-data/pc/SSDT        | Bin 3065 -> 2279 bytes
> > tests/acpi-test-data/q35/DSDT       | Bin 7397 -> 8182 bytes
> > tests/acpi-test-data/q35/SSDT       | Bin 1346 -> 560 bytes 12 files
> > changed, 1789 insertions(+), 992 deletions(-) create mode 100644
> > hw/i386/acpi-dsdt-mem-hotplug.dsl
> > 
> > diff --git a/hw/i386/acpi-dsdt-mem-hotplug.dsl
> > b/hw/i386/acpi-dsdt-mem-hotplug.dsl new file mode 100644
> > index 0000000..2a36c47
> > --- /dev/null
> > +++ b/hw/i386/acpi-dsdt-mem-hotplug.dsl
> > @@ -0,0 +1,176 @@
> > +/*
> > + * This program is free software; you can redistribute it and/or
> > modify
> > + * it under the terms of the GNU General Public License as published
> > by
> > + * the Free Software Foundation; either version 2 of the License, or
> > + * (at your option) any later version.
> > +
> > + * This program is distributed in the hope that it will be useful,
> > + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> > + * GNU General Public License for more details.
> > +
> > + * You should have received a copy of the GNU General Public License
> > along
> > + * with this program; if not, see <http://www.gnu.org/licenses/>.
> > + */
> > +
> > +    External(MEMORY_SLOT_NOTIFY_METHOD, MethodObj)
> > +
> > +    Scope(\_SB.PCI0) {
> > +        Device(MEMORY_HOTPLUG_DEVICE) {
> > +            Name(_HID, "PNP0A06")
> > +            Name(_UID, "Memory hotplug resources")
> > +            External(MEMORY_SLOTS_NUMBER, IntObj)
> > +
> > +            /* Memory hotplug IO registers */
> > +            OperationRegion(MEMORY_HOTPLUG_IO_REGION, SystemIO,
> > +                            ACPI_MEMORY_HOTPLUG_BASE,
> > +                            ACPI_MEMORY_HOTPLUG_IO_LEN)
> > +
> > +            Name(_CRS, ResourceTemplate() {
> > +                IO(Decode16, ACPI_MEMORY_HOTPLUG_BASE,
> > ACPI_MEMORY_HOTPLUG_BASE,
> > +                   0, ACPI_MEMORY_HOTPLUG_IO_LEN, IO)
> > +            })
> > +
> > +            Method(_STA, 0) {
> > +                If (LEqual(MEMORY_SLOTS_NUMBER, Zero)) {
> > +                    Return(0x0)
> > +                }
> > +                /* present, functioning, decoding, not shown in UI */
> > +                Return(0xB)
> > +            }
> > +
> > +            Field(MEMORY_HOTPLUG_IO_REGION, DWordAcc, NoLock,
> > Preserve) {
> > +                MEMORY_SLOT_ADDR_LOW, 32,  // read only
> > +                MEMORY_SLOT_ADDR_HIGH, 32, // read only
> > +                MEMORY_SLOT_SIZE_LOW, 32,  // read only
> > +                MEMORY_SLOT_SIZE_HIGH, 32, // read only
> > +                MEMORY_SLOT_PROXIMITY, 32, // read only
> > +            }
> > +            Field(MEMORY_HOTPLUG_IO_REGION, ByteAcc, NoLock,
> > Preserve) {
> > +                Offset(20),
> > +                MEMORY_SLOT_ENABLED,  1, // 1 if enabled, read only
> > +                MEMORY_SLOT_INSERT_EVENT, 1, // (read) 1 if has a
> > insert event. (write) 1 to clear event
> > +            }
> > +
> > +            Mutex (MEMORY_SLOT_LOCK, 0)
> > +            Field (MEMORY_HOTPLUG_IO_REGION, DWordAcc, NoLock,
> > Preserve) {
> > +                MEMORY_SLOT_SLECTOR, 32,  // DIMM selector, write
> > only
> > +                MEMORY_SLOT_OST_EVENT, 32,  // _OST event code,
> > write only
> > +                MEMORY_SLOT_OST_STATUS, 32,  // _OST status code,
> > write only
> > +            }
> > +
> > +            Method(MEMORY_SLOT_SCAN_METHOD, 0) {
> > +                If (LEqual(MEMORY_SLOTS_NUMBER, Zero)) {
> > +                     Return(Zero)
> > +                }
> > +
> > +                Store(Zero, Local0) // Mem devs iterrator
> > +                Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
> > +                while (LLess(Local0, MEMORY_SLOTS_NUMBER)) {
> > +                    Store(Local0, MEMORY_SLOT_SLECTOR) // select
> > Local0 DIMM
> > +                    If (LEqual(MEMORY_SLOT_INSERT_EVENT, One)) { //
> > Memory device needs check
> > +                        MEMORY_SLOT_NOTIFY_METHOD(Local0, 1)
> > +                        Store(1, MEMORY_SLOT_INSERT_EVENT)
> > +                    }
> > +                    // TODO: handle memory eject request
> > +                    Add(Local0, One, Local0) // goto next DIMM
> > +                }
> > +                Release(MEMORY_SLOT_LOCK)
> > +                Return(One)
> > +            }
> > +
> > +            Method(MEMORY_SLOT_STATUS_METHOD, 1) {
> > +                Store(Zero, Local0)
> > +
> > +                Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
> > +                Store(ToInteger(Arg0), MEMORY_SLOT_SLECTOR) //
> > select DIMM +
> > +                If (LEqual(MEMORY_SLOT_ENABLED, One)) {
> > +                    Store(0xF, Local0)
> > +                }
> > +
> > +                Release(MEMORY_SLOT_LOCK)
> > +                Return(Local0)
> > +            }
> > +
> > +            Method(MEMORY_SLOT_CRS_METHOD, 1, Serialized) {
> > +                Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
> > +                Store(ToInteger(Arg0), MEMORY_SLOT_SLECTOR) //
> > select DIMM +
> > +                Name(MR64, ResourceTemplate() {
> > +                    QWordMemory(ResourceProducer, PosDecode,
> > MinFixed, MaxFixed,
> > +                    Cacheable, ReadWrite,
> > +                    0x0000000000000000,        // Address Space
> > Granularity
> > +                    0x0000000000000000,        // Address Range
> > Minimum
> > +                    0xFFFFFFFFFFFFFFFE,        // Address Range
> > Maximum
> > +                    0x0000000000000000,        // Address
> > Translation Offset
> > +                    0xFFFFFFFFFFFFFFFF,        // Address Length
> > +                    ,, MW64, AddressRangeMemory, TypeStatic)
> > +                })
> > +
> > +                CreateDWordField(MR64, 14, MINL)
> > +                CreateDWordField(MR64, 18, MINH)
> > +                CreateDWordField(MR64, 38, LENL)
> > +                CreateDWordField(MR64, 42, LENH)
> > +                CreateDWordField(MR64, 22, MAXL)
> > +                CreateDWordField(MR64, 26, MAXH)
> > +
> > +                Store(MEMORY_SLOT_ADDR_HIGH, MINH)
> > +                Store(MEMORY_SLOT_ADDR_LOW, MINL)
> > +                Store(MEMORY_SLOT_SIZE_HIGH, LENH)
> > +                Store(MEMORY_SLOT_SIZE_LOW, LENL)
> > +
> > +                // 64-bit math: MAX = MIN + LEN - 1
> > +                Add(MINL, LENL, MAXL)
> > +                Add(MINH, LENH, MAXH)
> > +                If (LLess(MAXL, MINL)) {
> > +                    Add(MAXH, One, MAXH)
> > +                }
> > +                If (LLess(MAXL, One)) {
> > +                    Subtract(MAXH, One, MAXH)
> > +                }
> > +                Subtract(MAXL, One, MAXL)
> > +
> > +                If (LEqual(MAXH, Zero)){
> > +                    Name(MR32, ResourceTemplate() {
> > +                        DWordMemory(ResourceProducer, PosDecode,
> > MinFixed, MaxFixed,
> > +                        Cacheable, ReadWrite,
> > +                        0x00000000,        // Address Space
> > Granularity
> > +                        0x00000000,        // Address Range Minimum
> > +                        0xFFFFFFFE,        // Address Range Maximum
> > +                        0x00000000,        // Address Translation
> > Offset
> > +                        0xFFFFFFFF,        // Address Length
> > +                        ,, MW32, AddressRangeMemory, TypeStatic)
> > +                    })
> > +                    CreateDWordField(MR32, MW32._MIN, MIN)
> > +                    CreateDWordField(MR32, MW32._MAX, MAX)
> > +                    CreateDWordField(MR32, MW32._LEN, LEN)
> > +                    Store(MINL, MIN)
> > +                    Store(MAXL, MAX)
> > +                    Store(LENL, LEN)
> > +
> > +                    Release(MEMORY_SLOT_LOCK)
> > +                    Return(MR32)
> > +                }
> > +
> > +                Release(MEMORY_SLOT_LOCK)
> > +                Return(MR64)
> > +            }
> > +
> > +            Method(MEMORY_SLOT_PROXIMITY_METHOD, 1) {
> > +                Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
> > +                Store(ToInteger(Arg0), MEMORY_SLOT_SLECTOR) //
> > select DIMM
> > +                Store(MEMORY_SLOT_PROXIMITY, Local0)
> > +                Release(MEMORY_SLOT_LOCK)
> > +                Return(Local0)
> > +            }
> > +
> > +            Method(MEMORY_SLOT_OST_METHOD, 4) {
> > +                Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
> > +                Store(ToInteger(Arg0), MEMORY_SLOT_SLECTOR) //
> > select DIMM
> > +                Store(Arg1, MEMORY_SLOT_OST_EVENT)
> > +                Store(Arg2, MEMORY_SLOT_OST_STATUS)
> > +                Release(MEMORY_SLOT_LOCK)
> > +            }
> > +        } // Device()
> > +    } // Scope()
> > diff --git a/hw/i386/acpi-dsdt.dsl b/hw/i386/acpi-dsdt.dsl
> > index 559f4b6..a611e07 100644
> > --- a/hw/i386/acpi-dsdt.dsl
> > +++ b/hw/i386/acpi-dsdt.dsl
> > @@ -297,13 +297,12 @@ DefinitionBlock (
> >  #include "hw/acpi/pc-hotplug.h"
> >  #define CPU_STATUS_BASE PIIX4_CPU_HOTPLUG_IO_BASE
> >  #include "acpi-dsdt-cpu-hotplug.dsl"
> > +#include "acpi-dsdt-mem-hotplug.dsl"
> >  
> >  
> >  /****************************************************************
> >   * General purpose events
> >   ****************************************************************/
> > -
> > External(\_SB.PCI0.MEMORY_HOTPLUG_DEVICE.MEMORY_SLOT_SCAN_METHOD,
> > MethodObj) - Scope(\_GPE) {
> >          Name(_HID, "ACPI0006")
> >  
> > diff --git a/hw/i386/acpi-dsdt.hex.generated
> > b/hw/i386/acpi-dsdt.hex.generated index a21bf41..875570e 100644
> > --- a/hw/i386/acpi-dsdt.hex.generated
> > +++ b/hw/i386/acpi-dsdt.hex.generated
> > @@ -3,12 +3,12 @@ static unsigned char AcpiDsdtAmlCode[] = {
> >  0x53,
> >  0x44,
> >  0x54,
> > -0xf7,
> > -0xa,
> > +0x8,
> > +0xe,
> >  0x0,
> >  0x0,
> >  0x1,
> > -0x1f,
> > +0xfc,
> >  0x42,
> >  0x58,
> >  0x50,
> > @@ -32,8 +32,8 @@ static unsigned char AcpiDsdtAmlCode[] = {
> >  0x54,
> >  0x4c,
> >  0x28,
> > -0x5,
> > -0x10,
> > +0x8,
> > +0x14,
> >  0x20,
> >  0x10,
> >  0x49,
> > @@ -2593,6 +2593,791 @@ static unsigned char AcpiDsdtAmlCode[] = {
> >  0xa,
> >  0xb,
> >  0x10,
> > +0x40,
> > +0x31,
> > +0x2e,
> > +0x5f,
> > +0x53,
> > +0x42,
> > +0x5f,
> > +0x50,
> > +0x43,
> > +0x49,
> > +0x30,
> > +0x5b,
> > +0x82,
> > +0x43,
> > +0x30,
> > +0x4d,
> > +0x48,
> > +0x50,
> > +0x44,
> > +0x8,
> > +0x5f,
> > +0x48,
> > +0x49,
> > +0x44,
> > +0xd,
> > +0x50,
> > +0x4e,
> > +0x50,
> > +0x30,
> > +0x41,
> > +0x30,
> > +0x36,
> > +0x0,
> > +0x8,
> > +0x5f,
> > +0x55,
> > +0x49,
> > +0x44,
> > +0xd,
> > +0x4d,
> > +0x65,
> > +0x6d,
> > +0x6f,
> > +0x72,
> > +0x79,
> > +0x20,
> > +0x68,
> > +0x6f,
> > +0x74,
> > +0x70,
> > +0x6c,
> > +0x75,
> > +0x67,
> > +0x20,
> > +0x72,
> > +0x65,
> > +0x73,
> > +0x6f,
> > +0x75,
> > +0x72,
> > +0x63,
> > +0x65,
> > +0x73,
> > +0x0,
> > +0x5b,
> > +0x80,
> > +0x48,
> > +0x50,
> > +0x4d,
> > +0x52,
> > +0x1,
> > +0xb,
> > +0x0,
> > +0xa,
> > +0xa,
> > +0x18,
> > +0x8,
> > +0x5f,
> > +0x43,
> > +0x52,
> > +0x53,
> > +0x11,
> > +0xd,
> > +0xa,
> > +0xa,
> > +0x47,
> > +0x1,
> > +0x0,
> > +0xa,
> > +0x0,
> > +0xa,
> > +0x0,
> > +0x18,
> > +0x79,
> > +0x0,
> > +0x14,
> > +0x13,
> > +0x5f,
> > +0x53,
> > +0x54,
> > +0x41,
> > +0x0,
> > +0xa0,
> > +0x9,
> > +0x93,
> > +0x4d,
> > +0x44,
> > +0x4e,
> > +0x52,
> > +0x0,
> > +0xa4,
> > +0x0,
> > +0xa4,
> > +0xa,
> > +0xb,
> > +0x5b,
> > +0x81,
> > +0x1f,
> > +0x48,
> > +0x50,
> > +0x4d,
> > +0x52,
> > +0x3,
> > +0x4d,
> > +0x52,
> > +0x42,
> > +0x4c,
> > +0x20,
> > +0x4d,
> > +0x52,
> > +0x42,
> > +0x48,
> > +0x20,
> > +0x4d,
> > +0x52,
> > +0x4c,
> > +0x4c,
> > +0x20,
> > +0x4d,
> > +0x52,
> > +0x4c,
> > +0x48,
> > +0x20,
> > +0x4d,
> > +0x50,
> > +0x58,
> > +0x5f,
> > +0x20,
> > +0x5b,
> > +0x81,
> > +0x13,
> > +0x48,
> > +0x50,
> > +0x4d,
> > +0x52,
> > +0x1,
> > +0x0,
> > +0x40,
> > +0xa,
> > +0x4d,
> > +0x45,
> > +0x53,
> > +0x5f,
> > +0x1,
> > +0x4d,
> > +0x49,
> > +0x4e,
> > +0x53,
> > +0x1,
> > +0x5b,
> > +0x1,
> > +0x4d,
> > +0x4c,
> > +0x43,
> > +0x4b,
> > +0x0,
> > +0x5b,
> > +0x81,
> > +0x15,
> > +0x48,
> > +0x50,
> > +0x4d,
> > +0x52,
> > +0x3,
> > +0x4d,
> > +0x53,
> > +0x45,
> > +0x4c,
> > +0x20,
> > +0x4d,
> > +0x4f,
> > +0x45,
> > +0x56,
> > +0x20,
> > +0x4d,
> > +0x4f,
> > +0x53,
> > +0x43,
> > +0x20,
> > +0x14,
> > +0x4a,
> > +0x4,
> > +0x4d,
> > +0x53,
> > +0x43,
> > +0x4e,
> > +0x0,
> > +0xa0,
> > +0x9,
> > +0x93,
> > +0x4d,
> > +0x44,
> > +0x4e,
> > +0x52,
> > +0x0,
> > +0xa4,
> > +0x0,
> > +0x70,
> > +0x0,
> > +0x60,
> > +0x5b,
> > +0x23,
> > +0x4d,
> > +0x4c,
> > +0x43,
> > +0x4b,
> > +0xff,
> > +0xff,
> > +0xa2,
> > +0x25,
> > +0x95,
> > +0x60,
> > +0x4d,
> > +0x44,
> > +0x4e,
> > +0x52,
> > +0x70,
> > +0x60,
> > +0x4d,
> > +0x53,
> > +0x45,
> > +0x4c,
> > +0xa0,
> > +0x13,
> > +0x93,
> > +0x4d,
> > +0x49,
> > +0x4e,
> > +0x53,
> > +0x1,
> > +0x4d,
> > +0x54,
> > +0x46,
> > +0x59,
> > +0x60,
> > +0x1,
> > +0x70,
> > +0x1,
> > +0x4d,
> > +0x49,
> > +0x4e,
> > +0x53,
> > +0x72,
> > +0x60,
> > +0x1,
> > +0x60,
> > +0x5b,
> > +0x27,
> > +0x4d,
> > +0x4c,
> > +0x43,
> > +0x4b,
> > +0xa4,
> > +0x1,
> > +0x14,
> > +0x2d,
> > +0x4d,
> > +0x52,
> > +0x53,
> > +0x54,
> > +0x1,
> > +0x70,
> > +0x0,
> > +0x60,
> > +0x5b,
> > +0x23,
> > +0x4d,
> > +0x4c,
> > +0x43,
> > +0x4b,
> > +0xff,
> > +0xff,
> > +0x70,
> > +0x99,
> > +0x68,
> > +0x0,
> > +0x4d,
> > +0x53,
> > +0x45,
> > +0x4c,
> > +0xa0,
> > +0xb,
> > +0x93,
> > +0x4d,
> > +0x45,
> > +0x53,
> > +0x5f,
> > +0x1,
> > +0x70,
> > +0xa,
> > +0xf,
> > +0x60,
> > +0x5b,
> > +0x27,
> > +0x4d,
> > +0x4c,
> > +0x43,
> > +0x4b,
> > +0xa4,
> > +0x60,
> > +0x14,
> > +0x41,
> > +0x18,
> > +0x4d,
> > +0x43,
> > +0x52,
> > +0x53,
> > +0x9,
> > +0x5b,
> > +0x23,
> > +0x4d,
> > +0x4c,
> > +0x43,
> > +0x4b,
> > +0xff,
> > +0xff,
> > +0x70,
> > +0x99,
> > +0x68,
> > +0x0,
> > +0x4d,
> > +0x53,
> > +0x45,
> > +0x4c,
> > +0x8,
> > +0x4d,
> > +0x52,
> > +0x36,
> > +0x34,
> > +0x11,
> > +0x33,
> > +0xa,
> > +0x30,
> > +0x8a,
> > +0x2b,
> > +0x0,
> > +0x0,
> > +0xc,
> > +0x3,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0xfe,
> > +0xff,
> > +0xff,
> > +0xff,
> > +0xff,
> > +0xff,
> > +0xff,
> > +0xff,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0xff,
> > +0xff,
> > +0xff,
> > +0xff,
> > +0xff,
> > +0xff,
> > +0xff,
> > +0xff,
> > +0x79,
> > +0x0,
> > +0x8a,
> > +0x4d,
> > +0x52,
> > +0x36,
> > +0x34,
> > +0xa,
> > +0xe,
> > +0x4d,
> > +0x49,
> > +0x4e,
> > +0x4c,
> > +0x8a,
> > +0x4d,
> > +0x52,
> > +0x36,
> > +0x34,
> > +0xa,
> > +0x12,
> > +0x4d,
> > +0x49,
> > +0x4e,
> > +0x48,
> > +0x8a,
> > +0x4d,
> > +0x52,
> > +0x36,
> > +0x34,
> > +0xa,
> > +0x26,
> > +0x4c,
> > +0x45,
> > +0x4e,
> > +0x4c,
> > +0x8a,
> > +0x4d,
> > +0x52,
> > +0x36,
> > +0x34,
> > +0xa,
> > +0x2a,
> > +0x4c,
> > +0x45,
> > +0x4e,
> > +0x48,
> > +0x8a,
> > +0x4d,
> > +0x52,
> > +0x36,
> > +0x34,
> > +0xa,
> > +0x16,
> > +0x4d,
> > +0x41,
> > +0x58,
> > +0x4c,
> > +0x8a,
> > +0x4d,
> > +0x52,
> > +0x36,
> > +0x34,
> > +0xa,
> > +0x1a,
> > +0x4d,
> > +0x41,
> > +0x58,
> > +0x48,
> > +0x70,
> > +0x4d,
> > +0x52,
> > +0x42,
> > +0x48,
> > +0x4d,
> > +0x49,
> > +0x4e,
> > +0x48,
> > +0x70,
> > +0x4d,
> > +0x52,
> > +0x42,
> > +0x4c,
> > +0x4d,
> > +0x49,
> > +0x4e,
> > +0x4c,
> > +0x70,
> > +0x4d,
> > +0x52,
> > +0x4c,
> > +0x48,
> > +0x4c,
> > +0x45,
> > +0x4e,
> > +0x48,
> > +0x70,
> > +0x4d,
> > +0x52,
> > +0x4c,
> > +0x4c,
> > +0x4c,
> > +0x45,
> > +0x4e,
> > +0x4c,
> > +0x72,
> > +0x4d,
> > +0x49,
> > +0x4e,
> > +0x4c,
> > +0x4c,
> > +0x45,
> > +0x4e,
> > +0x4c,
> > +0x4d,
> > +0x41,
> > +0x58,
> > +0x4c,
> > +0x72,
> > +0x4d,
> > +0x49,
> > +0x4e,
> > +0x48,
> > +0x4c,
> > +0x45,
> > +0x4e,
> > +0x48,
> > +0x4d,
> > +0x41,
> > +0x58,
> > +0x48,
> > +0xa0,
> > +0x14,
> > +0x95,
> > +0x4d,
> > +0x41,
> > +0x58,
> > +0x4c,
> > +0x4d,
> > +0x49,
> > +0x4e,
> > +0x4c,
> > +0x72,
> > +0x4d,
> > +0x41,
> > +0x58,
> > +0x48,
> > +0x1,
> > +0x4d,
> > +0x41,
> > +0x58,
> > +0x48,
> > +0xa0,
> > +0x11,
> > +0x95,
> > +0x4d,
> > +0x41,
> > +0x58,
> > +0x4c,
> > +0x1,
> > +0x74,
> > +0x4d,
> > +0x41,
> > +0x58,
> > +0x48,
> > +0x1,
> > +0x4d,
> > +0x41,
> > +0x58,
> > +0x48,
> > +0x74,
> > +0x4d,
> > +0x41,
> > +0x58,
> > +0x4c,
> > +0x1,
> > +0x4d,
> > +0x41,
> > +0x58,
> > +0x4c,
> > +0xa0,
> > +0x44,
> > +0x7,
> > +0x93,
> > +0x4d,
> > +0x41,
> > +0x58,
> > +0x48,
> > +0x0,
> > +0x8,
> > +0x4d,
> > +0x52,
> > +0x33,
> > +0x32,
> > +0x11,
> > +0x1f,
> > +0xa,
> > +0x1c,
> > +0x87,
> > +0x17,
> > +0x0,
> > +0x0,
> > +0xc,
> > +0x3,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0xfe,
> > +0xff,
> > +0xff,
> > +0xff,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0xff,
> > +0xff,
> > +0xff,
> > +0xff,
> > +0x79,
> > +0x0,
> > +0x8a,
> > +0x4d,
> > +0x52,
> > +0x33,
> > +0x32,
> > +0xa,
> > +0xa,
> > +0x4d,
> > +0x49,
> > +0x4e,
> > +0x5f,
> > +0x8a,
> > +0x4d,
> > +0x52,
> > +0x33,
> > +0x32,
> > +0xa,
> > +0xe,
> > +0x4d,
> > +0x41,
> > +0x58,
> > +0x5f,
> > +0x8a,
> > +0x4d,
> > +0x52,
> > +0x33,
> > +0x32,
> > +0xa,
> > +0x16,
> > +0x4c,
> > +0x45,
> > +0x4e,
> > +0x5f,
> > +0x70,
> > +0x4d,
> > +0x49,
> > +0x4e,
> > +0x4c,
> > +0x4d,
> > +0x49,
> > +0x4e,
> > +0x5f,
> > +0x70,
> > +0x4d,
> > +0x41,
> > +0x58,
> > +0x4c,
> > +0x4d,
> > +0x41,
> > +0x58,
> > +0x5f,
> > +0x70,
> > +0x4c,
> > +0x45,
> > +0x4e,
> > +0x4c,
> > +0x4c,
> > +0x45,
> > +0x4e,
> > +0x5f,
> > +0x5b,
> > +0x27,
> > +0x4d,
> > +0x4c,
> > +0x43,
> > +0x4b,
> > +0xa4,
> > +0x4d,
> > +0x52,
> > +0x33,
> > +0x32,
> > +0x5b,
> > +0x27,
> > +0x4d,
> > +0x4c,
> > +0x43,
> > +0x4b,
> > +0xa4,
> > +0x4d,
> > +0x52,
> > +0x36,
> > +0x34,
> > +0x14,
> > +0x24,
> > +0x4d,
> > +0x50,
> > +0x58,
> > +0x4d,
> > +0x1,
> > +0x5b,
> > +0x23,
> > +0x4d,
> > +0x4c,
> > +0x43,
> > +0x4b,
> > +0xff,
> > +0xff,
> > +0x70,
> > +0x99,
> > +0x68,
> > +0x0,
> > +0x4d,
> > +0x53,
> > +0x45,
> > +0x4c,
> > +0x70,
> > +0x4d,
> > +0x50,
> > +0x58,
> > +0x5f,
> > +0x60,
> > +0x5b,
> > +0x27,
> > +0x4d,
> > +0x4c,
> > +0x43,
> > +0x4b,
> > +0xa4,
> > +0x60,
> > +0x14,
> > +0x28,
> > +0x4d,
> > +0x4f,
> > +0x53,
> > +0x54,
> > +0x4,
> > +0x5b,
> > +0x23,
> > +0x4d,
> > +0x4c,
> > +0x43,
> > +0x4b,
> > +0xff,
> > +0xff,
> > +0x70,
> > +0x99,
> > +0x68,
> > +0x0,
> > +0x4d,
> > +0x53,
> > +0x45,
> > +0x4c,
> > +0x70,
> > +0x69,
> > +0x4d,
> > +0x4f,
> > +0x45,
> > +0x56,
> > +0x70,
> > +0x6a,
> > +0x4d,
> > +0x4f,
> > +0x53,
> > +0x43,
> > +0x5b,
> > +0x27,
> > +0x4d,
> > +0x4c,
> > +0x43,
> > +0x4b,
> > +0x10,
> >  0x45,
> >  0xd,
> >  0x5f,
> > diff --git a/hw/i386/q35-acpi-dsdt.dsl b/hw/i386/q35-acpi-dsdt.dsl
> > index 054b035..e1cee5d 100644
> > --- a/hw/i386/q35-acpi-dsdt.dsl
> > +++ b/hw/i386/q35-acpi-dsdt.dsl
> > @@ -405,13 +405,12 @@ DefinitionBlock (
> >  #include "hw/acpi/pc-hotplug.h"
> >  #define CPU_STATUS_BASE ICH9_CPU_HOTPLUG_IO_BASE
> >  #include "acpi-dsdt-cpu-hotplug.dsl"
> > +#include "acpi-dsdt-mem-hotplug.dsl"
> >  
> >  
> >  /****************************************************************
> >   * General purpose events
> >   ****************************************************************/
> > -
> > External(\_SB.PCI0.MEMORY_HOTPLUG_DEVICE.MEMORY_SLOT_SCAN_METHOD,
> > MethodObj) - Scope(\_GPE) {
> >          Name(_HID, "ACPI0006")
> >  
> > diff --git a/hw/i386/q35-acpi-dsdt.hex.generated
> > b/hw/i386/q35-acpi-dsdt.hex.generated index c9eb4ac..4807bdf 100644
> > --- a/hw/i386/q35-acpi-dsdt.hex.generated
> > +++ b/hw/i386/q35-acpi-dsdt.hex.generated
> > @@ -3,12 +3,12 @@ static unsigned char Q35AcpiDsdtAmlCode[] = {
> >  0x53,
> >  0x44,
> >  0x54,
> > -0xe5,
> > -0x1c,
> > +0xf6,
> > +0x1f,
> >  0x0,
> >  0x0,
> >  0x1,
> > -0xb7,
> > +0x91,
> >  0x42,
> >  0x58,
> >  0x50,
> > @@ -31,9 +31,9 @@ static unsigned char Q35AcpiDsdtAmlCode[] = {
> >  0x4e,
> >  0x54,
> >  0x4c,
> > -0x15,
> > -0x11,
> > -0x13,
> > +0x28,
> > +0x8,
> > +0x14,
> >  0x20,
> >  0x10,
> >  0x49,
> > @@ -7234,6 +7234,791 @@ static unsigned char Q35AcpiDsdtAmlCode[] = {
> >  0xa,
> >  0xb,
> >  0x10,
> > +0x40,
> > +0x31,
> > +0x2e,
> > +0x5f,
> > +0x53,
> > +0x42,
> > +0x5f,
> > +0x50,
> > +0x43,
> > +0x49,
> > +0x30,
> > +0x5b,
> > +0x82,
> > +0x43,
> > +0x30,
> > +0x4d,
> > +0x48,
> > +0x50,
> > +0x44,
> > +0x8,
> > +0x5f,
> > +0x48,
> > +0x49,
> > +0x44,
> > +0xd,
> > +0x50,
> > +0x4e,
> > +0x50,
> > +0x30,
> > +0x41,
> > +0x30,
> > +0x36,
> > +0x0,
> > +0x8,
> > +0x5f,
> > +0x55,
> > +0x49,
> > +0x44,
> > +0xd,
> > +0x4d,
> > +0x65,
> > +0x6d,
> > +0x6f,
> > +0x72,
> > +0x79,
> > +0x20,
> > +0x68,
> > +0x6f,
> > +0x74,
> > +0x70,
> > +0x6c,
> > +0x75,
> > +0x67,
> > +0x20,
> > +0x72,
> > +0x65,
> > +0x73,
> > +0x6f,
> > +0x75,
> > +0x72,
> > +0x63,
> > +0x65,
> > +0x73,
> > +0x0,
> > +0x5b,
> > +0x80,
> > +0x48,
> > +0x50,
> > +0x4d,
> > +0x52,
> > +0x1,
> > +0xb,
> > +0x0,
> > +0xa,
> > +0xa,
> > +0x18,
> > +0x8,
> > +0x5f,
> > +0x43,
> > +0x52,
> > +0x53,
> > +0x11,
> > +0xd,
> > +0xa,
> > +0xa,
> > +0x47,
> > +0x1,
> > +0x0,
> > +0xa,
> > +0x0,
> > +0xa,
> > +0x0,
> > +0x18,
> > +0x79,
> > +0x0,
> > +0x14,
> > +0x13,
> > +0x5f,
> > +0x53,
> > +0x54,
> > +0x41,
> > +0x0,
> > +0xa0,
> > +0x9,
> > +0x93,
> > +0x4d,
> > +0x44,
> > +0x4e,
> > +0x52,
> > +0x0,
> > +0xa4,
> > +0x0,
> > +0xa4,
> > +0xa,
> > +0xb,
> > +0x5b,
> > +0x81,
> > +0x1f,
> > +0x48,
> > +0x50,
> > +0x4d,
> > +0x52,
> > +0x3,
> > +0x4d,
> > +0x52,
> > +0x42,
> > +0x4c,
> > +0x20,
> > +0x4d,
> > +0x52,
> > +0x42,
> > +0x48,
> > +0x20,
> > +0x4d,
> > +0x52,
> > +0x4c,
> > +0x4c,
> > +0x20,
> > +0x4d,
> > +0x52,
> > +0x4c,
> > +0x48,
> > +0x20,
> > +0x4d,
> > +0x50,
> > +0x58,
> > +0x5f,
> > +0x20,
> > +0x5b,
> > +0x81,
> > +0x13,
> > +0x48,
> > +0x50,
> > +0x4d,
> > +0x52,
> > +0x1,
> > +0x0,
> > +0x40,
> > +0xa,
> > +0x4d,
> > +0x45,
> > +0x53,
> > +0x5f,
> > +0x1,
> > +0x4d,
> > +0x49,
> > +0x4e,
> > +0x53,
> > +0x1,
> > +0x5b,
> > +0x1,
> > +0x4d,
> > +0x4c,
> > +0x43,
> > +0x4b,
> > +0x0,
> > +0x5b,
> > +0x81,
> > +0x15,
> > +0x48,
> > +0x50,
> > +0x4d,
> > +0x52,
> > +0x3,
> > +0x4d,
> > +0x53,
> > +0x45,
> > +0x4c,
> > +0x20,
> > +0x4d,
> > +0x4f,
> > +0x45,
> > +0x56,
> > +0x20,
> > +0x4d,
> > +0x4f,
> > +0x53,
> > +0x43,
> > +0x20,
> > +0x14,
> > +0x4a,
> > +0x4,
> > +0x4d,
> > +0x53,
> > +0x43,
> > +0x4e,
> > +0x0,
> > +0xa0,
> > +0x9,
> > +0x93,
> > +0x4d,
> > +0x44,
> > +0x4e,
> > +0x52,
> > +0x0,
> > +0xa4,
> > +0x0,
> > +0x70,
> > +0x0,
> > +0x60,
> > +0x5b,
> > +0x23,
> > +0x4d,
> > +0x4c,
> > +0x43,
> > +0x4b,
> > +0xff,
> > +0xff,
> > +0xa2,
> > +0x25,
> > +0x95,
> > +0x60,
> > +0x4d,
> > +0x44,
> > +0x4e,
> > +0x52,
> > +0x70,
> > +0x60,
> > +0x4d,
> > +0x53,
> > +0x45,
> > +0x4c,
> > +0xa0,
> > +0x13,
> > +0x93,
> > +0x4d,
> > +0x49,
> > +0x4e,
> > +0x53,
> > +0x1,
> > +0x4d,
> > +0x54,
> > +0x46,
> > +0x59,
> > +0x60,
> > +0x1,
> > +0x70,
> > +0x1,
> > +0x4d,
> > +0x49,
> > +0x4e,
> > +0x53,
> > +0x72,
> > +0x60,
> > +0x1,
> > +0x60,
> > +0x5b,
> > +0x27,
> > +0x4d,
> > +0x4c,
> > +0x43,
> > +0x4b,
> > +0xa4,
> > +0x1,
> > +0x14,
> > +0x2d,
> > +0x4d,
> > +0x52,
> > +0x53,
> > +0x54,
> > +0x1,
> > +0x70,
> > +0x0,
> > +0x60,
> > +0x5b,
> > +0x23,
> > +0x4d,
> > +0x4c,
> > +0x43,
> > +0x4b,
> > +0xff,
> > +0xff,
> > +0x70,
> > +0x99,
> > +0x68,
> > +0x0,
> > +0x4d,
> > +0x53,
> > +0x45,
> > +0x4c,
> > +0xa0,
> > +0xb,
> > +0x93,
> > +0x4d,
> > +0x45,
> > +0x53,
> > +0x5f,
> > +0x1,
> > +0x70,
> > +0xa,
> > +0xf,
> > +0x60,
> > +0x5b,
> > +0x27,
> > +0x4d,
> > +0x4c,
> > +0x43,
> > +0x4b,
> > +0xa4,
> > +0x60,
> > +0x14,
> > +0x41,
> > +0x18,
> > +0x4d,
> > +0x43,
> > +0x52,
> > +0x53,
> > +0x9,
> > +0x5b,
> > +0x23,
> > +0x4d,
> > +0x4c,
> > +0x43,
> > +0x4b,
> > +0xff,
> > +0xff,
> > +0x70,
> > +0x99,
> > +0x68,
> > +0x0,
> > +0x4d,
> > +0x53,
> > +0x45,
> > +0x4c,
> > +0x8,
> > +0x4d,
> > +0x52,
> > +0x36,
> > +0x34,
> > +0x11,
> > +0x33,
> > +0xa,
> > +0x30,
> > +0x8a,
> > +0x2b,
> > +0x0,
> > +0x0,
> > +0xc,
> > +0x3,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0xfe,
> > +0xff,
> > +0xff,
> > +0xff,
> > +0xff,
> > +0xff,
> > +0xff,
> > +0xff,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0xff,
> > +0xff,
> > +0xff,
> > +0xff,
> > +0xff,
> > +0xff,
> > +0xff,
> > +0xff,
> > +0x79,
> > +0x0,
> > +0x8a,
> > +0x4d,
> > +0x52,
> > +0x36,
> > +0x34,
> > +0xa,
> > +0xe,
> > +0x4d,
> > +0x49,
> > +0x4e,
> > +0x4c,
> > +0x8a,
> > +0x4d,
> > +0x52,
> > +0x36,
> > +0x34,
> > +0xa,
> > +0x12,
> > +0x4d,
> > +0x49,
> > +0x4e,
> > +0x48,
> > +0x8a,
> > +0x4d,
> > +0x52,
> > +0x36,
> > +0x34,
> > +0xa,
> > +0x26,
> > +0x4c,
> > +0x45,
> > +0x4e,
> > +0x4c,
> > +0x8a,
> > +0x4d,
> > +0x52,
> > +0x36,
> > +0x34,
> > +0xa,
> > +0x2a,
> > +0x4c,
> > +0x45,
> > +0x4e,
> > +0x48,
> > +0x8a,
> > +0x4d,
> > +0x52,
> > +0x36,
> > +0x34,
> > +0xa,
> > +0x16,
> > +0x4d,
> > +0x41,
> > +0x58,
> > +0x4c,
> > +0x8a,
> > +0x4d,
> > +0x52,
> > +0x36,
> > +0x34,
> > +0xa,
> > +0x1a,
> > +0x4d,
> > +0x41,
> > +0x58,
> > +0x48,
> > +0x70,
> > +0x4d,
> > +0x52,
> > +0x42,
> > +0x48,
> > +0x4d,
> > +0x49,
> > +0x4e,
> > +0x48,
> > +0x70,
> > +0x4d,
> > +0x52,
> > +0x42,
> > +0x4c,
> > +0x4d,
> > +0x49,
> > +0x4e,
> > +0x4c,
> > +0x70,
> > +0x4d,
> > +0x52,
> > +0x4c,
> > +0x48,
> > +0x4c,
> > +0x45,
> > +0x4e,
> > +0x48,
> > +0x70,
> > +0x4d,
> > +0x52,
> > +0x4c,
> > +0x4c,
> > +0x4c,
> > +0x45,
> > +0x4e,
> > +0x4c,
> > +0x72,
> > +0x4d,
> > +0x49,
> > +0x4e,
> > +0x4c,
> > +0x4c,
> > +0x45,
> > +0x4e,
> > +0x4c,
> > +0x4d,
> > +0x41,
> > +0x58,
> > +0x4c,
> > +0x72,
> > +0x4d,
> > +0x49,
> > +0x4e,
> > +0x48,
> > +0x4c,
> > +0x45,
> > +0x4e,
> > +0x48,
> > +0x4d,
> > +0x41,
> > +0x58,
> > +0x48,
> > +0xa0,
> > +0x14,
> > +0x95,
> > +0x4d,
> > +0x41,
> > +0x58,
> > +0x4c,
> > +0x4d,
> > +0x49,
> > +0x4e,
> > +0x4c,
> > +0x72,
> > +0x4d,
> > +0x41,
> > +0x58,
> > +0x48,
> > +0x1,
> > +0x4d,
> > +0x41,
> > +0x58,
> > +0x48,
> > +0xa0,
> > +0x11,
> > +0x95,
> > +0x4d,
> > +0x41,
> > +0x58,
> > +0x4c,
> > +0x1,
> > +0x74,
> > +0x4d,
> > +0x41,
> > +0x58,
> > +0x48,
> > +0x1,
> > +0x4d,
> > +0x41,
> > +0x58,
> > +0x48,
> > +0x74,
> > +0x4d,
> > +0x41,
> > +0x58,
> > +0x4c,
> > +0x1,
> > +0x4d,
> > +0x41,
> > +0x58,
> > +0x4c,
> > +0xa0,
> > +0x44,
> > +0x7,
> > +0x93,
> > +0x4d,
> > +0x41,
> > +0x58,
> > +0x48,
> > +0x0,
> > +0x8,
> > +0x4d,
> > +0x52,
> > +0x33,
> > +0x32,
> > +0x11,
> > +0x1f,
> > +0xa,
> > +0x1c,
> > +0x87,
> > +0x17,
> > +0x0,
> > +0x0,
> > +0xc,
> > +0x3,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0xfe,
> > +0xff,
> > +0xff,
> > +0xff,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0x0,
> > +0xff,
> > +0xff,
> > +0xff,
> > +0xff,
> > +0x79,
> > +0x0,
> > +0x8a,
> > +0x4d,
> > +0x52,
> > +0x33,
> > +0x32,
> > +0xa,
> > +0xa,
> > +0x4d,
> > +0x49,
> > +0x4e,
> > +0x5f,
> > +0x8a,
> > +0x4d,
> > +0x52,
> > +0x33,
> > +0x32,
> > +0xa,
> > +0xe,
> > +0x4d,
> > +0x41,
> > +0x58,
> > +0x5f,
> > +0x8a,
> > +0x4d,
> > +0x52,
> > +0x33,
> > +0x32,
> > +0xa,
> > +0x16,
> > +0x4c,
> > +0x45,
> > +0x4e,
> > +0x5f,
> > +0x70,
> > +0x4d,
> > +0x49,
> > +0x4e,
> > +0x4c,
> > +0x4d,
> > +0x49,
> > +0x4e,
> > +0x5f,
> > +0x70,
> > +0x4d,
> > +0x41,
> > +0x58,
> > +0x4c,
> > +0x4d,
> > +0x41,
> > +0x58,
> > +0x5f,
> > +0x70,
> > +0x4c,
> > +0x45,
> > +0x4e,
> > +0x4c,
> > +0x4c,
> > +0x45,
> > +0x4e,
> > +0x5f,
> > +0x5b,
> > +0x27,
> > +0x4d,
> > +0x4c,
> > +0x43,
> > +0x4b,
> > +0xa4,
> > +0x4d,
> > +0x52,
> > +0x33,
> > +0x32,
> > +0x5b,
> > +0x27,
> > +0x4d,
> > +0x4c,
> > +0x43,
> > +0x4b,
> > +0xa4,
> > +0x4d,
> > +0x52,
> > +0x36,
> > +0x34,
> > +0x14,
> > +0x24,
> > +0x4d,
> > +0x50,
> > +0x58,
> > +0x4d,
> > +0x1,
> > +0x5b,
> > +0x23,
> > +0x4d,
> > +0x4c,
> > +0x43,
> > +0x4b,
> > +0xff,
> > +0xff,
> > +0x70,
> > +0x99,
> > +0x68,
> > +0x0,
> > +0x4d,
> > +0x53,
> > +0x45,
> > +0x4c,
> > +0x70,
> > +0x4d,
> > +0x50,
> > +0x58,
> > +0x5f,
> > +0x60,
> > +0x5b,
> > +0x27,
> > +0x4d,
> > +0x4c,
> > +0x43,
> > +0x4b,
> > +0xa4,
> > +0x60,
> > +0x14,
> > +0x28,
> > +0x4d,
> > +0x4f,
> > +0x53,
> > +0x54,
> > +0x4,
> > +0x5b,
> > +0x23,
> > +0x4d,
> > +0x4c,
> > +0x43,
> > +0x4b,
> > +0xff,
> > +0xff,
> > +0x70,
> > +0x99,
> > +0x68,
> > +0x0,
> > +0x4d,
> > +0x53,
> > +0x45,
> > +0x4c,
> > +0x70,
> > +0x69,
> > +0x4d,
> > +0x4f,
> > +0x45,
> > +0x56,
> > +0x70,
> > +0x6a,
> > +0x4d,
> > +0x4f,
> > +0x53,
> > +0x43,
> > +0x5b,
> > +0x27,
> > +0x4d,
> > +0x4c,
> > +0x43,
> > +0x4b,
> > +0x10,
> >  0x42,
> >  0xa,
> >  0x5f,
> > diff --git a/hw/i386/ssdt-mem.hex.generated
> > b/hw/i386/ssdt-mem.hex.generated index 00bd34d..b3bfbbd 100644
> > --- a/hw/i386/ssdt-mem.hex.generated
> > +++ b/hw/i386/ssdt-mem.hex.generated
> > @@ -11,7 +11,7 @@ static unsigned char ssdm_mem_aml[] = {
> >  0x0,
> >  0x0,
> >  0x2,
> > -0x71,
> > +0x66,
> >  0x42,
> >  0x58,
> >  0x50,
> > @@ -34,9 +34,9 @@ static unsigned char ssdm_mem_aml[] = {
> >  0x4e,
> >  0x54,
> >  0x4c,
> > -0x15,
> > -0x11,
> > -0x13,
> > +0x28,
> > +0x8,
> > +0x14,
> >  0x20,
> >  0x10,
> >  0x42,
> > diff --git a/hw/i386/ssdt-misc.dsl b/hw/i386/ssdt-misc.dsl
> > index 0fd4480..1e3baae 100644
> > --- a/hw/i386/ssdt-misc.dsl
> > +++ b/hw/i386/ssdt-misc.dsl
> > @@ -36,6 +36,8 @@ DefinitionBlock ("ssdt-misc.aml", "SSDT", 0x01,
> > "BXPC", "BXSSDTSUSP", 0x1) Name(P1E, Buffer() { 0x00, 0x00, 0x00,
> > 0x00, 0x00, 0x00, 0x00, 0x00 }) ACPI_EXTRACT_NAME_BUFFER8
> > acpi_pci64_length Name(P1L, Buffer() { 0x00, 0x00, 0x00, 0x00, 0x00,
> > 0x00, 0x00, 0x00 })
> > +       ACPI_EXTRACT_NAME_DWORD_CONST ssdt_mctrl_nr_slots
> > +       Name(MEMORY_SLOTS_NUMBER, 0x12345678)
> >      }
> >  
> >  
> > @@ -117,167 +119,4 @@ DefinitionBlock ("ssdt-misc.aml", "SSDT", 0x01,
> > "BXPC", "BXSSDTSUSP", 0x1) }
> >          }
> >      }
> > -
> > -    External(MEMORY_SLOT_NOTIFY_METHOD, MethodObj)
> > -    Scope(\_SB.PCI0) {
> > -        Device(MEMORY_HOTPLUG_DEVICE) {
> > -            Name(_HID, "PNP0A06")
> > -            Name(_UID, "Memory hotplug resources")
> > -
> > -            ACPI_EXTRACT_NAME_DWORD_CONST ssdt_mctrl_nr_slots
> > -            Name(MEMORY_SLOTS_NUMBER, 0x12345678)
> > -
> > -            /* Memory hotplug IO registers */
> > -            OperationRegion(MEMORY_HOTPLUG_IO_REGION, SystemIO,
> > -                            ACPI_MEMORY_HOTPLUG_BASE,
> > -                            ACPI_MEMORY_HOTPLUG_IO_LEN)
> > -
> > -            Name(_CRS, ResourceTemplate() {
> > -                IO(Decode16, ACPI_MEMORY_HOTPLUG_BASE,
> > ACPI_MEMORY_HOTPLUG_BASE,
> > -                   0, ACPI_MEMORY_HOTPLUG_IO_LEN, IO)
> > -            })
> > -
> > -            Method(_STA, 0) {
> > -                If (LEqual(MEMORY_SLOTS_NUMBER, Zero)) {
> > -                    Return(0x0)
> > -                }
> > -                /* present, functioning, decoding, not shown in UI */
> > -                Return(0xB)
> > -            }
> > -
> > -            Field(MEMORY_HOTPLUG_IO_REGION, DWordAcc, NoLock,
> > Preserve) {
> > -                MEMORY_SLOT_ADDR_LOW, 32,  // read only
> > -                MEMORY_SLOT_ADDR_HIGH, 32, // read only
> > -                MEMORY_SLOT_SIZE_LOW, 32,  // read only
> > -                MEMORY_SLOT_SIZE_HIGH, 32, // read only
> > -                MEMORY_SLOT_PROXIMITY, 32, // read only
> > -            }
> > -            Field(MEMORY_HOTPLUG_IO_REGION, ByteAcc, NoLock,
> > Preserve) {
> > -                Offset(20),
> > -                MEMORY_SLOT_ENABLED,  1, // 1 if enabled, read only
> > -                MEMORY_SLOT_INSERT_EVENT, 1, // (read) 1 if has a
> > insert event. (write) 1 to clear event
> > -            }
> > -
> > -            Mutex (MEMORY_SLOT_LOCK, 0)
> > -            Field (MEMORY_HOTPLUG_IO_REGION, DWordAcc, NoLock,
> > Preserve) {
> > -                MEMORY_SLOT_SLECTOR, 32,  // DIMM selector, write
> > only
> > -                MEMORY_SLOT_OST_EVENT, 32,  // _OST event code,
> > write only
> > -                MEMORY_SLOT_OST_STATUS, 32,  // _OST status code,
> > write only
> > -            }
> > -
> > -            Method(MEMORY_SLOT_SCAN_METHOD, 0) {
> > -                If (LEqual(MEMORY_SLOTS_NUMBER, Zero)) {
> > -                     Return(Zero)
> > -                }
> > -
> > -                Store(Zero, Local0) // Mem devs iterrator
> > -                Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
> > -                while (LLess(Local0, MEMORY_SLOTS_NUMBER)) {
> > -                    Store(Local0, MEMORY_SLOT_SLECTOR) // select
> > Local0 DIMM
> > -                    If (LEqual(MEMORY_SLOT_INSERT_EVENT, One)) { //
> > Memory device needs check
> > -                        MEMORY_SLOT_NOTIFY_METHOD(Local0, 1)
> > -                        Store(1, MEMORY_SLOT_INSERT_EVENT)
> > -                    }
> > -                    // TODO: handle memory eject request
> > -                    Add(Local0, One, Local0) // goto next DIMM
> > -                }
> > -                Release(MEMORY_SLOT_LOCK)
> > -                Return(One)
> > -            }
> > -
> > -            Method(MEMORY_SLOT_STATUS_METHOD, 1) {
> > -                Store(Zero, Local0)
> > -
> > -                Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
> > -                Store(ToInteger(Arg0), MEMORY_SLOT_SLECTOR) //
> > select DIMM -
> > -                If (LEqual(MEMORY_SLOT_ENABLED, One)) {
> > -                    Store(0xF, Local0)
> > -                }
> > -
> > -                Release(MEMORY_SLOT_LOCK)
> > -                Return(Local0)
> > -            }
> > -
> > -            Method(MEMORY_SLOT_CRS_METHOD, 1, Serialized) {
> > -                Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
> > -                Store(ToInteger(Arg0), MEMORY_SLOT_SLECTOR) //
> > select DIMM -
> > -                Name(MR64, ResourceTemplate() {
> > -                    QWordMemory(ResourceProducer, PosDecode,
> > MinFixed, MaxFixed,
> > -                    Cacheable, ReadWrite,
> > -                    0x0000000000000000,        // Address Space
> > Granularity
> > -                    0x0000000000000000,        // Address Range
> > Minimum
> > -                    0xFFFFFFFFFFFFFFFE,        // Address Range
> > Maximum
> > -                    0x0000000000000000,        // Address
> > Translation Offset
> > -                    0xFFFFFFFFFFFFFFFF,        // Address Length
> > -                    ,, MW64, AddressRangeMemory, TypeStatic)
> > -                })
> > -
> > -                CreateDWordField(MR64, 14, MINL)
> > -                CreateDWordField(MR64, 18, MINH)
> > -                CreateDWordField(MR64, 38, LENL)
> > -                CreateDWordField(MR64, 42, LENH)
> > -                CreateDWordField(MR64, 22, MAXL)
> > -                CreateDWordField(MR64, 26, MAXH)
> > -
> > -                Store(MEMORY_SLOT_ADDR_HIGH, MINH)
> > -                Store(MEMORY_SLOT_ADDR_LOW, MINL)
> > -                Store(MEMORY_SLOT_SIZE_HIGH, LENH)
> > -                Store(MEMORY_SLOT_SIZE_LOW, LENL)
> > -
> > -                // 64-bit math: MAX = MIN + LEN - 1
> > -                Add(MINL, LENL, MAXL)
> > -                Add(MINH, LENH, MAXH)
> > -                If (LLess(MAXL, MINL)) {
> > -                    Add(MAXH, One, MAXH)
> > -                }
> > -                If (LLess(MAXL, One)) {
> > -                    Subtract(MAXH, One, MAXH)
> > -                }
> > -                Subtract(MAXL, One, MAXL)
> > -
> > -                If (LEqual(MAXH, Zero)){
> > -                    Name(MR32, ResourceTemplate() {
> > -                        DWordMemory(ResourceProducer, PosDecode,
> > MinFixed, MaxFixed,
> > -                        Cacheable, ReadWrite,
> > -                        0x00000000,        // Address Space
> > Granularity
> > -                        0x00000000,        // Address Range Minimum
> > -                        0xFFFFFFFE,        // Address Range Maximum
> > -                        0x00000000,        // Address Translation
> > Offset
> > -                        0xFFFFFFFF,        // Address Length
> > -                        ,, MW32, AddressRangeMemory, TypeStatic)
> > -                    })
> > -                    CreateDWordField(MR32, MW32._MIN, MIN)
> > -                    CreateDWordField(MR32, MW32._MAX, MAX)
> > -                    CreateDWordField(MR32, MW32._LEN, LEN)
> > -                    Store(MINL, MIN)
> > -                    Store(MAXL, MAX)
> > -                    Store(LENL, LEN)
> > -
> > -                    Release(MEMORY_SLOT_LOCK)
> > -                    Return(MR32)
> > -                }
> > -
> > -                Release(MEMORY_SLOT_LOCK)
> > -                Return(MR64)
> > -            }
> > -
> > -            Method(MEMORY_SLOT_PROXIMITY_METHOD, 1) {
> > -                Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
> > -                Store(ToInteger(Arg0), MEMORY_SLOT_SLECTOR) //
> > select DIMM
> > -                Store(MEMORY_SLOT_PROXIMITY, Local0)
> > -                Release(MEMORY_SLOT_LOCK)
> > -                Return(Local0)
> > -            }
> > -
> > -            Method(MEMORY_SLOT_OST_METHOD, 4) {
> > -                Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
> > -                Store(ToInteger(Arg0), MEMORY_SLOT_SLECTOR) //
> > select DIMM
> > -                Store(Arg1, MEMORY_SLOT_OST_EVENT)
> > -                Store(Arg2, MEMORY_SLOT_OST_STATUS)
> > -                Release(MEMORY_SLOT_LOCK)
> > -            }
> > -        } // Device()
> > -    } // Scope()
> >  }
> > diff --git a/hw/i386/ssdt-misc.hex.generated
> > b/hw/i386/ssdt-misc.hex.generated index ba4268a..cbcf61d 100644
> > --- a/hw/i386/ssdt-misc.hex.generated
> > +++ b/hw/i386/ssdt-misc.hex.generated
> > @@ -2,13 +2,13 @@ static unsigned char acpi_pci64_length[] = {
> >  0x6f
> >  };
> >  static unsigned char acpi_s4_pkg[] = {
> > -0x8f
> > +0x99
> >  };
> > -static unsigned short ssdt_mctrl_nr_slots[] = {
> > -0x1aa
> > +static unsigned char ssdt_mctrl_nr_slots[] = {
> > +0x7d
> >  };
> >  static unsigned char acpi_s3_name[] = {
> > -0x7c
> > +0x86
> >  };
> >  static unsigned char acpi_pci32_start[] = {
> >  0x2f
> > @@ -21,12 +21,12 @@ static unsigned char ssdp_misc_aml[] = {
> >  0x53,
> >  0x44,
> >  0x54,
> > -0x7e,
> > -0x4,
> > +0x6c,
> > +0x1,
> >  0x0,
> >  0x0,
> >  0x1,
> > -0x8b,
> > +0x3,
> >  0x42,
> >  0x58,
> >  0x50,
> > @@ -49,12 +49,12 @@ static unsigned char ssdp_misc_aml[] = {
> >  0x4e,
> >  0x54,
> >  0x4c,
> > -0x15,
> > -0x11,
> > -0x13,
> > +0x28,
> > +0x8,
> > +0x14,
> >  0x20,
> >  0x10,
> > -0x42,
> > +0x4c,
> >  0x5,
> >  0x5c,
> >  0x0,
> > @@ -136,6 +136,16 @@ static unsigned char ssdp_misc_aml[] = {
> >  0x0,
> >  0x0,
> >  0x0,
> > +0x8,
> > +0x4d,
> > +0x44,
> > +0x4e,
> > +0x52,
> > +0xc,
> > +0x78,
> > +0x56,
> > +0x34,
> > +0x12,
> >  0x10,
> >  0x29,
> >  0x5c,
> > @@ -370,809 +380,13 @@ static unsigned char ssdp_misc_aml[] = {
> >  0x49,
> >  0x4f,
> >  0x4d,
> > -0x58,
> > -0x10,
> > -0x4b,
> > -0x31,
> > -0x5c,
> > -0x2e,
> > -0x5f,
> > -0x53,
> > -0x42,
> > -0x5f,
> > -0x50,
> > -0x43,
> > -0x49,
> > -0x30,
> > -0x5b,
> > -0x82,
> > -0x4d,
> > -0x30,
> > -0x4d,
> > -0x48,
> > -0x50,
> > -0x44,
> > -0x8,
> > -0x5f,
> > -0x48,
> > -0x49,
> > -0x44,
> > -0xd,
> > -0x50,
> > -0x4e,
> > -0x50,
> > -0x30,
> > -0x41,
> > -0x30,
> > -0x36,
> > -0x0,
> > -0x8,
> > -0x5f,
> > -0x55,
> > -0x49,
> > -0x44,
> > -0xd,
> > -0x4d,
> > -0x65,
> > -0x6d,
> > -0x6f,
> > -0x72,
> > -0x79,
> > -0x20,
> > -0x68,
> > -0x6f,
> > -0x74,
> > -0x70,
> > -0x6c,
> > -0x75,
> > -0x67,
> > -0x20,
> > -0x72,
> > -0x65,
> > -0x73,
> > -0x6f,
> > -0x75,
> > -0x72,
> > -0x63,
> > -0x65,
> > -0x73,
> > -0x0,
> > -0x8,
> > -0x4d,
> > -0x44,
> > -0x4e,
> > -0x52,
> > -0xc,
> > -0x78,
> > -0x56,
> > -0x34,
> > -0x12,
> > -0x5b,
> > -0x80,
> > -0x48,
> > -0x50,
> > -0x4d,
> > -0x52,
> > -0x1,
> > -0xb,
> > -0x0,
> > -0xa,
> > -0xa,
> > -0x18,
> > -0x8,
> > -0x5f,
> > -0x43,
> > -0x52,
> > -0x53,
> > -0x11,
> > -0xd,
> > -0xa,
> > -0xa,
> > -0x47,
> > -0x1,
> > -0x0,
> > -0xa,
> > -0x0,
> > -0xa,
> > -0x0,
> > -0x18,
> > -0x79,
> > -0x0,
> > -0x14,
> > -0x13,
> > -0x5f,
> > -0x53,
> > -0x54,
> > -0x41,
> > -0x0,
> > -0xa0,
> > -0x9,
> > -0x93,
> > -0x4d,
> > -0x44,
> > -0x4e,
> > -0x52,
> > -0x0,
> > -0xa4,
> > -0x0,
> > -0xa4,
> > -0xa,
> > -0xb,
> > -0x5b,
> > -0x81,
> > -0x1f,
> > -0x48,
> > -0x50,
> > -0x4d,
> > -0x52,
> > -0x3,
> > -0x4d,
> > -0x52,
> > -0x42,
> > -0x4c,
> > -0x20,
> > -0x4d,
> > -0x52,
> > -0x42,
> > -0x48,
> > -0x20,
> > -0x4d,
> > -0x52,
> > -0x4c,
> > -0x4c,
> > -0x20,
> > -0x4d,
> > -0x52,
> > -0x4c,
> > -0x48,
> > -0x20,
> > -0x4d,
> > -0x50,
> > -0x58,
> > -0x5f,
> > -0x20,
> > -0x5b,
> > -0x81,
> > -0x13,
> > -0x48,
> > -0x50,
> > -0x4d,
> > -0x52,
> > -0x1,
> > -0x0,
> > -0x40,
> > -0xa,
> > -0x4d,
> > -0x45,
> > -0x53,
> > -0x5f,
> > -0x1,
> > -0x4d,
> > -0x49,
> > -0x4e,
> > -0x53,
> > -0x1,
> > -0x5b,
> > -0x1,
> > -0x4d,
> > -0x4c,
> > -0x43,
> > -0x4b,
> > -0x0,
> > -0x5b,
> > -0x81,
> > -0x15,
> > -0x48,
> > -0x50,
> > -0x4d,
> > -0x52,
> > -0x3,
> > -0x4d,
> > -0x53,
> > -0x45,
> > -0x4c,
> > -0x20,
> > -0x4d,
> > -0x4f,
> > -0x45,
> > -0x56,
> > -0x20,
> > -0x4d,
> > -0x4f,
> > -0x53,
> > -0x43,
> > -0x20,
> > -0x14,
> > -0x4a,
> > -0x4,
> > -0x4d,
> > -0x53,
> > -0x43,
> > -0x4e,
> > -0x0,
> > -0xa0,
> > -0x9,
> > -0x93,
> > -0x4d,
> > -0x44,
> > -0x4e,
> > -0x52,
> > -0x0,
> > -0xa4,
> > -0x0,
> > -0x70,
> > -0x0,
> > -0x60,
> > -0x5b,
> > -0x23,
> > -0x4d,
> > -0x4c,
> > -0x43,
> > -0x4b,
> > -0xff,
> > -0xff,
> > -0xa2,
> > -0x25,
> > -0x95,
> > -0x60,
> > -0x4d,
> > -0x44,
> > -0x4e,
> > -0x52,
> > -0x70,
> > -0x60,
> > -0x4d,
> > -0x53,
> > -0x45,
> > -0x4c,
> > -0xa0,
> > -0x13,
> > -0x93,
> > -0x4d,
> > -0x49,
> > -0x4e,
> > -0x53,
> > -0x1,
> > -0x4d,
> > -0x54,
> > -0x46,
> > -0x59,
> > -0x60,
> > -0x1,
> > -0x70,
> > -0x1,
> > -0x4d,
> > -0x49,
> > -0x4e,
> > -0x53,
> > -0x72,
> > -0x60,
> > -0x1,
> > -0x60,
> > -0x5b,
> > -0x27,
> > -0x4d,
> > -0x4c,
> > -0x43,
> > -0x4b,
> > -0xa4,
> > -0x1,
> > -0x14,
> > -0x2d,
> > -0x4d,
> > -0x52,
> > -0x53,
> > -0x54,
> > -0x1,
> > -0x70,
> > -0x0,
> > -0x60,
> > -0x5b,
> > -0x23,
> > -0x4d,
> > -0x4c,
> > -0x43,
> > -0x4b,
> > -0xff,
> > -0xff,
> > -0x70,
> > -0x99,
> > -0x68,
> > -0x0,
> > -0x4d,
> > -0x53,
> > -0x45,
> > -0x4c,
> > -0xa0,
> > -0xb,
> > -0x93,
> > -0x4d,
> > -0x45,
> > -0x53,
> > -0x5f,
> > -0x1,
> > -0x70,
> > -0xa,
> > -0xf,
> > -0x60,
> > -0x5b,
> > -0x27,
> > -0x4d,
> > -0x4c,
> > -0x43,
> > -0x4b,
> > -0xa4,
> > -0x60,
> > -0x14,
> > -0x41,
> > -0x18,
> > -0x4d,
> > -0x43,
> > -0x52,
> > -0x53,
> > -0x9,
> > -0x5b,
> > -0x23,
> > -0x4d,
> > -0x4c,
> > -0x43,
> > -0x4b,
> > -0xff,
> > -0xff,
> > -0x70,
> > -0x99,
> > -0x68,
> > -0x0,
> > -0x4d,
> > -0x53,
> > -0x45,
> > -0x4c,
> > -0x8,
> > -0x4d,
> > -0x52,
> > -0x36,
> > -0x34,
> > -0x11,
> > -0x33,
> > -0xa,
> > -0x30,
> > -0x8a,
> > -0x2b,
> > -0x0,
> > -0x0,
> > -0xc,
> > -0x3,
> > -0x0,
> > -0x0,
> > -0x0,
> > -0x0,
> > -0x0,
> > -0x0,
> > -0x0,
> > -0x0,
> > -0x0,
> > -0x0,
> > -0x0,
> > -0x0,
> > -0x0,
> > -0x0,
> > -0x0,
> > -0x0,
> > -0xfe,
> > -0xff,
> > -0xff,
> > -0xff,
> > -0xff,
> > -0xff,
> > -0xff,
> > -0xff,
> > -0x0,
> > -0x0,
> > -0x0,
> > -0x0,
> > -0x0,
> > -0x0,
> > -0x0,
> > -0x0,
> > -0xff,
> > -0xff,
> > -0xff,
> > -0xff,
> > -0xff,
> > -0xff,
> > -0xff,
> > -0xff,
> > -0x79,
> > -0x0,
> > -0x8a,
> > -0x4d,
> > -0x52,
> > -0x36,
> > -0x34,
> > -0xa,
> > -0xe,
> > -0x4d,
> > -0x49,
> > -0x4e,
> > -0x4c,
> > -0x8a,
> > -0x4d,
> > -0x52,
> > -0x36,
> > -0x34,
> > -0xa,
> > -0x12,
> > -0x4d,
> > -0x49,
> > -0x4e,
> > -0x48,
> > -0x8a,
> > -0x4d,
> > -0x52,
> > -0x36,
> > -0x34,
> > -0xa,
> > -0x26,
> > -0x4c,
> > -0x45,
> > -0x4e,
> > -0x4c,
> > -0x8a,
> > -0x4d,
> > -0x52,
> > -0x36,
> > -0x34,
> > -0xa,
> > -0x2a,
> > -0x4c,
> > -0x45,
> > -0x4e,
> > -0x48,
> > -0x8a,
> > -0x4d,
> > -0x52,
> > -0x36,
> > -0x34,
> > -0xa,
> > -0x16,
> > -0x4d,
> > -0x41,
> > -0x58,
> > -0x4c,
> > -0x8a,
> > -0x4d,
> > -0x52,
> > -0x36,
> > -0x34,
> > -0xa,
> > -0x1a,
> > -0x4d,
> > -0x41,
> > -0x58,
> > -0x48,
> > -0x70,
> > -0x4d,
> > -0x52,
> > -0x42,
> > -0x48,
> > -0x4d,
> > -0x49,
> > -0x4e,
> > -0x48,
> > -0x70,
> > -0x4d,
> > -0x52,
> > -0x42,
> > -0x4c,
> > -0x4d,
> > -0x49,
> > -0x4e,
> > -0x4c,
> > -0x70,
> > -0x4d,
> > -0x52,
> > -0x4c,
> > -0x48,
> > -0x4c,
> > -0x45,
> > -0x4e,
> > -0x48,
> > -0x70,
> > -0x4d,
> > -0x52,
> > -0x4c,
> > -0x4c,
> > -0x4c,
> > -0x45,
> > -0x4e,
> > -0x4c,
> > -0x72,
> > -0x4d,
> > -0x49,
> > -0x4e,
> > -0x4c,
> > -0x4c,
> > -0x45,
> > -0x4e,
> > -0x4c,
> > -0x4d,
> > -0x41,
> > -0x58,
> > -0x4c,
> > -0x72,
> > -0x4d,
> > -0x49,
> > -0x4e,
> > -0x48,
> > -0x4c,
> > -0x45,
> > -0x4e,
> > -0x48,
> > -0x4d,
> > -0x41,
> > -0x58,
> > -0x48,
> > -0xa0,
> > -0x14,
> > -0x95,
> > -0x4d,
> > -0x41,
> > -0x58,
> > -0x4c,
> > -0x4d,
> > -0x49,
> > -0x4e,
> > -0x4c,
> > -0x72,
> > -0x4d,
> > -0x41,
> > -0x58,
> > -0x48,
> > -0x1,
> > -0x4d,
> > -0x41,
> > -0x58,
> > -0x48,
> > -0xa0,
> > -0x11,
> > -0x95,
> > -0x4d,
> > -0x41,
> > -0x58,
> > -0x4c,
> > -0x1,
> > -0x74,
> > -0x4d,
> > -0x41,
> > -0x58,
> > -0x48,
> > -0x1,
> > -0x4d,
> > -0x41,
> > -0x58,
> > -0x48,
> > -0x74,
> > -0x4d,
> > -0x41,
> > -0x58,
> > -0x4c,
> > -0x1,
> > -0x4d,
> > -0x41,
> > -0x58,
> > -0x4c,
> > -0xa0,
> > -0x44,
> > -0x7,
> > -0x93,
> > -0x4d,
> > -0x41,
> > -0x58,
> > -0x48,
> > -0x0,
> > -0x8,
> > -0x4d,
> > -0x52,
> > -0x33,
> > -0x32,
> > -0x11,
> > -0x1f,
> > -0xa,
> > -0x1c,
> > -0x87,
> > -0x17,
> > -0x0,
> > -0x0,
> > -0xc,
> > -0x3,
> > -0x0,
> > -0x0,
> > -0x0,
> > -0x0,
> > -0x0,
> > -0x0,
> > -0x0,
> > -0x0,
> > -0xfe,
> > -0xff,
> > -0xff,
> > -0xff,
> > -0x0,
> > -0x0,
> > -0x0,
> > -0x0,
> > -0xff,
> > -0xff,
> > -0xff,
> > -0xff,
> > -0x79,
> > -0x0,
> > -0x8a,
> > -0x4d,
> > -0x52,
> > -0x33,
> > -0x32,
> > -0xa,
> > -0xa,
> > -0x4d,
> > -0x49,
> > -0x4e,
> > -0x5f,
> > -0x8a,
> > -0x4d,
> > -0x52,
> > -0x33,
> > -0x32,
> > -0xa,
> > -0xe,
> > -0x4d,
> > -0x41,
> > -0x58,
> > -0x5f,
> > -0x8a,
> > -0x4d,
> > -0x52,
> > -0x33,
> > -0x32,
> > -0xa,
> > -0x16,
> > -0x4c,
> > -0x45,
> > -0x4e,
> > -0x5f,
> > -0x70,
> > -0x4d,
> > -0x49,
> > -0x4e,
> > -0x4c,
> > -0x4d,
> > -0x49,
> > -0x4e,
> > -0x5f,
> > -0x70,
> > -0x4d,
> > -0x41,
> > -0x58,
> > -0x4c,
> > -0x4d,
> > -0x41,
> > -0x58,
> > -0x5f,
> > -0x70,
> > -0x4c,
> > -0x45,
> > -0x4e,
> > -0x4c,
> > -0x4c,
> > -0x45,
> > -0x4e,
> > -0x5f,
> > -0x5b,
> > -0x27,
> > -0x4d,
> > -0x4c,
> > -0x43,
> > -0x4b,
> > -0xa4,
> > -0x4d,
> > -0x52,
> > -0x33,
> > -0x32,
> > -0x5b,
> > -0x27,
> > -0x4d,
> > -0x4c,
> > -0x43,
> > -0x4b,
> > -0xa4,
> > -0x4d,
> > -0x52,
> > -0x36,
> > -0x34,
> > -0x14,
> > -0x24,
> > -0x4d,
> > -0x50,
> > -0x58,
> > -0x4d,
> > -0x1,
> > -0x5b,
> > -0x23,
> > -0x4d,
> > -0x4c,
> > -0x43,
> > -0x4b,
> > -0xff,
> > -0xff,
> > -0x70,
> > -0x99,
> > -0x68,
> > -0x0,
> > -0x4d,
> > -0x53,
> > -0x45,
> > -0x4c,
> > -0x70,
> > -0x4d,
> > -0x50,
> > -0x58,
> > -0x5f,
> > -0x60,
> > -0x5b,
> > -0x27,
> > -0x4d,
> > -0x4c,
> > -0x43,
> > -0x4b,
> > -0xa4,
> > -0x60,
> > -0x14,
> > -0x28,
> > -0x4d,
> > -0x4f,
> > -0x53,
> > -0x54,
> > -0x4,
> > -0x5b,
> > -0x23,
> > -0x4d,
> > -0x4c,
> > -0x43,
> > -0x4b,
> > -0xff,
> > -0xff,
> > -0x70,
> > -0x99,
> > -0x68,
> > -0x0,
> > -0x4d,
> > -0x53,
> > -0x45,
> > -0x4c,
> > -0x70,
> > -0x69,
> > -0x4d,
> > -0x4f,
> > -0x45,
> > -0x56,
> > -0x70,
> > -0x6a,
> > -0x4d,
> > -0x4f,
> > -0x53,
> > -0x43,
> > -0x5b,
> > -0x27,
> > -0x4d,
> > -0x4c,
> > -0x43,
> > -0x4b
> > +0x58
> >  };
> >  static unsigned char ssdt_isa_pest[] = {
> > -0xd0
> > +0xda
> >  };
> >  static unsigned char acpi_s4_name[] = {
> > -0x88
> > +0x92
> >  };
> >  static unsigned char acpi_pci64_start[] = {
> >  0x4d
> > diff --git a/tests/acpi-test-data/pc/DSDT
> > b/tests/acpi-test-data/pc/DSDT index
> > d37ec34454e6f3db5e91b777f94e03be67a5f583..ee9cc6781cea3a9515b9a176eea3459f8e4d8655
> > 100644 GIT binary patch delta 814
> > zcmZ8fO>fgc5ZzTP;cjS9h#MkQsYZMX1TsyPb5lFuz;3W?Qx*BJmfDDdKv}u%Atw_q
> > zpkA#WxJ4*`fIq`u;f9%6$0h1o8ohlp@9mCv{%m~TWNzq2Mx79P^ozAww)^~<4ELn(
> > z4D9%;V++rB4e1Tsb${sFJ-bT``4)C!^m&|4tmE;i`gHc*N=GN-v-EIuLgFu;F9KR4
> > zjI|Bv1Yu*Hv6qxE_}UX<Hf0#~$ZRba?l2&8GH11Tx`mn*5$y5Ig6Kiu90MT#Kw9y%
> > zsa?q~6a7$9F&Kt4rh+@KNj%*s)nOkbZ~FTXLdP;+t%}eYE}f)E65mBhQT)7rk>L3%
> > z5ulnib8RT17w@u!Ds7)8G>IQ#`J9?hMG!`G$w2)$CR$p{^@S9>QB@~quPvbOwd$~{
> > z)(}B=r_o{d`4d8}uaGP2Z-FZ-ii+2J2orLSN>+zU@)F(z=#}sR?^o<&fD5)IdIyWz
> > z+W<X<e-%XtI2r-q9tsd}G)a-p5TO`%I*;<1d4U`jq`0S=Y-p06UNVR{=J?FLmLpA|
> > z>CSdzi*0_pwcIo|i+y5`y1&jgV_+{c=n8Nh#Il4fxRF$NH0Bk$V^ZNoF|~LklwHE^
> > pj(HCTN6@Qppm3c2ztkfbm1uRjsD-bpKHwawk2pxBXMTtM{s%^7?%e<Y
> > 
> > delta 23
> > ecmeB>`7X-k66_N4or{5iv0)>Z1lMF^-m3sr#Rl;J
> > 
> > diff --git a/tests/acpi-test-data/pc/SSDT
> > b/tests/acpi-test-data/pc/SSDT index
> > eb2d8b698ce6a3a910a05244a3b6cf80bf818fb9..558e4c85b031ec081045aec6cc382a680e9c6009
> > 100644 GIT binary patch delta 38
> > ucmew<{#=kNIM^lRIR^s+Bi}?WX-1!kYJqGVzAk=2JQIsQY_4aiVg~@)a|=)a
> > 
> > delta 833
> > zcmZ8fO>fgc5ZzTP)!np3CZ>%5sYXCSR3Ot-Ig{7{hwcXBHK@pyYzajaRFsw59wH7V
> > zT#(8sihAG{q5K1W6c_$LFN7I?l!&#oe*0$M+nt^HrC)3?DV^Y=LJ0jfVmD}OwDoc{
> > z{GIMSK6n(#R^-_oEBqoX;d+i1xgBTK>v~qxY7i}Y1uN0}*iQ!LVgE!OoxU@Z-f{ml
> > zdD}ZCnsB=Q3V{)Rc0J+K3Sq3KMYb>XRmPrC!r-e7h*6DX&?J-PF)GNEOj#vNhnpx`
> > z5PplBFu5>sL>!Q}ADQ8>nz@oEOtfW0MW-uiNCmg|NI1Nfi)9-mFWRqRlD26)Ulh{r
> > z&Yh%49NtFBZ1&^sd5q_)Sb%DhR>zs62%f%)smkn=n8x8f+&-noL*dJS&Kaohha{6$
> > z#@U4wyHf6sjb=?i-pl1-<z7wrja|LYtg~%GRu=HFijijjKeK$4Y_XgT$Qdfx8r+fR
> > z@G3wzhg-Z|vJU_j?7C>~7kjS*bQQiTiV$!#0>E7q07yAUmjrnPD8@w=NBP7!M-Jl&
> > zu4zW<8A(qr8AKdoeBvyPk%q?b>pS`;yZLovK55Jq^TZqnB!yJ!JB)#Ul*2U;7jPYJ
> > z6e&C!!wTIosPLi~DvE>-m$0#G+=0ds^#2+tY^Q&fx(}@qEQYs=wkRv5-eVuB57<b#
> > K=g%YhY3VN!sP#$!
> > 
> > diff --git a/tests/acpi-test-data/q35/DSDT
> > b/tests/acpi-test-data/q35/DSDT index
> > 2d2bc4adaf54666fe7864e7f39203411b7c308f7..ef0c75f4236de3e6f727e21991533f2bf8279dee
> > 100644 GIT binary patch delta 793
> > zcmZ8f&1(}u6rZ65w-Z~5S!<L)7U~y*614<+vdM0Aqcd^YS*0?<EJ(15l408(a$4g>
> > z@VfNiEolA$|0u5>d+=a<Z$D~r7KY#Z`2F5{JMZVt$wTHzFFI)xLVy2YJFRs0-d!#G
> > zI&g;_^~voBKkzK=554tZ6m)u>F0u4;u*CSoB$+z<lSA|V=#7(%4<<*+>+u0mAN@dt
> > zv_=?fTG|a|eVwt#lrZ?3Q(`x?jCy3gmI-eZk_B0?nwqtdvm(MiPaU{@xH!iPP_U;R
> > zHEZOmWS5D7)Km;dk}4{=`;@5JrGhO7KzTNJ0he?g`^l=1?&wS<Lt?dsl;!f<_2U@p
> > zn^*vA-pF!65j}eODyAlvPhuLYo0z_!_8k$*h@KHJU-wB)tz~&bhFz$#W4qTBF!x$j
> > ztje`S_KRLg37kL6;vmLTn#(EqBEs%A+kk#}0WSjd3wVPMD(`K8rFT>G_R8F=0DXf$
> > z5J?C)3IX6g5)h;uRTA_gKr$M69O-lW7=0K|(5AVwo;&H`sRt3q7@vFRGISG5gb(i5
> > z+pP8ZG9l+ziph#us~KUw6tfrueGO9q+yHV3H=!eKur!7Zs$<Y#qZlgR18JwQyKP^C
> > o9TD{Z-)(Sn{yoYq*otUXZ8^mTRF7ib;>wtJxHE-j)^C0P3owxI%m4rY
> > 
> > delta 23
> > ecmexn|J0JpCD<k8sSE=Hqv%F1OPR?b@{0gro(Eh2
> > 
> > diff --git a/tests/acpi-test-data/q35/SSDT
> > b/tests/acpi-test-data/q35/SSDT index
> > 778b79bf428b5d7602b7b80c9434e38c79718bb2..4e45510181c4038505ae1815b76799a2cd0e8808
> > 100644 GIT binary patch delta 37
> > tcmX@awSk2zIM^k`fQf;D@!~`-X-1!kYJqGVzAk=2JQIsQOs;1+3;?*r3h)2`
> > 
> > literal 1346
> > zcmZWp-%r#)5Z;vo%iaNZM@3>xxWwNWwZ|d)NUyD4q1#)#1u-SrCWd$z4b1@$ya^<l
> > z;Nyh{-%fM?hyG=pGwmH9_M!deoBd{Ic4sQ39o9z)p?<w-HDsl}AuI_TC4?ZxZ?QhQ
> > zNi<<dRRHS`AV(GY{oiMrsIDspuBud}Jk!9NK0r8E3GW}G_y{5@SySb)9ECjqFRHSZ
> > zV}wBju%4p_gB6zxo6km+tSe!;hAT}K9dRa{^-xm{*PeLe@HN9Qs*r^v!#p9;7vVGm
> > ziWZFy^8-VKnm(&!Xp#gyad)f}lOFk*>#-?)GO$I64iUz^STDQ{L`ahs+M2QgS(;$%
> > zHJ${a^niRvid}P?+|OVR;08o@eK(7au5=r86j!U8Plx$K?gnoNJIh`8!Z3{`sCNx2
> > z;ai_~+6R@^&R+6q|3js{wY#(5e!sO#G;aF=9zE375ImrH!r1KP%<$M|4~RaUR@fcy
> > zpaRP4v3ztmhnf){)V&J48u0QEd4R-*szis=X;8AvxFZ$it}kgsxo54C=<r4+mJUdo
> > z&N{rLRnb>+Tv|T4*eD@!bO$B<{;zwdF>as498}%uP8yJhuinKpNu#%88b=Rsb&u*#
> > zcmNl5NuT^^kyM%Qr1>OlYPdSq%~=kIKR(=RxK`uA(qgH`jFZQN6h`o<E<b1e>=|+c
> > zvwuKNP{<}BMK6P8fQ<~^_naX+4{*TFaC2j@_7=cKf@g{%1Re$g;5ATyz{4PIq!FMN
> > zjns|mu6~Lf`rByJlq{tr-8*LxdFb=H_Vo_Z&=f&!p)|*Cf4h0PWGofS#1hl;Y72}(
> > zcm*{9oCNIv&Okyc!JW~aU~qIMm?ydhH-xftxU{I>g{I;3>IEd&N*CAk5ZWZn{kLcv
> > zTPXR6J(Ptk9v29XMs!>swS-}07o@qi!rw|d-=-y8nC}-vpHkcmNzW48#06mEID;+2
> > zf$gjq)Dq4Lnk~KTL(g67<~uD$zGC!k%@R$&Y{L{6S916}iH@eEVJJ<R_F%w{=B4rS
> > YoS;O9e^J$jQ9`gV1ho{53Cj=3Um|f`5C8xG
> > 

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Qemu-devel] [PATCH v2] target-i386: move generic memory hotplug methods to DSDTs
  2014-10-15 13:19 ` Igor Mammedov
  2014-10-15 13:34   ` Michael S. Tsirkin
@ 2014-10-16  7:43   ` Paolo Bonzini
  1 sibling, 0 replies; 7+ messages in thread
From: Paolo Bonzini @ 2014-10-16  7:43 UTC (permalink / raw)
  To: Igor Mammedov; +Cc: qemu-devel, mst

Il 15/10/2014 15:19, Igor Mammedov ha scritto:
> however I'm not sure that SSDT byte-for-byte compatible will make
> things better.
> Since SSDT includes snippets of AML compiled by IASL, hex-templates
> could be different depending on IASL version.

SSDT is simple enough that there shouldn't be differences.  If this were
a problem, we could unconditionally use .hex.generated files or move the
generation entirely to C, similar to what we do for bridges and what
SeaBIOS used to do.

Paolo

> Ultimately
> that would make us to keep versioned by machine type binary templates
> so that we could guaranty byte-to-byte identity.
> 
> Perhaps we should reconsider and think one more time about
> http://lists.gnu.org/archive/html/qemu-stable/2014-07/msg00205.html
> 
> which solves migration size issue and doesn't tie us to maintanance
> nightmare with versioned tables. I'd preffer to keep tables
> un-versioned as long as possible.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Qemu-devel] [PATCH v2] target-i386: move generic memory hotplug methods to DSDTs
  2014-10-15  7:45 [Qemu-devel] [PATCH v2] target-i386: move generic memory hotplug methods to DSDTs Paolo Bonzini
  2014-10-15 13:19 ` Igor Mammedov
@ 2014-11-11 17:13 ` Paolo Bonzini
  2014-11-20  6:05   ` Paolo Bonzini
  1 sibling, 1 reply; 7+ messages in thread
From: Paolo Bonzini @ 2014-11-11 17:13 UTC (permalink / raw)
  To: qemu-devel; +Cc: imammedo, mst

On 15/10/2014 09:45, Paolo Bonzini wrote:
> This makes it simpler to keep the SSDT byte-for-byte identical for a
> given machine type, which is a goal we want to have for 2.2 and newer
> types.
> 
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
>         v1->v2: do not define the same Device twice (Igor)
> 
>  hw/i386/acpi-dsdt-mem-hotplug.dsl   | 176 ++++++++
>  hw/i386/acpi-dsdt.dsl               |   3 +-
>  hw/i386/acpi-dsdt.hex.generated     | 795 +++++++++++++++++++++++++++++++++-
>  hw/i386/q35-acpi-dsdt.dsl           |   3 +-
>  hw/i386/q35-acpi-dsdt.hex.generated | 797 +++++++++++++++++++++++++++++++++-
>  hw/i386/ssdt-mem.hex.generated      |   8 +-
>  hw/i386/ssdt-misc.dsl               | 165 +------
>  hw/i386/ssdt-misc.hex.generated     | 834 ++----------------------------------
>  tests/acpi-test-data/pc/DSDT        | Bin 2807 -> 3592 bytes
>  tests/acpi-test-data/pc/SSDT        | Bin 3065 -> 2279 bytes
>  tests/acpi-test-data/q35/DSDT       | Bin 7397 -> 8182 bytes
>  tests/acpi-test-data/q35/SSDT       | Bin 1346 -> 560 bytes
>  12 files changed, 1789 insertions(+), 992 deletions(-)
>  create mode 100644 hw/i386/acpi-dsdt-mem-hotplug.dsl
> 
> diff --git a/hw/i386/acpi-dsdt-mem-hotplug.dsl b/hw/i386/acpi-dsdt-mem-hotplug.dsl
> new file mode 100644
> index 0000000..2a36c47
> --- /dev/null
> +++ b/hw/i386/acpi-dsdt-mem-hotplug.dsl
> @@ -0,0 +1,176 @@
> +/*
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation; either version 2 of the License, or
> + * (at your option) any later version.
> +
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> +
> + * You should have received a copy of the GNU General Public License along
> + * with this program; if not, see <http://www.gnu.org/licenses/>.
> + */
> +
> +    External(MEMORY_SLOT_NOTIFY_METHOD, MethodObj)
> +
> +    Scope(\_SB.PCI0) {
> +        Device(MEMORY_HOTPLUG_DEVICE) {
> +            Name(_HID, "PNP0A06")
> +            Name(_UID, "Memory hotplug resources")
> +            External(MEMORY_SLOTS_NUMBER, IntObj)
> +
> +            /* Memory hotplug IO registers */
> +            OperationRegion(MEMORY_HOTPLUG_IO_REGION, SystemIO,
> +                            ACPI_MEMORY_HOTPLUG_BASE,
> +                            ACPI_MEMORY_HOTPLUG_IO_LEN)
> +
> +            Name(_CRS, ResourceTemplate() {
> +                IO(Decode16, ACPI_MEMORY_HOTPLUG_BASE, ACPI_MEMORY_HOTPLUG_BASE,
> +                   0, ACPI_MEMORY_HOTPLUG_IO_LEN, IO)
> +            })
> +
> +            Method(_STA, 0) {
> +                If (LEqual(MEMORY_SLOTS_NUMBER, Zero)) {
> +                    Return(0x0)
> +                }
> +                /* present, functioning, decoding, not shown in UI */
> +                Return(0xB)
> +            }
> +
> +            Field(MEMORY_HOTPLUG_IO_REGION, DWordAcc, NoLock, Preserve) {
> +                MEMORY_SLOT_ADDR_LOW, 32,  // read only
> +                MEMORY_SLOT_ADDR_HIGH, 32, // read only
> +                MEMORY_SLOT_SIZE_LOW, 32,  // read only
> +                MEMORY_SLOT_SIZE_HIGH, 32, // read only
> +                MEMORY_SLOT_PROXIMITY, 32, // read only
> +            }
> +            Field(MEMORY_HOTPLUG_IO_REGION, ByteAcc, NoLock, Preserve) {
> +                Offset(20),
> +                MEMORY_SLOT_ENABLED,  1, // 1 if enabled, read only
> +                MEMORY_SLOT_INSERT_EVENT, 1, // (read) 1 if has a insert event. (write) 1 to clear event
> +            }
> +
> +            Mutex (MEMORY_SLOT_LOCK, 0)
> +            Field (MEMORY_HOTPLUG_IO_REGION, DWordAcc, NoLock, Preserve) {
> +                MEMORY_SLOT_SLECTOR, 32,  // DIMM selector, write only
> +                MEMORY_SLOT_OST_EVENT, 32,  // _OST event code, write only
> +                MEMORY_SLOT_OST_STATUS, 32,  // _OST status code, write only
> +            }
> +
> +            Method(MEMORY_SLOT_SCAN_METHOD, 0) {
> +                If (LEqual(MEMORY_SLOTS_NUMBER, Zero)) {
> +                     Return(Zero)
> +                }
> +
> +                Store(Zero, Local0) // Mem devs iterrator
> +                Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
> +                while (LLess(Local0, MEMORY_SLOTS_NUMBER)) {
> +                    Store(Local0, MEMORY_SLOT_SLECTOR) // select Local0 DIMM
> +                    If (LEqual(MEMORY_SLOT_INSERT_EVENT, One)) { // Memory device needs check
> +                        MEMORY_SLOT_NOTIFY_METHOD(Local0, 1)
> +                        Store(1, MEMORY_SLOT_INSERT_EVENT)
> +                    }
> +                    // TODO: handle memory eject request
> +                    Add(Local0, One, Local0) // goto next DIMM
> +                }
> +                Release(MEMORY_SLOT_LOCK)
> +                Return(One)
> +            }
> +
> +            Method(MEMORY_SLOT_STATUS_METHOD, 1) {
> +                Store(Zero, Local0)
> +
> +                Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
> +                Store(ToInteger(Arg0), MEMORY_SLOT_SLECTOR) // select DIMM
> +
> +                If (LEqual(MEMORY_SLOT_ENABLED, One)) {
> +                    Store(0xF, Local0)
> +                }
> +
> +                Release(MEMORY_SLOT_LOCK)
> +                Return(Local0)
> +            }
> +
> +            Method(MEMORY_SLOT_CRS_METHOD, 1, Serialized) {
> +                Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
> +                Store(ToInteger(Arg0), MEMORY_SLOT_SLECTOR) // select DIMM
> +
> +                Name(MR64, ResourceTemplate() {
> +                    QWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed,
> +                    Cacheable, ReadWrite,
> +                    0x0000000000000000,        // Address Space Granularity
> +                    0x0000000000000000,        // Address Range Minimum
> +                    0xFFFFFFFFFFFFFFFE,        // Address Range Maximum
> +                    0x0000000000000000,        // Address Translation Offset
> +                    0xFFFFFFFFFFFFFFFF,        // Address Length
> +                    ,, MW64, AddressRangeMemory, TypeStatic)
> +                })
> +
> +                CreateDWordField(MR64, 14, MINL)
> +                CreateDWordField(MR64, 18, MINH)
> +                CreateDWordField(MR64, 38, LENL)
> +                CreateDWordField(MR64, 42, LENH)
> +                CreateDWordField(MR64, 22, MAXL)
> +                CreateDWordField(MR64, 26, MAXH)
> +
> +                Store(MEMORY_SLOT_ADDR_HIGH, MINH)
> +                Store(MEMORY_SLOT_ADDR_LOW, MINL)
> +                Store(MEMORY_SLOT_SIZE_HIGH, LENH)
> +                Store(MEMORY_SLOT_SIZE_LOW, LENL)
> +
> +                // 64-bit math: MAX = MIN + LEN - 1
> +                Add(MINL, LENL, MAXL)
> +                Add(MINH, LENH, MAXH)
> +                If (LLess(MAXL, MINL)) {
> +                    Add(MAXH, One, MAXH)
> +                }
> +                If (LLess(MAXL, One)) {
> +                    Subtract(MAXH, One, MAXH)
> +                }
> +                Subtract(MAXL, One, MAXL)
> +
> +                If (LEqual(MAXH, Zero)){
> +                    Name(MR32, ResourceTemplate() {
> +                        DWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed,
> +                        Cacheable, ReadWrite,
> +                        0x00000000,        // Address Space Granularity
> +                        0x00000000,        // Address Range Minimum
> +                        0xFFFFFFFE,        // Address Range Maximum
> +                        0x00000000,        // Address Translation Offset
> +                        0xFFFFFFFF,        // Address Length
> +                        ,, MW32, AddressRangeMemory, TypeStatic)
> +                    })
> +                    CreateDWordField(MR32, MW32._MIN, MIN)
> +                    CreateDWordField(MR32, MW32._MAX, MAX)
> +                    CreateDWordField(MR32, MW32._LEN, LEN)
> +                    Store(MINL, MIN)
> +                    Store(MAXL, MAX)
> +                    Store(LENL, LEN)
> +
> +                    Release(MEMORY_SLOT_LOCK)
> +                    Return(MR32)
> +                }
> +
> +                Release(MEMORY_SLOT_LOCK)
> +                Return(MR64)
> +            }
> +
> +            Method(MEMORY_SLOT_PROXIMITY_METHOD, 1) {
> +                Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
> +                Store(ToInteger(Arg0), MEMORY_SLOT_SLECTOR) // select DIMM
> +                Store(MEMORY_SLOT_PROXIMITY, Local0)
> +                Release(MEMORY_SLOT_LOCK)
> +                Return(Local0)
> +            }
> +
> +            Method(MEMORY_SLOT_OST_METHOD, 4) {
> +                Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
> +                Store(ToInteger(Arg0), MEMORY_SLOT_SLECTOR) // select DIMM
> +                Store(Arg1, MEMORY_SLOT_OST_EVENT)
> +                Store(Arg2, MEMORY_SLOT_OST_STATUS)
> +                Release(MEMORY_SLOT_LOCK)
> +            }
> +        } // Device()
> +    } // Scope()
> diff --git a/hw/i386/acpi-dsdt.dsl b/hw/i386/acpi-dsdt.dsl
> index 559f4b6..a611e07 100644
> --- a/hw/i386/acpi-dsdt.dsl
> +++ b/hw/i386/acpi-dsdt.dsl
> @@ -297,13 +297,12 @@ DefinitionBlock (
>  #include "hw/acpi/pc-hotplug.h"
>  #define CPU_STATUS_BASE PIIX4_CPU_HOTPLUG_IO_BASE
>  #include "acpi-dsdt-cpu-hotplug.dsl"
> +#include "acpi-dsdt-mem-hotplug.dsl"
>  
>  
>  /****************************************************************
>   * General purpose events
>   ****************************************************************/
> -    External(\_SB.PCI0.MEMORY_HOTPLUG_DEVICE.MEMORY_SLOT_SCAN_METHOD, MethodObj)
> -
>      Scope(\_GPE) {
>          Name(_HID, "ACPI0006")
>  
> diff --git a/hw/i386/acpi-dsdt.hex.generated b/hw/i386/acpi-dsdt.hex.generated
> index a21bf41..875570e 100644
> --- a/hw/i386/acpi-dsdt.hex.generated
> +++ b/hw/i386/acpi-dsdt.hex.generated
> @@ -3,12 +3,12 @@ static unsigned char AcpiDsdtAmlCode[] = {
>  0x53,
>  0x44,
>  0x54,
> -0xf7,
> -0xa,
> +0x8,
> +0xe,
>  0x0,
>  0x0,
>  0x1,
> -0x1f,
> +0xfc,
>  0x42,
>  0x58,
>  0x50,
> @@ -32,8 +32,8 @@ static unsigned char AcpiDsdtAmlCode[] = {
>  0x54,
>  0x4c,
>  0x28,
> -0x5,
> -0x10,
> +0x8,
> +0x14,
>  0x20,
>  0x10,
>  0x49,
> @@ -2593,6 +2593,791 @@ static unsigned char AcpiDsdtAmlCode[] = {
>  0xa,
>  0xb,
>  0x10,
> +0x40,
> +0x31,
> +0x2e,
> +0x5f,
> +0x53,
> +0x42,
> +0x5f,
> +0x50,
> +0x43,
> +0x49,
> +0x30,
> +0x5b,
> +0x82,
> +0x43,
> +0x30,
> +0x4d,
> +0x48,
> +0x50,
> +0x44,
> +0x8,
> +0x5f,
> +0x48,
> +0x49,
> +0x44,
> +0xd,
> +0x50,
> +0x4e,
> +0x50,
> +0x30,
> +0x41,
> +0x30,
> +0x36,
> +0x0,
> +0x8,
> +0x5f,
> +0x55,
> +0x49,
> +0x44,
> +0xd,
> +0x4d,
> +0x65,
> +0x6d,
> +0x6f,
> +0x72,
> +0x79,
> +0x20,
> +0x68,
> +0x6f,
> +0x74,
> +0x70,
> +0x6c,
> +0x75,
> +0x67,
> +0x20,
> +0x72,
> +0x65,
> +0x73,
> +0x6f,
> +0x75,
> +0x72,
> +0x63,
> +0x65,
> +0x73,
> +0x0,
> +0x5b,
> +0x80,
> +0x48,
> +0x50,
> +0x4d,
> +0x52,
> +0x1,
> +0xb,
> +0x0,
> +0xa,
> +0xa,
> +0x18,
> +0x8,
> +0x5f,
> +0x43,
> +0x52,
> +0x53,
> +0x11,
> +0xd,
> +0xa,
> +0xa,
> +0x47,
> +0x1,
> +0x0,
> +0xa,
> +0x0,
> +0xa,
> +0x0,
> +0x18,
> +0x79,
> +0x0,
> +0x14,
> +0x13,
> +0x5f,
> +0x53,
> +0x54,
> +0x41,
> +0x0,
> +0xa0,
> +0x9,
> +0x93,
> +0x4d,
> +0x44,
> +0x4e,
> +0x52,
> +0x0,
> +0xa4,
> +0x0,
> +0xa4,
> +0xa,
> +0xb,
> +0x5b,
> +0x81,
> +0x1f,
> +0x48,
> +0x50,
> +0x4d,
> +0x52,
> +0x3,
> +0x4d,
> +0x52,
> +0x42,
> +0x4c,
> +0x20,
> +0x4d,
> +0x52,
> +0x42,
> +0x48,
> +0x20,
> +0x4d,
> +0x52,
> +0x4c,
> +0x4c,
> +0x20,
> +0x4d,
> +0x52,
> +0x4c,
> +0x48,
> +0x20,
> +0x4d,
> +0x50,
> +0x58,
> +0x5f,
> +0x20,
> +0x5b,
> +0x81,
> +0x13,
> +0x48,
> +0x50,
> +0x4d,
> +0x52,
> +0x1,
> +0x0,
> +0x40,
> +0xa,
> +0x4d,
> +0x45,
> +0x53,
> +0x5f,
> +0x1,
> +0x4d,
> +0x49,
> +0x4e,
> +0x53,
> +0x1,
> +0x5b,
> +0x1,
> +0x4d,
> +0x4c,
> +0x43,
> +0x4b,
> +0x0,
> +0x5b,
> +0x81,
> +0x15,
> +0x48,
> +0x50,
> +0x4d,
> +0x52,
> +0x3,
> +0x4d,
> +0x53,
> +0x45,
> +0x4c,
> +0x20,
> +0x4d,
> +0x4f,
> +0x45,
> +0x56,
> +0x20,
> +0x4d,
> +0x4f,
> +0x53,
> +0x43,
> +0x20,
> +0x14,
> +0x4a,
> +0x4,
> +0x4d,
> +0x53,
> +0x43,
> +0x4e,
> +0x0,
> +0xa0,
> +0x9,
> +0x93,
> +0x4d,
> +0x44,
> +0x4e,
> +0x52,
> +0x0,
> +0xa4,
> +0x0,
> +0x70,
> +0x0,
> +0x60,
> +0x5b,
> +0x23,
> +0x4d,
> +0x4c,
> +0x43,
> +0x4b,
> +0xff,
> +0xff,
> +0xa2,
> +0x25,
> +0x95,
> +0x60,
> +0x4d,
> +0x44,
> +0x4e,
> +0x52,
> +0x70,
> +0x60,
> +0x4d,
> +0x53,
> +0x45,
> +0x4c,
> +0xa0,
> +0x13,
> +0x93,
> +0x4d,
> +0x49,
> +0x4e,
> +0x53,
> +0x1,
> +0x4d,
> +0x54,
> +0x46,
> +0x59,
> +0x60,
> +0x1,
> +0x70,
> +0x1,
> +0x4d,
> +0x49,
> +0x4e,
> +0x53,
> +0x72,
> +0x60,
> +0x1,
> +0x60,
> +0x5b,
> +0x27,
> +0x4d,
> +0x4c,
> +0x43,
> +0x4b,
> +0xa4,
> +0x1,
> +0x14,
> +0x2d,
> +0x4d,
> +0x52,
> +0x53,
> +0x54,
> +0x1,
> +0x70,
> +0x0,
> +0x60,
> +0x5b,
> +0x23,
> +0x4d,
> +0x4c,
> +0x43,
> +0x4b,
> +0xff,
> +0xff,
> +0x70,
> +0x99,
> +0x68,
> +0x0,
> +0x4d,
> +0x53,
> +0x45,
> +0x4c,
> +0xa0,
> +0xb,
> +0x93,
> +0x4d,
> +0x45,
> +0x53,
> +0x5f,
> +0x1,
> +0x70,
> +0xa,
> +0xf,
> +0x60,
> +0x5b,
> +0x27,
> +0x4d,
> +0x4c,
> +0x43,
> +0x4b,
> +0xa4,
> +0x60,
> +0x14,
> +0x41,
> +0x18,
> +0x4d,
> +0x43,
> +0x52,
> +0x53,
> +0x9,
> +0x5b,
> +0x23,
> +0x4d,
> +0x4c,
> +0x43,
> +0x4b,
> +0xff,
> +0xff,
> +0x70,
> +0x99,
> +0x68,
> +0x0,
> +0x4d,
> +0x53,
> +0x45,
> +0x4c,
> +0x8,
> +0x4d,
> +0x52,
> +0x36,
> +0x34,
> +0x11,
> +0x33,
> +0xa,
> +0x30,
> +0x8a,
> +0x2b,
> +0x0,
> +0x0,
> +0xc,
> +0x3,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0xfe,
> +0xff,
> +0xff,
> +0xff,
> +0xff,
> +0xff,
> +0xff,
> +0xff,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0xff,
> +0xff,
> +0xff,
> +0xff,
> +0xff,
> +0xff,
> +0xff,
> +0xff,
> +0x79,
> +0x0,
> +0x8a,
> +0x4d,
> +0x52,
> +0x36,
> +0x34,
> +0xa,
> +0xe,
> +0x4d,
> +0x49,
> +0x4e,
> +0x4c,
> +0x8a,
> +0x4d,
> +0x52,
> +0x36,
> +0x34,
> +0xa,
> +0x12,
> +0x4d,
> +0x49,
> +0x4e,
> +0x48,
> +0x8a,
> +0x4d,
> +0x52,
> +0x36,
> +0x34,
> +0xa,
> +0x26,
> +0x4c,
> +0x45,
> +0x4e,
> +0x4c,
> +0x8a,
> +0x4d,
> +0x52,
> +0x36,
> +0x34,
> +0xa,
> +0x2a,
> +0x4c,
> +0x45,
> +0x4e,
> +0x48,
> +0x8a,
> +0x4d,
> +0x52,
> +0x36,
> +0x34,
> +0xa,
> +0x16,
> +0x4d,
> +0x41,
> +0x58,
> +0x4c,
> +0x8a,
> +0x4d,
> +0x52,
> +0x36,
> +0x34,
> +0xa,
> +0x1a,
> +0x4d,
> +0x41,
> +0x58,
> +0x48,
> +0x70,
> +0x4d,
> +0x52,
> +0x42,
> +0x48,
> +0x4d,
> +0x49,
> +0x4e,
> +0x48,
> +0x70,
> +0x4d,
> +0x52,
> +0x42,
> +0x4c,
> +0x4d,
> +0x49,
> +0x4e,
> +0x4c,
> +0x70,
> +0x4d,
> +0x52,
> +0x4c,
> +0x48,
> +0x4c,
> +0x45,
> +0x4e,
> +0x48,
> +0x70,
> +0x4d,
> +0x52,
> +0x4c,
> +0x4c,
> +0x4c,
> +0x45,
> +0x4e,
> +0x4c,
> +0x72,
> +0x4d,
> +0x49,
> +0x4e,
> +0x4c,
> +0x4c,
> +0x45,
> +0x4e,
> +0x4c,
> +0x4d,
> +0x41,
> +0x58,
> +0x4c,
> +0x72,
> +0x4d,
> +0x49,
> +0x4e,
> +0x48,
> +0x4c,
> +0x45,
> +0x4e,
> +0x48,
> +0x4d,
> +0x41,
> +0x58,
> +0x48,
> +0xa0,
> +0x14,
> +0x95,
> +0x4d,
> +0x41,
> +0x58,
> +0x4c,
> +0x4d,
> +0x49,
> +0x4e,
> +0x4c,
> +0x72,
> +0x4d,
> +0x41,
> +0x58,
> +0x48,
> +0x1,
> +0x4d,
> +0x41,
> +0x58,
> +0x48,
> +0xa0,
> +0x11,
> +0x95,
> +0x4d,
> +0x41,
> +0x58,
> +0x4c,
> +0x1,
> +0x74,
> +0x4d,
> +0x41,
> +0x58,
> +0x48,
> +0x1,
> +0x4d,
> +0x41,
> +0x58,
> +0x48,
> +0x74,
> +0x4d,
> +0x41,
> +0x58,
> +0x4c,
> +0x1,
> +0x4d,
> +0x41,
> +0x58,
> +0x4c,
> +0xa0,
> +0x44,
> +0x7,
> +0x93,
> +0x4d,
> +0x41,
> +0x58,
> +0x48,
> +0x0,
> +0x8,
> +0x4d,
> +0x52,
> +0x33,
> +0x32,
> +0x11,
> +0x1f,
> +0xa,
> +0x1c,
> +0x87,
> +0x17,
> +0x0,
> +0x0,
> +0xc,
> +0x3,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0xfe,
> +0xff,
> +0xff,
> +0xff,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0xff,
> +0xff,
> +0xff,
> +0xff,
> +0x79,
> +0x0,
> +0x8a,
> +0x4d,
> +0x52,
> +0x33,
> +0x32,
> +0xa,
> +0xa,
> +0x4d,
> +0x49,
> +0x4e,
> +0x5f,
> +0x8a,
> +0x4d,
> +0x52,
> +0x33,
> +0x32,
> +0xa,
> +0xe,
> +0x4d,
> +0x41,
> +0x58,
> +0x5f,
> +0x8a,
> +0x4d,
> +0x52,
> +0x33,
> +0x32,
> +0xa,
> +0x16,
> +0x4c,
> +0x45,
> +0x4e,
> +0x5f,
> +0x70,
> +0x4d,
> +0x49,
> +0x4e,
> +0x4c,
> +0x4d,
> +0x49,
> +0x4e,
> +0x5f,
> +0x70,
> +0x4d,
> +0x41,
> +0x58,
> +0x4c,
> +0x4d,
> +0x41,
> +0x58,
> +0x5f,
> +0x70,
> +0x4c,
> +0x45,
> +0x4e,
> +0x4c,
> +0x4c,
> +0x45,
> +0x4e,
> +0x5f,
> +0x5b,
> +0x27,
> +0x4d,
> +0x4c,
> +0x43,
> +0x4b,
> +0xa4,
> +0x4d,
> +0x52,
> +0x33,
> +0x32,
> +0x5b,
> +0x27,
> +0x4d,
> +0x4c,
> +0x43,
> +0x4b,
> +0xa4,
> +0x4d,
> +0x52,
> +0x36,
> +0x34,
> +0x14,
> +0x24,
> +0x4d,
> +0x50,
> +0x58,
> +0x4d,
> +0x1,
> +0x5b,
> +0x23,
> +0x4d,
> +0x4c,
> +0x43,
> +0x4b,
> +0xff,
> +0xff,
> +0x70,
> +0x99,
> +0x68,
> +0x0,
> +0x4d,
> +0x53,
> +0x45,
> +0x4c,
> +0x70,
> +0x4d,
> +0x50,
> +0x58,
> +0x5f,
> +0x60,
> +0x5b,
> +0x27,
> +0x4d,
> +0x4c,
> +0x43,
> +0x4b,
> +0xa4,
> +0x60,
> +0x14,
> +0x28,
> +0x4d,
> +0x4f,
> +0x53,
> +0x54,
> +0x4,
> +0x5b,
> +0x23,
> +0x4d,
> +0x4c,
> +0x43,
> +0x4b,
> +0xff,
> +0xff,
> +0x70,
> +0x99,
> +0x68,
> +0x0,
> +0x4d,
> +0x53,
> +0x45,
> +0x4c,
> +0x70,
> +0x69,
> +0x4d,
> +0x4f,
> +0x45,
> +0x56,
> +0x70,
> +0x6a,
> +0x4d,
> +0x4f,
> +0x53,
> +0x43,
> +0x5b,
> +0x27,
> +0x4d,
> +0x4c,
> +0x43,
> +0x4b,
> +0x10,
>  0x45,
>  0xd,
>  0x5f,
> diff --git a/hw/i386/q35-acpi-dsdt.dsl b/hw/i386/q35-acpi-dsdt.dsl
> index 054b035..e1cee5d 100644
> --- a/hw/i386/q35-acpi-dsdt.dsl
> +++ b/hw/i386/q35-acpi-dsdt.dsl
> @@ -405,13 +405,12 @@ DefinitionBlock (
>  #include "hw/acpi/pc-hotplug.h"
>  #define CPU_STATUS_BASE ICH9_CPU_HOTPLUG_IO_BASE
>  #include "acpi-dsdt-cpu-hotplug.dsl"
> +#include "acpi-dsdt-mem-hotplug.dsl"
>  
>  
>  /****************************************************************
>   * General purpose events
>   ****************************************************************/
> -    External(\_SB.PCI0.MEMORY_HOTPLUG_DEVICE.MEMORY_SLOT_SCAN_METHOD, MethodObj)
> -
>      Scope(\_GPE) {
>          Name(_HID, "ACPI0006")
>  
> diff --git a/hw/i386/q35-acpi-dsdt.hex.generated b/hw/i386/q35-acpi-dsdt.hex.generated
> index c9eb4ac..4807bdf 100644
> --- a/hw/i386/q35-acpi-dsdt.hex.generated
> +++ b/hw/i386/q35-acpi-dsdt.hex.generated
> @@ -3,12 +3,12 @@ static unsigned char Q35AcpiDsdtAmlCode[] = {
>  0x53,
>  0x44,
>  0x54,
> -0xe5,
> -0x1c,
> +0xf6,
> +0x1f,
>  0x0,
>  0x0,
>  0x1,
> -0xb7,
> +0x91,
>  0x42,
>  0x58,
>  0x50,
> @@ -31,9 +31,9 @@ static unsigned char Q35AcpiDsdtAmlCode[] = {
>  0x4e,
>  0x54,
>  0x4c,
> -0x15,
> -0x11,
> -0x13,
> +0x28,
> +0x8,
> +0x14,
>  0x20,
>  0x10,
>  0x49,
> @@ -7234,6 +7234,791 @@ static unsigned char Q35AcpiDsdtAmlCode[] = {
>  0xa,
>  0xb,
>  0x10,
> +0x40,
> +0x31,
> +0x2e,
> +0x5f,
> +0x53,
> +0x42,
> +0x5f,
> +0x50,
> +0x43,
> +0x49,
> +0x30,
> +0x5b,
> +0x82,
> +0x43,
> +0x30,
> +0x4d,
> +0x48,
> +0x50,
> +0x44,
> +0x8,
> +0x5f,
> +0x48,
> +0x49,
> +0x44,
> +0xd,
> +0x50,
> +0x4e,
> +0x50,
> +0x30,
> +0x41,
> +0x30,
> +0x36,
> +0x0,
> +0x8,
> +0x5f,
> +0x55,
> +0x49,
> +0x44,
> +0xd,
> +0x4d,
> +0x65,
> +0x6d,
> +0x6f,
> +0x72,
> +0x79,
> +0x20,
> +0x68,
> +0x6f,
> +0x74,
> +0x70,
> +0x6c,
> +0x75,
> +0x67,
> +0x20,
> +0x72,
> +0x65,
> +0x73,
> +0x6f,
> +0x75,
> +0x72,
> +0x63,
> +0x65,
> +0x73,
> +0x0,
> +0x5b,
> +0x80,
> +0x48,
> +0x50,
> +0x4d,
> +0x52,
> +0x1,
> +0xb,
> +0x0,
> +0xa,
> +0xa,
> +0x18,
> +0x8,
> +0x5f,
> +0x43,
> +0x52,
> +0x53,
> +0x11,
> +0xd,
> +0xa,
> +0xa,
> +0x47,
> +0x1,
> +0x0,
> +0xa,
> +0x0,
> +0xa,
> +0x0,
> +0x18,
> +0x79,
> +0x0,
> +0x14,
> +0x13,
> +0x5f,
> +0x53,
> +0x54,
> +0x41,
> +0x0,
> +0xa0,
> +0x9,
> +0x93,
> +0x4d,
> +0x44,
> +0x4e,
> +0x52,
> +0x0,
> +0xa4,
> +0x0,
> +0xa4,
> +0xa,
> +0xb,
> +0x5b,
> +0x81,
> +0x1f,
> +0x48,
> +0x50,
> +0x4d,
> +0x52,
> +0x3,
> +0x4d,
> +0x52,
> +0x42,
> +0x4c,
> +0x20,
> +0x4d,
> +0x52,
> +0x42,
> +0x48,
> +0x20,
> +0x4d,
> +0x52,
> +0x4c,
> +0x4c,
> +0x20,
> +0x4d,
> +0x52,
> +0x4c,
> +0x48,
> +0x20,
> +0x4d,
> +0x50,
> +0x58,
> +0x5f,
> +0x20,
> +0x5b,
> +0x81,
> +0x13,
> +0x48,
> +0x50,
> +0x4d,
> +0x52,
> +0x1,
> +0x0,
> +0x40,
> +0xa,
> +0x4d,
> +0x45,
> +0x53,
> +0x5f,
> +0x1,
> +0x4d,
> +0x49,
> +0x4e,
> +0x53,
> +0x1,
> +0x5b,
> +0x1,
> +0x4d,
> +0x4c,
> +0x43,
> +0x4b,
> +0x0,
> +0x5b,
> +0x81,
> +0x15,
> +0x48,
> +0x50,
> +0x4d,
> +0x52,
> +0x3,
> +0x4d,
> +0x53,
> +0x45,
> +0x4c,
> +0x20,
> +0x4d,
> +0x4f,
> +0x45,
> +0x56,
> +0x20,
> +0x4d,
> +0x4f,
> +0x53,
> +0x43,
> +0x20,
> +0x14,
> +0x4a,
> +0x4,
> +0x4d,
> +0x53,
> +0x43,
> +0x4e,
> +0x0,
> +0xa0,
> +0x9,
> +0x93,
> +0x4d,
> +0x44,
> +0x4e,
> +0x52,
> +0x0,
> +0xa4,
> +0x0,
> +0x70,
> +0x0,
> +0x60,
> +0x5b,
> +0x23,
> +0x4d,
> +0x4c,
> +0x43,
> +0x4b,
> +0xff,
> +0xff,
> +0xa2,
> +0x25,
> +0x95,
> +0x60,
> +0x4d,
> +0x44,
> +0x4e,
> +0x52,
> +0x70,
> +0x60,
> +0x4d,
> +0x53,
> +0x45,
> +0x4c,
> +0xa0,
> +0x13,
> +0x93,
> +0x4d,
> +0x49,
> +0x4e,
> +0x53,
> +0x1,
> +0x4d,
> +0x54,
> +0x46,
> +0x59,
> +0x60,
> +0x1,
> +0x70,
> +0x1,
> +0x4d,
> +0x49,
> +0x4e,
> +0x53,
> +0x72,
> +0x60,
> +0x1,
> +0x60,
> +0x5b,
> +0x27,
> +0x4d,
> +0x4c,
> +0x43,
> +0x4b,
> +0xa4,
> +0x1,
> +0x14,
> +0x2d,
> +0x4d,
> +0x52,
> +0x53,
> +0x54,
> +0x1,
> +0x70,
> +0x0,
> +0x60,
> +0x5b,
> +0x23,
> +0x4d,
> +0x4c,
> +0x43,
> +0x4b,
> +0xff,
> +0xff,
> +0x70,
> +0x99,
> +0x68,
> +0x0,
> +0x4d,
> +0x53,
> +0x45,
> +0x4c,
> +0xa0,
> +0xb,
> +0x93,
> +0x4d,
> +0x45,
> +0x53,
> +0x5f,
> +0x1,
> +0x70,
> +0xa,
> +0xf,
> +0x60,
> +0x5b,
> +0x27,
> +0x4d,
> +0x4c,
> +0x43,
> +0x4b,
> +0xa4,
> +0x60,
> +0x14,
> +0x41,
> +0x18,
> +0x4d,
> +0x43,
> +0x52,
> +0x53,
> +0x9,
> +0x5b,
> +0x23,
> +0x4d,
> +0x4c,
> +0x43,
> +0x4b,
> +0xff,
> +0xff,
> +0x70,
> +0x99,
> +0x68,
> +0x0,
> +0x4d,
> +0x53,
> +0x45,
> +0x4c,
> +0x8,
> +0x4d,
> +0x52,
> +0x36,
> +0x34,
> +0x11,
> +0x33,
> +0xa,
> +0x30,
> +0x8a,
> +0x2b,
> +0x0,
> +0x0,
> +0xc,
> +0x3,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0xfe,
> +0xff,
> +0xff,
> +0xff,
> +0xff,
> +0xff,
> +0xff,
> +0xff,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0xff,
> +0xff,
> +0xff,
> +0xff,
> +0xff,
> +0xff,
> +0xff,
> +0xff,
> +0x79,
> +0x0,
> +0x8a,
> +0x4d,
> +0x52,
> +0x36,
> +0x34,
> +0xa,
> +0xe,
> +0x4d,
> +0x49,
> +0x4e,
> +0x4c,
> +0x8a,
> +0x4d,
> +0x52,
> +0x36,
> +0x34,
> +0xa,
> +0x12,
> +0x4d,
> +0x49,
> +0x4e,
> +0x48,
> +0x8a,
> +0x4d,
> +0x52,
> +0x36,
> +0x34,
> +0xa,
> +0x26,
> +0x4c,
> +0x45,
> +0x4e,
> +0x4c,
> +0x8a,
> +0x4d,
> +0x52,
> +0x36,
> +0x34,
> +0xa,
> +0x2a,
> +0x4c,
> +0x45,
> +0x4e,
> +0x48,
> +0x8a,
> +0x4d,
> +0x52,
> +0x36,
> +0x34,
> +0xa,
> +0x16,
> +0x4d,
> +0x41,
> +0x58,
> +0x4c,
> +0x8a,
> +0x4d,
> +0x52,
> +0x36,
> +0x34,
> +0xa,
> +0x1a,
> +0x4d,
> +0x41,
> +0x58,
> +0x48,
> +0x70,
> +0x4d,
> +0x52,
> +0x42,
> +0x48,
> +0x4d,
> +0x49,
> +0x4e,
> +0x48,
> +0x70,
> +0x4d,
> +0x52,
> +0x42,
> +0x4c,
> +0x4d,
> +0x49,
> +0x4e,
> +0x4c,
> +0x70,
> +0x4d,
> +0x52,
> +0x4c,
> +0x48,
> +0x4c,
> +0x45,
> +0x4e,
> +0x48,
> +0x70,
> +0x4d,
> +0x52,
> +0x4c,
> +0x4c,
> +0x4c,
> +0x45,
> +0x4e,
> +0x4c,
> +0x72,
> +0x4d,
> +0x49,
> +0x4e,
> +0x4c,
> +0x4c,
> +0x45,
> +0x4e,
> +0x4c,
> +0x4d,
> +0x41,
> +0x58,
> +0x4c,
> +0x72,
> +0x4d,
> +0x49,
> +0x4e,
> +0x48,
> +0x4c,
> +0x45,
> +0x4e,
> +0x48,
> +0x4d,
> +0x41,
> +0x58,
> +0x48,
> +0xa0,
> +0x14,
> +0x95,
> +0x4d,
> +0x41,
> +0x58,
> +0x4c,
> +0x4d,
> +0x49,
> +0x4e,
> +0x4c,
> +0x72,
> +0x4d,
> +0x41,
> +0x58,
> +0x48,
> +0x1,
> +0x4d,
> +0x41,
> +0x58,
> +0x48,
> +0xa0,
> +0x11,
> +0x95,
> +0x4d,
> +0x41,
> +0x58,
> +0x4c,
> +0x1,
> +0x74,
> +0x4d,
> +0x41,
> +0x58,
> +0x48,
> +0x1,
> +0x4d,
> +0x41,
> +0x58,
> +0x48,
> +0x74,
> +0x4d,
> +0x41,
> +0x58,
> +0x4c,
> +0x1,
> +0x4d,
> +0x41,
> +0x58,
> +0x4c,
> +0xa0,
> +0x44,
> +0x7,
> +0x93,
> +0x4d,
> +0x41,
> +0x58,
> +0x48,
> +0x0,
> +0x8,
> +0x4d,
> +0x52,
> +0x33,
> +0x32,
> +0x11,
> +0x1f,
> +0xa,
> +0x1c,
> +0x87,
> +0x17,
> +0x0,
> +0x0,
> +0xc,
> +0x3,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0xfe,
> +0xff,
> +0xff,
> +0xff,
> +0x0,
> +0x0,
> +0x0,
> +0x0,
> +0xff,
> +0xff,
> +0xff,
> +0xff,
> +0x79,
> +0x0,
> +0x8a,
> +0x4d,
> +0x52,
> +0x33,
> +0x32,
> +0xa,
> +0xa,
> +0x4d,
> +0x49,
> +0x4e,
> +0x5f,
> +0x8a,
> +0x4d,
> +0x52,
> +0x33,
> +0x32,
> +0xa,
> +0xe,
> +0x4d,
> +0x41,
> +0x58,
> +0x5f,
> +0x8a,
> +0x4d,
> +0x52,
> +0x33,
> +0x32,
> +0xa,
> +0x16,
> +0x4c,
> +0x45,
> +0x4e,
> +0x5f,
> +0x70,
> +0x4d,
> +0x49,
> +0x4e,
> +0x4c,
> +0x4d,
> +0x49,
> +0x4e,
> +0x5f,
> +0x70,
> +0x4d,
> +0x41,
> +0x58,
> +0x4c,
> +0x4d,
> +0x41,
> +0x58,
> +0x5f,
> +0x70,
> +0x4c,
> +0x45,
> +0x4e,
> +0x4c,
> +0x4c,
> +0x45,
> +0x4e,
> +0x5f,
> +0x5b,
> +0x27,
> +0x4d,
> +0x4c,
> +0x43,
> +0x4b,
> +0xa4,
> +0x4d,
> +0x52,
> +0x33,
> +0x32,
> +0x5b,
> +0x27,
> +0x4d,
> +0x4c,
> +0x43,
> +0x4b,
> +0xa4,
> +0x4d,
> +0x52,
> +0x36,
> +0x34,
> +0x14,
> +0x24,
> +0x4d,
> +0x50,
> +0x58,
> +0x4d,
> +0x1,
> +0x5b,
> +0x23,
> +0x4d,
> +0x4c,
> +0x43,
> +0x4b,
> +0xff,
> +0xff,
> +0x70,
> +0x99,
> +0x68,
> +0x0,
> +0x4d,
> +0x53,
> +0x45,
> +0x4c,
> +0x70,
> +0x4d,
> +0x50,
> +0x58,
> +0x5f,
> +0x60,
> +0x5b,
> +0x27,
> +0x4d,
> +0x4c,
> +0x43,
> +0x4b,
> +0xa4,
> +0x60,
> +0x14,
> +0x28,
> +0x4d,
> +0x4f,
> +0x53,
> +0x54,
> +0x4,
> +0x5b,
> +0x23,
> +0x4d,
> +0x4c,
> +0x43,
> +0x4b,
> +0xff,
> +0xff,
> +0x70,
> +0x99,
> +0x68,
> +0x0,
> +0x4d,
> +0x53,
> +0x45,
> +0x4c,
> +0x70,
> +0x69,
> +0x4d,
> +0x4f,
> +0x45,
> +0x56,
> +0x70,
> +0x6a,
> +0x4d,
> +0x4f,
> +0x53,
> +0x43,
> +0x5b,
> +0x27,
> +0x4d,
> +0x4c,
> +0x43,
> +0x4b,
> +0x10,
>  0x42,
>  0xa,
>  0x5f,
> diff --git a/hw/i386/ssdt-mem.hex.generated b/hw/i386/ssdt-mem.hex.generated
> index 00bd34d..b3bfbbd 100644
> --- a/hw/i386/ssdt-mem.hex.generated
> +++ b/hw/i386/ssdt-mem.hex.generated
> @@ -11,7 +11,7 @@ static unsigned char ssdm_mem_aml[] = {
>  0x0,
>  0x0,
>  0x2,
> -0x71,
> +0x66,
>  0x42,
>  0x58,
>  0x50,
> @@ -34,9 +34,9 @@ static unsigned char ssdm_mem_aml[] = {
>  0x4e,
>  0x54,
>  0x4c,
> -0x15,
> -0x11,
> -0x13,
> +0x28,
> +0x8,
> +0x14,
>  0x20,
>  0x10,
>  0x42,
> diff --git a/hw/i386/ssdt-misc.dsl b/hw/i386/ssdt-misc.dsl
> index 0fd4480..1e3baae 100644
> --- a/hw/i386/ssdt-misc.dsl
> +++ b/hw/i386/ssdt-misc.dsl
> @@ -36,6 +36,8 @@ DefinitionBlock ("ssdt-misc.aml", "SSDT", 0x01, "BXPC", "BXSSDTSUSP", 0x1)
>         Name(P1E, Buffer() { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 })
>         ACPI_EXTRACT_NAME_BUFFER8 acpi_pci64_length
>         Name(P1L, Buffer() { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 })
> +       ACPI_EXTRACT_NAME_DWORD_CONST ssdt_mctrl_nr_slots
> +       Name(MEMORY_SLOTS_NUMBER, 0x12345678)
>      }
>  
>  
> @@ -117,167 +119,4 @@ DefinitionBlock ("ssdt-misc.aml", "SSDT", 0x01, "BXPC", "BXSSDTSUSP", 0x1)
>              }
>          }
>      }
> -
> -    External(MEMORY_SLOT_NOTIFY_METHOD, MethodObj)
> -    Scope(\_SB.PCI0) {
> -        Device(MEMORY_HOTPLUG_DEVICE) {
> -            Name(_HID, "PNP0A06")
> -            Name(_UID, "Memory hotplug resources")
> -
> -            ACPI_EXTRACT_NAME_DWORD_CONST ssdt_mctrl_nr_slots
> -            Name(MEMORY_SLOTS_NUMBER, 0x12345678)
> -
> -            /* Memory hotplug IO registers */
> -            OperationRegion(MEMORY_HOTPLUG_IO_REGION, SystemIO,
> -                            ACPI_MEMORY_HOTPLUG_BASE,
> -                            ACPI_MEMORY_HOTPLUG_IO_LEN)
> -
> -            Name(_CRS, ResourceTemplate() {
> -                IO(Decode16, ACPI_MEMORY_HOTPLUG_BASE, ACPI_MEMORY_HOTPLUG_BASE,
> -                   0, ACPI_MEMORY_HOTPLUG_IO_LEN, IO)
> -            })
> -
> -            Method(_STA, 0) {
> -                If (LEqual(MEMORY_SLOTS_NUMBER, Zero)) {
> -                    Return(0x0)
> -                }
> -                /* present, functioning, decoding, not shown in UI */
> -                Return(0xB)
> -            }
> -
> -            Field(MEMORY_HOTPLUG_IO_REGION, DWordAcc, NoLock, Preserve) {
> -                MEMORY_SLOT_ADDR_LOW, 32,  // read only
> -                MEMORY_SLOT_ADDR_HIGH, 32, // read only
> -                MEMORY_SLOT_SIZE_LOW, 32,  // read only
> -                MEMORY_SLOT_SIZE_HIGH, 32, // read only
> -                MEMORY_SLOT_PROXIMITY, 32, // read only
> -            }
> -            Field(MEMORY_HOTPLUG_IO_REGION, ByteAcc, NoLock, Preserve) {
> -                Offset(20),
> -                MEMORY_SLOT_ENABLED,  1, // 1 if enabled, read only
> -                MEMORY_SLOT_INSERT_EVENT, 1, // (read) 1 if has a insert event. (write) 1 to clear event
> -            }
> -
> -            Mutex (MEMORY_SLOT_LOCK, 0)
> -            Field (MEMORY_HOTPLUG_IO_REGION, DWordAcc, NoLock, Preserve) {
> -                MEMORY_SLOT_SLECTOR, 32,  // DIMM selector, write only
> -                MEMORY_SLOT_OST_EVENT, 32,  // _OST event code, write only
> -                MEMORY_SLOT_OST_STATUS, 32,  // _OST status code, write only
> -            }
> -
> -            Method(MEMORY_SLOT_SCAN_METHOD, 0) {
> -                If (LEqual(MEMORY_SLOTS_NUMBER, Zero)) {
> -                     Return(Zero)
> -                }
> -
> -                Store(Zero, Local0) // Mem devs iterrator
> -                Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
> -                while (LLess(Local0, MEMORY_SLOTS_NUMBER)) {
> -                    Store(Local0, MEMORY_SLOT_SLECTOR) // select Local0 DIMM
> -                    If (LEqual(MEMORY_SLOT_INSERT_EVENT, One)) { // Memory device needs check
> -                        MEMORY_SLOT_NOTIFY_METHOD(Local0, 1)
> -                        Store(1, MEMORY_SLOT_INSERT_EVENT)
> -                    }
> -                    // TODO: handle memory eject request
> -                    Add(Local0, One, Local0) // goto next DIMM
> -                }
> -                Release(MEMORY_SLOT_LOCK)
> -                Return(One)
> -            }
> -
> -            Method(MEMORY_SLOT_STATUS_METHOD, 1) {
> -                Store(Zero, Local0)
> -
> -                Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
> -                Store(ToInteger(Arg0), MEMORY_SLOT_SLECTOR) // select DIMM
> -
> -                If (LEqual(MEMORY_SLOT_ENABLED, One)) {
> -                    Store(0xF, Local0)
> -                }
> -
> -                Release(MEMORY_SLOT_LOCK)
> -                Return(Local0)
> -            }
> -
> -            Method(MEMORY_SLOT_CRS_METHOD, 1, Serialized) {
> -                Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
> -                Store(ToInteger(Arg0), MEMORY_SLOT_SLECTOR) // select DIMM
> -
> -                Name(MR64, ResourceTemplate() {
> -                    QWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed,
> -                    Cacheable, ReadWrite,
> -                    0x0000000000000000,        // Address Space Granularity
> -                    0x0000000000000000,        // Address Range Minimum
> -                    0xFFFFFFFFFFFFFFFE,        // Address Range Maximum
> -                    0x0000000000000000,        // Address Translation Offset
> -                    0xFFFFFFFFFFFFFFFF,        // Address Length
> -                    ,, MW64, AddressRangeMemory, TypeStatic)
> -                })
> -
> -                CreateDWordField(MR64, 14, MINL)
> -                CreateDWordField(MR64, 18, MINH)
> -                CreateDWordField(MR64, 38, LENL)
> -                CreateDWordField(MR64, 42, LENH)
> -                CreateDWordField(MR64, 22, MAXL)
> -                CreateDWordField(MR64, 26, MAXH)
> -
> -                Store(MEMORY_SLOT_ADDR_HIGH, MINH)
> -                Store(MEMORY_SLOT_ADDR_LOW, MINL)
> -                Store(MEMORY_SLOT_SIZE_HIGH, LENH)
> -                Store(MEMORY_SLOT_SIZE_LOW, LENL)
> -
> -                // 64-bit math: MAX = MIN + LEN - 1
> -                Add(MINL, LENL, MAXL)
> -                Add(MINH, LENH, MAXH)
> -                If (LLess(MAXL, MINL)) {
> -                    Add(MAXH, One, MAXH)
> -                }
> -                If (LLess(MAXL, One)) {
> -                    Subtract(MAXH, One, MAXH)
> -                }
> -                Subtract(MAXL, One, MAXL)
> -
> -                If (LEqual(MAXH, Zero)){
> -                    Name(MR32, ResourceTemplate() {
> -                        DWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed,
> -                        Cacheable, ReadWrite,
> -                        0x00000000,        // Address Space Granularity
> -                        0x00000000,        // Address Range Minimum
> -                        0xFFFFFFFE,        // Address Range Maximum
> -                        0x00000000,        // Address Translation Offset
> -                        0xFFFFFFFF,        // Address Length
> -                        ,, MW32, AddressRangeMemory, TypeStatic)
> -                    })
> -                    CreateDWordField(MR32, MW32._MIN, MIN)
> -                    CreateDWordField(MR32, MW32._MAX, MAX)
> -                    CreateDWordField(MR32, MW32._LEN, LEN)
> -                    Store(MINL, MIN)
> -                    Store(MAXL, MAX)
> -                    Store(LENL, LEN)
> -
> -                    Release(MEMORY_SLOT_LOCK)
> -                    Return(MR32)
> -                }
> -
> -                Release(MEMORY_SLOT_LOCK)
> -                Return(MR64)
> -            }
> -
> -            Method(MEMORY_SLOT_PROXIMITY_METHOD, 1) {
> -                Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
> -                Store(ToInteger(Arg0), MEMORY_SLOT_SLECTOR) // select DIMM
> -                Store(MEMORY_SLOT_PROXIMITY, Local0)
> -                Release(MEMORY_SLOT_LOCK)
> -                Return(Local0)
> -            }
> -
> -            Method(MEMORY_SLOT_OST_METHOD, 4) {
> -                Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
> -                Store(ToInteger(Arg0), MEMORY_SLOT_SLECTOR) // select DIMM
> -                Store(Arg1, MEMORY_SLOT_OST_EVENT)
> -                Store(Arg2, MEMORY_SLOT_OST_STATUS)
> -                Release(MEMORY_SLOT_LOCK)
> -            }
> -        } // Device()
> -    } // Scope()
>  }
> diff --git a/hw/i386/ssdt-misc.hex.generated b/hw/i386/ssdt-misc.hex.generated
> index ba4268a..cbcf61d 100644
> --- a/hw/i386/ssdt-misc.hex.generated
> +++ b/hw/i386/ssdt-misc.hex.generated
> @@ -2,13 +2,13 @@ static unsigned char acpi_pci64_length[] = {
>  0x6f
>  };
>  static unsigned char acpi_s4_pkg[] = {
> -0x8f
> +0x99
>  };
> -static unsigned short ssdt_mctrl_nr_slots[] = {
> -0x1aa
> +static unsigned char ssdt_mctrl_nr_slots[] = {
> +0x7d
>  };
>  static unsigned char acpi_s3_name[] = {
> -0x7c
> +0x86
>  };
>  static unsigned char acpi_pci32_start[] = {
>  0x2f
> @@ -21,12 +21,12 @@ static unsigned char ssdp_misc_aml[] = {
>  0x53,
>  0x44,
>  0x54,
> -0x7e,
> -0x4,
> +0x6c,
> +0x1,
>  0x0,
>  0x0,
>  0x1,
> -0x8b,
> +0x3,
>  0x42,
>  0x58,
>  0x50,
> @@ -49,12 +49,12 @@ static unsigned char ssdp_misc_aml[] = {
>  0x4e,
>  0x54,
>  0x4c,
> -0x15,
> -0x11,
> -0x13,
> +0x28,
> +0x8,
> +0x14,
>  0x20,
>  0x10,
> -0x42,
> +0x4c,
>  0x5,
>  0x5c,
>  0x0,
> @@ -136,6 +136,16 @@ static unsigned char ssdp_misc_aml[] = {
>  0x0,
>  0x0,
>  0x0,
> +0x8,
> +0x4d,
> +0x44,
> +0x4e,
> +0x52,
> +0xc,
> +0x78,
> +0x56,
> +0x34,
> +0x12,
>  0x10,
>  0x29,
>  0x5c,
> @@ -370,809 +380,13 @@ static unsigned char ssdp_misc_aml[] = {
>  0x49,
>  0x4f,
>  0x4d,
> -0x58,
> -0x10,
> -0x4b,
> -0x31,
> -0x5c,
> -0x2e,
> -0x5f,
> -0x53,
> -0x42,
> -0x5f,
> -0x50,
> -0x43,
> -0x49,
> -0x30,
> -0x5b,
> -0x82,
> -0x4d,
> -0x30,
> -0x4d,
> -0x48,
> -0x50,
> -0x44,
> -0x8,
> -0x5f,
> -0x48,
> -0x49,
> -0x44,
> -0xd,
> -0x50,
> -0x4e,
> -0x50,
> -0x30,
> -0x41,
> -0x30,
> -0x36,
> -0x0,
> -0x8,
> -0x5f,
> -0x55,
> -0x49,
> -0x44,
> -0xd,
> -0x4d,
> -0x65,
> -0x6d,
> -0x6f,
> -0x72,
> -0x79,
> -0x20,
> -0x68,
> -0x6f,
> -0x74,
> -0x70,
> -0x6c,
> -0x75,
> -0x67,
> -0x20,
> -0x72,
> -0x65,
> -0x73,
> -0x6f,
> -0x75,
> -0x72,
> -0x63,
> -0x65,
> -0x73,
> -0x0,
> -0x8,
> -0x4d,
> -0x44,
> -0x4e,
> -0x52,
> -0xc,
> -0x78,
> -0x56,
> -0x34,
> -0x12,
> -0x5b,
> -0x80,
> -0x48,
> -0x50,
> -0x4d,
> -0x52,
> -0x1,
> -0xb,
> -0x0,
> -0xa,
> -0xa,
> -0x18,
> -0x8,
> -0x5f,
> -0x43,
> -0x52,
> -0x53,
> -0x11,
> -0xd,
> -0xa,
> -0xa,
> -0x47,
> -0x1,
> -0x0,
> -0xa,
> -0x0,
> -0xa,
> -0x0,
> -0x18,
> -0x79,
> -0x0,
> -0x14,
> -0x13,
> -0x5f,
> -0x53,
> -0x54,
> -0x41,
> -0x0,
> -0xa0,
> -0x9,
> -0x93,
> -0x4d,
> -0x44,
> -0x4e,
> -0x52,
> -0x0,
> -0xa4,
> -0x0,
> -0xa4,
> -0xa,
> -0xb,
> -0x5b,
> -0x81,
> -0x1f,
> -0x48,
> -0x50,
> -0x4d,
> -0x52,
> -0x3,
> -0x4d,
> -0x52,
> -0x42,
> -0x4c,
> -0x20,
> -0x4d,
> -0x52,
> -0x42,
> -0x48,
> -0x20,
> -0x4d,
> -0x52,
> -0x4c,
> -0x4c,
> -0x20,
> -0x4d,
> -0x52,
> -0x4c,
> -0x48,
> -0x20,
> -0x4d,
> -0x50,
> -0x58,
> -0x5f,
> -0x20,
> -0x5b,
> -0x81,
> -0x13,
> -0x48,
> -0x50,
> -0x4d,
> -0x52,
> -0x1,
> -0x0,
> -0x40,
> -0xa,
> -0x4d,
> -0x45,
> -0x53,
> -0x5f,
> -0x1,
> -0x4d,
> -0x49,
> -0x4e,
> -0x53,
> -0x1,
> -0x5b,
> -0x1,
> -0x4d,
> -0x4c,
> -0x43,
> -0x4b,
> -0x0,
> -0x5b,
> -0x81,
> -0x15,
> -0x48,
> -0x50,
> -0x4d,
> -0x52,
> -0x3,
> -0x4d,
> -0x53,
> -0x45,
> -0x4c,
> -0x20,
> -0x4d,
> -0x4f,
> -0x45,
> -0x56,
> -0x20,
> -0x4d,
> -0x4f,
> -0x53,
> -0x43,
> -0x20,
> -0x14,
> -0x4a,
> -0x4,
> -0x4d,
> -0x53,
> -0x43,
> -0x4e,
> -0x0,
> -0xa0,
> -0x9,
> -0x93,
> -0x4d,
> -0x44,
> -0x4e,
> -0x52,
> -0x0,
> -0xa4,
> -0x0,
> -0x70,
> -0x0,
> -0x60,
> -0x5b,
> -0x23,
> -0x4d,
> -0x4c,
> -0x43,
> -0x4b,
> -0xff,
> -0xff,
> -0xa2,
> -0x25,
> -0x95,
> -0x60,
> -0x4d,
> -0x44,
> -0x4e,
> -0x52,
> -0x70,
> -0x60,
> -0x4d,
> -0x53,
> -0x45,
> -0x4c,
> -0xa0,
> -0x13,
> -0x93,
> -0x4d,
> -0x49,
> -0x4e,
> -0x53,
> -0x1,
> -0x4d,
> -0x54,
> -0x46,
> -0x59,
> -0x60,
> -0x1,
> -0x70,
> -0x1,
> -0x4d,
> -0x49,
> -0x4e,
> -0x53,
> -0x72,
> -0x60,
> -0x1,
> -0x60,
> -0x5b,
> -0x27,
> -0x4d,
> -0x4c,
> -0x43,
> -0x4b,
> -0xa4,
> -0x1,
> -0x14,
> -0x2d,
> -0x4d,
> -0x52,
> -0x53,
> -0x54,
> -0x1,
> -0x70,
> -0x0,
> -0x60,
> -0x5b,
> -0x23,
> -0x4d,
> -0x4c,
> -0x43,
> -0x4b,
> -0xff,
> -0xff,
> -0x70,
> -0x99,
> -0x68,
> -0x0,
> -0x4d,
> -0x53,
> -0x45,
> -0x4c,
> -0xa0,
> -0xb,
> -0x93,
> -0x4d,
> -0x45,
> -0x53,
> -0x5f,
> -0x1,
> -0x70,
> -0xa,
> -0xf,
> -0x60,
> -0x5b,
> -0x27,
> -0x4d,
> -0x4c,
> -0x43,
> -0x4b,
> -0xa4,
> -0x60,
> -0x14,
> -0x41,
> -0x18,
> -0x4d,
> -0x43,
> -0x52,
> -0x53,
> -0x9,
> -0x5b,
> -0x23,
> -0x4d,
> -0x4c,
> -0x43,
> -0x4b,
> -0xff,
> -0xff,
> -0x70,
> -0x99,
> -0x68,
> -0x0,
> -0x4d,
> -0x53,
> -0x45,
> -0x4c,
> -0x8,
> -0x4d,
> -0x52,
> -0x36,
> -0x34,
> -0x11,
> -0x33,
> -0xa,
> -0x30,
> -0x8a,
> -0x2b,
> -0x0,
> -0x0,
> -0xc,
> -0x3,
> -0x0,
> -0x0,
> -0x0,
> -0x0,
> -0x0,
> -0x0,
> -0x0,
> -0x0,
> -0x0,
> -0x0,
> -0x0,
> -0x0,
> -0x0,
> -0x0,
> -0x0,
> -0x0,
> -0xfe,
> -0xff,
> -0xff,
> -0xff,
> -0xff,
> -0xff,
> -0xff,
> -0xff,
> -0x0,
> -0x0,
> -0x0,
> -0x0,
> -0x0,
> -0x0,
> -0x0,
> -0x0,
> -0xff,
> -0xff,
> -0xff,
> -0xff,
> -0xff,
> -0xff,
> -0xff,
> -0xff,
> -0x79,
> -0x0,
> -0x8a,
> -0x4d,
> -0x52,
> -0x36,
> -0x34,
> -0xa,
> -0xe,
> -0x4d,
> -0x49,
> -0x4e,
> -0x4c,
> -0x8a,
> -0x4d,
> -0x52,
> -0x36,
> -0x34,
> -0xa,
> -0x12,
> -0x4d,
> -0x49,
> -0x4e,
> -0x48,
> -0x8a,
> -0x4d,
> -0x52,
> -0x36,
> -0x34,
> -0xa,
> -0x26,
> -0x4c,
> -0x45,
> -0x4e,
> -0x4c,
> -0x8a,
> -0x4d,
> -0x52,
> -0x36,
> -0x34,
> -0xa,
> -0x2a,
> -0x4c,
> -0x45,
> -0x4e,
> -0x48,
> -0x8a,
> -0x4d,
> -0x52,
> -0x36,
> -0x34,
> -0xa,
> -0x16,
> -0x4d,
> -0x41,
> -0x58,
> -0x4c,
> -0x8a,
> -0x4d,
> -0x52,
> -0x36,
> -0x34,
> -0xa,
> -0x1a,
> -0x4d,
> -0x41,
> -0x58,
> -0x48,
> -0x70,
> -0x4d,
> -0x52,
> -0x42,
> -0x48,
> -0x4d,
> -0x49,
> -0x4e,
> -0x48,
> -0x70,
> -0x4d,
> -0x52,
> -0x42,
> -0x4c,
> -0x4d,
> -0x49,
> -0x4e,
> -0x4c,
> -0x70,
> -0x4d,
> -0x52,
> -0x4c,
> -0x48,
> -0x4c,
> -0x45,
> -0x4e,
> -0x48,
> -0x70,
> -0x4d,
> -0x52,
> -0x4c,
> -0x4c,
> -0x4c,
> -0x45,
> -0x4e,
> -0x4c,
> -0x72,
> -0x4d,
> -0x49,
> -0x4e,
> -0x4c,
> -0x4c,
> -0x45,
> -0x4e,
> -0x4c,
> -0x4d,
> -0x41,
> -0x58,
> -0x4c,
> -0x72,
> -0x4d,
> -0x49,
> -0x4e,
> -0x48,
> -0x4c,
> -0x45,
> -0x4e,
> -0x48,
> -0x4d,
> -0x41,
> -0x58,
> -0x48,
> -0xa0,
> -0x14,
> -0x95,
> -0x4d,
> -0x41,
> -0x58,
> -0x4c,
> -0x4d,
> -0x49,
> -0x4e,
> -0x4c,
> -0x72,
> -0x4d,
> -0x41,
> -0x58,
> -0x48,
> -0x1,
> -0x4d,
> -0x41,
> -0x58,
> -0x48,
> -0xa0,
> -0x11,
> -0x95,
> -0x4d,
> -0x41,
> -0x58,
> -0x4c,
> -0x1,
> -0x74,
> -0x4d,
> -0x41,
> -0x58,
> -0x48,
> -0x1,
> -0x4d,
> -0x41,
> -0x58,
> -0x48,
> -0x74,
> -0x4d,
> -0x41,
> -0x58,
> -0x4c,
> -0x1,
> -0x4d,
> -0x41,
> -0x58,
> -0x4c,
> -0xa0,
> -0x44,
> -0x7,
> -0x93,
> -0x4d,
> -0x41,
> -0x58,
> -0x48,
> -0x0,
> -0x8,
> -0x4d,
> -0x52,
> -0x33,
> -0x32,
> -0x11,
> -0x1f,
> -0xa,
> -0x1c,
> -0x87,
> -0x17,
> -0x0,
> -0x0,
> -0xc,
> -0x3,
> -0x0,
> -0x0,
> -0x0,
> -0x0,
> -0x0,
> -0x0,
> -0x0,
> -0x0,
> -0xfe,
> -0xff,
> -0xff,
> -0xff,
> -0x0,
> -0x0,
> -0x0,
> -0x0,
> -0xff,
> -0xff,
> -0xff,
> -0xff,
> -0x79,
> -0x0,
> -0x8a,
> -0x4d,
> -0x52,
> -0x33,
> -0x32,
> -0xa,
> -0xa,
> -0x4d,
> -0x49,
> -0x4e,
> -0x5f,
> -0x8a,
> -0x4d,
> -0x52,
> -0x33,
> -0x32,
> -0xa,
> -0xe,
> -0x4d,
> -0x41,
> -0x58,
> -0x5f,
> -0x8a,
> -0x4d,
> -0x52,
> -0x33,
> -0x32,
> -0xa,
> -0x16,
> -0x4c,
> -0x45,
> -0x4e,
> -0x5f,
> -0x70,
> -0x4d,
> -0x49,
> -0x4e,
> -0x4c,
> -0x4d,
> -0x49,
> -0x4e,
> -0x5f,
> -0x70,
> -0x4d,
> -0x41,
> -0x58,
> -0x4c,
> -0x4d,
> -0x41,
> -0x58,
> -0x5f,
> -0x70,
> -0x4c,
> -0x45,
> -0x4e,
> -0x4c,
> -0x4c,
> -0x45,
> -0x4e,
> -0x5f,
> -0x5b,
> -0x27,
> -0x4d,
> -0x4c,
> -0x43,
> -0x4b,
> -0xa4,
> -0x4d,
> -0x52,
> -0x33,
> -0x32,
> -0x5b,
> -0x27,
> -0x4d,
> -0x4c,
> -0x43,
> -0x4b,
> -0xa4,
> -0x4d,
> -0x52,
> -0x36,
> -0x34,
> -0x14,
> -0x24,
> -0x4d,
> -0x50,
> -0x58,
> -0x4d,
> -0x1,
> -0x5b,
> -0x23,
> -0x4d,
> -0x4c,
> -0x43,
> -0x4b,
> -0xff,
> -0xff,
> -0x70,
> -0x99,
> -0x68,
> -0x0,
> -0x4d,
> -0x53,
> -0x45,
> -0x4c,
> -0x70,
> -0x4d,
> -0x50,
> -0x58,
> -0x5f,
> -0x60,
> -0x5b,
> -0x27,
> -0x4d,
> -0x4c,
> -0x43,
> -0x4b,
> -0xa4,
> -0x60,
> -0x14,
> -0x28,
> -0x4d,
> -0x4f,
> -0x53,
> -0x54,
> -0x4,
> -0x5b,
> -0x23,
> -0x4d,
> -0x4c,
> -0x43,
> -0x4b,
> -0xff,
> -0xff,
> -0x70,
> -0x99,
> -0x68,
> -0x0,
> -0x4d,
> -0x53,
> -0x45,
> -0x4c,
> -0x70,
> -0x69,
> -0x4d,
> -0x4f,
> -0x45,
> -0x56,
> -0x70,
> -0x6a,
> -0x4d,
> -0x4f,
> -0x53,
> -0x43,
> -0x5b,
> -0x27,
> -0x4d,
> -0x4c,
> -0x43,
> -0x4b
> +0x58
>  };
>  static unsigned char ssdt_isa_pest[] = {
> -0xd0
> +0xda
>  };
>  static unsigned char acpi_s4_name[] = {
> -0x88
> +0x92
>  };
>  static unsigned char acpi_pci64_start[] = {
>  0x4d
> diff --git a/tests/acpi-test-data/pc/DSDT b/tests/acpi-test-data/pc/DSDT
> index d37ec34454e6f3db5e91b777f94e03be67a5f583..ee9cc6781cea3a9515b9a176eea3459f8e4d8655 100644
> GIT binary patch
> delta 814
> zcmZ8fO>fgc5ZzTP;cjS9h#MkQsYZMX1TsyPb5lFuz;3W?Qx*BJmfDDdKv}u%Atw_q
> zpkA#WxJ4*`fIq`u;f9%6$0h1o8ohlp@9mCv{%m~TWNzq2Mx79P^ozAww)^~<4ELn(
> z4D9%;V++rB4e1Tsb${sFJ-bT``4)C!^m&|4tmE;i`gHc*N=GN-v-EIuLgFu;F9KR4
> zjI|Bv1Yu*Hv6qxE_}UX<Hf0#~$ZRba?l2&8GH11Tx`mn*5$y5Ig6Kiu90MT#Kw9y%
> zsa?q~6a7$9F&Kt4rh+@KNj%*s)nOkbZ~FTXLdP;+t%}eYE}f)E65mBhQT)7rk>L3%
> z5ulnib8RT17w@u!Ds7)8G>IQ#`J9?hMG!`G$w2)$CR$p{^@S9>QB@~quPvbOwd$~{
> z)(}B=r_o{d`4d8}uaGP2Z-FZ-ii+2J2orLSN>+zU@)F(z=#}sR?^o<&fD5)IdIyWz
> z+W<X<e-%XtI2r-q9tsd}G)a-p5TO`%I*;<1d4U`jq`0S=Y-p06UNVR{=J?FLmLpA|
> z>CSdzi*0_pwcIo|i+y5`y1&jgV_+{c=n8Nh#Il4fxRF$NH0Bk$V^ZNoF|~LklwHE^
> pj(HCTN6@Qppm3c2ztkfbm1uRjsD-bpKHwawk2pxBXMTtM{s%^7?%e<Y
> 
> delta 23
> ecmeB>`7X-k66_N4or{5iv0)>Z1lMF^-m3sr#Rl;J
> 
> diff --git a/tests/acpi-test-data/pc/SSDT b/tests/acpi-test-data/pc/SSDT
> index eb2d8b698ce6a3a910a05244a3b6cf80bf818fb9..558e4c85b031ec081045aec6cc382a680e9c6009 100644
> GIT binary patch
> delta 38
> ucmew<{#=kNIM^lRIR^s+Bi}?WX-1!kYJqGVzAk=2JQIsQY_4aiVg~@)a|=)a
> 
> delta 833
> zcmZ8fO>fgc5ZzTP)!np3CZ>%5sYXCSR3Ot-Ig{7{hwcXBHK@pyYzajaRFsw59wH7V
> zT#(8sihAG{q5K1W6c_$LFN7I?l!&#oe*0$M+nt^HrC)3?DV^Y=LJ0jfVmD}OwDoc{
> z{GIMSK6n(#R^-_oEBqoX;d+i1xgBTK>v~qxY7i}Y1uN0}*iQ!LVgE!OoxU@Z-f{ml
> zdD}ZCnsB=Q3V{)Rc0J+K3Sq3KMYb>XRmPrC!r-e7h*6DX&?J-PF)GNEOj#vNhnpx`
> z5PplBFu5>sL>!Q}ADQ8>nz@oEOtfW0MW-uiNCmg|NI1Nfi)9-mFWRqRlD26)Ulh{r
> z&Yh%49NtFBZ1&^sd5q_)Sb%DhR>zs62%f%)smkn=n8x8f+&-noL*dJS&Kaohha{6$
> z#@U4wyHf6sjb=?i-pl1-<z7wrja|LYtg~%GRu=HFijijjKeK$4Y_XgT$Qdfx8r+fR
> z@G3wzhg-Z|vJU_j?7C>~7kjS*bQQiTiV$!#0>E7q07yAUmjrnPD8@w=NBP7!M-Jl&
> zu4zW<8A(qr8AKdoeBvyPk%q?b>pS`;yZLovK55Jq^TZqnB!yJ!JB)#Ul*2U;7jPYJ
> z6e&C!!wTIosPLi~DvE>-m$0#G+=0ds^#2+tY^Q&fx(}@qEQYs=wkRv5-eVuB57<b#
> K=g%YhY3VN!sP#$!
> 
> diff --git a/tests/acpi-test-data/q35/DSDT b/tests/acpi-test-data/q35/DSDT
> index 2d2bc4adaf54666fe7864e7f39203411b7c308f7..ef0c75f4236de3e6f727e21991533f2bf8279dee 100644
> GIT binary patch
> delta 793
> zcmZ8f&1(}u6rZ65w-Z~5S!<L)7U~y*614<+vdM0Aqcd^YS*0?<EJ(15l408(a$4g>
> z@VfNiEolA$|0u5>d+=a<Z$D~r7KY#Z`2F5{JMZVt$wTHzFFI)xLVy2YJFRs0-d!#G
> zI&g;_^~voBKkzK=554tZ6m)u>F0u4;u*CSoB$+z<lSA|V=#7(%4<<*+>+u0mAN@dt
> zv_=?fTG|a|eVwt#lrZ?3Q(`x?jCy3gmI-eZk_B0?nwqtdvm(MiPaU{@xH!iPP_U;R
> zHEZOmWS5D7)Km;dk}4{=`;@5JrGhO7KzTNJ0he?g`^l=1?&wS<Lt?dsl;!f<_2U@p
> zn^*vA-pF!65j}eODyAlvPhuLYo0z_!_8k$*h@KHJU-wB)tz~&bhFz$#W4qTBF!x$j
> ztje`S_KRLg37kL6;vmLTn#(EqBEs%A+kk#}0WSjd3wVPMD(`K8rFT>G_R8F=0DXf$
> z5J?C)3IX6g5)h;uRTA_gKr$M69O-lW7=0K|(5AVwo;&H`sRt3q7@vFRGISG5gb(i5
> z+pP8ZG9l+ziph#us~KUw6tfrueGO9q+yHV3H=!eKur!7Zs$<Y#qZlgR18JwQyKP^C
> o9TD{Z-)(Sn{yoYq*otUXZ8^mTRF7ib;>wtJxHE-j)^C0P3owxI%m4rY
> 
> delta 23
> ecmexn|J0JpCD<k8sSE=Hqv%F1OPR?b@{0gro(Eh2
> 
> diff --git a/tests/acpi-test-data/q35/SSDT b/tests/acpi-test-data/q35/SSDT
> index 778b79bf428b5d7602b7b80c9434e38c79718bb2..4e45510181c4038505ae1815b76799a2cd0e8808 100644
> GIT binary patch
> delta 37
> tcmX@awSk2zIM^k`fQf;D@!~`-X-1!kYJqGVzAk=2JQIsQOs;1+3;?*r3h)2`
> 
> literal 1346
> zcmZWp-%r#)5Z;vo%iaNZM@3>xxWwNWwZ|d)NUyD4q1#)#1u-SrCWd$z4b1@$ya^<l
> z;Nyh{-%fM?hyG=pGwmH9_M!deoBd{Ic4sQ39o9z)p?<w-HDsl}AuI_TC4?ZxZ?QhQ
> zNi<<dRRHS`AV(GY{oiMrsIDspuBud}Jk!9NK0r8E3GW}G_y{5@SySb)9ECjqFRHSZ
> zV}wBju%4p_gB6zxo6km+tSe!;hAT}K9dRa{^-xm{*PeLe@HN9Qs*r^v!#p9;7vVGm
> ziWZFy^8-VKnm(&!Xp#gyad)f}lOFk*>#-?)GO$I64iUz^STDQ{L`ahs+M2QgS(;$%
> zHJ${a^niRvid}P?+|OVR;08o@eK(7au5=r86j!U8Plx$K?gnoNJIh`8!Z3{`sCNx2
> z;ai_~+6R@^&R+6q|3js{wY#(5e!sO#G;aF=9zE375ImrH!r1KP%<$M|4~RaUR@fcy
> zpaRP4v3ztmhnf){)V&J48u0QEd4R-*szis=X;8AvxFZ$it}kgsxo54C=<r4+mJUdo
> z&N{rLRnb>+Tv|T4*eD@!bO$B<{;zwdF>as498}%uP8yJhuinKpNu#%88b=Rsb&u*#
> zcmNl5NuT^^kyM%Qr1>OlYPdSq%~=kIKR(=RxK`uA(qgH`jFZQN6h`o<E<b1e>=|+c
> zvwuKNP{<}BMK6P8fQ<~^_naX+4{*TFaC2j@_7=cKf@g{%1Re$g;5ATyz{4PIq!FMN
> zjns|mu6~Lf`rByJlq{tr-8*LxdFb=H_Vo_Z&=f&!p)|*Cf4h0PWGofS#1hl;Y72}(
> zcm*{9oCNIv&Okyc!JW~aU~qIMm?ydhH-xftxU{I>g{I;3>IEd&N*CAk5ZWZn{kLcv
> zTPXR6J(Ptk9v29XMs!>swS-}07o@qi!rw|d-=-y8nC}-vpHkcmNzW48#06mEID;+2
> zf$gjq)Dq4Lnk~KTL(g67<~uD$zGC!k%@R$&Y{L{6S916}iH@eEVJJ<R_F%w{=B4rS
> YoS;O9e^J$jQ9`gV1ho{53Cj=3Um|f`5C8xG
> 

Ping?

Paolo

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Qemu-devel] [PATCH v2] target-i386: move generic memory hotplug methods to DSDTs
  2014-11-11 17:13 ` Paolo Bonzini
@ 2014-11-20  6:05   ` Paolo Bonzini
  2014-11-20  6:57     ` Michael S. Tsirkin
  0 siblings, 1 reply; 7+ messages in thread
From: Paolo Bonzini @ 2014-11-20  6:05 UTC (permalink / raw)
  To: qemu-devel; +Cc: imammedo, mst



On 11/11/2014 18:13, Paolo Bonzini wrote:
> On 15/10/2014 09:45, Paolo Bonzini wrote:
>> This makes it simpler to keep the SSDT byte-for-byte identical for a
>> given machine type, which is a goal we want to have for 2.2 and newer
>> types.
>>
>> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>> ---
>>         v1->v2: do not define the same Device twice (Igor)
>>
>>  hw/i386/acpi-dsdt-mem-hotplug.dsl   | 176 ++++++++
>>  hw/i386/acpi-dsdt.dsl               |   3 +-
>>  hw/i386/acpi-dsdt.hex.generated     | 795 +++++++++++++++++++++++++++++++++-
>>  hw/i386/q35-acpi-dsdt.dsl           |   3 +-
>>  hw/i386/q35-acpi-dsdt.hex.generated | 797 +++++++++++++++++++++++++++++++++-
>>  hw/i386/ssdt-mem.hex.generated      |   8 +-
>>  hw/i386/ssdt-misc.dsl               | 165 +------
>>  hw/i386/ssdt-misc.hex.generated     | 834 ++----------------------------------
>>  tests/acpi-test-data/pc/DSDT        | Bin 2807 -> 3592 bytes
>>  tests/acpi-test-data/pc/SSDT        | Bin 3065 -> 2279 bytes
>>  tests/acpi-test-data/q35/DSDT       | Bin 7397 -> 8182 bytes
>>  tests/acpi-test-data/q35/SSDT       | Bin 1346 -> 560 bytes
>>  12 files changed, 1789 insertions(+), 992 deletions(-)
>>  create mode 100644 hw/i386/acpi-dsdt-mem-hotplug.dsl
>>
>> diff --git a/hw/i386/acpi-dsdt-mem-hotplug.dsl b/hw/i386/acpi-dsdt-mem-hotplug.dsl
>> new file mode 100644
>> index 0000000..2a36c47
>> --- /dev/null
>> +++ b/hw/i386/acpi-dsdt-mem-hotplug.dsl
>> @@ -0,0 +1,176 @@
>> +/*
>> + * This program is free software; you can redistribute it and/or modify
>> + * it under the terms of the GNU General Public License as published by
>> + * the Free Software Foundation; either version 2 of the License, or
>> + * (at your option) any later version.
>> +
>> + * This program is distributed in the hope that it will be useful,
>> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
>> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>> + * GNU General Public License for more details.
>> +
>> + * You should have received a copy of the GNU General Public License along
>> + * with this program; if not, see <http://www.gnu.org/licenses/>.
>> + */
>> +
>> +    External(MEMORY_SLOT_NOTIFY_METHOD, MethodObj)
>> +
>> +    Scope(\_SB.PCI0) {
>> +        Device(MEMORY_HOTPLUG_DEVICE) {
>> +            Name(_HID, "PNP0A06")
>> +            Name(_UID, "Memory hotplug resources")
>> +            External(MEMORY_SLOTS_NUMBER, IntObj)
>> +
>> +            /* Memory hotplug IO registers */
>> +            OperationRegion(MEMORY_HOTPLUG_IO_REGION, SystemIO,
>> +                            ACPI_MEMORY_HOTPLUG_BASE,
>> +                            ACPI_MEMORY_HOTPLUG_IO_LEN)
>> +
>> +            Name(_CRS, ResourceTemplate() {
>> +                IO(Decode16, ACPI_MEMORY_HOTPLUG_BASE, ACPI_MEMORY_HOTPLUG_BASE,
>> +                   0, ACPI_MEMORY_HOTPLUG_IO_LEN, IO)
>> +            })
>> +
>> +            Method(_STA, 0) {
>> +                If (LEqual(MEMORY_SLOTS_NUMBER, Zero)) {
>> +                    Return(0x0)
>> +                }
>> +                /* present, functioning, decoding, not shown in UI */
>> +                Return(0xB)
>> +            }
>> +
>> +            Field(MEMORY_HOTPLUG_IO_REGION, DWordAcc, NoLock, Preserve) {
>> +                MEMORY_SLOT_ADDR_LOW, 32,  // read only
>> +                MEMORY_SLOT_ADDR_HIGH, 32, // read only
>> +                MEMORY_SLOT_SIZE_LOW, 32,  // read only
>> +                MEMORY_SLOT_SIZE_HIGH, 32, // read only
>> +                MEMORY_SLOT_PROXIMITY, 32, // read only
>> +            }
>> +            Field(MEMORY_HOTPLUG_IO_REGION, ByteAcc, NoLock, Preserve) {
>> +                Offset(20),
>> +                MEMORY_SLOT_ENABLED,  1, // 1 if enabled, read only
>> +                MEMORY_SLOT_INSERT_EVENT, 1, // (read) 1 if has a insert event. (write) 1 to clear event
>> +            }
>> +
>> +            Mutex (MEMORY_SLOT_LOCK, 0)
>> +            Field (MEMORY_HOTPLUG_IO_REGION, DWordAcc, NoLock, Preserve) {
>> +                MEMORY_SLOT_SLECTOR, 32,  // DIMM selector, write only
>> +                MEMORY_SLOT_OST_EVENT, 32,  // _OST event code, write only
>> +                MEMORY_SLOT_OST_STATUS, 32,  // _OST status code, write only
>> +            }
>> +
>> +            Method(MEMORY_SLOT_SCAN_METHOD, 0) {
>> +                If (LEqual(MEMORY_SLOTS_NUMBER, Zero)) {
>> +                     Return(Zero)
>> +                }
>> +
>> +                Store(Zero, Local0) // Mem devs iterrator
>> +                Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
>> +                while (LLess(Local0, MEMORY_SLOTS_NUMBER)) {
>> +                    Store(Local0, MEMORY_SLOT_SLECTOR) // select Local0 DIMM
>> +                    If (LEqual(MEMORY_SLOT_INSERT_EVENT, One)) { // Memory device needs check
>> +                        MEMORY_SLOT_NOTIFY_METHOD(Local0, 1)
>> +                        Store(1, MEMORY_SLOT_INSERT_EVENT)
>> +                    }
>> +                    // TODO: handle memory eject request
>> +                    Add(Local0, One, Local0) // goto next DIMM
>> +                }
>> +                Release(MEMORY_SLOT_LOCK)
>> +                Return(One)
>> +            }
>> +
>> +            Method(MEMORY_SLOT_STATUS_METHOD, 1) {
>> +                Store(Zero, Local0)
>> +
>> +                Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
>> +                Store(ToInteger(Arg0), MEMORY_SLOT_SLECTOR) // select DIMM
>> +
>> +                If (LEqual(MEMORY_SLOT_ENABLED, One)) {
>> +                    Store(0xF, Local0)
>> +                }
>> +
>> +                Release(MEMORY_SLOT_LOCK)
>> +                Return(Local0)
>> +            }
>> +
>> +            Method(MEMORY_SLOT_CRS_METHOD, 1, Serialized) {
>> +                Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
>> +                Store(ToInteger(Arg0), MEMORY_SLOT_SLECTOR) // select DIMM
>> +
>> +                Name(MR64, ResourceTemplate() {
>> +                    QWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed,
>> +                    Cacheable, ReadWrite,
>> +                    0x0000000000000000,        // Address Space Granularity
>> +                    0x0000000000000000,        // Address Range Minimum
>> +                    0xFFFFFFFFFFFFFFFE,        // Address Range Maximum
>> +                    0x0000000000000000,        // Address Translation Offset
>> +                    0xFFFFFFFFFFFFFFFF,        // Address Length
>> +                    ,, MW64, AddressRangeMemory, TypeStatic)
>> +                })
>> +
>> +                CreateDWordField(MR64, 14, MINL)
>> +                CreateDWordField(MR64, 18, MINH)
>> +                CreateDWordField(MR64, 38, LENL)
>> +                CreateDWordField(MR64, 42, LENH)
>> +                CreateDWordField(MR64, 22, MAXL)
>> +                CreateDWordField(MR64, 26, MAXH)
>> +
>> +                Store(MEMORY_SLOT_ADDR_HIGH, MINH)
>> +                Store(MEMORY_SLOT_ADDR_LOW, MINL)
>> +                Store(MEMORY_SLOT_SIZE_HIGH, LENH)
>> +                Store(MEMORY_SLOT_SIZE_LOW, LENL)
>> +
>> +                // 64-bit math: MAX = MIN + LEN - 1
>> +                Add(MINL, LENL, MAXL)
>> +                Add(MINH, LENH, MAXH)
>> +                If (LLess(MAXL, MINL)) {
>> +                    Add(MAXH, One, MAXH)
>> +                }
>> +                If (LLess(MAXL, One)) {
>> +                    Subtract(MAXH, One, MAXH)
>> +                }
>> +                Subtract(MAXL, One, MAXL)
>> +
>> +                If (LEqual(MAXH, Zero)){
>> +                    Name(MR32, ResourceTemplate() {
>> +                        DWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed,
>> +                        Cacheable, ReadWrite,
>> +                        0x00000000,        // Address Space Granularity
>> +                        0x00000000,        // Address Range Minimum
>> +                        0xFFFFFFFE,        // Address Range Maximum
>> +                        0x00000000,        // Address Translation Offset
>> +                        0xFFFFFFFF,        // Address Length
>> +                        ,, MW32, AddressRangeMemory, TypeStatic)
>> +                    })
>> +                    CreateDWordField(MR32, MW32._MIN, MIN)
>> +                    CreateDWordField(MR32, MW32._MAX, MAX)
>> +                    CreateDWordField(MR32, MW32._LEN, LEN)
>> +                    Store(MINL, MIN)
>> +                    Store(MAXL, MAX)
>> +                    Store(LENL, LEN)
>> +
>> +                    Release(MEMORY_SLOT_LOCK)
>> +                    Return(MR32)
>> +                }
>> +
>> +                Release(MEMORY_SLOT_LOCK)
>> +                Return(MR64)
>> +            }
>> +
>> +            Method(MEMORY_SLOT_PROXIMITY_METHOD, 1) {
>> +                Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
>> +                Store(ToInteger(Arg0), MEMORY_SLOT_SLECTOR) // select DIMM
>> +                Store(MEMORY_SLOT_PROXIMITY, Local0)
>> +                Release(MEMORY_SLOT_LOCK)
>> +                Return(Local0)
>> +            }
>> +
>> +            Method(MEMORY_SLOT_OST_METHOD, 4) {
>> +                Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
>> +                Store(ToInteger(Arg0), MEMORY_SLOT_SLECTOR) // select DIMM
>> +                Store(Arg1, MEMORY_SLOT_OST_EVENT)
>> +                Store(Arg2, MEMORY_SLOT_OST_STATUS)
>> +                Release(MEMORY_SLOT_LOCK)
>> +            }
>> +        } // Device()
>> +    } // Scope()
>> diff --git a/hw/i386/acpi-dsdt.dsl b/hw/i386/acpi-dsdt.dsl
>> index 559f4b6..a611e07 100644
>> --- a/hw/i386/acpi-dsdt.dsl
>> +++ b/hw/i386/acpi-dsdt.dsl
>> @@ -297,13 +297,12 @@ DefinitionBlock (
>>  #include "hw/acpi/pc-hotplug.h"
>>  #define CPU_STATUS_BASE PIIX4_CPU_HOTPLUG_IO_BASE
>>  #include "acpi-dsdt-cpu-hotplug.dsl"
>> +#include "acpi-dsdt-mem-hotplug.dsl"
>>  
>>  
>>  /****************************************************************
>>   * General purpose events
>>   ****************************************************************/
>> -    External(\_SB.PCI0.MEMORY_HOTPLUG_DEVICE.MEMORY_SLOT_SCAN_METHOD, MethodObj)
>> -
>>      Scope(\_GPE) {
>>          Name(_HID, "ACPI0006")
>>  
>> diff --git a/hw/i386/acpi-dsdt.hex.generated b/hw/i386/acpi-dsdt.hex.generated
>> index a21bf41..875570e 100644
>> --- a/hw/i386/acpi-dsdt.hex.generated
>> +++ b/hw/i386/acpi-dsdt.hex.generated
>> @@ -3,12 +3,12 @@ static unsigned char AcpiDsdtAmlCode[] = {
>>  0x53,
>>  0x44,
>>  0x54,
>> -0xf7,
>> -0xa,
>> +0x8,
>> +0xe,
>>  0x0,
>>  0x0,
>>  0x1,
>> -0x1f,
>> +0xfc,
>>  0x42,
>>  0x58,
>>  0x50,
>> @@ -32,8 +32,8 @@ static unsigned char AcpiDsdtAmlCode[] = {
>>  0x54,
>>  0x4c,
>>  0x28,
>> -0x5,
>> -0x10,
>> +0x8,
>> +0x14,
>>  0x20,
>>  0x10,
>>  0x49,
>> @@ -2593,6 +2593,791 @@ static unsigned char AcpiDsdtAmlCode[] = {
>>  0xa,
>>  0xb,
>>  0x10,
>> +0x40,
>> +0x31,
>> +0x2e,
>> +0x5f,
>> +0x53,
>> +0x42,
>> +0x5f,
>> +0x50,
>> +0x43,
>> +0x49,
>> +0x30,
>> +0x5b,
>> +0x82,
>> +0x43,
>> +0x30,
>> +0x4d,
>> +0x48,
>> +0x50,
>> +0x44,
>> +0x8,
>> +0x5f,
>> +0x48,
>> +0x49,
>> +0x44,
>> +0xd,
>> +0x50,
>> +0x4e,
>> +0x50,
>> +0x30,
>> +0x41,
>> +0x30,
>> +0x36,
>> +0x0,
>> +0x8,
>> +0x5f,
>> +0x55,
>> +0x49,
>> +0x44,
>> +0xd,
>> +0x4d,
>> +0x65,
>> +0x6d,
>> +0x6f,
>> +0x72,
>> +0x79,
>> +0x20,
>> +0x68,
>> +0x6f,
>> +0x74,
>> +0x70,
>> +0x6c,
>> +0x75,
>> +0x67,
>> +0x20,
>> +0x72,
>> +0x65,
>> +0x73,
>> +0x6f,
>> +0x75,
>> +0x72,
>> +0x63,
>> +0x65,
>> +0x73,
>> +0x0,
>> +0x5b,
>> +0x80,
>> +0x48,
>> +0x50,
>> +0x4d,
>> +0x52,
>> +0x1,
>> +0xb,
>> +0x0,
>> +0xa,
>> +0xa,
>> +0x18,
>> +0x8,
>> +0x5f,
>> +0x43,
>> +0x52,
>> +0x53,
>> +0x11,
>> +0xd,
>> +0xa,
>> +0xa,
>> +0x47,
>> +0x1,
>> +0x0,
>> +0xa,
>> +0x0,
>> +0xa,
>> +0x0,
>> +0x18,
>> +0x79,
>> +0x0,
>> +0x14,
>> +0x13,
>> +0x5f,
>> +0x53,
>> +0x54,
>> +0x41,
>> +0x0,
>> +0xa0,
>> +0x9,
>> +0x93,
>> +0x4d,
>> +0x44,
>> +0x4e,
>> +0x52,
>> +0x0,
>> +0xa4,
>> +0x0,
>> +0xa4,
>> +0xa,
>> +0xb,
>> +0x5b,
>> +0x81,
>> +0x1f,
>> +0x48,
>> +0x50,
>> +0x4d,
>> +0x52,
>> +0x3,
>> +0x4d,
>> +0x52,
>> +0x42,
>> +0x4c,
>> +0x20,
>> +0x4d,
>> +0x52,
>> +0x42,
>> +0x48,
>> +0x20,
>> +0x4d,
>> +0x52,
>> +0x4c,
>> +0x4c,
>> +0x20,
>> +0x4d,
>> +0x52,
>> +0x4c,
>> +0x48,
>> +0x20,
>> +0x4d,
>> +0x50,
>> +0x58,
>> +0x5f,
>> +0x20,
>> +0x5b,
>> +0x81,
>> +0x13,
>> +0x48,
>> +0x50,
>> +0x4d,
>> +0x52,
>> +0x1,
>> +0x0,
>> +0x40,
>> +0xa,
>> +0x4d,
>> +0x45,
>> +0x53,
>> +0x5f,
>> +0x1,
>> +0x4d,
>> +0x49,
>> +0x4e,
>> +0x53,
>> +0x1,
>> +0x5b,
>> +0x1,
>> +0x4d,
>> +0x4c,
>> +0x43,
>> +0x4b,
>> +0x0,
>> +0x5b,
>> +0x81,
>> +0x15,
>> +0x48,
>> +0x50,
>> +0x4d,
>> +0x52,
>> +0x3,
>> +0x4d,
>> +0x53,
>> +0x45,
>> +0x4c,
>> +0x20,
>> +0x4d,
>> +0x4f,
>> +0x45,
>> +0x56,
>> +0x20,
>> +0x4d,
>> +0x4f,
>> +0x53,
>> +0x43,
>> +0x20,
>> +0x14,
>> +0x4a,
>> +0x4,
>> +0x4d,
>> +0x53,
>> +0x43,
>> +0x4e,
>> +0x0,
>> +0xa0,
>> +0x9,
>> +0x93,
>> +0x4d,
>> +0x44,
>> +0x4e,
>> +0x52,
>> +0x0,
>> +0xa4,
>> +0x0,
>> +0x70,
>> +0x0,
>> +0x60,
>> +0x5b,
>> +0x23,
>> +0x4d,
>> +0x4c,
>> +0x43,
>> +0x4b,
>> +0xff,
>> +0xff,
>> +0xa2,
>> +0x25,
>> +0x95,
>> +0x60,
>> +0x4d,
>> +0x44,
>> +0x4e,
>> +0x52,
>> +0x70,
>> +0x60,
>> +0x4d,
>> +0x53,
>> +0x45,
>> +0x4c,
>> +0xa0,
>> +0x13,
>> +0x93,
>> +0x4d,
>> +0x49,
>> +0x4e,
>> +0x53,
>> +0x1,
>> +0x4d,
>> +0x54,
>> +0x46,
>> +0x59,
>> +0x60,
>> +0x1,
>> +0x70,
>> +0x1,
>> +0x4d,
>> +0x49,
>> +0x4e,
>> +0x53,
>> +0x72,
>> +0x60,
>> +0x1,
>> +0x60,
>> +0x5b,
>> +0x27,
>> +0x4d,
>> +0x4c,
>> +0x43,
>> +0x4b,
>> +0xa4,
>> +0x1,
>> +0x14,
>> +0x2d,
>> +0x4d,
>> +0x52,
>> +0x53,
>> +0x54,
>> +0x1,
>> +0x70,
>> +0x0,
>> +0x60,
>> +0x5b,
>> +0x23,
>> +0x4d,
>> +0x4c,
>> +0x43,
>> +0x4b,
>> +0xff,
>> +0xff,
>> +0x70,
>> +0x99,
>> +0x68,
>> +0x0,
>> +0x4d,
>> +0x53,
>> +0x45,
>> +0x4c,
>> +0xa0,
>> +0xb,
>> +0x93,
>> +0x4d,
>> +0x45,
>> +0x53,
>> +0x5f,
>> +0x1,
>> +0x70,
>> +0xa,
>> +0xf,
>> +0x60,
>> +0x5b,
>> +0x27,
>> +0x4d,
>> +0x4c,
>> +0x43,
>> +0x4b,
>> +0xa4,
>> +0x60,
>> +0x14,
>> +0x41,
>> +0x18,
>> +0x4d,
>> +0x43,
>> +0x52,
>> +0x53,
>> +0x9,
>> +0x5b,
>> +0x23,
>> +0x4d,
>> +0x4c,
>> +0x43,
>> +0x4b,
>> +0xff,
>> +0xff,
>> +0x70,
>> +0x99,
>> +0x68,
>> +0x0,
>> +0x4d,
>> +0x53,
>> +0x45,
>> +0x4c,
>> +0x8,
>> +0x4d,
>> +0x52,
>> +0x36,
>> +0x34,
>> +0x11,
>> +0x33,
>> +0xa,
>> +0x30,
>> +0x8a,
>> +0x2b,
>> +0x0,
>> +0x0,
>> +0xc,
>> +0x3,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0xfe,
>> +0xff,
>> +0xff,
>> +0xff,
>> +0xff,
>> +0xff,
>> +0xff,
>> +0xff,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0xff,
>> +0xff,
>> +0xff,
>> +0xff,
>> +0xff,
>> +0xff,
>> +0xff,
>> +0xff,
>> +0x79,
>> +0x0,
>> +0x8a,
>> +0x4d,
>> +0x52,
>> +0x36,
>> +0x34,
>> +0xa,
>> +0xe,
>> +0x4d,
>> +0x49,
>> +0x4e,
>> +0x4c,
>> +0x8a,
>> +0x4d,
>> +0x52,
>> +0x36,
>> +0x34,
>> +0xa,
>> +0x12,
>> +0x4d,
>> +0x49,
>> +0x4e,
>> +0x48,
>> +0x8a,
>> +0x4d,
>> +0x52,
>> +0x36,
>> +0x34,
>> +0xa,
>> +0x26,
>> +0x4c,
>> +0x45,
>> +0x4e,
>> +0x4c,
>> +0x8a,
>> +0x4d,
>> +0x52,
>> +0x36,
>> +0x34,
>> +0xa,
>> +0x2a,
>> +0x4c,
>> +0x45,
>> +0x4e,
>> +0x48,
>> +0x8a,
>> +0x4d,
>> +0x52,
>> +0x36,
>> +0x34,
>> +0xa,
>> +0x16,
>> +0x4d,
>> +0x41,
>> +0x58,
>> +0x4c,
>> +0x8a,
>> +0x4d,
>> +0x52,
>> +0x36,
>> +0x34,
>> +0xa,
>> +0x1a,
>> +0x4d,
>> +0x41,
>> +0x58,
>> +0x48,
>> +0x70,
>> +0x4d,
>> +0x52,
>> +0x42,
>> +0x48,
>> +0x4d,
>> +0x49,
>> +0x4e,
>> +0x48,
>> +0x70,
>> +0x4d,
>> +0x52,
>> +0x42,
>> +0x4c,
>> +0x4d,
>> +0x49,
>> +0x4e,
>> +0x4c,
>> +0x70,
>> +0x4d,
>> +0x52,
>> +0x4c,
>> +0x48,
>> +0x4c,
>> +0x45,
>> +0x4e,
>> +0x48,
>> +0x70,
>> +0x4d,
>> +0x52,
>> +0x4c,
>> +0x4c,
>> +0x4c,
>> +0x45,
>> +0x4e,
>> +0x4c,
>> +0x72,
>> +0x4d,
>> +0x49,
>> +0x4e,
>> +0x4c,
>> +0x4c,
>> +0x45,
>> +0x4e,
>> +0x4c,
>> +0x4d,
>> +0x41,
>> +0x58,
>> +0x4c,
>> +0x72,
>> +0x4d,
>> +0x49,
>> +0x4e,
>> +0x48,
>> +0x4c,
>> +0x45,
>> +0x4e,
>> +0x48,
>> +0x4d,
>> +0x41,
>> +0x58,
>> +0x48,
>> +0xa0,
>> +0x14,
>> +0x95,
>> +0x4d,
>> +0x41,
>> +0x58,
>> +0x4c,
>> +0x4d,
>> +0x49,
>> +0x4e,
>> +0x4c,
>> +0x72,
>> +0x4d,
>> +0x41,
>> +0x58,
>> +0x48,
>> +0x1,
>> +0x4d,
>> +0x41,
>> +0x58,
>> +0x48,
>> +0xa0,
>> +0x11,
>> +0x95,
>> +0x4d,
>> +0x41,
>> +0x58,
>> +0x4c,
>> +0x1,
>> +0x74,
>> +0x4d,
>> +0x41,
>> +0x58,
>> +0x48,
>> +0x1,
>> +0x4d,
>> +0x41,
>> +0x58,
>> +0x48,
>> +0x74,
>> +0x4d,
>> +0x41,
>> +0x58,
>> +0x4c,
>> +0x1,
>> +0x4d,
>> +0x41,
>> +0x58,
>> +0x4c,
>> +0xa0,
>> +0x44,
>> +0x7,
>> +0x93,
>> +0x4d,
>> +0x41,
>> +0x58,
>> +0x48,
>> +0x0,
>> +0x8,
>> +0x4d,
>> +0x52,
>> +0x33,
>> +0x32,
>> +0x11,
>> +0x1f,
>> +0xa,
>> +0x1c,
>> +0x87,
>> +0x17,
>> +0x0,
>> +0x0,
>> +0xc,
>> +0x3,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0xfe,
>> +0xff,
>> +0xff,
>> +0xff,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0xff,
>> +0xff,
>> +0xff,
>> +0xff,
>> +0x79,
>> +0x0,
>> +0x8a,
>> +0x4d,
>> +0x52,
>> +0x33,
>> +0x32,
>> +0xa,
>> +0xa,
>> +0x4d,
>> +0x49,
>> +0x4e,
>> +0x5f,
>> +0x8a,
>> +0x4d,
>> +0x52,
>> +0x33,
>> +0x32,
>> +0xa,
>> +0xe,
>> +0x4d,
>> +0x41,
>> +0x58,
>> +0x5f,
>> +0x8a,
>> +0x4d,
>> +0x52,
>> +0x33,
>> +0x32,
>> +0xa,
>> +0x16,
>> +0x4c,
>> +0x45,
>> +0x4e,
>> +0x5f,
>> +0x70,
>> +0x4d,
>> +0x49,
>> +0x4e,
>> +0x4c,
>> +0x4d,
>> +0x49,
>> +0x4e,
>> +0x5f,
>> +0x70,
>> +0x4d,
>> +0x41,
>> +0x58,
>> +0x4c,
>> +0x4d,
>> +0x41,
>> +0x58,
>> +0x5f,
>> +0x70,
>> +0x4c,
>> +0x45,
>> +0x4e,
>> +0x4c,
>> +0x4c,
>> +0x45,
>> +0x4e,
>> +0x5f,
>> +0x5b,
>> +0x27,
>> +0x4d,
>> +0x4c,
>> +0x43,
>> +0x4b,
>> +0xa4,
>> +0x4d,
>> +0x52,
>> +0x33,
>> +0x32,
>> +0x5b,
>> +0x27,
>> +0x4d,
>> +0x4c,
>> +0x43,
>> +0x4b,
>> +0xa4,
>> +0x4d,
>> +0x52,
>> +0x36,
>> +0x34,
>> +0x14,
>> +0x24,
>> +0x4d,
>> +0x50,
>> +0x58,
>> +0x4d,
>> +0x1,
>> +0x5b,
>> +0x23,
>> +0x4d,
>> +0x4c,
>> +0x43,
>> +0x4b,
>> +0xff,
>> +0xff,
>> +0x70,
>> +0x99,
>> +0x68,
>> +0x0,
>> +0x4d,
>> +0x53,
>> +0x45,
>> +0x4c,
>> +0x70,
>> +0x4d,
>> +0x50,
>> +0x58,
>> +0x5f,
>> +0x60,
>> +0x5b,
>> +0x27,
>> +0x4d,
>> +0x4c,
>> +0x43,
>> +0x4b,
>> +0xa4,
>> +0x60,
>> +0x14,
>> +0x28,
>> +0x4d,
>> +0x4f,
>> +0x53,
>> +0x54,
>> +0x4,
>> +0x5b,
>> +0x23,
>> +0x4d,
>> +0x4c,
>> +0x43,
>> +0x4b,
>> +0xff,
>> +0xff,
>> +0x70,
>> +0x99,
>> +0x68,
>> +0x0,
>> +0x4d,
>> +0x53,
>> +0x45,
>> +0x4c,
>> +0x70,
>> +0x69,
>> +0x4d,
>> +0x4f,
>> +0x45,
>> +0x56,
>> +0x70,
>> +0x6a,
>> +0x4d,
>> +0x4f,
>> +0x53,
>> +0x43,
>> +0x5b,
>> +0x27,
>> +0x4d,
>> +0x4c,
>> +0x43,
>> +0x4b,
>> +0x10,
>>  0x45,
>>  0xd,
>>  0x5f,
>> diff --git a/hw/i386/q35-acpi-dsdt.dsl b/hw/i386/q35-acpi-dsdt.dsl
>> index 054b035..e1cee5d 100644
>> --- a/hw/i386/q35-acpi-dsdt.dsl
>> +++ b/hw/i386/q35-acpi-dsdt.dsl
>> @@ -405,13 +405,12 @@ DefinitionBlock (
>>  #include "hw/acpi/pc-hotplug.h"
>>  #define CPU_STATUS_BASE ICH9_CPU_HOTPLUG_IO_BASE
>>  #include "acpi-dsdt-cpu-hotplug.dsl"
>> +#include "acpi-dsdt-mem-hotplug.dsl"
>>  
>>  
>>  /****************************************************************
>>   * General purpose events
>>   ****************************************************************/
>> -    External(\_SB.PCI0.MEMORY_HOTPLUG_DEVICE.MEMORY_SLOT_SCAN_METHOD, MethodObj)
>> -
>>      Scope(\_GPE) {
>>          Name(_HID, "ACPI0006")
>>  
>> diff --git a/hw/i386/q35-acpi-dsdt.hex.generated b/hw/i386/q35-acpi-dsdt.hex.generated
>> index c9eb4ac..4807bdf 100644
>> --- a/hw/i386/q35-acpi-dsdt.hex.generated
>> +++ b/hw/i386/q35-acpi-dsdt.hex.generated
>> @@ -3,12 +3,12 @@ static unsigned char Q35AcpiDsdtAmlCode[] = {
>>  0x53,
>>  0x44,
>>  0x54,
>> -0xe5,
>> -0x1c,
>> +0xf6,
>> +0x1f,
>>  0x0,
>>  0x0,
>>  0x1,
>> -0xb7,
>> +0x91,
>>  0x42,
>>  0x58,
>>  0x50,
>> @@ -31,9 +31,9 @@ static unsigned char Q35AcpiDsdtAmlCode[] = {
>>  0x4e,
>>  0x54,
>>  0x4c,
>> -0x15,
>> -0x11,
>> -0x13,
>> +0x28,
>> +0x8,
>> +0x14,
>>  0x20,
>>  0x10,
>>  0x49,
>> @@ -7234,6 +7234,791 @@ static unsigned char Q35AcpiDsdtAmlCode[] = {
>>  0xa,
>>  0xb,
>>  0x10,
>> +0x40,
>> +0x31,
>> +0x2e,
>> +0x5f,
>> +0x53,
>> +0x42,
>> +0x5f,
>> +0x50,
>> +0x43,
>> +0x49,
>> +0x30,
>> +0x5b,
>> +0x82,
>> +0x43,
>> +0x30,
>> +0x4d,
>> +0x48,
>> +0x50,
>> +0x44,
>> +0x8,
>> +0x5f,
>> +0x48,
>> +0x49,
>> +0x44,
>> +0xd,
>> +0x50,
>> +0x4e,
>> +0x50,
>> +0x30,
>> +0x41,
>> +0x30,
>> +0x36,
>> +0x0,
>> +0x8,
>> +0x5f,
>> +0x55,
>> +0x49,
>> +0x44,
>> +0xd,
>> +0x4d,
>> +0x65,
>> +0x6d,
>> +0x6f,
>> +0x72,
>> +0x79,
>> +0x20,
>> +0x68,
>> +0x6f,
>> +0x74,
>> +0x70,
>> +0x6c,
>> +0x75,
>> +0x67,
>> +0x20,
>> +0x72,
>> +0x65,
>> +0x73,
>> +0x6f,
>> +0x75,
>> +0x72,
>> +0x63,
>> +0x65,
>> +0x73,
>> +0x0,
>> +0x5b,
>> +0x80,
>> +0x48,
>> +0x50,
>> +0x4d,
>> +0x52,
>> +0x1,
>> +0xb,
>> +0x0,
>> +0xa,
>> +0xa,
>> +0x18,
>> +0x8,
>> +0x5f,
>> +0x43,
>> +0x52,
>> +0x53,
>> +0x11,
>> +0xd,
>> +0xa,
>> +0xa,
>> +0x47,
>> +0x1,
>> +0x0,
>> +0xa,
>> +0x0,
>> +0xa,
>> +0x0,
>> +0x18,
>> +0x79,
>> +0x0,
>> +0x14,
>> +0x13,
>> +0x5f,
>> +0x53,
>> +0x54,
>> +0x41,
>> +0x0,
>> +0xa0,
>> +0x9,
>> +0x93,
>> +0x4d,
>> +0x44,
>> +0x4e,
>> +0x52,
>> +0x0,
>> +0xa4,
>> +0x0,
>> +0xa4,
>> +0xa,
>> +0xb,
>> +0x5b,
>> +0x81,
>> +0x1f,
>> +0x48,
>> +0x50,
>> +0x4d,
>> +0x52,
>> +0x3,
>> +0x4d,
>> +0x52,
>> +0x42,
>> +0x4c,
>> +0x20,
>> +0x4d,
>> +0x52,
>> +0x42,
>> +0x48,
>> +0x20,
>> +0x4d,
>> +0x52,
>> +0x4c,
>> +0x4c,
>> +0x20,
>> +0x4d,
>> +0x52,
>> +0x4c,
>> +0x48,
>> +0x20,
>> +0x4d,
>> +0x50,
>> +0x58,
>> +0x5f,
>> +0x20,
>> +0x5b,
>> +0x81,
>> +0x13,
>> +0x48,
>> +0x50,
>> +0x4d,
>> +0x52,
>> +0x1,
>> +0x0,
>> +0x40,
>> +0xa,
>> +0x4d,
>> +0x45,
>> +0x53,
>> +0x5f,
>> +0x1,
>> +0x4d,
>> +0x49,
>> +0x4e,
>> +0x53,
>> +0x1,
>> +0x5b,
>> +0x1,
>> +0x4d,
>> +0x4c,
>> +0x43,
>> +0x4b,
>> +0x0,
>> +0x5b,
>> +0x81,
>> +0x15,
>> +0x48,
>> +0x50,
>> +0x4d,
>> +0x52,
>> +0x3,
>> +0x4d,
>> +0x53,
>> +0x45,
>> +0x4c,
>> +0x20,
>> +0x4d,
>> +0x4f,
>> +0x45,
>> +0x56,
>> +0x20,
>> +0x4d,
>> +0x4f,
>> +0x53,
>> +0x43,
>> +0x20,
>> +0x14,
>> +0x4a,
>> +0x4,
>> +0x4d,
>> +0x53,
>> +0x43,
>> +0x4e,
>> +0x0,
>> +0xa0,
>> +0x9,
>> +0x93,
>> +0x4d,
>> +0x44,
>> +0x4e,
>> +0x52,
>> +0x0,
>> +0xa4,
>> +0x0,
>> +0x70,
>> +0x0,
>> +0x60,
>> +0x5b,
>> +0x23,
>> +0x4d,
>> +0x4c,
>> +0x43,
>> +0x4b,
>> +0xff,
>> +0xff,
>> +0xa2,
>> +0x25,
>> +0x95,
>> +0x60,
>> +0x4d,
>> +0x44,
>> +0x4e,
>> +0x52,
>> +0x70,
>> +0x60,
>> +0x4d,
>> +0x53,
>> +0x45,
>> +0x4c,
>> +0xa0,
>> +0x13,
>> +0x93,
>> +0x4d,
>> +0x49,
>> +0x4e,
>> +0x53,
>> +0x1,
>> +0x4d,
>> +0x54,
>> +0x46,
>> +0x59,
>> +0x60,
>> +0x1,
>> +0x70,
>> +0x1,
>> +0x4d,
>> +0x49,
>> +0x4e,
>> +0x53,
>> +0x72,
>> +0x60,
>> +0x1,
>> +0x60,
>> +0x5b,
>> +0x27,
>> +0x4d,
>> +0x4c,
>> +0x43,
>> +0x4b,
>> +0xa4,
>> +0x1,
>> +0x14,
>> +0x2d,
>> +0x4d,
>> +0x52,
>> +0x53,
>> +0x54,
>> +0x1,
>> +0x70,
>> +0x0,
>> +0x60,
>> +0x5b,
>> +0x23,
>> +0x4d,
>> +0x4c,
>> +0x43,
>> +0x4b,
>> +0xff,
>> +0xff,
>> +0x70,
>> +0x99,
>> +0x68,
>> +0x0,
>> +0x4d,
>> +0x53,
>> +0x45,
>> +0x4c,
>> +0xa0,
>> +0xb,
>> +0x93,
>> +0x4d,
>> +0x45,
>> +0x53,
>> +0x5f,
>> +0x1,
>> +0x70,
>> +0xa,
>> +0xf,
>> +0x60,
>> +0x5b,
>> +0x27,
>> +0x4d,
>> +0x4c,
>> +0x43,
>> +0x4b,
>> +0xa4,
>> +0x60,
>> +0x14,
>> +0x41,
>> +0x18,
>> +0x4d,
>> +0x43,
>> +0x52,
>> +0x53,
>> +0x9,
>> +0x5b,
>> +0x23,
>> +0x4d,
>> +0x4c,
>> +0x43,
>> +0x4b,
>> +0xff,
>> +0xff,
>> +0x70,
>> +0x99,
>> +0x68,
>> +0x0,
>> +0x4d,
>> +0x53,
>> +0x45,
>> +0x4c,
>> +0x8,
>> +0x4d,
>> +0x52,
>> +0x36,
>> +0x34,
>> +0x11,
>> +0x33,
>> +0xa,
>> +0x30,
>> +0x8a,
>> +0x2b,
>> +0x0,
>> +0x0,
>> +0xc,
>> +0x3,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0xfe,
>> +0xff,
>> +0xff,
>> +0xff,
>> +0xff,
>> +0xff,
>> +0xff,
>> +0xff,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0xff,
>> +0xff,
>> +0xff,
>> +0xff,
>> +0xff,
>> +0xff,
>> +0xff,
>> +0xff,
>> +0x79,
>> +0x0,
>> +0x8a,
>> +0x4d,
>> +0x52,
>> +0x36,
>> +0x34,
>> +0xa,
>> +0xe,
>> +0x4d,
>> +0x49,
>> +0x4e,
>> +0x4c,
>> +0x8a,
>> +0x4d,
>> +0x52,
>> +0x36,
>> +0x34,
>> +0xa,
>> +0x12,
>> +0x4d,
>> +0x49,
>> +0x4e,
>> +0x48,
>> +0x8a,
>> +0x4d,
>> +0x52,
>> +0x36,
>> +0x34,
>> +0xa,
>> +0x26,
>> +0x4c,
>> +0x45,
>> +0x4e,
>> +0x4c,
>> +0x8a,
>> +0x4d,
>> +0x52,
>> +0x36,
>> +0x34,
>> +0xa,
>> +0x2a,
>> +0x4c,
>> +0x45,
>> +0x4e,
>> +0x48,
>> +0x8a,
>> +0x4d,
>> +0x52,
>> +0x36,
>> +0x34,
>> +0xa,
>> +0x16,
>> +0x4d,
>> +0x41,
>> +0x58,
>> +0x4c,
>> +0x8a,
>> +0x4d,
>> +0x52,
>> +0x36,
>> +0x34,
>> +0xa,
>> +0x1a,
>> +0x4d,
>> +0x41,
>> +0x58,
>> +0x48,
>> +0x70,
>> +0x4d,
>> +0x52,
>> +0x42,
>> +0x48,
>> +0x4d,
>> +0x49,
>> +0x4e,
>> +0x48,
>> +0x70,
>> +0x4d,
>> +0x52,
>> +0x42,
>> +0x4c,
>> +0x4d,
>> +0x49,
>> +0x4e,
>> +0x4c,
>> +0x70,
>> +0x4d,
>> +0x52,
>> +0x4c,
>> +0x48,
>> +0x4c,
>> +0x45,
>> +0x4e,
>> +0x48,
>> +0x70,
>> +0x4d,
>> +0x52,
>> +0x4c,
>> +0x4c,
>> +0x4c,
>> +0x45,
>> +0x4e,
>> +0x4c,
>> +0x72,
>> +0x4d,
>> +0x49,
>> +0x4e,
>> +0x4c,
>> +0x4c,
>> +0x45,
>> +0x4e,
>> +0x4c,
>> +0x4d,
>> +0x41,
>> +0x58,
>> +0x4c,
>> +0x72,
>> +0x4d,
>> +0x49,
>> +0x4e,
>> +0x48,
>> +0x4c,
>> +0x45,
>> +0x4e,
>> +0x48,
>> +0x4d,
>> +0x41,
>> +0x58,
>> +0x48,
>> +0xa0,
>> +0x14,
>> +0x95,
>> +0x4d,
>> +0x41,
>> +0x58,
>> +0x4c,
>> +0x4d,
>> +0x49,
>> +0x4e,
>> +0x4c,
>> +0x72,
>> +0x4d,
>> +0x41,
>> +0x58,
>> +0x48,
>> +0x1,
>> +0x4d,
>> +0x41,
>> +0x58,
>> +0x48,
>> +0xa0,
>> +0x11,
>> +0x95,
>> +0x4d,
>> +0x41,
>> +0x58,
>> +0x4c,
>> +0x1,
>> +0x74,
>> +0x4d,
>> +0x41,
>> +0x58,
>> +0x48,
>> +0x1,
>> +0x4d,
>> +0x41,
>> +0x58,
>> +0x48,
>> +0x74,
>> +0x4d,
>> +0x41,
>> +0x58,
>> +0x4c,
>> +0x1,
>> +0x4d,
>> +0x41,
>> +0x58,
>> +0x4c,
>> +0xa0,
>> +0x44,
>> +0x7,
>> +0x93,
>> +0x4d,
>> +0x41,
>> +0x58,
>> +0x48,
>> +0x0,
>> +0x8,
>> +0x4d,
>> +0x52,
>> +0x33,
>> +0x32,
>> +0x11,
>> +0x1f,
>> +0xa,
>> +0x1c,
>> +0x87,
>> +0x17,
>> +0x0,
>> +0x0,
>> +0xc,
>> +0x3,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0xfe,
>> +0xff,
>> +0xff,
>> +0xff,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0x0,
>> +0xff,
>> +0xff,
>> +0xff,
>> +0xff,
>> +0x79,
>> +0x0,
>> +0x8a,
>> +0x4d,
>> +0x52,
>> +0x33,
>> +0x32,
>> +0xa,
>> +0xa,
>> +0x4d,
>> +0x49,
>> +0x4e,
>> +0x5f,
>> +0x8a,
>> +0x4d,
>> +0x52,
>> +0x33,
>> +0x32,
>> +0xa,
>> +0xe,
>> +0x4d,
>> +0x41,
>> +0x58,
>> +0x5f,
>> +0x8a,
>> +0x4d,
>> +0x52,
>> +0x33,
>> +0x32,
>> +0xa,
>> +0x16,
>> +0x4c,
>> +0x45,
>> +0x4e,
>> +0x5f,
>> +0x70,
>> +0x4d,
>> +0x49,
>> +0x4e,
>> +0x4c,
>> +0x4d,
>> +0x49,
>> +0x4e,
>> +0x5f,
>> +0x70,
>> +0x4d,
>> +0x41,
>> +0x58,
>> +0x4c,
>> +0x4d,
>> +0x41,
>> +0x58,
>> +0x5f,
>> +0x70,
>> +0x4c,
>> +0x45,
>> +0x4e,
>> +0x4c,
>> +0x4c,
>> +0x45,
>> +0x4e,
>> +0x5f,
>> +0x5b,
>> +0x27,
>> +0x4d,
>> +0x4c,
>> +0x43,
>> +0x4b,
>> +0xa4,
>> +0x4d,
>> +0x52,
>> +0x33,
>> +0x32,
>> +0x5b,
>> +0x27,
>> +0x4d,
>> +0x4c,
>> +0x43,
>> +0x4b,
>> +0xa4,
>> +0x4d,
>> +0x52,
>> +0x36,
>> +0x34,
>> +0x14,
>> +0x24,
>> +0x4d,
>> +0x50,
>> +0x58,
>> +0x4d,
>> +0x1,
>> +0x5b,
>> +0x23,
>> +0x4d,
>> +0x4c,
>> +0x43,
>> +0x4b,
>> +0xff,
>> +0xff,
>> +0x70,
>> +0x99,
>> +0x68,
>> +0x0,
>> +0x4d,
>> +0x53,
>> +0x45,
>> +0x4c,
>> +0x70,
>> +0x4d,
>> +0x50,
>> +0x58,
>> +0x5f,
>> +0x60,
>> +0x5b,
>> +0x27,
>> +0x4d,
>> +0x4c,
>> +0x43,
>> +0x4b,
>> +0xa4,
>> +0x60,
>> +0x14,
>> +0x28,
>> +0x4d,
>> +0x4f,
>> +0x53,
>> +0x54,
>> +0x4,
>> +0x5b,
>> +0x23,
>> +0x4d,
>> +0x4c,
>> +0x43,
>> +0x4b,
>> +0xff,
>> +0xff,
>> +0x70,
>> +0x99,
>> +0x68,
>> +0x0,
>> +0x4d,
>> +0x53,
>> +0x45,
>> +0x4c,
>> +0x70,
>> +0x69,
>> +0x4d,
>> +0x4f,
>> +0x45,
>> +0x56,
>> +0x70,
>> +0x6a,
>> +0x4d,
>> +0x4f,
>> +0x53,
>> +0x43,
>> +0x5b,
>> +0x27,
>> +0x4d,
>> +0x4c,
>> +0x43,
>> +0x4b,
>> +0x10,
>>  0x42,
>>  0xa,
>>  0x5f,
>> diff --git a/hw/i386/ssdt-mem.hex.generated b/hw/i386/ssdt-mem.hex.generated
>> index 00bd34d..b3bfbbd 100644
>> --- a/hw/i386/ssdt-mem.hex.generated
>> +++ b/hw/i386/ssdt-mem.hex.generated
>> @@ -11,7 +11,7 @@ static unsigned char ssdm_mem_aml[] = {
>>  0x0,
>>  0x0,
>>  0x2,
>> -0x71,
>> +0x66,
>>  0x42,
>>  0x58,
>>  0x50,
>> @@ -34,9 +34,9 @@ static unsigned char ssdm_mem_aml[] = {
>>  0x4e,
>>  0x54,
>>  0x4c,
>> -0x15,
>> -0x11,
>> -0x13,
>> +0x28,
>> +0x8,
>> +0x14,
>>  0x20,
>>  0x10,
>>  0x42,
>> diff --git a/hw/i386/ssdt-misc.dsl b/hw/i386/ssdt-misc.dsl
>> index 0fd4480..1e3baae 100644
>> --- a/hw/i386/ssdt-misc.dsl
>> +++ b/hw/i386/ssdt-misc.dsl
>> @@ -36,6 +36,8 @@ DefinitionBlock ("ssdt-misc.aml", "SSDT", 0x01, "BXPC", "BXSSDTSUSP", 0x1)
>>         Name(P1E, Buffer() { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 })
>>         ACPI_EXTRACT_NAME_BUFFER8 acpi_pci64_length
>>         Name(P1L, Buffer() { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 })
>> +       ACPI_EXTRACT_NAME_DWORD_CONST ssdt_mctrl_nr_slots
>> +       Name(MEMORY_SLOTS_NUMBER, 0x12345678)
>>      }
>>  
>>  
>> @@ -117,167 +119,4 @@ DefinitionBlock ("ssdt-misc.aml", "SSDT", 0x01, "BXPC", "BXSSDTSUSP", 0x1)
>>              }
>>          }
>>      }
>> -
>> -    External(MEMORY_SLOT_NOTIFY_METHOD, MethodObj)
>> -    Scope(\_SB.PCI0) {
>> -        Device(MEMORY_HOTPLUG_DEVICE) {
>> -            Name(_HID, "PNP0A06")
>> -            Name(_UID, "Memory hotplug resources")
>> -
>> -            ACPI_EXTRACT_NAME_DWORD_CONST ssdt_mctrl_nr_slots
>> -            Name(MEMORY_SLOTS_NUMBER, 0x12345678)
>> -
>> -            /* Memory hotplug IO registers */
>> -            OperationRegion(MEMORY_HOTPLUG_IO_REGION, SystemIO,
>> -                            ACPI_MEMORY_HOTPLUG_BASE,
>> -                            ACPI_MEMORY_HOTPLUG_IO_LEN)
>> -
>> -            Name(_CRS, ResourceTemplate() {
>> -                IO(Decode16, ACPI_MEMORY_HOTPLUG_BASE, ACPI_MEMORY_HOTPLUG_BASE,
>> -                   0, ACPI_MEMORY_HOTPLUG_IO_LEN, IO)
>> -            })
>> -
>> -            Method(_STA, 0) {
>> -                If (LEqual(MEMORY_SLOTS_NUMBER, Zero)) {
>> -                    Return(0x0)
>> -                }
>> -                /* present, functioning, decoding, not shown in UI */
>> -                Return(0xB)
>> -            }
>> -
>> -            Field(MEMORY_HOTPLUG_IO_REGION, DWordAcc, NoLock, Preserve) {
>> -                MEMORY_SLOT_ADDR_LOW, 32,  // read only
>> -                MEMORY_SLOT_ADDR_HIGH, 32, // read only
>> -                MEMORY_SLOT_SIZE_LOW, 32,  // read only
>> -                MEMORY_SLOT_SIZE_HIGH, 32, // read only
>> -                MEMORY_SLOT_PROXIMITY, 32, // read only
>> -            }
>> -            Field(MEMORY_HOTPLUG_IO_REGION, ByteAcc, NoLock, Preserve) {
>> -                Offset(20),
>> -                MEMORY_SLOT_ENABLED,  1, // 1 if enabled, read only
>> -                MEMORY_SLOT_INSERT_EVENT, 1, // (read) 1 if has a insert event. (write) 1 to clear event
>> -            }
>> -
>> -            Mutex (MEMORY_SLOT_LOCK, 0)
>> -            Field (MEMORY_HOTPLUG_IO_REGION, DWordAcc, NoLock, Preserve) {
>> -                MEMORY_SLOT_SLECTOR, 32,  // DIMM selector, write only
>> -                MEMORY_SLOT_OST_EVENT, 32,  // _OST event code, write only
>> -                MEMORY_SLOT_OST_STATUS, 32,  // _OST status code, write only
>> -            }
>> -
>> -            Method(MEMORY_SLOT_SCAN_METHOD, 0) {
>> -                If (LEqual(MEMORY_SLOTS_NUMBER, Zero)) {
>> -                     Return(Zero)
>> -                }
>> -
>> -                Store(Zero, Local0) // Mem devs iterrator
>> -                Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
>> -                while (LLess(Local0, MEMORY_SLOTS_NUMBER)) {
>> -                    Store(Local0, MEMORY_SLOT_SLECTOR) // select Local0 DIMM
>> -                    If (LEqual(MEMORY_SLOT_INSERT_EVENT, One)) { // Memory device needs check
>> -                        MEMORY_SLOT_NOTIFY_METHOD(Local0, 1)
>> -                        Store(1, MEMORY_SLOT_INSERT_EVENT)
>> -                    }
>> -                    // TODO: handle memory eject request
>> -                    Add(Local0, One, Local0) // goto next DIMM
>> -                }
>> -                Release(MEMORY_SLOT_LOCK)
>> -                Return(One)
>> -            }
>> -
>> -            Method(MEMORY_SLOT_STATUS_METHOD, 1) {
>> -                Store(Zero, Local0)
>> -
>> -                Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
>> -                Store(ToInteger(Arg0), MEMORY_SLOT_SLECTOR) // select DIMM
>> -
>> -                If (LEqual(MEMORY_SLOT_ENABLED, One)) {
>> -                    Store(0xF, Local0)
>> -                }
>> -
>> -                Release(MEMORY_SLOT_LOCK)
>> -                Return(Local0)
>> -            }
>> -
>> -            Method(MEMORY_SLOT_CRS_METHOD, 1, Serialized) {
>> -                Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
>> -                Store(ToInteger(Arg0), MEMORY_SLOT_SLECTOR) // select DIMM
>> -
>> -                Name(MR64, ResourceTemplate() {
>> -                    QWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed,
>> -                    Cacheable, ReadWrite,
>> -                    0x0000000000000000,        // Address Space Granularity
>> -                    0x0000000000000000,        // Address Range Minimum
>> -                    0xFFFFFFFFFFFFFFFE,        // Address Range Maximum
>> -                    0x0000000000000000,        // Address Translation Offset
>> -                    0xFFFFFFFFFFFFFFFF,        // Address Length
>> -                    ,, MW64, AddressRangeMemory, TypeStatic)
>> -                })
>> -
>> -                CreateDWordField(MR64, 14, MINL)
>> -                CreateDWordField(MR64, 18, MINH)
>> -                CreateDWordField(MR64, 38, LENL)
>> -                CreateDWordField(MR64, 42, LENH)
>> -                CreateDWordField(MR64, 22, MAXL)
>> -                CreateDWordField(MR64, 26, MAXH)
>> -
>> -                Store(MEMORY_SLOT_ADDR_HIGH, MINH)
>> -                Store(MEMORY_SLOT_ADDR_LOW, MINL)
>> -                Store(MEMORY_SLOT_SIZE_HIGH, LENH)
>> -                Store(MEMORY_SLOT_SIZE_LOW, LENL)
>> -
>> -                // 64-bit math: MAX = MIN + LEN - 1
>> -                Add(MINL, LENL, MAXL)
>> -                Add(MINH, LENH, MAXH)
>> -                If (LLess(MAXL, MINL)) {
>> -                    Add(MAXH, One, MAXH)
>> -                }
>> -                If (LLess(MAXL, One)) {
>> -                    Subtract(MAXH, One, MAXH)
>> -                }
>> -                Subtract(MAXL, One, MAXL)
>> -
>> -                If (LEqual(MAXH, Zero)){
>> -                    Name(MR32, ResourceTemplate() {
>> -                        DWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed,
>> -                        Cacheable, ReadWrite,
>> -                        0x00000000,        // Address Space Granularity
>> -                        0x00000000,        // Address Range Minimum
>> -                        0xFFFFFFFE,        // Address Range Maximum
>> -                        0x00000000,        // Address Translation Offset
>> -                        0xFFFFFFFF,        // Address Length
>> -                        ,, MW32, AddressRangeMemory, TypeStatic)
>> -                    })
>> -                    CreateDWordField(MR32, MW32._MIN, MIN)
>> -                    CreateDWordField(MR32, MW32._MAX, MAX)
>> -                    CreateDWordField(MR32, MW32._LEN, LEN)
>> -                    Store(MINL, MIN)
>> -                    Store(MAXL, MAX)
>> -                    Store(LENL, LEN)
>> -
>> -                    Release(MEMORY_SLOT_LOCK)
>> -                    Return(MR32)
>> -                }
>> -
>> -                Release(MEMORY_SLOT_LOCK)
>> -                Return(MR64)
>> -            }
>> -
>> -            Method(MEMORY_SLOT_PROXIMITY_METHOD, 1) {
>> -                Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
>> -                Store(ToInteger(Arg0), MEMORY_SLOT_SLECTOR) // select DIMM
>> -                Store(MEMORY_SLOT_PROXIMITY, Local0)
>> -                Release(MEMORY_SLOT_LOCK)
>> -                Return(Local0)
>> -            }
>> -
>> -            Method(MEMORY_SLOT_OST_METHOD, 4) {
>> -                Acquire(MEMORY_SLOT_LOCK, 0xFFFF)
>> -                Store(ToInteger(Arg0), MEMORY_SLOT_SLECTOR) // select DIMM
>> -                Store(Arg1, MEMORY_SLOT_OST_EVENT)
>> -                Store(Arg2, MEMORY_SLOT_OST_STATUS)
>> -                Release(MEMORY_SLOT_LOCK)
>> -            }
>> -        } // Device()
>> -    } // Scope()
>>  }
>> diff --git a/hw/i386/ssdt-misc.hex.generated b/hw/i386/ssdt-misc.hex.generated
>> index ba4268a..cbcf61d 100644
>> --- a/hw/i386/ssdt-misc.hex.generated
>> +++ b/hw/i386/ssdt-misc.hex.generated
>> @@ -2,13 +2,13 @@ static unsigned char acpi_pci64_length[] = {
>>  0x6f
>>  };
>>  static unsigned char acpi_s4_pkg[] = {
>> -0x8f
>> +0x99
>>  };
>> -static unsigned short ssdt_mctrl_nr_slots[] = {
>> -0x1aa
>> +static unsigned char ssdt_mctrl_nr_slots[] = {
>> +0x7d
>>  };
>>  static unsigned char acpi_s3_name[] = {
>> -0x7c
>> +0x86
>>  };
>>  static unsigned char acpi_pci32_start[] = {
>>  0x2f
>> @@ -21,12 +21,12 @@ static unsigned char ssdp_misc_aml[] = {
>>  0x53,
>>  0x44,
>>  0x54,
>> -0x7e,
>> -0x4,
>> +0x6c,
>> +0x1,
>>  0x0,
>>  0x0,
>>  0x1,
>> -0x8b,
>> +0x3,
>>  0x42,
>>  0x58,
>>  0x50,
>> @@ -49,12 +49,12 @@ static unsigned char ssdp_misc_aml[] = {
>>  0x4e,
>>  0x54,
>>  0x4c,
>> -0x15,
>> -0x11,
>> -0x13,
>> +0x28,
>> +0x8,
>> +0x14,
>>  0x20,
>>  0x10,
>> -0x42,
>> +0x4c,
>>  0x5,
>>  0x5c,
>>  0x0,
>> @@ -136,6 +136,16 @@ static unsigned char ssdp_misc_aml[] = {
>>  0x0,
>>  0x0,
>>  0x0,
>> +0x8,
>> +0x4d,
>> +0x44,
>> +0x4e,
>> +0x52,
>> +0xc,
>> +0x78,
>> +0x56,
>> +0x34,
>> +0x12,
>>  0x10,
>>  0x29,
>>  0x5c,
>> @@ -370,809 +380,13 @@ static unsigned char ssdp_misc_aml[] = {
>>  0x49,
>>  0x4f,
>>  0x4d,
>> -0x58,
>> -0x10,
>> -0x4b,
>> -0x31,
>> -0x5c,
>> -0x2e,
>> -0x5f,
>> -0x53,
>> -0x42,
>> -0x5f,
>> -0x50,
>> -0x43,
>> -0x49,
>> -0x30,
>> -0x5b,
>> -0x82,
>> -0x4d,
>> -0x30,
>> -0x4d,
>> -0x48,
>> -0x50,
>> -0x44,
>> -0x8,
>> -0x5f,
>> -0x48,
>> -0x49,
>> -0x44,
>> -0xd,
>> -0x50,
>> -0x4e,
>> -0x50,
>> -0x30,
>> -0x41,
>> -0x30,
>> -0x36,
>> -0x0,
>> -0x8,
>> -0x5f,
>> -0x55,
>> -0x49,
>> -0x44,
>> -0xd,
>> -0x4d,
>> -0x65,
>> -0x6d,
>> -0x6f,
>> -0x72,
>> -0x79,
>> -0x20,
>> -0x68,
>> -0x6f,
>> -0x74,
>> -0x70,
>> -0x6c,
>> -0x75,
>> -0x67,
>> -0x20,
>> -0x72,
>> -0x65,
>> -0x73,
>> -0x6f,
>> -0x75,
>> -0x72,
>> -0x63,
>> -0x65,
>> -0x73,
>> -0x0,
>> -0x8,
>> -0x4d,
>> -0x44,
>> -0x4e,
>> -0x52,
>> -0xc,
>> -0x78,
>> -0x56,
>> -0x34,
>> -0x12,
>> -0x5b,
>> -0x80,
>> -0x48,
>> -0x50,
>> -0x4d,
>> -0x52,
>> -0x1,
>> -0xb,
>> -0x0,
>> -0xa,
>> -0xa,
>> -0x18,
>> -0x8,
>> -0x5f,
>> -0x43,
>> -0x52,
>> -0x53,
>> -0x11,
>> -0xd,
>> -0xa,
>> -0xa,
>> -0x47,
>> -0x1,
>> -0x0,
>> -0xa,
>> -0x0,
>> -0xa,
>> -0x0,
>> -0x18,
>> -0x79,
>> -0x0,
>> -0x14,
>> -0x13,
>> -0x5f,
>> -0x53,
>> -0x54,
>> -0x41,
>> -0x0,
>> -0xa0,
>> -0x9,
>> -0x93,
>> -0x4d,
>> -0x44,
>> -0x4e,
>> -0x52,
>> -0x0,
>> -0xa4,
>> -0x0,
>> -0xa4,
>> -0xa,
>> -0xb,
>> -0x5b,
>> -0x81,
>> -0x1f,
>> -0x48,
>> -0x50,
>> -0x4d,
>> -0x52,
>> -0x3,
>> -0x4d,
>> -0x52,
>> -0x42,
>> -0x4c,
>> -0x20,
>> -0x4d,
>> -0x52,
>> -0x42,
>> -0x48,
>> -0x20,
>> -0x4d,
>> -0x52,
>> -0x4c,
>> -0x4c,
>> -0x20,
>> -0x4d,
>> -0x52,
>> -0x4c,
>> -0x48,
>> -0x20,
>> -0x4d,
>> -0x50,
>> -0x58,
>> -0x5f,
>> -0x20,
>> -0x5b,
>> -0x81,
>> -0x13,
>> -0x48,
>> -0x50,
>> -0x4d,
>> -0x52,
>> -0x1,
>> -0x0,
>> -0x40,
>> -0xa,
>> -0x4d,
>> -0x45,
>> -0x53,
>> -0x5f,
>> -0x1,
>> -0x4d,
>> -0x49,
>> -0x4e,
>> -0x53,
>> -0x1,
>> -0x5b,
>> -0x1,
>> -0x4d,
>> -0x4c,
>> -0x43,
>> -0x4b,
>> -0x0,
>> -0x5b,
>> -0x81,
>> -0x15,
>> -0x48,
>> -0x50,
>> -0x4d,
>> -0x52,
>> -0x3,
>> -0x4d,
>> -0x53,
>> -0x45,
>> -0x4c,
>> -0x20,
>> -0x4d,
>> -0x4f,
>> -0x45,
>> -0x56,
>> -0x20,
>> -0x4d,
>> -0x4f,
>> -0x53,
>> -0x43,
>> -0x20,
>> -0x14,
>> -0x4a,
>> -0x4,
>> -0x4d,
>> -0x53,
>> -0x43,
>> -0x4e,
>> -0x0,
>> -0xa0,
>> -0x9,
>> -0x93,
>> -0x4d,
>> -0x44,
>> -0x4e,
>> -0x52,
>> -0x0,
>> -0xa4,
>> -0x0,
>> -0x70,
>> -0x0,
>> -0x60,
>> -0x5b,
>> -0x23,
>> -0x4d,
>> -0x4c,
>> -0x43,
>> -0x4b,
>> -0xff,
>> -0xff,
>> -0xa2,
>> -0x25,
>> -0x95,
>> -0x60,
>> -0x4d,
>> -0x44,
>> -0x4e,
>> -0x52,
>> -0x70,
>> -0x60,
>> -0x4d,
>> -0x53,
>> -0x45,
>> -0x4c,
>> -0xa0,
>> -0x13,
>> -0x93,
>> -0x4d,
>> -0x49,
>> -0x4e,
>> -0x53,
>> -0x1,
>> -0x4d,
>> -0x54,
>> -0x46,
>> -0x59,
>> -0x60,
>> -0x1,
>> -0x70,
>> -0x1,
>> -0x4d,
>> -0x49,
>> -0x4e,
>> -0x53,
>> -0x72,
>> -0x60,
>> -0x1,
>> -0x60,
>> -0x5b,
>> -0x27,
>> -0x4d,
>> -0x4c,
>> -0x43,
>> -0x4b,
>> -0xa4,
>> -0x1,
>> -0x14,
>> -0x2d,
>> -0x4d,
>> -0x52,
>> -0x53,
>> -0x54,
>> -0x1,
>> -0x70,
>> -0x0,
>> -0x60,
>> -0x5b,
>> -0x23,
>> -0x4d,
>> -0x4c,
>> -0x43,
>> -0x4b,
>> -0xff,
>> -0xff,
>> -0x70,
>> -0x99,
>> -0x68,
>> -0x0,
>> -0x4d,
>> -0x53,
>> -0x45,
>> -0x4c,
>> -0xa0,
>> -0xb,
>> -0x93,
>> -0x4d,
>> -0x45,
>> -0x53,
>> -0x5f,
>> -0x1,
>> -0x70,
>> -0xa,
>> -0xf,
>> -0x60,
>> -0x5b,
>> -0x27,
>> -0x4d,
>> -0x4c,
>> -0x43,
>> -0x4b,
>> -0xa4,
>> -0x60,
>> -0x14,
>> -0x41,
>> -0x18,
>> -0x4d,
>> -0x43,
>> -0x52,
>> -0x53,
>> -0x9,
>> -0x5b,
>> -0x23,
>> -0x4d,
>> -0x4c,
>> -0x43,
>> -0x4b,
>> -0xff,
>> -0xff,
>> -0x70,
>> -0x99,
>> -0x68,
>> -0x0,
>> -0x4d,
>> -0x53,
>> -0x45,
>> -0x4c,
>> -0x8,
>> -0x4d,
>> -0x52,
>> -0x36,
>> -0x34,
>> -0x11,
>> -0x33,
>> -0xa,
>> -0x30,
>> -0x8a,
>> -0x2b,
>> -0x0,
>> -0x0,
>> -0xc,
>> -0x3,
>> -0x0,
>> -0x0,
>> -0x0,
>> -0x0,
>> -0x0,
>> -0x0,
>> -0x0,
>> -0x0,
>> -0x0,
>> -0x0,
>> -0x0,
>> -0x0,
>> -0x0,
>> -0x0,
>> -0x0,
>> -0x0,
>> -0xfe,
>> -0xff,
>> -0xff,
>> -0xff,
>> -0xff,
>> -0xff,
>> -0xff,
>> -0xff,
>> -0x0,
>> -0x0,
>> -0x0,
>> -0x0,
>> -0x0,
>> -0x0,
>> -0x0,
>> -0x0,
>> -0xff,
>> -0xff,
>> -0xff,
>> -0xff,
>> -0xff,
>> -0xff,
>> -0xff,
>> -0xff,
>> -0x79,
>> -0x0,
>> -0x8a,
>> -0x4d,
>> -0x52,
>> -0x36,
>> -0x34,
>> -0xa,
>> -0xe,
>> -0x4d,
>> -0x49,
>> -0x4e,
>> -0x4c,
>> -0x8a,
>> -0x4d,
>> -0x52,
>> -0x36,
>> -0x34,
>> -0xa,
>> -0x12,
>> -0x4d,
>> -0x49,
>> -0x4e,
>> -0x48,
>> -0x8a,
>> -0x4d,
>> -0x52,
>> -0x36,
>> -0x34,
>> -0xa,
>> -0x26,
>> -0x4c,
>> -0x45,
>> -0x4e,
>> -0x4c,
>> -0x8a,
>> -0x4d,
>> -0x52,
>> -0x36,
>> -0x34,
>> -0xa,
>> -0x2a,
>> -0x4c,
>> -0x45,
>> -0x4e,
>> -0x48,
>> -0x8a,
>> -0x4d,
>> -0x52,
>> -0x36,
>> -0x34,
>> -0xa,
>> -0x16,
>> -0x4d,
>> -0x41,
>> -0x58,
>> -0x4c,
>> -0x8a,
>> -0x4d,
>> -0x52,
>> -0x36,
>> -0x34,
>> -0xa,
>> -0x1a,
>> -0x4d,
>> -0x41,
>> -0x58,
>> -0x48,
>> -0x70,
>> -0x4d,
>> -0x52,
>> -0x42,
>> -0x48,
>> -0x4d,
>> -0x49,
>> -0x4e,
>> -0x48,
>> -0x70,
>> -0x4d,
>> -0x52,
>> -0x42,
>> -0x4c,
>> -0x4d,
>> -0x49,
>> -0x4e,
>> -0x4c,
>> -0x70,
>> -0x4d,
>> -0x52,
>> -0x4c,
>> -0x48,
>> -0x4c,
>> -0x45,
>> -0x4e,
>> -0x48,
>> -0x70,
>> -0x4d,
>> -0x52,
>> -0x4c,
>> -0x4c,
>> -0x4c,
>> -0x45,
>> -0x4e,
>> -0x4c,
>> -0x72,
>> -0x4d,
>> -0x49,
>> -0x4e,
>> -0x4c,
>> -0x4c,
>> -0x45,
>> -0x4e,
>> -0x4c,
>> -0x4d,
>> -0x41,
>> -0x58,
>> -0x4c,
>> -0x72,
>> -0x4d,
>> -0x49,
>> -0x4e,
>> -0x48,
>> -0x4c,
>> -0x45,
>> -0x4e,
>> -0x48,
>> -0x4d,
>> -0x41,
>> -0x58,
>> -0x48,
>> -0xa0,
>> -0x14,
>> -0x95,
>> -0x4d,
>> -0x41,
>> -0x58,
>> -0x4c,
>> -0x4d,
>> -0x49,
>> -0x4e,
>> -0x4c,
>> -0x72,
>> -0x4d,
>> -0x41,
>> -0x58,
>> -0x48,
>> -0x1,
>> -0x4d,
>> -0x41,
>> -0x58,
>> -0x48,
>> -0xa0,
>> -0x11,
>> -0x95,
>> -0x4d,
>> -0x41,
>> -0x58,
>> -0x4c,
>> -0x1,
>> -0x74,
>> -0x4d,
>> -0x41,
>> -0x58,
>> -0x48,
>> -0x1,
>> -0x4d,
>> -0x41,
>> -0x58,
>> -0x48,
>> -0x74,
>> -0x4d,
>> -0x41,
>> -0x58,
>> -0x4c,
>> -0x1,
>> -0x4d,
>> -0x41,
>> -0x58,
>> -0x4c,
>> -0xa0,
>> -0x44,
>> -0x7,
>> -0x93,
>> -0x4d,
>> -0x41,
>> -0x58,
>> -0x48,
>> -0x0,
>> -0x8,
>> -0x4d,
>> -0x52,
>> -0x33,
>> -0x32,
>> -0x11,
>> -0x1f,
>> -0xa,
>> -0x1c,
>> -0x87,
>> -0x17,
>> -0x0,
>> -0x0,
>> -0xc,
>> -0x3,
>> -0x0,
>> -0x0,
>> -0x0,
>> -0x0,
>> -0x0,
>> -0x0,
>> -0x0,
>> -0x0,
>> -0xfe,
>> -0xff,
>> -0xff,
>> -0xff,
>> -0x0,
>> -0x0,
>> -0x0,
>> -0x0,
>> -0xff,
>> -0xff,
>> -0xff,
>> -0xff,
>> -0x79,
>> -0x0,
>> -0x8a,
>> -0x4d,
>> -0x52,
>> -0x33,
>> -0x32,
>> -0xa,
>> -0xa,
>> -0x4d,
>> -0x49,
>> -0x4e,
>> -0x5f,
>> -0x8a,
>> -0x4d,
>> -0x52,
>> -0x33,
>> -0x32,
>> -0xa,
>> -0xe,
>> -0x4d,
>> -0x41,
>> -0x58,
>> -0x5f,
>> -0x8a,
>> -0x4d,
>> -0x52,
>> -0x33,
>> -0x32,
>> -0xa,
>> -0x16,
>> -0x4c,
>> -0x45,
>> -0x4e,
>> -0x5f,
>> -0x70,
>> -0x4d,
>> -0x49,
>> -0x4e,
>> -0x4c,
>> -0x4d,
>> -0x49,
>> -0x4e,
>> -0x5f,
>> -0x70,
>> -0x4d,
>> -0x41,
>> -0x58,
>> -0x4c,
>> -0x4d,
>> -0x41,
>> -0x58,
>> -0x5f,
>> -0x70,
>> -0x4c,
>> -0x45,
>> -0x4e,
>> -0x4c,
>> -0x4c,
>> -0x45,
>> -0x4e,
>> -0x5f,
>> -0x5b,
>> -0x27,
>> -0x4d,
>> -0x4c,
>> -0x43,
>> -0x4b,
>> -0xa4,
>> -0x4d,
>> -0x52,
>> -0x33,
>> -0x32,
>> -0x5b,
>> -0x27,
>> -0x4d,
>> -0x4c,
>> -0x43,
>> -0x4b,
>> -0xa4,
>> -0x4d,
>> -0x52,
>> -0x36,
>> -0x34,
>> -0x14,
>> -0x24,
>> -0x4d,
>> -0x50,
>> -0x58,
>> -0x4d,
>> -0x1,
>> -0x5b,
>> -0x23,
>> -0x4d,
>> -0x4c,
>> -0x43,
>> -0x4b,
>> -0xff,
>> -0xff,
>> -0x70,
>> -0x99,
>> -0x68,
>> -0x0,
>> -0x4d,
>> -0x53,
>> -0x45,
>> -0x4c,
>> -0x70,
>> -0x4d,
>> -0x50,
>> -0x58,
>> -0x5f,
>> -0x60,
>> -0x5b,
>> -0x27,
>> -0x4d,
>> -0x4c,
>> -0x43,
>> -0x4b,
>> -0xa4,
>> -0x60,
>> -0x14,
>> -0x28,
>> -0x4d,
>> -0x4f,
>> -0x53,
>> -0x54,
>> -0x4,
>> -0x5b,
>> -0x23,
>> -0x4d,
>> -0x4c,
>> -0x43,
>> -0x4b,
>> -0xff,
>> -0xff,
>> -0x70,
>> -0x99,
>> -0x68,
>> -0x0,
>> -0x4d,
>> -0x53,
>> -0x45,
>> -0x4c,
>> -0x70,
>> -0x69,
>> -0x4d,
>> -0x4f,
>> -0x45,
>> -0x56,
>> -0x70,
>> -0x6a,
>> -0x4d,
>> -0x4f,
>> -0x53,
>> -0x43,
>> -0x5b,
>> -0x27,
>> -0x4d,
>> -0x4c,
>> -0x43,
>> -0x4b
>> +0x58
>>  };
>>  static unsigned char ssdt_isa_pest[] = {
>> -0xd0
>> +0xda
>>  };
>>  static unsigned char acpi_s4_name[] = {
>> -0x88
>> +0x92
>>  };
>>  static unsigned char acpi_pci64_start[] = {
>>  0x4d
>> diff --git a/tests/acpi-test-data/pc/DSDT b/tests/acpi-test-data/pc/DSDT
>> index d37ec34454e6f3db5e91b777f94e03be67a5f583..ee9cc6781cea3a9515b9a176eea3459f8e4d8655 100644
>> GIT binary patch
>> delta 814
>> zcmZ8fO>fgc5ZzTP;cjS9h#MkQsYZMX1TsyPb5lFuz;3W?Qx*BJmfDDdKv}u%Atw_q
>> zpkA#WxJ4*`fIq`u;f9%6$0h1o8ohlp@9mCv{%m~TWNzq2Mx79P^ozAww)^~<4ELn(
>> z4D9%;V++rB4e1Tsb${sFJ-bT``4)C!^m&|4tmE;i`gHc*N=GN-v-EIuLgFu;F9KR4
>> zjI|Bv1Yu*Hv6qxE_}UX<Hf0#~$ZRba?l2&8GH11Tx`mn*5$y5Ig6Kiu90MT#Kw9y%
>> zsa?q~6a7$9F&Kt4rh+@KNj%*s)nOkbZ~FTXLdP;+t%}eYE}f)E65mBhQT)7rk>L3%
>> z5ulnib8RT17w@u!Ds7)8G>IQ#`J9?hMG!`G$w2)$CR$p{^@S9>QB@~quPvbOwd$~{
>> z)(}B=r_o{d`4d8}uaGP2Z-FZ-ii+2J2orLSN>+zU@)F(z=#}sR?^o<&fD5)IdIyWz
>> z+W<X<e-%XtI2r-q9tsd}G)a-p5TO`%I*;<1d4U`jq`0S=Y-p06UNVR{=J?FLmLpA|
>> z>CSdzi*0_pwcIo|i+y5`y1&jgV_+{c=n8Nh#Il4fxRF$NH0Bk$V^ZNoF|~LklwHE^
>> pj(HCTN6@Qppm3c2ztkfbm1uRjsD-bpKHwawk2pxBXMTtM{s%^7?%e<Y
>>
>> delta 23
>> ecmeB>`7X-k66_N4or{5iv0)>Z1lMF^-m3sr#Rl;J
>>
>> diff --git a/tests/acpi-test-data/pc/SSDT b/tests/acpi-test-data/pc/SSDT
>> index eb2d8b698ce6a3a910a05244a3b6cf80bf818fb9..558e4c85b031ec081045aec6cc382a680e9c6009 100644
>> GIT binary patch
>> delta 38
>> ucmew<{#=kNIM^lRIR^s+Bi}?WX-1!kYJqGVzAk=2JQIsQY_4aiVg~@)a|=)a
>>
>> delta 833
>> zcmZ8fO>fgc5ZzTP)!np3CZ>%5sYXCSR3Ot-Ig{7{hwcXBHK@pyYzajaRFsw59wH7V
>> zT#(8sihAG{q5K1W6c_$LFN7I?l!&#oe*0$M+nt^HrC)3?DV^Y=LJ0jfVmD}OwDoc{
>> z{GIMSK6n(#R^-_oEBqoX;d+i1xgBTK>v~qxY7i}Y1uN0}*iQ!LVgE!OoxU@Z-f{ml
>> zdD}ZCnsB=Q3V{)Rc0J+K3Sq3KMYb>XRmPrC!r-e7h*6DX&?J-PF)GNEOj#vNhnpx`
>> z5PplBFu5>sL>!Q}ADQ8>nz@oEOtfW0MW-uiNCmg|NI1Nfi)9-mFWRqRlD26)Ulh{r
>> z&Yh%49NtFBZ1&^sd5q_)Sb%DhR>zs62%f%)smkn=n8x8f+&-noL*dJS&Kaohha{6$
>> z#@U4wyHf6sjb=?i-pl1-<z7wrja|LYtg~%GRu=HFijijjKeK$4Y_XgT$Qdfx8r+fR
>> z@G3wzhg-Z|vJU_j?7C>~7kjS*bQQiTiV$!#0>E7q07yAUmjrnPD8@w=NBP7!M-Jl&
>> zu4zW<8A(qr8AKdoeBvyPk%q?b>pS`;yZLovK55Jq^TZqnB!yJ!JB)#Ul*2U;7jPYJ
>> z6e&C!!wTIosPLi~DvE>-m$0#G+=0ds^#2+tY^Q&fx(}@qEQYs=wkRv5-eVuB57<b#
>> K=g%YhY3VN!sP#$!
>>
>> diff --git a/tests/acpi-test-data/q35/DSDT b/tests/acpi-test-data/q35/DSDT
>> index 2d2bc4adaf54666fe7864e7f39203411b7c308f7..ef0c75f4236de3e6f727e21991533f2bf8279dee 100644
>> GIT binary patch
>> delta 793
>> zcmZ8f&1(}u6rZ65w-Z~5S!<L)7U~y*614<+vdM0Aqcd^YS*0?<EJ(15l408(a$4g>
>> z@VfNiEolA$|0u5>d+=a<Z$D~r7KY#Z`2F5{JMZVt$wTHzFFI)xLVy2YJFRs0-d!#G
>> zI&g;_^~voBKkzK=554tZ6m)u>F0u4;u*CSoB$+z<lSA|V=#7(%4<<*+>+u0mAN@dt
>> zv_=?fTG|a|eVwt#lrZ?3Q(`x?jCy3gmI-eZk_B0?nwqtdvm(MiPaU{@xH!iPP_U;R
>> zHEZOmWS5D7)Km;dk}4{=`;@5JrGhO7KzTNJ0he?g`^l=1?&wS<Lt?dsl;!f<_2U@p
>> zn^*vA-pF!65j}eODyAlvPhuLYo0z_!_8k$*h@KHJU-wB)tz~&bhFz$#W4qTBF!x$j
>> ztje`S_KRLg37kL6;vmLTn#(EqBEs%A+kk#}0WSjd3wVPMD(`K8rFT>G_R8F=0DXf$
>> z5J?C)3IX6g5)h;uRTA_gKr$M69O-lW7=0K|(5AVwo;&H`sRt3q7@vFRGISG5gb(i5
>> z+pP8ZG9l+ziph#us~KUw6tfrueGO9q+yHV3H=!eKur!7Zs$<Y#qZlgR18JwQyKP^C
>> o9TD{Z-)(Sn{yoYq*otUXZ8^mTRF7ib;>wtJxHE-j)^C0P3owxI%m4rY
>>
>> delta 23
>> ecmexn|J0JpCD<k8sSE=Hqv%F1OPR?b@{0gro(Eh2
>>
>> diff --git a/tests/acpi-test-data/q35/SSDT b/tests/acpi-test-data/q35/SSDT
>> index 778b79bf428b5d7602b7b80c9434e38c79718bb2..4e45510181c4038505ae1815b76799a2cd0e8808 100644
>> GIT binary patch
>> delta 37
>> tcmX@awSk2zIM^k`fQf;D@!~`-X-1!kYJqGVzAk=2JQIsQOs;1+3;?*r3h)2`
>>
>> literal 1346
>> zcmZWp-%r#)5Z;vo%iaNZM@3>xxWwNWwZ|d)NUyD4q1#)#1u-SrCWd$z4b1@$ya^<l
>> z;Nyh{-%fM?hyG=pGwmH9_M!deoBd{Ic4sQ39o9z)p?<w-HDsl}AuI_TC4?ZxZ?QhQ
>> zNi<<dRRHS`AV(GY{oiMrsIDspuBud}Jk!9NK0r8E3GW}G_y{5@SySb)9ECjqFRHSZ
>> zV}wBju%4p_gB6zxo6km+tSe!;hAT}K9dRa{^-xm{*PeLe@HN9Qs*r^v!#p9;7vVGm
>> ziWZFy^8-VKnm(&!Xp#gyad)f}lOFk*>#-?)GO$I64iUz^STDQ{L`ahs+M2QgS(;$%
>> zHJ${a^niRvid}P?+|OVR;08o@eK(7au5=r86j!U8Plx$K?gnoNJIh`8!Z3{`sCNx2
>> z;ai_~+6R@^&R+6q|3js{wY#(5e!sO#G;aF=9zE375ImrH!r1KP%<$M|4~RaUR@fcy
>> zpaRP4v3ztmhnf){)V&J48u0QEd4R-*szis=X;8AvxFZ$it}kgsxo54C=<r4+mJUdo
>> z&N{rLRnb>+Tv|T4*eD@!bO$B<{;zwdF>as498}%uP8yJhuinKpNu#%88b=Rsb&u*#
>> zcmNl5NuT^^kyM%Qr1>OlYPdSq%~=kIKR(=RxK`uA(qgH`jFZQN6h`o<E<b1e>=|+c
>> zvwuKNP{<}BMK6P8fQ<~^_naX+4{*TFaC2j@_7=cKf@g{%1Re$g;5ATyz{4PIq!FMN
>> zjns|mu6~Lf`rByJlq{tr-8*LxdFb=H_Vo_Z&=f&!p)|*Cf4h0PWGofS#1hl;Y72}(
>> zcm*{9oCNIv&Okyc!JW~aU~qIMm?ydhH-xftxU{I>g{I;3>IEd&N*CAk5ZWZn{kLcv
>> zTPXR6J(Ptk9v29XMs!>swS-}07o@qi!rw|d-=-y8nC}-vpHkcmNzW48#06mEID;+2
>> zf$gjq)Dq4Lnk~KTL(g67<~uD$zGC!k%@R$&Y{L{6S916}iH@eEVJJ<R_F%w{=B4rS
>> YoS;O9e^J$jQ9`gV1ho{53Cj=3Um|f`5C8xG
>>
> 
> Ping?

Ping??

Paolo

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Qemu-devel] [PATCH v2] target-i386: move generic memory hotplug methods to DSDTs
  2014-11-20  6:05   ` Paolo Bonzini
@ 2014-11-20  6:57     ` Michael S. Tsirkin
  0 siblings, 0 replies; 7+ messages in thread
From: Michael S. Tsirkin @ 2014-11-20  6:57 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: imammedo, qemu-devel

On Thu, Nov 20, 2014 at 07:05:17AM +0100, Paolo Bonzini wrote:
> 
> 
> On 11/11/2014 18:13, Paolo Bonzini wrote:
> > On 15/10/2014 09:45, Paolo Bonzini wrote:
> >> This makes it simpler to keep the SSDT byte-for-byte identical for a
> >> given machine type, which is a goal we want to have for 2.2 and newer
> >> types.
> >>
> >> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> >> ---
> >>         v1->v2: do not define the same Device twice (Igor)

I have this queued, will be sent soon with the rest of the patches.

-- 
MST

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2014-11-20  6:58 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-10-15  7:45 [Qemu-devel] [PATCH v2] target-i386: move generic memory hotplug methods to DSDTs Paolo Bonzini
2014-10-15 13:19 ` Igor Mammedov
2014-10-15 13:34   ` Michael S. Tsirkin
2014-10-16  7:43   ` Paolo Bonzini
2014-11-11 17:13 ` Paolo Bonzini
2014-11-20  6:05   ` Paolo Bonzini
2014-11-20  6:57     ` Michael S. Tsirkin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).