aboutsummaryrefslogtreecommitdiff
path: root/hw/intc/s390_flic.c
diff options
context:
space:
mode:
authorDavid Hildenbrand <david@redhat.com>2018-01-29 13:56:10 +0100
committerCornelia Huck <cohuck@redhat.com>2018-02-09 09:37:13 +0100
commite6505d5395332d357ef663372f453381690cd2e0 (patch)
tree38d448f0482e3b9d17264789788fc6f5760bfd10 /hw/intc/s390_flic.c
parent520db63f3a50c6a5564dd2ce21912cfe011900a9 (diff)
s390x/flic: factor out injection of floating interrupts
Let the flic device handle it internally. This will allow us to later on store floating interrupts in the flic for the TCG case. This now also simplifies kvm.c. All that's left is the fallback interface for floating interrupts, which is now triggered directly via the flic in case anything goes wrong. Signed-off-by: David Hildenbrand <david@redhat.com> Message-Id: <20180129125623.21729-6-david@redhat.com> Signed-off-by: Cornelia Huck <cohuck@redhat.com>
Diffstat (limited to 'hw/intc/s390_flic.c')
-rw-r--r--hw/intc/s390_flic.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/hw/intc/s390_flic.c b/hw/intc/s390_flic.c
index ba1aa40eba..bdc8ec7607 100644
--- a/hw/intc/s390_flic.c
+++ b/hw/intc/s390_flic.c
@@ -127,6 +127,34 @@ static int qemu_s390_inject_airq(S390FLICState *fs, uint8_t type,
return 0;
}
+static void qemu_s390_inject_service(S390FLICState *fs, uint32_t parm)
+{
+
+ S390CPU *dummy_cpu = s390_cpu_addr2state(0);
+
+ /* FIXME: don't inject into dummy CPU */
+ cpu_inject_service(dummy_cpu, parm);
+}
+
+static void qemu_s390_inject_io(S390FLICState *fs, uint16_t subchannel_id,
+ uint16_t subchannel_nr, uint32_t io_int_parm,
+ uint32_t io_int_word)
+{
+ S390CPU *dummy_cpu = s390_cpu_addr2state(0);
+
+ /* FIXME: don't inject into dummy CPU */
+ cpu_inject_io(dummy_cpu, subchannel_id, subchannel_nr, io_int_parm,
+ io_int_word);
+}
+
+static void qemu_s390_inject_crw_mchk(S390FLICState *fs)
+{
+ S390CPU *dummy_cpu = s390_cpu_addr2state(0);
+
+ /* FIXME: don't inject into dummy CPU */
+ cpu_inject_crw_mchk(dummy_cpu);
+}
+
static void qemu_s390_flic_reset(DeviceState *dev)
{
QEMUS390FLICState *flic = QEMU_S390_FLIC(dev);
@@ -168,6 +196,9 @@ static void qemu_s390_flic_class_init(ObjectClass *oc, void *data)
fsc->clear_io_irq = qemu_s390_clear_io_flic;
fsc->modify_ais_mode = qemu_s390_modify_ais_mode;
fsc->inject_airq = qemu_s390_inject_airq;
+ fsc->inject_service = qemu_s390_inject_service;
+ fsc->inject_io = qemu_s390_inject_io;
+ fsc->inject_crw_mchk = qemu_s390_inject_crw_mchk;
}
static Property s390_flic_common_properties[] = {