From mboxrd@z Thu Jan 1 00:00:00 1970 Received: by 2002:adf:a111:0:0:0:0:0 with SMTP id o17-v6csp2039482wro; Sun, 4 Nov 2018 17:57:31 -0800 (PST) X-Google-Smtp-Source: AJdET5fIQhR2H/xw0uOeQwDvaCenty/PgvmFO+UzpHJw54u4A57KxG6WSXjGI8G3LwEbbnFFyrBT X-Received: by 2002:a37:a053:: with SMTP id j80mr18936291qke.356.1541383050983; Sun, 04 Nov 2018 17:57:30 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1541383050; cv=none; d=google.com; s=arc-20160816; b=WmFitTPcjmeuE4DsCuu3oIlw8WHc+nrUm7ZdJDVnjKEHyRaOUNQz+zX+zWh1ai8zfT iPpkYcJfX/A/RY+PiVIuC5z0tDwf7aoV/wfCONYwPMrXqjL73kY07Mh03hGwgp6kSTf0 UES7CqdwppawqVYJpqvQukPMx8s+d5KHbGeYZG9IpVsm9QnP11Zg2iU5i/ZGxCkSX3CK kJg+IIYpIfU2wydVrrWoGxxEJy+oQHZEVWRvAiqZeQI+5zlLeA21riMGAc+ah++XkkjQ V623rEOTZUNEkHOlM9+vpZoA5yN0S/+gU2E4HYUSxSakSChb+ORmIyMD2RQ6gpgq7u4s AlOQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:to:from; bh=oFV4m1Xg2BFcZ0jkK5HU0z99aQtyI6c3naxyOReJ0JU=; b=nVuUA/mlBmwtRQigA8mxLew4izlxNO5bYNzMUPz8sduxjNIHyEc7Vg/o/cLs16dZ89 HPZZ8Fs591enRexNw2KFxd4l/NUukN0kXmHkwwQDYQYmGsFtapUC9GIeCMmOzLOaxUgD ryM+ZMGQof3hmeKbY0eohzXmjtO7fqOUCOmInQziBBuy/fZ7/R6Rh1tM52EOo5oefST1 KsUJ99/fkH3Psh2WobFgjDyfAIdZIDFhZO8msgcG3MiRYxMmPuzqD6FGK/CncGoKHrY2 VT+BUi0KKFxfbuL9/aXogJk3J9pOsgXzQ8QfUOqZbJLyxpCAx3DclZT1thV+vzV03INq xFcA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of qemu-devel-bounces+alex.bennee=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+alex.bennee=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id t7si6010541qtd.217.2018.11.04.17.57.30 for (version=TLS1 cipher=AES128-SHA bits=128/128); Sun, 04 Nov 2018 17:57:30 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+alex.bennee=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) client-ip=2001:4830:134:3::11; Authentication-Results: mx.google.com; spf=pass (google.com: domain of qemu-devel-bounces+alex.bennee=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+alex.bennee=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from localhost ([::1]:60936 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gJU8w-0005XQ-Cd for alex.bennee@linaro.org; Sun, 04 Nov 2018 20:57:30 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47421) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gJTvc-0000rZ-H3 for qemu-devel@nongnu.org; Sun, 04 Nov 2018 20:43:45 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gJTvb-0003mG-4Q for qemu-devel@nongnu.org; Sun, 04 Nov 2018 20:43:44 -0500 Received: from mga18.intel.com ([134.134.136.126]:8029) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gJTvW-0003Xz-P7; Sun, 04 Nov 2018 20:43:40 -0500 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 04 Nov 2018 17:43:30 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.54,466,1534834800"; d="scan'208";a="277074522" Received: from emurphy1-mobl1.ger.corp.intel.com (HELO localhost.localdomain) ([10.252.26.250]) by fmsmga005.fm.intel.com with ESMTP; 04 Nov 2018 17:43:25 -0800 From: Samuel Ortiz To: qemu-devel@nongnu.org Date: Mon, 5 Nov 2018 02:40:44 +0100 Message-Id: <20181105014047.26447-22-sameo@linux.intel.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181105014047.26447-1-sameo@linux.intel.com> References: <20181105014047.26447-1-sameo@linux.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 134.134.136.126 Subject: [Qemu-devel] [PATCH v5 21/24] hw: i386: Implement the ACPI builder interface for PC X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , Stefano Stabellini , Eduardo Habkost , "Michael S. Tsirkin" , Shannon Zhao , Igor Mammedov , qemu-arm@nongnu.org, Paolo Bonzini , Anthony Perard , xen-devel@lists.xenproject.org, Richard Henderson Errors-To: qemu-devel-bounces+alex.bennee=linaro.org@nongnu.org Sender: "Qemu-devel" X-TUID: r8b6IN0J+Bxs All PC machine type derivatives will use the same ACPI table build methods. But with that change in place, any new x86 machine type will be able to re-use the acpi-build API and customize part of it by defining its own ACPI table build methods. Reviewed-by: Philippe Mathieu-Daudé Tested-by: Philippe Mathieu-Daudé Signed-off-by: Samuel Ortiz --- hw/i386/acpi-build.c | 14 +++++++++----- hw/i386/pc.c | 19 +++++++++++++++++++ 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c index 4b1d8fbe3f..93d89b96f1 100644 --- a/hw/i386/acpi-build.c +++ b/hw/i386/acpi-build.c @@ -34,6 +34,7 @@ #include "hw/acpi/acpi-defs.h" #include "hw/acpi/acpi.h" #include "hw/acpi/cpu.h" +#include "hw/acpi/builder.h" #include "hw/nvram/fw_cfg.h" #include "hw/loader.h" #include "hw/isa/isa.h" @@ -1683,6 +1684,7 @@ void acpi_build(AcpiBuildTables *tables, GArray *tables_blob = tables->table_data; AcpiSlicOem slic_oem = { .id = NULL, .table_id = NULL }; Object *vmgenid_dev; + AcpiBuilder *ab = ACPI_BUILDER(machine); acpi_get_pm_info(&pm); acpi_get_misc_info(&misc); @@ -1732,7 +1734,8 @@ void acpi_build(AcpiBuildTables *tables, aml_len += tables_blob->len - fadt; acpi_add_table(table_offsets, tables_blob); - build_madt(tables_blob, tables->linker, machine, acpi_conf); + acpi_builder_madt(ab, tables_blob, tables->linker, + machine, acpi_conf); vmgenid_dev = find_vmgenid_dev(); if (vmgenid_dev) { @@ -1756,15 +1759,16 @@ void acpi_build(AcpiBuildTables *tables, } if (acpi_conf->numa_nodes) { acpi_add_table(table_offsets, tables_blob); - build_srat(tables_blob, tables->linker, machine, acpi_conf); + acpi_builder_srat(ab, tables_blob, tables->linker, + machine, acpi_conf); if (have_numa_distance) { acpi_add_table(table_offsets, tables_blob); - build_slit(tables_blob, tables->linker); + acpi_builder_slit(ab, tables_blob, tables->linker); } } if (acpi_get_mcfg(&mcfg)) { acpi_add_table(table_offsets, tables_blob); - build_mcfg(tables_blob, tables->linker, &mcfg); + acpi_builder_mcfg(ab, tables_blob, tables->linker, &mcfg); } if (x86_iommu_get_default()) { IommuType IOMMUType = x86_iommu_get_type(); @@ -1795,7 +1799,7 @@ void acpi_build(AcpiBuildTables *tables, slic_oem.id, slic_oem.table_id); /* RSDP is in FSEG memory, so allocate it separately */ - build_rsdp_rsdt(tables->rsdp, tables->linker, rsdt); + acpi_builder_rsdp(ab, tables->rsdp, tables->linker, rsdt); /* We'll expose it all to Guest so we want to reduce * chance of size changes. diff --git a/hw/i386/pc.c b/hw/i386/pc.c index c9ffc8cff6..53a3036066 100644 --- a/hw/i386/pc.c +++ b/hw/i386/pc.c @@ -64,6 +64,7 @@ #include "qemu/option.h" #include "hw/acpi/acpi.h" #include "hw/acpi/cpu_hotplug.h" +#include "hw/acpi/builder.h" #include "hw/boards.h" #include "acpi-build.h" #include "hw/mem/pc-dimm.h" @@ -75,6 +76,7 @@ #include "hw/nmi.h" #include "hw/i386/intel_iommu.h" #include "hw/net/ne2000-isa.h" +#include "hw/i386/acpi.h" /* debug PC/ISA interrupts */ //#define DEBUG_IRQ @@ -2404,12 +2406,20 @@ static void x86_nmi(NMIState *n, int cpu_index, Error **errp) } } +static AcpiConfiguration *pc_acpi_configuration(AcpiBuilder *builder) +{ + PCMachineState *pcms = PC_MACHINE(builder); + + return &pcms->acpi_configuration; +} + static void pc_machine_class_init(ObjectClass *oc, void *data) { MachineClass *mc = MACHINE_CLASS(oc); PCMachineClass *pcmc = PC_MACHINE_CLASS(oc); HotplugHandlerClass *hc = HOTPLUG_HANDLER_CLASS(oc); NMIClass *nc = NMI_CLASS(oc); + AcpiBuilderMethods *abm = ACPI_BUILDER_METHODS(oc); pcmc->pci_enabled = true; pcmc->has_acpi_build = true; @@ -2444,6 +2454,14 @@ static void pc_machine_class_init(ObjectClass *oc, void *data) nc->nmi_monitor_handler = x86_nmi; mc->default_cpu_type = TARGET_DEFAULT_CPU_TYPE; + /* ACPI building methods */ + abm->madt = build_madt; + abm->rsdp = build_rsdp_rsdt; + abm->mcfg = build_mcfg; + abm->srat = build_srat; + abm->slit = build_slit; + abm->configuration = pc_acpi_configuration; + object_class_property_add(oc, MEMORY_DEVICE_REGION_SIZE, "int", pc_machine_get_device_memory_region_size, NULL, NULL, NULL, &error_abort); @@ -2495,6 +2513,7 @@ static const TypeInfo pc_machine_info = { .interfaces = (InterfaceInfo[]) { { TYPE_HOTPLUG_HANDLER }, { TYPE_NMI }, + { TYPE_ACPI_BUILDER }, { } }, }; -- 2.19.1 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Samuel Ortiz Subject: [PATCH v5 21/24] hw: i386: Implement the ACPI builder interface for PC Date: Mon, 5 Nov 2018 02:40:44 +0100 Message-ID: <20181105014047.26447-22-sameo@linux.intel.com> References: <20181105014047.26447-1-sameo@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1gJTvQ-0004dU-HZ for xen-devel@lists.xenproject.org; Mon, 05 Nov 2018 01:43:32 +0000 In-Reply-To: <20181105014047.26447-1-sameo@linux.intel.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: qemu-devel@nongnu.org Cc: Peter Maydell , Stefano Stabellini , Eduardo Habkost , "Michael S. Tsirkin" , Shannon Zhao , Igor Mammedov , qemu-arm@nongnu.org, Marcel Apfelbaum , Paolo Bonzini , Anthony Perard , xen-devel@lists.xenproject.org, Richard Henderson List-Id: xen-devel@lists.xenproject.org QWxsIFBDIG1hY2hpbmUgdHlwZSBkZXJpdmF0aXZlcyB3aWxsIHVzZSB0aGUgc2FtZSBBQ1BJIHRh YmxlIGJ1aWxkCm1ldGhvZHMuIEJ1dCB3aXRoIHRoYXQgY2hhbmdlIGluIHBsYWNlLCBhbnkgbmV3 IHg4NiBtYWNoaW5lIHR5cGUgd2lsbCBiZQphYmxlIHRvIHJlLXVzZSB0aGUgYWNwaS1idWlsZCBB UEkgYW5kIGN1c3RvbWl6ZSBwYXJ0IG9mIGl0IGJ5IGRlZmluaW5nCml0cyBvd24gQUNQSSB0YWJs ZSBidWlsZCBtZXRob2RzLgoKUmV2aWV3ZWQtYnk6IFBoaWxpcHBlIE1hdGhpZXUtRGF1ZMOpIDxw aGlsbWRAcmVkaGF0LmNvbT4KVGVzdGVkLWJ5OiBQaGlsaXBwZSBNYXRoaWV1LURhdWTDqSA8cGhp bG1kQHJlZGhhdC5jb20+ClNpZ25lZC1vZmYtYnk6IFNhbXVlbCBPcnRpeiA8c2FtZW9AbGludXgu aW50ZWwuY29tPgotLS0KIGh3L2kzODYvYWNwaS1idWlsZC5jIHwgMTQgKysrKysrKysrLS0tLS0K IGh3L2kzODYvcGMuYyAgICAgICAgIHwgMTkgKysrKysrKysrKysrKysrKysrKwogMiBmaWxlcyBj aGFuZ2VkLCAyOCBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2h3 L2kzODYvYWNwaS1idWlsZC5jIGIvaHcvaTM4Ni9hY3BpLWJ1aWxkLmMKaW5kZXggNGIxZDhmYmUz Zi4uOTNkODliOTZmMSAxMDA2NDQKLS0tIGEvaHcvaTM4Ni9hY3BpLWJ1aWxkLmMKKysrIGIvaHcv aTM4Ni9hY3BpLWJ1aWxkLmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJody9hY3BpL2Fj cGktZGVmcy5oIgogI2luY2x1ZGUgImh3L2FjcGkvYWNwaS5oIgogI2luY2x1ZGUgImh3L2FjcGkv Y3B1LmgiCisjaW5jbHVkZSAiaHcvYWNwaS9idWlsZGVyLmgiCiAjaW5jbHVkZSAiaHcvbnZyYW0v ZndfY2ZnLmgiCiAjaW5jbHVkZSAiaHcvbG9hZGVyLmgiCiAjaW5jbHVkZSAiaHcvaXNhL2lzYS5o IgpAQCAtMTY4Myw2ICsxNjg0LDcgQEAgdm9pZCBhY3BpX2J1aWxkKEFjcGlCdWlsZFRhYmxlcyAq dGFibGVzLAogICAgIEdBcnJheSAqdGFibGVzX2Jsb2IgPSB0YWJsZXMtPnRhYmxlX2RhdGE7CiAg ICAgQWNwaVNsaWNPZW0gc2xpY19vZW0gPSB7IC5pZCA9IE5VTEwsIC50YWJsZV9pZCA9IE5VTEwg fTsKICAgICBPYmplY3QgKnZtZ2VuaWRfZGV2OworICAgIEFjcGlCdWlsZGVyICphYiA9IEFDUElf QlVJTERFUihtYWNoaW5lKTsKIAogICAgIGFjcGlfZ2V0X3BtX2luZm8oJnBtKTsKICAgICBhY3Bp X2dldF9taXNjX2luZm8oJm1pc2MpOwpAQCAtMTczMiw3ICsxNzM0LDggQEAgdm9pZCBhY3BpX2J1 aWxkKEFjcGlCdWlsZFRhYmxlcyAqdGFibGVzLAogICAgIGFtbF9sZW4gKz0gdGFibGVzX2Jsb2It PmxlbiAtIGZhZHQ7CiAKICAgICBhY3BpX2FkZF90YWJsZSh0YWJsZV9vZmZzZXRzLCB0YWJsZXNf YmxvYik7Ci0gICAgYnVpbGRfbWFkdCh0YWJsZXNfYmxvYiwgdGFibGVzLT5saW5rZXIsIG1hY2hp bmUsIGFjcGlfY29uZik7CisgICAgYWNwaV9idWlsZGVyX21hZHQoYWIsIHRhYmxlc19ibG9iLCB0 YWJsZXMtPmxpbmtlciwKKyAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lLCBhY3BpX2NvbmYp OwogCiAgICAgdm1nZW5pZF9kZXYgPSBmaW5kX3ZtZ2VuaWRfZGV2KCk7CiAgICAgaWYgKHZtZ2Vu aWRfZGV2KSB7CkBAIC0xNzU2LDE1ICsxNzU5LDE2IEBAIHZvaWQgYWNwaV9idWlsZChBY3BpQnVp bGRUYWJsZXMgKnRhYmxlcywKICAgICB9CiAgICAgaWYgKGFjcGlfY29uZi0+bnVtYV9ub2Rlcykg ewogICAgICAgICBhY3BpX2FkZF90YWJsZSh0YWJsZV9vZmZzZXRzLCB0YWJsZXNfYmxvYik7Ci0g ICAgICAgIGJ1aWxkX3NyYXQodGFibGVzX2Jsb2IsIHRhYmxlcy0+bGlua2VyLCBtYWNoaW5lLCBh Y3BpX2NvbmYpOworICAgICAgICBhY3BpX2J1aWxkZXJfc3JhdChhYiwgdGFibGVzX2Jsb2IsIHRh Ymxlcy0+bGlua2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lLCBhY3BpX2Nv bmYpOwogICAgICAgICBpZiAoaGF2ZV9udW1hX2Rpc3RhbmNlKSB7CiAgICAgICAgICAgICBhY3Bp X2FkZF90YWJsZSh0YWJsZV9vZmZzZXRzLCB0YWJsZXNfYmxvYik7Ci0gICAgICAgICAgICBidWls ZF9zbGl0KHRhYmxlc19ibG9iLCB0YWJsZXMtPmxpbmtlcik7CisgICAgICAgICAgICBhY3BpX2J1 aWxkZXJfc2xpdChhYiwgdGFibGVzX2Jsb2IsIHRhYmxlcy0+bGlua2VyKTsKICAgICAgICAgfQog ICAgIH0KICAgICBpZiAoYWNwaV9nZXRfbWNmZygmbWNmZykpIHsKICAgICAgICAgYWNwaV9hZGRf dGFibGUodGFibGVfb2Zmc2V0cywgdGFibGVzX2Jsb2IpOwotICAgICAgICBidWlsZF9tY2ZnKHRh Ymxlc19ibG9iLCB0YWJsZXMtPmxpbmtlciwgJm1jZmcpOworICAgICAgICBhY3BpX2J1aWxkZXJf bWNmZyhhYiwgdGFibGVzX2Jsb2IsIHRhYmxlcy0+bGlua2VyLCAmbWNmZyk7CiAgICAgfQogICAg IGlmICh4ODZfaW9tbXVfZ2V0X2RlZmF1bHQoKSkgewogICAgICAgICBJb21tdVR5cGUgSU9NTVVU eXBlID0geDg2X2lvbW11X2dldF90eXBlKCk7CkBAIC0xNzk1LDcgKzE3OTksNyBAQCB2b2lkIGFj cGlfYnVpbGQoQWNwaUJ1aWxkVGFibGVzICp0YWJsZXMsCiAgICAgICAgICAgICAgICBzbGljX29l bS5pZCwgc2xpY19vZW0udGFibGVfaWQpOwogCiAgICAgLyogUlNEUCBpcyBpbiBGU0VHIG1lbW9y eSwgc28gYWxsb2NhdGUgaXQgc2VwYXJhdGVseSAqLwotICAgIGJ1aWxkX3JzZHBfcnNkdCh0YWJs ZXMtPnJzZHAsIHRhYmxlcy0+bGlua2VyLCByc2R0KTsKKyAgICBhY3BpX2J1aWxkZXJfcnNkcChh YiwgdGFibGVzLT5yc2RwLCB0YWJsZXMtPmxpbmtlciwgcnNkdCk7CiAKICAgICAvKiBXZSdsbCBl eHBvc2UgaXQgYWxsIHRvIEd1ZXN0IHNvIHdlIHdhbnQgdG8gcmVkdWNlCiAgICAgICogY2hhbmNl IG9mIHNpemUgY2hhbmdlcy4KZGlmZiAtLWdpdCBhL2h3L2kzODYvcGMuYyBiL2h3L2kzODYvcGMu YwppbmRleCBjOWZmYzhjZmY2Li41M2EzMDM2MDY2IDEwMDY0NAotLS0gYS9ody9pMzg2L3BjLmMK KysrIGIvaHcvaTM4Ni9wYy5jCkBAIC02NCw2ICs2NCw3IEBACiAjaW5jbHVkZSAicWVtdS9vcHRp b24uaCIKICNpbmNsdWRlICJody9hY3BpL2FjcGkuaCIKICNpbmNsdWRlICJody9hY3BpL2NwdV9o b3RwbHVnLmgiCisjaW5jbHVkZSAiaHcvYWNwaS9idWlsZGVyLmgiCiAjaW5jbHVkZSAiaHcvYm9h cmRzLmgiCiAjaW5jbHVkZSAiYWNwaS1idWlsZC5oIgogI2luY2x1ZGUgImh3L21lbS9wYy1kaW1t LmgiCkBAIC03NSw2ICs3Niw3IEBACiAjaW5jbHVkZSAiaHcvbm1pLmgiCiAjaW5jbHVkZSAiaHcv aTM4Ni9pbnRlbF9pb21tdS5oIgogI2luY2x1ZGUgImh3L25ldC9uZTIwMDAtaXNhLmgiCisjaW5j bHVkZSAiaHcvaTM4Ni9hY3BpLmgiCiAKIC8qIGRlYnVnIFBDL0lTQSBpbnRlcnJ1cHRzICovCiAv LyNkZWZpbmUgREVCVUdfSVJRCkBAIC0yNDA0LDEyICsyNDA2LDIwIEBAIHN0YXRpYyB2b2lkIHg4 Nl9ubWkoTk1JU3RhdGUgKm4sIGludCBjcHVfaW5kZXgsIEVycm9yICoqZXJycCkKICAgICB9CiB9 CiAKK3N0YXRpYyBBY3BpQ29uZmlndXJhdGlvbiAqcGNfYWNwaV9jb25maWd1cmF0aW9uKEFjcGlC dWlsZGVyICpidWlsZGVyKQoreworICAgIFBDTWFjaGluZVN0YXRlICpwY21zID0gUENfTUFDSElO RShidWlsZGVyKTsKKworICAgIHJldHVybiAmcGNtcy0+YWNwaV9jb25maWd1cmF0aW9uOworfQor CiBzdGF0aWMgdm9pZCBwY19tYWNoaW5lX2NsYXNzX2luaXQoT2JqZWN0Q2xhc3MgKm9jLCB2b2lk ICpkYXRhKQogewogICAgIE1hY2hpbmVDbGFzcyAqbWMgPSBNQUNISU5FX0NMQVNTKG9jKTsKICAg ICBQQ01hY2hpbmVDbGFzcyAqcGNtYyA9IFBDX01BQ0hJTkVfQ0xBU1Mob2MpOwogICAgIEhvdHBs dWdIYW5kbGVyQ2xhc3MgKmhjID0gSE9UUExVR19IQU5ETEVSX0NMQVNTKG9jKTsKICAgICBOTUlD bGFzcyAqbmMgPSBOTUlfQ0xBU1Mob2MpOworICAgIEFjcGlCdWlsZGVyTWV0aG9kcyAqYWJtID0g QUNQSV9CVUlMREVSX01FVEhPRFMob2MpOwogCiAgICAgcGNtYy0+cGNpX2VuYWJsZWQgPSB0cnVl OwogICAgIHBjbWMtPmhhc19hY3BpX2J1aWxkID0gdHJ1ZTsKQEAgLTI0NDQsNiArMjQ1NCwxNCBA QCBzdGF0aWMgdm9pZCBwY19tYWNoaW5lX2NsYXNzX2luaXQoT2JqZWN0Q2xhc3MgKm9jLCB2b2lk ICpkYXRhKQogICAgIG5jLT5ubWlfbW9uaXRvcl9oYW5kbGVyID0geDg2X25taTsKICAgICBtYy0+ ZGVmYXVsdF9jcHVfdHlwZSA9IFRBUkdFVF9ERUZBVUxUX0NQVV9UWVBFOwogCisgICAgLyogQUNQ SSBidWlsZGluZyBtZXRob2RzICovCisgICAgYWJtLT5tYWR0ID0gYnVpbGRfbWFkdDsKKyAgICBh Ym0tPnJzZHAgPSBidWlsZF9yc2RwX3JzZHQ7CisgICAgYWJtLT5tY2ZnID0gYnVpbGRfbWNmZzsK KyAgICBhYm0tPnNyYXQgPSBidWlsZF9zcmF0OworICAgIGFibS0+c2xpdCA9IGJ1aWxkX3NsaXQ7 CisgICAgYWJtLT5jb25maWd1cmF0aW9uID0gcGNfYWNwaV9jb25maWd1cmF0aW9uOworCiAgICAg b2JqZWN0X2NsYXNzX3Byb3BlcnR5X2FkZChvYywgTUVNT1JZX0RFVklDRV9SRUdJT05fU0laRSwg ImludCIsCiAgICAgICAgIHBjX21hY2hpbmVfZ2V0X2RldmljZV9tZW1vcnlfcmVnaW9uX3NpemUs IE5VTEwsCiAgICAgICAgIE5VTEwsIE5VTEwsICZlcnJvcl9hYm9ydCk7CkBAIC0yNDk1LDYgKzI1 MTMsNyBAQCBzdGF0aWMgY29uc3QgVHlwZUluZm8gcGNfbWFjaGluZV9pbmZvID0gewogICAgIC5p bnRlcmZhY2VzID0gKEludGVyZmFjZUluZm9bXSkgewogICAgICAgICAgeyBUWVBFX0hPVFBMVUdf SEFORExFUiB9LAogICAgICAgICAgeyBUWVBFX05NSSB9LAorICAgICAgICAgeyBUWVBFX0FDUElf QlVJTERFUiB9LAogICAgICAgICAgeyB9CiAgICAgfSwKIH07Ci0tIAoyLjE5LjEKCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGlu ZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnBy b2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRldmVs From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47421) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gJTvc-0000rZ-H3 for qemu-devel@nongnu.org; Sun, 04 Nov 2018 20:43:45 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gJTvb-0003mG-4Q for qemu-devel@nongnu.org; Sun, 04 Nov 2018 20:43:44 -0500 From: Samuel Ortiz Date: Mon, 5 Nov 2018 02:40:44 +0100 Message-Id: <20181105014047.26447-22-sameo@linux.intel.com> In-Reply-To: <20181105014047.26447-1-sameo@linux.intel.com> References: <20181105014047.26447-1-sameo@linux.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Subject: [Qemu-devel] [PATCH v5 21/24] hw: i386: Implement the ACPI builder interface for PC List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Shannon Zhao , Stefano Stabellini , Anthony Perard , Richard Henderson , Marcel Apfelbaum , xen-devel@lists.xenproject.org, Paolo Bonzini , "Michael S. Tsirkin" , Igor Mammedov , qemu-arm@nongnu.org, Peter Maydell , Eduardo Habkost All PC machine type derivatives will use the same ACPI table build methods. But with that change in place, any new x86 machine type will be able to re-use the acpi-build API and customize part of it by defining its own ACPI table build methods. Reviewed-by: Philippe Mathieu-Daudé Tested-by: Philippe Mathieu-Daudé Signed-off-by: Samuel Ortiz --- hw/i386/acpi-build.c | 14 +++++++++----- hw/i386/pc.c | 19 +++++++++++++++++++ 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c index 4b1d8fbe3f..93d89b96f1 100644 --- a/hw/i386/acpi-build.c +++ b/hw/i386/acpi-build.c @@ -34,6 +34,7 @@ #include "hw/acpi/acpi-defs.h" #include "hw/acpi/acpi.h" #include "hw/acpi/cpu.h" +#include "hw/acpi/builder.h" #include "hw/nvram/fw_cfg.h" #include "hw/loader.h" #include "hw/isa/isa.h" @@ -1683,6 +1684,7 @@ void acpi_build(AcpiBuildTables *tables, GArray *tables_blob = tables->table_data; AcpiSlicOem slic_oem = { .id = NULL, .table_id = NULL }; Object *vmgenid_dev; + AcpiBuilder *ab = ACPI_BUILDER(machine); acpi_get_pm_info(&pm); acpi_get_misc_info(&misc); @@ -1732,7 +1734,8 @@ void acpi_build(AcpiBuildTables *tables, aml_len += tables_blob->len - fadt; acpi_add_table(table_offsets, tables_blob); - build_madt(tables_blob, tables->linker, machine, acpi_conf); + acpi_builder_madt(ab, tables_blob, tables->linker, + machine, acpi_conf); vmgenid_dev = find_vmgenid_dev(); if (vmgenid_dev) { @@ -1756,15 +1759,16 @@ void acpi_build(AcpiBuildTables *tables, } if (acpi_conf->numa_nodes) { acpi_add_table(table_offsets, tables_blob); - build_srat(tables_blob, tables->linker, machine, acpi_conf); + acpi_builder_srat(ab, tables_blob, tables->linker, + machine, acpi_conf); if (have_numa_distance) { acpi_add_table(table_offsets, tables_blob); - build_slit(tables_blob, tables->linker); + acpi_builder_slit(ab, tables_blob, tables->linker); } } if (acpi_get_mcfg(&mcfg)) { acpi_add_table(table_offsets, tables_blob); - build_mcfg(tables_blob, tables->linker, &mcfg); + acpi_builder_mcfg(ab, tables_blob, tables->linker, &mcfg); } if (x86_iommu_get_default()) { IommuType IOMMUType = x86_iommu_get_type(); @@ -1795,7 +1799,7 @@ void acpi_build(AcpiBuildTables *tables, slic_oem.id, slic_oem.table_id); /* RSDP is in FSEG memory, so allocate it separately */ - build_rsdp_rsdt(tables->rsdp, tables->linker, rsdt); + acpi_builder_rsdp(ab, tables->rsdp, tables->linker, rsdt); /* We'll expose it all to Guest so we want to reduce * chance of size changes. diff --git a/hw/i386/pc.c b/hw/i386/pc.c index c9ffc8cff6..53a3036066 100644 --- a/hw/i386/pc.c +++ b/hw/i386/pc.c @@ -64,6 +64,7 @@ #include "qemu/option.h" #include "hw/acpi/acpi.h" #include "hw/acpi/cpu_hotplug.h" +#include "hw/acpi/builder.h" #include "hw/boards.h" #include "acpi-build.h" #include "hw/mem/pc-dimm.h" @@ -75,6 +76,7 @@ #include "hw/nmi.h" #include "hw/i386/intel_iommu.h" #include "hw/net/ne2000-isa.h" +#include "hw/i386/acpi.h" /* debug PC/ISA interrupts */ //#define DEBUG_IRQ @@ -2404,12 +2406,20 @@ static void x86_nmi(NMIState *n, int cpu_index, Error **errp) } } +static AcpiConfiguration *pc_acpi_configuration(AcpiBuilder *builder) +{ + PCMachineState *pcms = PC_MACHINE(builder); + + return &pcms->acpi_configuration; +} + static void pc_machine_class_init(ObjectClass *oc, void *data) { MachineClass *mc = MACHINE_CLASS(oc); PCMachineClass *pcmc = PC_MACHINE_CLASS(oc); HotplugHandlerClass *hc = HOTPLUG_HANDLER_CLASS(oc); NMIClass *nc = NMI_CLASS(oc); + AcpiBuilderMethods *abm = ACPI_BUILDER_METHODS(oc); pcmc->pci_enabled = true; pcmc->has_acpi_build = true; @@ -2444,6 +2454,14 @@ static void pc_machine_class_init(ObjectClass *oc, void *data) nc->nmi_monitor_handler = x86_nmi; mc->default_cpu_type = TARGET_DEFAULT_CPU_TYPE; + /* ACPI building methods */ + abm->madt = build_madt; + abm->rsdp = build_rsdp_rsdt; + abm->mcfg = build_mcfg; + abm->srat = build_srat; + abm->slit = build_slit; + abm->configuration = pc_acpi_configuration; + object_class_property_add(oc, MEMORY_DEVICE_REGION_SIZE, "int", pc_machine_get_device_memory_region_size, NULL, NULL, NULL, &error_abort); @@ -2495,6 +2513,7 @@ static const TypeInfo pc_machine_info = { .interfaces = (InterfaceInfo[]) { { TYPE_HOTPLUG_HANDLER }, { TYPE_NMI }, + { TYPE_ACPI_BUILDER }, { } }, }; -- 2.19.1