[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-ppc] [PATCH v3 03/35] ppc/xive: introduce the XiveFabric interface
From: |
Cédric Le Goater |
Subject: |
[Qemu-ppc] [PATCH v3 03/35] ppc/xive: introduce the XiveFabric interface |
Date: |
Thu, 19 Apr 2018 14:42:59 +0200 |
The XiveFabric offers a simple interface, between the XiveSourve
object and the device model owning the interrupt sources, to forward
an event notification to the XIVE interrupt controller of the machine
and if the owner is the controller, to call directly the routing
sub-engine.
Signed-off-by: Cédric Le Goater <address@hidden>
---
hw/intc/xive.c | 37 ++++++++++++++++++++++++++++++++++++-
include/hw/ppc/xive.h | 25 +++++++++++++++++++++++++
2 files changed, 61 insertions(+), 1 deletion(-)
diff --git a/hw/intc/xive.c b/hw/intc/xive.c
index 060976077dd7..b4c3d06c1219 100644
--- a/hw/intc/xive.c
+++ b/hw/intc/xive.c
@@ -17,6 +17,21 @@
#include "hw/ppc/xive.h"
/*
+ * XIVE Fabric
+ */
+
+static void xive_fabric_route(XiveFabric *xf, int lisn)
+{
+
+}
+
+static const TypeInfo xive_fabric_info = {
+ .name = TYPE_XIVE_FABRIC,
+ .parent = TYPE_INTERFACE,
+ .class_size = sizeof(XiveFabricClass),
+};
+
+/*
* XIVE Interrupt Source
*/
@@ -97,11 +112,19 @@ static bool xive_source_pq_trigger(XiveSource *xsrc,
uint32_t srcno)
/*
* Forward the source event notification to the associated XiveFabric,
- * the device owning the sources.
+ * the device owning the sources, or perform the routing if the device
+ * is the interrupt controller.
*/
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 + xsrc->offset);
+ } else {
+ xive_fabric_route(xsrc->xive, srcno + xsrc->offset);
+ }
}
/*
@@ -302,6 +325,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");
@@ -376,6 +410,7 @@ static const TypeInfo xive_source_info = {
static void xive_register_types(void)
{
type_register_static(&xive_source_info);
+ type_register_static(&xive_fabric_info);
}
type_init(xive_register_types)
diff --git a/include/hw/ppc/xive.h b/include/hw/ppc/xive.h
index 0b76dd278d9b..4fcae2c763e6 100644
--- a/include/hw/ppc/xive.h
+++ b/include/hw/ppc/xive.h
@@ -12,6 +12,8 @@
#include "hw/sysbus.h"
+typedef struct XiveFabric XiveFabric;
+
/*
* XIVE Interrupt Source
*/
@@ -46,6 +48,8 @@ typedef struct XiveSource {
hwaddr esb_base;
uint32_t esb_shift;
MemoryRegion esb_mmio;
+
+ XiveFabric *xive;
} XiveSource;
/*
@@ -143,4 +147,25 @@ static inline void xive_source_irq_set(XiveSource *xsrc,
uint32_t srcno,
xsrc->status[srcno] |= lsi ? XIVE_STATUS_LSI : 0;
}
+/*
+ * XIVE Fabric
+ */
+
+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;
+
#endif /* PPC_XIVE_H */
--
2.13.6
- Re: [Qemu-ppc] [PATCH v3 01/35] ppc/xive: introduce a XIVE interrupt source model, (continued)
[Qemu-ppc] [PATCH v3 02/35] ppc/xive: add support for the LSI interrupt sources, Cédric Le Goater, 2018/04/19
- Re: [Qemu-ppc] [PATCH v3 02/35] ppc/xive: add support for the LSI interrupt sources, David Gibson, 2018/04/23
- Re: [Qemu-ppc] [PATCH v3 02/35] ppc/xive: add support for the LSI interrupt sources, Cédric Le Goater, 2018/04/23
- Re: [Qemu-ppc] [PATCH v3 02/35] ppc/xive: add support for the LSI interrupt sources, David Gibson, 2018/04/24
- Re: [Qemu-ppc] [PATCH v3 02/35] ppc/xive: add support for the LSI interrupt sources, Cédric Le Goater, 2018/04/24
- Re: [Qemu-ppc] [PATCH v3 02/35] ppc/xive: add support for the LSI interrupt sources, David Gibson, 2018/04/25
- Re: [Qemu-ppc] [PATCH v3 02/35] ppc/xive: add support for the LSI interrupt sources, Cédric Le Goater, 2018/04/26
- Re: [Qemu-ppc] [PATCH v3 02/35] ppc/xive: add support for the LSI interrupt sources, David Gibson, 2018/04/26
[Qemu-ppc] [PATCH v3 03/35] ppc/xive: introduce the XiveFabric interface,
Cédric Le Goater <=
- Re: [Qemu-ppc] [PATCH v3 03/35] ppc/xive: introduce the XiveFabric interface, David Gibson, 2018/04/23
- Re: [Qemu-ppc] [PATCH v3 03/35] ppc/xive: introduce the XiveFabric interface, Cédric Le Goater, 2018/04/23
- Re: [Qemu-ppc] [PATCH v3 03/35] ppc/xive: introduce the XiveFabric interface, David Gibson, 2018/04/24
- Re: [Qemu-ppc] [PATCH v3 03/35] ppc/xive: introduce the XiveFabric interface, Cédric Le Goater, 2018/04/24
- Re: [Qemu-ppc] [PATCH v3 03/35] ppc/xive: introduce the XiveFabric interface, David Gibson, 2018/04/25
- Re: [Qemu-ppc] [PATCH v3 03/35] ppc/xive: introduce the XiveFabric interface, Cédric Le Goater, 2018/04/26
- Re: [Qemu-ppc] [PATCH v3 03/35] ppc/xive: introduce the XiveFabric interface, David Gibson, 2018/04/27
[Qemu-ppc] [PATCH v3 04/35] spapr/xive: introduce a XIVE interrupt controller for sPAPR, Cédric Le Goater, 2018/04/19