qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Cédric Le Goater" <clg@kaod.org>
To: qemu-ppc@nongnu.org
Cc: qemu-devel@nongnu.org,
	"David Gibson" <david@gibson.dropbear.id.au>,
	"Greg Kurz" <groug@kaod.org>, "Cédric Le Goater" <clg@kaod.org>
Subject: [Qemu-devel] [PATCH v4 06/28] ppc/xive: introduce the XiveFabric interface
Date: Thu,  7 Jun 2018 17:49:41 +0200	[thread overview]
Message-ID: <20180607155003.1580-7-clg@kaod.org> (raw)
In-Reply-To: <20180607155003.1580-1-clg@kaod.org>

The XiveFabric offers a simple interface, between the XiveSource
object and the main interrupt controller of the machine. It will
forward event notifications to the XIVE Interrupt Virtualization
Routing Engine (IVRE).

Signed-off-by: Cédric Le Goater <clg@kaod.org>
---
 include/hw/ppc/xive.h | 23 +++++++++++++++++++++++
 hw/intc/xive.c        | 25 +++++++++++++++++++++++++
 2 files changed, 48 insertions(+)

diff --git a/include/hw/ppc/xive.h b/include/hw/ppc/xive.h
index e118acd59f1e..be93fae6317b 100644
--- a/include/hw/ppc/xive.h
+++ b/include/hw/ppc/xive.h
@@ -13,6 +13,27 @@
 #include "hw/sysbus.h"
 
 /*
+ * XIVE Fabric (Interface between Source and Router)
+ */
+
+typedef struct XiveFabric {
+    Object parent;
+} XiveFabric;
+
+#define TYPE_XIVE_FABRIC "xive-fabric"
+#define XIVE_FABRIC(obj)                                     \
+    OBJECT_CHECK(XiveFabric, (obj), TYPE_XIVE_FABRIC)
+#define XIVE_FABRIC_CLASS(klass)                                     \
+    OBJECT_CLASS_CHECK(XiveFabricClass, (klass), TYPE_XIVE_FABRIC)
+#define XIVE_FABRIC_GET_CLASS(obj)                                   \
+    OBJECT_GET_CLASS(XiveFabricClass, (obj), TYPE_XIVE_FABRIC)
+
+typedef struct XiveFabricClass {
+    InterfaceClass parent;
+    void (*notify)(XiveFabric *xf, uint32_t lisn);
+} XiveFabricClass;
+
+/*
  * XIVE Interrupt Source
  */
 
@@ -42,6 +63,8 @@ typedef struct XiveSource {
     uint64_t        esb_flags;
     uint32_t        esb_shift;
     MemoryRegion    esb_mmio;
+
+    XiveFabric      *xive;
 } XiveSource;
 
 /*
diff --git a/hw/intc/xive.c b/hw/intc/xive.c
index 3ad8c151b9dc..3f6fcb358f83 100644
--- a/hw/intc/xive.c
+++ b/hw/intc/xive.c
@@ -152,7 +152,11 @@ static bool xive_source_esb_eoi(XiveSource *xsrc, uint32_t srcno)
  */
 static void xive_source_notify(XiveSource *xsrc, int srcno)
 {
+    XiveFabricClass *xfc = XIVE_FABRIC_GET_CLASS(xsrc->xive);
 
+    if (xfc->notify) {
+        xfc->notify(xsrc->xive, srcno);
+    }
 }
 
 /* In a two pages ESB MMIO setting, even page is the trigger page, odd
@@ -358,6 +362,17 @@ static void xive_source_reset(DeviceState *dev)
 static void xive_source_realize(DeviceState *dev, Error **errp)
 {
     XiveSource *xsrc = XIVE_SOURCE(dev);
+    Object *obj;
+    Error *local_err = NULL;
+
+    obj = object_property_get_link(OBJECT(dev), "xive", &local_err);
+    if (!obj) {
+        error_propagate(errp, local_err);
+        error_prepend(errp, "required link 'xive' not found: ");
+        return;
+    }
+
+    xsrc->xive = XIVE_FABRIC(obj);
 
     if (!xsrc->nr_irqs) {
         error_setg(errp, "Number of interrupt needs to be greater than 0");
@@ -427,9 +442,19 @@ static const TypeInfo xive_source_info = {
     .class_init    = xive_source_class_init,
 };
 
+/*
+ * XIVE Fabric
+ */
+static const TypeInfo xive_fabric_info = {
+    .name = TYPE_XIVE_FABRIC,
+    .parent = TYPE_INTERFACE,
+    .class_size = sizeof(XiveFabricClass),
+};
+
 static void xive_register_types(void)
 {
     type_register_static(&xive_source_info);
+    type_register_static(&xive_fabric_info);
 }
 
 type_init(xive_register_types)
