diff mbox

[40/74] pc: acpi: cpuhp: move CPMA() method into SSDT

Message ID 1449704528-289297-41-git-send-email-imammedo@redhat.com
State New
Headers show

Commit Message

Igor Mammedov Dec. 9, 2015, 11:41 p.m. UTC
Signed-off-by: Igor Mammedov <imammedo@redhat.com>
---
 hw/acpi/cpu_hotplug_acpi_table.c  | 23 +++++++++++++++++++++++
 hw/i386/acpi-build.c              |  5 +++--
 hw/i386/acpi-dsdt-cpu-hotplug.dsl | 13 -------------
 include/hw/acpi/cpu_hotplug.h     |  2 ++
 4 files changed, 28 insertions(+), 15 deletions(-)
diff mbox

Patch

diff --git a/hw/acpi/cpu_hotplug_acpi_table.c b/hw/acpi/cpu_hotplug_acpi_table.c
index 422e57b..fd1f85e 100644
--- a/hw/acpi/cpu_hotplug_acpi_table.c
+++ b/hw/acpi/cpu_hotplug_acpi_table.c
@@ -19,6 +19,29 @@  void build_cpu_hotplug_aml(Aml *ctx)
 {
     Aml *method;
     Aml *sb_scope = aml_scope("_SB");
+    uint8_t madt_tmpl[8] = {0x00, 0x08, 0x00, 0x00, 0x00, 0, 0, 0};
+    Aml *a_cpu_id = aml_arg(0);
+    Aml *a_cpu_on = aml_local(0);
+    Aml *a_madt = aml_local(1);
+    Aml *a_cpus_map = aml_name(CPU_CPU_ON_BITMAP);
+
+    /*
+     * _MAT method - creates an madt apic buffer
+     * a_cpu_id = Arg0 = Processor ID = Local APIC ID
+     * a_cpu_on = Local0 = CPON flag for this cpu
+     * a_madt = Local1 = Buffer (in madt apic form) to return
+     */
+    method = aml_method(CPU_MAT_METHOD, 1, AML_NOTSERIALIZED);
+    aml_append(method, aml_store(
+        aml_derefof(aml_index(a_cpus_map, a_cpu_id)), a_cpu_on));
+    aml_append(method, aml_store(
+        aml_buffer(sizeof(madt_tmpl), madt_tmpl), a_madt));
+    /* Update the processor id, lapic id, and enable/disable status */
+    aml_append(method, aml_store(a_cpu_id, aml_index(a_madt, aml_int(2))));
+    aml_append(method, aml_store(a_cpu_id, aml_index(a_madt, aml_int(3))));
+    aml_append(method, aml_store(a_cpu_on, aml_index(a_madt, aml_int(4))));
+    aml_append(method, aml_return(a_madt));
+    aml_append(sb_scope, method);
 
     method = aml_method(CPU_EJECT_METHOD, 2, AML_NOTSERIALIZED);
     aml_append(method, aml_sleep(200));
diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c
index 9f8f769..eb1f90b 100644
--- a/hw/i386/acpi-build.c
+++ b/hw/i386/acpi-build.c
@@ -1291,7 +1291,8 @@  build_ssdt(GArray *table_data, GArray *linker,
             dev = aml_processor(i, 0, 0, "CP%.02X", i);
 
             method = aml_method("_MAT", 0, AML_NOTSERIALIZED);
-            aml_append(method, aml_return(aml_call1("CPMA", aml_int(i))));
+            aml_append(method,
+                aml_return(aml_call1(CPU_MAT_METHOD, aml_int(i))));
             aml_append(dev, method);
 
             method = aml_method("_STA", 0, AML_NOTSERIALIZED);
@@ -1335,7 +1336,7 @@  build_ssdt(GArray *table_data, GArray *linker,
             uint8_t b = test_bit(i, cpu->found_cpus) ? 0x01 : 0x00;
             aml_append(pkg, aml_int(b));
         }
-        aml_append(sb_scope, aml_name_decl("CPON", pkg));
+        aml_append(sb_scope, aml_name_decl(CPU_CPU_ON_BITMAP, pkg));
 
         build_memory_devices(sb_scope, nr_mem, pm->mem_hp_io_base,
                              pm->mem_hp_io_len);
diff --git a/hw/i386/acpi-dsdt-cpu-hotplug.dsl b/hw/i386/acpi-dsdt-cpu-hotplug.dsl
index 18331be..9739191 100644
--- a/hw/i386/acpi-dsdt-cpu-hotplug.dsl
+++ b/hw/i386/acpi-dsdt-cpu-hotplug.dsl
@@ -24,19 +24,6 @@  Scope(\_SB) {
     External(PRS, FieldUnitObj)
 
     /* Methods called by run-time generated SSDT Processor objects */
-    Method(CPMA, 1, NotSerialized) {
-        // _MAT method - create an madt apic buffer
-        // Arg0 = Processor ID = Local APIC ID
-        // Local0 = CPON flag for this cpu
-        Store(DerefOf(Index(CPON, Arg0)), Local0)
-        // Local1 = Buffer (in madt apic form) to return
-        Store(Buffer(8) {0x00, 0x08, 0x00, 0x00, 0x00, 0, 0, 0}, Local1)
-        // Update the processor id, lapic id, and enable/disable status
-        Store(Arg0, Index(Local1, 2))
-        Store(Arg0, Index(Local1, 3))
-        Store(Local0, Index(Local1, 4))
-        Return (Local1)
-    }
     Method(CPST, 1, NotSerialized) {
         // _STA method - return ON status of cpu
         // Arg0 = Processor ID = Local APIC ID
diff --git a/include/hw/acpi/cpu_hotplug.h b/include/hw/acpi/cpu_hotplug.h
index 87504be..d0b6d6b 100644
--- a/include/hw/acpi/cpu_hotplug.h
+++ b/include/hw/acpi/cpu_hotplug.h
@@ -28,6 +28,8 @@  void acpi_cpu_hotplug_init(MemoryRegion *parent, Object *owner,
                            AcpiCpuHotplug *gpe_cpu, uint16_t base);
 
 #define CPU_EJECT_METHOD "CPEJ"
+#define CPU_MAT_METHOD "CPMA"
+#define CPU_CPU_ON_BITMAP "CPON"
 
 void build_cpu_hotplug_aml(Aml *ctx);
 #endif