Since the objects referenced by acpi_pcihp_init() do not inherit from a common
class, add ACPI_PCIHP_IO_BASE_PROP and ACPI_PCIHP_IO_BASE_PROP class properties
to each referenced object and remove the object properties manually added in
acpi_pcihp_init().

Signed-off-by: Mark Cave-Ayland <[email protected]>
---
 hw/acpi/generic_event_device.c | 30 ++++++++++++++++++++++++++++++
 hw/acpi/ich9.c                 | 30 ++++++++++++++++++++++++++++++
 hw/acpi/pcihp.c                |  5 -----
 hw/acpi/piix4.c                | 30 ++++++++++++++++++++++++++++++
 4 files changed, 90 insertions(+), 5 deletions(-)

diff --git a/hw/acpi/generic_event_device.c b/hw/acpi/generic_event_device.c
index 9e9416d406..1fc2798d53 100644
--- a/hw/acpi/generic_event_device.c
+++ b/hw/acpi/generic_event_device.c
@@ -11,6 +11,7 @@
 
 #include "qemu/osdep.h"
 #include "qapi/error.h"
+#include "qapi/visitor.h"
 #include "hw/acpi/acpi.h"
 #include "hw/acpi/pcihp.h"
 #include "hw/acpi/cpu.h"
@@ -357,6 +358,26 @@ static void acpi_ged_send_event(AcpiDeviceIf *adev, 
AcpiEventStatusBits ev)
     qemu_irq_pulse(s->irq);
 }
 
