From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:39514) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WBl0A-0006nN-0g for qemu-devel@nongnu.org; Fri, 07 Feb 2014 07:57:55 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WBl04-0003An-1d for qemu-devel@nongnu.org; Fri, 07 Feb 2014 07:57:49 -0500 Received: from mx1.redhat.com ([209.132.183.28]:7399) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WBl03-0003Ad-OT for qemu-devel@nongnu.org; Fri, 07 Feb 2014 07:57:43 -0500 From: Igor Mammedov Date: Fri, 7 Feb 2014 13:51:35 +0100 Message-Id: <1391777496-3882-9-git-send-email-imammedo@redhat.com> In-Reply-To: <1391777496-3882-1-git-send-email-imammedo@redhat.com> References: <1391777496-3882-1-git-send-email-imammedo@redhat.com> Subject: [Qemu-devel] [RFC 8/9] pcihp: expose PCI hotplug MMIO base/length as properties of piix4pm List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: kraxel@redhat.com, anthony@codemonkey.ws, mst@redhat.com with introduction of PCIHP, MMIO range becomes changable at runtime so it's not possible to statically punch hole PCI bus _CRS. Making IO base/length available as readonly properties allow acpi builder to get values and reserve PCI hotplug IO range at runtime later. Signed-off-by: Igor Mammedov --- hw/acpi/pcihp.c | 28 ++++++++++++++++++++++++++++ hw/acpi/piix4.c | 1 + include/hw/acpi/pcihp.h | 4 ++++ 3 files changed, 33 insertions(+), 0 deletions(-) diff --git a/hw/acpi/pcihp.c b/hw/acpi/pcihp.c index 1ce6fc2..629d364 100644 --- a/hw/acpi/pcihp.c +++ b/hw/acpi/pcihp.c @@ -37,6 +37,7 @@ #include "hw/pci/pci_bus.h" #include "qom/qom-qobject.h" #include "qapi/qmp/qint.h" +#include "qapi/visitor.h" //#define DEBUG @@ -309,3 +310,30 @@ const VMStateDescription vmstate_acpi_pcihp_pci_status = { VMSTATE_END_OF_LIST() } }; + +static void acpi_pcihp_get_io_addr(Object *obj, Visitor *v, void *opaque, + const char *name, Error **errp) +{ + AcpiPciHpState *s = opaque; + MemoryRegionSection mr_info = memory_region_find(&s->io, 0, 1); + uint16_t value = mr_info.offset_within_address_space; + + visit_type_uint16(v, &value, name, errp); +} + +static void acpi_pcihp_get_io_len(Object *obj, Visitor *v, void *opaque, + const char *name, Error **errp) +{ + AcpiPciHpState *s = opaque; + uint16_t value = memory_region_size(&s->io); + + visit_type_uint16(v, &value, name, errp); +} + +void acpi_pcihp_add_mmio_properties(Object *obj, AcpiPciHpState *s) +{ + object_property_add(obj, ACPI_PCIHP_IO_ADDR, "uint16", + acpi_pcihp_get_io_addr, NULL, NULL, s, NULL); + object_property_add(obj, ACPI_PCIHP_IO_LEN, "uint16", + acpi_pcihp_get_io_len, NULL, NULL, s, NULL); +} diff --git a/hw/acpi/piix4.c b/hw/acpi/piix4.c index 7a0efcb..034c5cd 100644 --- a/hw/acpi/piix4.c +++ b/hw/acpi/piix4.c @@ -558,6 +558,7 @@ static void piix4_acpi_system_hot_add_init(MemoryRegion *parent, "acpi-gpe0", GPE_LEN); memory_region_add_subregion(parent, GPE_BASE, &s->io_gpe); + acpi_pcihp_add_mmio_properties(OBJECT(s), &s->acpi_pci_hotplug); acpi_pcihp_init(&s->acpi_pci_hotplug, bus, parent, s->use_acpi_pci_hotplug); diff --git a/include/hw/acpi/pcihp.h b/include/hw/acpi/pcihp.h index 0a90e4a..0eb4e1c 100644 --- a/include/hw/acpi/pcihp.h +++ b/include/hw/acpi/pcihp.h @@ -70,4 +70,8 @@ extern const VMStateDescription vmstate_acpi_pcihp_pci_status; vmstate_acpi_pcihp_pci_status, \ AcpiPciHpPciStatus) +#define ACPI_PCIHP_IO_ADDR "pcihp-io-addr" +#define ACPI_PCIHP_IO_LEN "pcihp-io-len" + +void acpi_pcihp_add_mmio_properties(Object *obj, AcpiPciHpState *s); #endif -- 1.7.1