[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [RFC PATCH] target-i386: move generic memory hotplug me
From: |
Igor Mammedov |
Subject: |
Re: [Qemu-devel] [RFC PATCH] target-i386: move generic memory hotplug methods to DSDTs |
Date: |
Tue, 7 Oct 2014 13:39:32 +0200 |
On Mon, 6 Oct 2014 16:51:53 +0200
Paolo Bonzini <address@hidden> 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.
>
> This is not tested well and is still missing update of "make check"
> data, but I wanted to throw this out for an early look.
>
> Signed-off-by: Paolo Bonzini <address@hidden>
> ---
> 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 | 156 -------
> hw/i386/ssdt-misc.hex.generated | 787 +----------------------------------
> 8 files changed, 1773 insertions(+), 952 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..2d50f0a 100644
> --- a/hw/i386/ssdt-misc.dsl
> +++ b/hw/i386/ssdt-misc.dsl
> @@ -118,166 +118,10 @@ DefinitionBlock ("ssdt-misc.aml", "SSDT", 0x01,
> "BXPC", "BXSSDTSUSP", 0x1)
> }
> }
>
> - External(MEMORY_SLOT_NOTIFY_METHOD, MethodObj)
> Scope(\_SB.PCI0) {
> Device(MEMORY_HOTPLUG_DEVICE) {
keeping it as device here triggers duplicate device BSOD in XP
it should be a scope or a just var at / scope which a few bytes shorter
following patch on top of this fixes issue:
diff --git a/hw/i386/ssdt-misc.dsl b/hw/i386/ssdt-misc.dsl
index 2d50f0a..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,11 +119,4 @@ DefinitionBlock ("ssdt-misc.aml", "SSDT", 0x01, "BXPC",
"BXSSDTSUSP", 0x1)
}
}
}
-
- Scope(\_SB.PCI0) {
- Device(MEMORY_HOTPLUG_DEVICE) {
- ACPI_EXTRACT_NAME_DWORD_CONST ssdt_mctrl_nr_slots
- Name(MEMORY_SLOTS_NUMBER, 0x12345678)
- } // Device()
- } // Scope()
}
> - 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..62f45bb 100644
> --- a/hw/i386/ssdt-misc.hex.generated
> +++ b/hw/i386/ssdt-misc.hex.generated
> @@ -5,7 +5,7 @@ static unsigned char acpi_s4_pkg[] = {
> 0x8f
> };
> static unsigned short ssdt_mctrl_nr_slots[] = {
> -0x1aa
> +0x17b
> };
> static unsigned char acpi_s3_name[] = {
> 0x7c
> @@ -21,12 +21,12 @@ static unsigned char ssdp_misc_aml[] = {
> 0x53,
> 0x44,
> 0x54,
> -0x7e,
> -0x4,
> +0x7f,
> +0x1,
> 0x0,
> 0x0,
> 0x1,
> -0x8b,
> +0xd0,
> 0x42,
> 0x58,
> 0x50,
> @@ -49,9 +49,9 @@ static unsigned char ssdp_misc_aml[] = {
> 0x4e,
> 0x54,
> 0x4c,
> -0x15,
> -0x11,
> -0x13,
> +0x28,
> +0x8,
> +0x14,
> 0x20,
> 0x10,
> 0x42,
> @@ -372,8 +372,7 @@ static unsigned char ssdp_misc_aml[] = {
> 0x4d,
> 0x58,
> 0x10,
> -0x4b,
> -0x31,
> +0x1c,
> 0x5c,
> 0x2e,
> 0x5f,
> @@ -386,57 +385,11 @@ static unsigned char ssdp_misc_aml[] = {
> 0x30,
> 0x5b,
> 0x82,
> +0xf,
> 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,
> @@ -446,727 +399,7 @@ static unsigned char ssdp_misc_aml[] = {
> 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
> +0x12
> };
> static unsigned char ssdt_isa_pest[] = {
> 0xd0