-- 
2.13.6

  parent reply	other threads:[~2018-06-07 15:51 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-06-07 15:49 [Qemu-devel] [PATCH v4 00/28] ppc: support for the XIVE interrupt controller (POWER9) Cédric Le Goater
2018-06-07 15:49 ` [Qemu-devel] [PATCH v4 01/28] sparp_pci: simplify how the PCI LSIs are allocated Cédric Le Goater
2018-06-07 15:49 ` [Qemu-devel] [PATCH v4 02/28] spapr: introduce a generic IRQ frontend to the machine Cédric Le Goater
2018-06-07 15:49 ` [Qemu-devel] [PATCH v4 03/28] spapr: introduce a new IRQ backend using fixed IRQ number ranges Cédric Le Goater
2018-06-07 15:49 ` [Qemu-devel] [PATCH v4 04/28] ppc/xive: introduce a XIVE interrupt source model Cédric Le Goater
2018-06-07 15:49 ` [Qemu-devel] [PATCH v4 05/28] ppc/xive: add support for the LSI interrupt sources Cédric Le Goater
2018-06-07 15:49 ` Cédric Le Goater [this message]
2018-06-07 15:49 ` [Qemu-devel] [PATCH v4 07/28] ppc/xive: introduce the XiveRouter model Cédric Le Goater
2018-06-07 15:49 ` [Qemu-devel] [PATCH v4 08/28] ppc/xive: introduce the XIVE Event Queues Cédric Le Goater
2018-06-07 15:49 ` [Qemu-devel] [PATCH v4 09/28] ppc/xive: add support for the EQ Event State buffers Cédric Le Goater
2018-06-07 15:49 ` [Qemu-devel] [PATCH v4 10/28] ppc/xive: introduce the XIVE interrupt thread context Cédric Le Goater
2018-06-07 15:49 ` [Qemu-devel] [PATCH v4 11/28] ppc/xive: introduce a simplified XIVE presenter Cédric Le Goater
2018-06-07 15:49 ` [Qemu-devel] [PATCH v4 12/28] ppc/xive: notify the CPU when the interrupt priority is more privileged Cédric Le Goater
2018-06-07 15:49 ` [Qemu-devel] [PATCH v4 13/28] spapr/xive: introduce a XIVE interrupt controller Cédric Le Goater
2018-06-07 15:49 ` [Qemu-devel] [PATCH v4 14/28] spapr/xive: use the VCPU id as a VP identifier in the OS CAM Cédric Le Goater
2018-06-07 15:49 ` [Qemu-devel] [PATCH v4 15/28] spapr: initialize VSMT before initializing the IRQ backend Cédric Le Goater
2018-06-07 15:49 ` [Qemu-devel] [PATCH v4 16/28] spapr: introdude a new machine IRQ backend for XIVE Cédric Le Goater
2018-06-07 15:49 ` [Qemu-devel] [PATCH v4 17/28] spapr: add hcalls support for the XIVE exploitation interrupt mode Cédric Le Goater
2018-06-07 15:49 ` [Qemu-devel] [PATCH v4 18/28] spapr: add device tree support for the XIVE exploitation mode Cédric Le Goater
2018-06-07 15:49 ` [Qemu-devel] [PATCH v4 19/28] spapr: allocate the interrupt thread context under the CPU core Cédric Le Goater
2018-06-07 15:49 ` [Qemu-devel] [PATCH v4 20/28] spapr: introduce a 'pseries-3.0-xive' QEMU machine Cédric Le Goater
2018-06-07 15:49 ` [Qemu-devel] [PATCH v4 21/28] spapr: add classes for the XIVE models Cédric Le Goater
2018-06-07 15:49 ` [Qemu-devel] [PATCH v4 22/28] target/ppc/kvm: add Linux KVM definitions for XIVE Cédric Le Goater
2018-06-07 15:49 ` [Qemu-devel] [PATCH v4 23/28] spapr/xive: add common realize routine for KVM Cédric Le Goater
2018-06-07 15:49 ` [Qemu-devel] [PATCH v4 24/28] spapr/xive: add KVM support Cédric Le Goater
2018-06-07 15:50 ` [Qemu-devel] [PATCH v4 25/28] spapr: fix XICS migration Cédric Le Goater
2018-06-07 15:50 ` [Qemu-devel] [PATCH v4 26/28] pnv: add a physical mapping array describing MMIO ranges in each chip Cédric Le Goater
2018-06-07 15:50 ` [Qemu-devel] [PATCH v4 27/28] ppc: externalize ppc_get_vcpu_by_pir() Cédric Le Goater
2018-06-07 15:50 ` [Qemu-devel] [PATCH v4 28/28] ppc/pnv: add XIVE support Cédric Le Goater

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=20180607155003.1580-7-clg@kaod.org \
    --to=clg@kaod.org \
    --cc=david@gibson.dropbear.id.au \
    --cc=groug@kaod.org \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@nongnu.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).