From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:43594) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Zpdmk-0000Dp-02 for qemu-devel@nongnu.org; Fri, 23 Oct 2015 10:57:43 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Zpdmi-0005WX-TJ for qemu-devel@nongnu.org; Fri, 23 Oct 2015 10:57:37 -0400 Received: from mx1.redhat.com ([209.132.183.28]:44470) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Zpdmi-0005WM-Lf for qemu-devel@nongnu.org; Fri, 23 Oct 2015 10:57:36 -0400 Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (Postfix) with ESMTPS id 53389C0B2E31 for ; Fri, 23 Oct 2015 14:57:36 +0000 (UTC) From: Igor Mammedov Date: Fri, 23 Oct 2015 16:57:14 +0200 Message-Id: <1445612242-79172-12-git-send-email-imammedo@redhat.com> In-Reply-To: <1445612242-79172-1-git-send-email-imammedo@redhat.com> References: <1445612242-79172-1-git-send-email-imammedo@redhat.com> Subject: [Qemu-devel] [PATCH 11/19] pc: acpi: memhp: move MHPD.MRST method into MHPT table List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: pbonzini@redhat.com, mst@redhat.com Signed-off-by: Igor Mammedov --- hw/acpi/memory_hotplug_acpi_table.c | 25 +++++++++++++++++++++++-- hw/i386/acpi-dsdt-mem-hotplug.dsl | 15 --------------- include/hw/acpi/pc-hotplug.h | 2 -- 3 files changed, 23 insertions(+), 19 deletions(-) diff --git a/hw/acpi/memory_hotplug_acpi_table.c b/hw/acpi/memory_hotplug_acpi_table.c index 3eb1780..7ca3c7d 100644 --- a/hw/acpi/memory_hotplug_acpi_table.c +++ b/hw/acpi/memory_hotplug_acpi_table.c @@ -7,6 +7,8 @@ #define MEMORY_SLOT_INSERT_EVENT "MINS" #define MEMORY_SLOT_REMOVE_EVENT "MRMV" #define MEMORY_SLOT_NOTIFY_METHOD "MTFY" +#define MEMORY_SLOT_STATUS_METHOD "MRST" +#define MEMORY_SLOT_ENABLED "MES" #define BASEPATH "\\_SB.PCI0." stringify(MEMORY_HOTPLUG_DEVICE) "." @@ -25,6 +27,8 @@ void build_mhpt(GArray *table_data, GArray *linker, uint32_t nr_mem, ctrl_dev = aml_scope("\\_SB.PCI0." stringify(MEMORY_HOTPLUG_DEVICE)); { Aml *crs, *field; + Aml *a_slot_arg = aml_arg(0); + Aml *a_ret_val = aml_local(0); Aml *a_ctrl_lock = aml_name(stringify(MEMORY_SLOT_LOCK)); Aml *a_slot_selector = aml_name(stringify(MEMORY_SLOT_SLECTOR)); @@ -55,7 +59,7 @@ void build_mhpt(GArray *table_data, GArray *linker, uint32_t nr_mem, AML_WRITE_AS_ZEROS); aml_append(field, aml_reserved_field(160 /* bits, Offset(20) */)); aml_append(field, /* 1 if enabled, read only */ - aml_named_field(stringify(MEMORY_SLOT_ENABLED), 1)); + aml_named_field(MEMORY_SLOT_ENABLED, 1)); aml_append(field, /*(read) 1 if has a insert event. (write) 1 to clear event */ aml_named_field(MEMORY_SLOT_INSERT_EVENT, 1)); @@ -115,6 +119,23 @@ void build_mhpt(GArray *table_data, GArray *linker, uint32_t nr_mem, aml_append(method, aml_return(aml_int(1))); } aml_append(ctrl_dev, method); + + method = aml_method(MEMORY_SLOT_STATUS_METHOD, 1); + { + Aml *a_slot_enabled = aml_name(MEMORY_SLOT_ENABLED); + + aml_append(method, aml_acquire(a_ctrl_lock, 0xFFFF)); + aml_append(method, aml_store(aml_int(0), a_ret_val)); + aml_append(method, aml_store(a_slot_arg, a_slot_selector)); + + ifctx = aml_if(aml_equal(a_slot_enabled, aml_int(1))); + aml_append(ifctx, aml_store(aml_int(0xF), a_ret_val)); + aml_append(method, ifctx); + + aml_append(method, aml_release(a_ctrl_lock)); + aml_append(method, aml_return(a_ret_val)); + } + aml_append(ctrl_dev, method); } aml_append(table, ctrl_dev); @@ -132,7 +153,7 @@ void build_mhpt(GArray *table_data, GArray *linker, uint32_t nr_mem, aml_append(dev, method); method = aml_method("_STA", 0); - s = BASEPATH stringify(MEMORY_SLOT_STATUS_METHOD); + s = BASEPATH MEMORY_SLOT_STATUS_METHOD; aml_append(method, aml_return(aml_call1(s, aml_name("_UID")))); aml_append(dev, method); diff --git a/hw/i386/acpi-dsdt-mem-hotplug.dsl b/hw/i386/acpi-dsdt-mem-hotplug.dsl index 92baf87..13e93dc 100644 --- a/hw/i386/acpi-dsdt-mem-hotplug.dsl +++ b/hw/i386/acpi-dsdt-mem-hotplug.dsl @@ -26,27 +26,12 @@ External(MEMORY_SLOT_SIZE_LOW, FieldUnitObj) // read only External(MEMORY_SLOT_SIZE_HIGH, FieldUnitObj) // read only External(MEMORY_SLOT_PROXIMITY, FieldUnitObj) // read only - External(MEMORY_SLOT_ENABLED, FieldUnitObj) // 1 if enabled, read only External(MEMORY_SLOT_EJECT, FieldUnitObj) // initiates device eject, write only External(MEMORY_SLOT_SLECTOR, FieldUnitObj) // DIMM selector, write only External(MEMORY_SLOT_OST_EVENT, FieldUnitObj) // _OST event code, write only External(MEMORY_SLOT_OST_STATUS, FieldUnitObj) // _OST status code, write only External(MEMORY_SLOT_LOCK, MutexObj) - 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 diff --git a/include/hw/acpi/pc-hotplug.h b/include/hw/acpi/pc-hotplug.h index 9b67a93..47efa99 100644 --- a/include/hw/acpi/pc-hotplug.h +++ b/include/hw/acpi/pc-hotplug.h @@ -39,13 +39,11 @@ #define MEMORY_SLOT_SIZE_LOW MRLL #define MEMORY_SLOT_SIZE_HIGH MRLH #define MEMORY_SLOT_PROXIMITY MPX -#define MEMORY_SLOT_ENABLED MES #define MEMORY_SLOT_EJECT MEJ #define MEMORY_SLOT_SLECTOR MSEL #define MEMORY_SLOT_OST_EVENT MOEV #define MEMORY_SLOT_OST_STATUS MOSC #define MEMORY_SLOT_LOCK MLCK -#define MEMORY_SLOT_STATUS_METHOD MRST #define MEMORY_SLOT_CRS_METHOD MCRS #define MEMORY_SLOT_OST_METHOD MOST #define MEMORY_SLOT_PROXIMITY_METHOD MPXM -- 1.8.3.1