All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eric Auger <eric.auger@redhat.com>
To: eric.auger.pro@gmail.com, eric.auger@redhat.com,
	qemu-devel@nongnu.org, qemu-arm@nongnu.org,
	peter.maydell@linaro.org, imammedo@redhat.com,
	anisinha@redhat.com, mst@redhat.com, shannon.zhaosl@gmail.com
Cc: pbonzini@redhat.com, Jonathan.Cameron@huawei.com
Subject: [RFC 14/24] hw/i386/acpi-build: Move build_append_notification_callback to pcihp
Date: Mon, 28 Apr 2025 12:25:40 +0200	[thread overview]
Message-ID: <20250428102628.378046-15-eric.auger@redhat.com> (raw)
In-Reply-To: <20250428102628.378046-1-eric.auger@redhat.com>

We plan to reuse build_append_notification_callback() on ARM
so let's move it to pcihp.c.

No functional change intended.

Signed-off-by: Eric Auger <eric.auger@redhat.com>
---
 include/hw/acpi/pcihp.h |  1 +
 hw/acpi/pcihp.c         | 58 +++++++++++++++++++++++++++++++++++++++++
 hw/i386/acpi-build.c    | 58 -----------------------------------------
 3 files changed, 59 insertions(+), 58 deletions(-)

diff --git a/include/hw/acpi/pcihp.h b/include/hw/acpi/pcihp.h
index ab20fe7788..082c4e38b0 100644
--- a/include/hw/acpi/pcihp.h
+++ b/include/hw/acpi/pcihp.h
@@ -77,6 +77,7 @@ void acpi_pcihp_device_unplug_request_cb(HotplugHandler *hotplug_dev,
 void build_acpi_pci_hotplug(Aml *table, AmlRegionSpace rs, uint64_t pcihp_addr);
 void build_append_pcihp_resources(Aml *table,
                                   uint64_t io_addr, uint64_t io_len);
+bool build_append_notification_callback(Aml *parent_scope, const PCIBus *bus);
 
 /* Called on reset */
 void acpi_pcihp_reset(AcpiPciHpState *s);
diff --git a/hw/acpi/pcihp.c b/hw/acpi/pcihp.c
index 3dcbc7683d..e629528256 100644
--- a/hw/acpi/pcihp.c
+++ b/hw/acpi/pcihp.c
@@ -39,6 +39,7 @@
 #include "migration/vmstate.h"
 #include "qapi/error.h"
 #include "qom/qom-qobject.h"
+#include "qobject/qnum.h"
 #include "trace.h"
 
 #define ACPI_PCIHP_SIZE 0x0018
@@ -705,6 +706,63 @@ void build_append_pcihp_resources(Aml *scope /* \\_SB.PCI0 */,
     aml_append(scope, dev);
 }
 
+bool build_append_notification_callback(Aml *parent_scope, const PCIBus *bus)
+{
+    Aml *method;
+    PCIBus *sec;
+    QObject *bsel;
+    int nr_notifiers = 0;
+    GQueue *pcnt_bus_list = g_queue_new();
+
+    QLIST_FOREACH(sec, &bus->child, sibling) {
+        Aml *br_scope = aml_scope("S%.02X", sec->parent_dev->devfn);
+        if (pci_bus_is_root(sec)) {
+            continue;
+        }
+        nr_notifiers = nr_notifiers +
+                       build_append_notification_callback(br_scope, sec);
+        /*
+         * add new child scope to parent
+         * and keep track of bus that have PCNT,
+         * bus list is used later to call children PCNTs from this level PCNT
+         */
+        if (nr_notifiers) {
+            g_queue_push_tail(pcnt_bus_list, sec);
+            aml_append(parent_scope, br_scope);
+        }
+    }
+
+    /*
+     * Append PCNT method to notify about events on local and child buses.
+     * ps: hostbridge might not have hotplug (bsel) enabled but might have
+     * child bridges that do have bsel.
+     */
+    method = aml_method("PCNT", 0, AML_NOTSERIALIZED);
+
+    /* If bus supports hotplug select it and notify about local events */
+    bsel = object_property_get_qobject(OBJECT(bus), ACPI_PCIHP_PROP_BSEL, NULL);
+    if (bsel) {
+        uint64_t bsel_val = qnum_get_uint(qobject_to(QNum, bsel));
+
+        aml_append(method, aml_store(aml_int(bsel_val), aml_name("BNUM")));
+        aml_append(method, aml_call2("DVNT", aml_name("PCIU"),
+                                     aml_int(1))); /* Device Check */
+        aml_append(method, aml_call2("DVNT", aml_name("PCID"),
+                                     aml_int(3))); /* Eject Request */
+        nr_notifiers++;
+    }
+
+    /* Notify about child bus events in any case */
+    while ((sec = g_queue_pop_head(pcnt_bus_list))) {
+        aml_append(method, aml_name("^S%.02X.PCNT", sec->parent_dev->devfn));
+    }
+
+    aml_append(parent_scope, method);
+    qobject_unref(bsel);
+    g_queue_free(pcnt_bus_list);
+    return !!nr_notifiers;
+}
+
 const VMStateDescription vmstate_acpi_pcihp_pci_status = {
     .name = "acpi_pcihp_pci_status",
     .version_id = 1,
diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c
index 0cf372f9cb..a91bfc500e 100644
--- a/hw/i386/acpi-build.c
+++ b/hw/i386/acpi-build.c
@@ -589,64 +589,6 @@ void build_append_pci_bus_devices(Aml *parent_scope, PCIBus *bus)
     }
 }
 