+static void acpi_ged_get_pcihp_io_base(Object *obj, Visitor *v,
+                                       const char *name, void *opaque,
+                                       Error **errp)
+{
+    AcpiGedState *s = ACPI_GED(obj);
+    uint16_t io_base = s->pcihp_state.io_base;
+
+    visit_type_uint16(v, name, &io_base, errp);
+}
+
+static void acpi_ged_get_pcihp_io_len(Object *obj, Visitor *v,
+                                      const char *name, void *opaque,
+                                      Error **errp)
+{
+    AcpiGedState *s = ACPI_GED(obj);
+    uint16_t io_len = s->pcihp_state.io_len;
+
+    visit_type_uint16(v, name, &io_len, errp);
+}
+
 static const Property acpi_ged_properties[] = {
     DEFINE_PROP_UINT32("ged-event", AcpiGedState, ged_event_bitmap, 0),
     DEFINE_PROP_BOOL(ACPI_PM_PROP_ACPI_PCIHP_BRIDGE, AcpiGedState,
@@ -608,6 +629,15 @@ static void acpi_ged_class_init(ObjectClass *class, const 
void *data)
 
     adevc->ospm_status = acpi_ged_ospm_status;
     adevc->send_event = acpi_ged_send_event;
+
+    object_class_property_add(class, ACPI_PCIHP_IO_BASE_PROP, "uint16",
+                              acpi_ged_get_pcihp_io_base,
+                              NULL,
+                              NULL, NULL);
+    object_class_property_add(class, ACPI_PCIHP_IO_LEN_PROP, "uint16",
+                              acpi_ged_get_pcihp_io_len,
+                              NULL,
+                              NULL, NULL);
 }
 
 static const TypeInfo acpi_ged_info = {
diff --git a/hw/acpi/ich9.c b/hw/acpi/ich9.c
index 723a87e6f3..71c3735eec 100644
--- a/hw/acpi/ich9.c
+++ b/hw/acpi/ich9.c
@@ -477,6 +477,28 @@ static void ich9_pm_set_keep_pci_slot_hpc(Object *obj, 
bool value, Error **errp)
     s->pm.keep_pci_slot_hpc = value;
 }
 
+static void ich9_pm_get_pcihp_io_base(Object *obj, Visitor *v,
+                                      const char *name, void *opaque,
+                                      Error **errp)
+{
+    ICH9LPCState *s = ICH9_LPC_DEVICE(obj);
+    ICH9LPCPMRegs *pm = &s->pm;
+    uint16_t io_base = pm->acpi_pci_hotplug.io_base;
+
+    visit_type_uint16(v, name, &io_base, errp);
+}
+
+static void ich9_pm_get_pcihp_io_len(Object *obj, Visitor *v,
+                                     const char *name, void *opaque,
+                                     Error **errp)
+{
+    ICH9LPCState *s = ICH9_LPC_DEVICE(obj);
+    ICH9LPCPMRegs *pm = &s->pm;
+    uint16_t io_len = pm->acpi_pci_hotplug.io_len;
+
+    visit_type_uint16(v, name, &io_len, errp);
+}
+
 void ich9_pm_reset_properties(ICH9LPCPMRegs *pm)
 {
     pm->acpi_memory_hotplug.is_enabled = true;
@@ -529,6 +551,14 @@ void ich9_pm_add_class_properties(ObjectClass *oc)
     object_class_property_add_bool(oc, "x-keep-pci-slot-hpc",
                                    ich9_pm_get_keep_pci_slot_hpc,
                                    ich9_pm_set_keep_pci_slot_hpc);
+    object_class_property_add(oc, ACPI_PCIHP_IO_BASE_PROP, "uint16",
+                              ich9_pm_get_pcihp_io_base,
+                              NULL,
+                              NULL, NULL);
+    object_class_property_add(oc, ACPI_PCIHP_IO_LEN_PROP, "uint16",
+                              ich9_pm_get_pcihp_io_len,
+                              NULL,
+                              NULL, NULL);
 }
 
 void ich9_pm_device_pre_plug_cb(HotplugHandler *hotplug_dev, DeviceState *dev,
diff --git a/hw/acpi/pcihp.c b/hw/acpi/pcihp.c
index 87162ff2c0..a91f523c93 100644
--- a/hw/acpi/pcihp.c
+++ b/hw/acpi/pcihp.c
@@ -502,11 +502,6 @@ void acpi_pcihp_init(Object *owner, AcpiPciHpState *s,
     memory_region_init_io(&s->io, owner, &acpi_pcihp_io_ops, s,
                           "acpi-pci-hotplug", s->io_len);
     memory_region_add_subregion(io, s->io_base, &s->io);
-
-    object_property_add_uint16_ptr(owner, ACPI_PCIHP_IO_BASE_PROP, &s->io_base,
-                                   OBJ_PROP_FLAG_READ);
-    object_property_add_uint16_ptr(owner, ACPI_PCIHP_IO_LEN_PROP, &s->io_len,
-                                   OBJ_PROP_FLAG_READ);
 }
 
 void build_append_pci_dsm_func0_common(Aml *ctx, Aml *retvar)
diff --git a/hw/acpi/piix4.c b/hw/acpi/piix4.c
index 9b7f50c7af..4bfe3caa0d 100644
--- a/hw/acpi/piix4.c
+++ b/hw/acpi/piix4.c
@@ -32,6 +32,7 @@
 #include "system/system.h"
 #include "system/xen.h"
 #include "qapi/error.h"
+#include "qapi/visitor.h"
 #include "qemu/range.h"
 #include "hw/acpi/cpu.h"
 #include "hw/core/hotplug.h"
@@ -405,6 +406,26 @@ static void piix4_pm_machine_ready(Notifier *n, void 
*opaque)
         (memory_region_present(io_as, 0x2f8) ? 0x90 : 0);
 }
 
+static void piix4_pm_get_pcihp_io_base(Object *obj, Visitor *v,
+                                       const char *name, void *opaque,
+                                       Error **errp)
+{
+    PIIX4PMState *s = PIIX4_PM(obj);
+    uint16_t io_base = s->acpi_pci_hotplug.io_base;
+
+    visit_type_uint16(v, name, &io_base, errp);
+}
+
+static void piix4_pm_get_pcihp_io_len(Object *obj, Visitor *v,
+                                      const char *name, void *opaque,
+                                      Error **errp)
+{
+    PIIX4PMState *s = PIIX4_PM(obj);
+    uint16_t io_len = s->acpi_pci_hotplug.io_len;
+
+    visit_type_uint16(v, name, &io_len, errp);
+}
+
 static void piix4_pm_add_properties(PIIX4PMState *s)
 {
     static const uint8_t acpi_enable_cmd = ACPI_ENABLE;
@@ -607,6 +628,15 @@ static void piix4_pm_class_init(ObjectClass *klass, const 
void *data)
     hc->is_hotpluggable_bus = piix4_is_hotpluggable_bus;
     adevc->ospm_status = piix4_ospm_status;
     adevc->send_event = piix4_send_gpe;
+
+    object_class_property_add(klass, ACPI_PCIHP_IO_BASE_PROP, "uint16",
+                              piix4_pm_get_pcihp_io_base,
+                              NULL,
+                              NULL, NULL);
+    object_class_property_add(klass, ACPI_PCIHP_IO_LEN_PROP, "uint16",
+                              piix4_pm_get_pcihp_io_len,
+                              NULL,
+                              NULL, NULL);
 }
 
 static const TypeInfo piix4_pm_info = {
-- 
2.43.0


Reply via email to