-static bool build_append_notification_callback(Aml *parent_scope,
-                                               const PCIBus *bus)
-{
-    Aml *method;
-    PCIBus *sec;
-    QObject *bsel;
-    int nr_notifiers = 0;
-    GQueue *pcnt_bus_list = g_queue_new();
-
-    QLIST_FOREACH(sec, &bus->child, sibling) {
-        Aml *br_scope = aml_scope("S%.02X", sec->parent_dev->devfn);
-        if (pci_bus_is_root(sec)) {
-            continue;
-        }
-        nr_notifiers = nr_notifiers +
-                       build_append_notification_callback(br_scope, sec);
-        /*
-         * add new child scope to parent
-         * and keep track of bus that have PCNT,
-         * bus list is used later to call children PCNTs from this level PCNT
-         */
-        if (nr_notifiers) {
-            g_queue_push_tail(pcnt_bus_list, sec);
-            aml_append(parent_scope, br_scope);
-        }
-    }
-
-    /*
-     * Append PCNT method to notify about events on local and child buses.
-     * ps: hostbridge might not have hotplug (bsel) enabled but might have
-     * child bridges that do have bsel.
-     */
-    method = aml_method("PCNT", 0, AML_NOTSERIALIZED);
-
-    /* If bus supports hotplug select it and notify about local events */
-    bsel = object_property_get_qobject(OBJECT(bus), ACPI_PCIHP_PROP_BSEL, NULL);
-    if (bsel) {
-        uint64_t bsel_val = qnum_get_uint(qobject_to(QNum, bsel));
-
-        aml_append(method, aml_store(aml_int(bsel_val), aml_name("BNUM")));
-        aml_append(method, aml_call2("DVNT", aml_name("PCIU"),
-                                     aml_int(1))); /* Device Check */
-        aml_append(method, aml_call2("DVNT", aml_name("PCID"),
-                                     aml_int(3))); /* Eject Request */
-        nr_notifiers++;
-    }
-
-    /* Notify about child bus events in any case */
-    while ((sec = g_queue_pop_head(pcnt_bus_list))) {
-        aml_append(method, aml_name("^S%.02X.PCNT", sec->parent_dev->devfn));
-    }
-
-    aml_append(parent_scope, method);
-    qobject_unref(bsel);
-    g_queue_free(pcnt_bus_list);
-    return !!nr_notifiers;
-}
-
 /*
  * build_prt - Define interrupt routing rules
  *
-- 
2.49.0


  parent reply	other threads:[~2025-04-28 10:29 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-04-28 10:25 [RFC 00/24] APCI PCI Hotplug support on ARM Eric Auger
2025-04-28 10:25 ` [RFC 01/24] hw/pci/pcie_port: Fix pcie_slot_is_hotpluggbale_bus typo Eric Auger
2025-05-06  0:11   ` Gustavo Romero
2025-04-28 10:25 ` [RFC 02/24] hw/acpi/ged: Fix wrong identation Eric Auger
2025-05-06  0:11   ` Gustavo Romero
2025-04-28 10:25 ` [RFC 03/24] hw/i386/acpi-build: Fix build_append_notfication_callback typo Eric Auger
2025-05-06  0:11   ` Gustavo Romero
2025-04-28 10:25 ` [RFC 04/24] hw/i386/acpi-build: Make aml_pci_device_dsm() static Eric Auger
2025-04-28 10:25 ` [RFC 05/24] hw/arm/virt: Introduce machine state acpi pcihp flags and props Eric Auger
2025-05-06  0:12   ` Gustavo Romero
2025-05-06  8:42     ` Eric Auger
2025-04-28 10:25 ` [RFC 06/24] hw/acpi: Rename and move build_x86_acpi_pci_hotplug to pcihp Eric Auger
2025-05-06  0:12   ` Gustavo Romero
2025-05-06  8:42     ` Eric Auger
2025-04-28 10:25 ` [RFC 07/24] hw/pci-host/gpex-acpi: Add native_pci_hotplug arg to acpi_dsdt_add_pci_osc Eric Auger
2025-05-06  0:13   ` Gustavo Romero
2025-05-06  8:42     ` Eric Auger
2025-04-28 10:25 ` [RFC 08/24] hw/pci-host/gpex-acpi: Split host bridge OSC and DSM generation Eric Auger
2025-05-06  0:13   ` Gustavo Romero
2025-04-28 10:25 ` [RFC 09/24] hw/pci-host/gpex-acpi: Propagate hotplug type info from virt machine downto gpex Eric Auger
2025-05-06  0:13   ` Gustavo Romero
2025-04-28 10:25 ` [RFC 10/24] hw/i386/acpi-build: Turn build_q35_osc_method into a generic method Eric Auger
2025-04-28 10:25 ` [RFC 11/24] hw/pci-host/gpex-acpi: Use build_pci_host_bridge_osc_method Eric Auger
2025-04-28 10:25 ` [RFC 12/24] hw/i386/acpi-build: Introduce build_append_pcihp_resources() helper Eric Auger
2025-04-28 10:25 ` [RFC 13/24] hw/acpi/pcihp: Add an AmlRegionSpace arg to build_acpi_pci_hotplug Eric Auger
2025-04-28 10:25 ` Eric Auger [this message]
2025-04-28 10:25 ` [RFC 15/24] hw/i386/acpi-build: Move remaining pcihp generic functions to pcihp Eric Auger
2025-04-28 10:25 ` [RFC 16/24] hw/i386/acpi-build: Introduce and use acpi_get_pci_host Eric Auger
2025-04-28 10:25 ` [RFC 17/24] hw/arm/virt-acpi-build: Add DSDT additions for PCI hotplug Eric Auger
2025-04-28 10:25 ` [RFC 18/24] hw/acpi/ged: Prepare the device to react to PCI hotplug events Eric Auger
2025-05-14 16:20   ` Gustavo Romero
2025-05-14 16:46     ` Eric Auger
2025-04-28 10:25 ` [RFC 19/24] hw/acpi/ged: Call pcihp plug callbacks in hotplug handler implementation Eric Auger
2025-04-28 10:25 ` [RFC 20/24] hw/acpi/ged: Support migration of AcpiPciHpState Eric Auger
2025-04-28 10:25 ` [RFC 21/24] hw/core/sysbus: Introduce sysbus_mmio_map_name() helper Eric Auger
2025-04-28 10:25 ` [RFC 22/24] hw/arm/virt: Let virt support pci hotplug/unplug GED event Eric Auger
2025-04-28 10:25 ` [RFC 23/24] hw/arm/virt: Plug pcihp hotplug/hotunplug callbacks Eric Auger
2025-04-28 10:25 ` [RFC 24/24] hw/arm/virt: Use ACPI PCI hotplug by default Eric Auger
2025-05-05 13:26 ` [RFC 00/24] APCI PCI Hotplug support on ARM Gustavo Romero
2025-05-05 14:23   ` Eric Auger
2025-05-06 15:58   ` Eric Auger
2025-05-06 16:08     ` Eric Auger
2025-05-07  0:51     ` Gustavo Romero
2025-05-07  1:13       ` Gustavo Romero
2025-05-14 16:27         ` Gustavo Romero
2025-05-14 16:51           ` Eric Auger

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20250428102628.378046-15-eric.auger@redhat.com \
    --to=eric.auger@redhat.com \
    --cc=Jonathan.Cameron@huawei.com \
    --cc=anisinha@redhat.com \
    --cc=eric.auger.pro@gmail.com \
    --cc=imammedo@redhat.com \
    --cc=mst@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-arm@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=shannon.zhaosl@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.