From: David Hildenbrand Date: Thu, 19 Dec 2024 14:41:05 +0000 (+0100) Subject: s390x: rename s390-virtio-hcall* to s390-hypercall* X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=85489fc3652d0c4433c940f1a80a952e8cb5d3cb;p=qemu.git s390x: rename s390-virtio-hcall* to s390-hypercall* Let's make it clearer that we are talking about general QEMU/KVM-specific hypercalls. Message-ID: <20241219144115.2820241-5-david@redhat.com> Acked-by: Michael S. Tsirkin Reviewed-by: Thomas Huth Signed-off-by: David Hildenbrand --- diff --git a/hw/s390x/meson.build b/hw/s390x/meson.build index d6c8c33915..e344a3bd8c 100644 --- a/hw/s390x/meson.build +++ b/hw/s390x/meson.build @@ -29,7 +29,7 @@ s390x_ss.add(when: 'CONFIG_TCG', if_true: files( )) s390x_ss.add(when: 'CONFIG_S390_CCW_VIRTIO', if_true: files( 's390-virtio-ccw.c', - 's390-virtio-hcall.c', + 's390-hypercall.c', )) s390x_ss.add(when: 'CONFIG_TERMINAL3270', if_true: files('3270-ccw.c')) s390x_ss.add(when: 'CONFIG_VFIO', if_true: files('s390-pci-vfio.c')) diff --git a/hw/s390x/s390-hypercall.c b/hw/s390x/s390-hypercall.c new file mode 100644 index 0000000000..f816c2b1ef --- /dev/null +++ b/hw/s390x/s390-hypercall.c @@ -0,0 +1,75 @@ +/* + * Support for QEMU/KVM hypercalls on s390 + * + * Copyright 2012 IBM Corp. + * Author(s): Cornelia Huck + * + * This work is licensed under the terms of the GNU GPL, version 2 or (at + * your option) any later version. See the COPYING file in the top-level + * directory. + */ + +#include "qemu/osdep.h" +#include "cpu.h" +#include "hw/boards.h" +#include "hw/s390x/s390-hypercall.h" +#include "hw/s390x/ioinst.h" +#include "hw/s390x/css.h" +#include "virtio-ccw.h" + +static int handle_virtio_notify(uint64_t mem) +{ + MachineState *ms = MACHINE(qdev_get_machine()); + + if (mem < ms->ram_size) { + /* Early printk */ + return 0; + } + return -EINVAL; +} + +static int handle_virtio_ccw_notify(uint64_t subch_id, uint64_t data) +{ + SubchDev *sch; + VirtIODevice *vdev; + int cssid, ssid, schid, m; + uint16_t vq_idx = data; + + if (ioinst_disassemble_sch_ident(subch_id, &m, &cssid, &ssid, &schid)) { + return -EINVAL; + } + sch = css_find_subch(m, cssid, ssid, schid); + if (!sch || !css_subch_visible(sch)) { + return -EINVAL; + } + + vdev = virtio_ccw_get_vdev(sch); + if (vq_idx >= VIRTIO_QUEUE_MAX || !virtio_queue_get_num(vdev, vq_idx)) { + return -EINVAL; + } + + if (virtio_vdev_has_feature(vdev, VIRTIO_F_NOTIFICATION_DATA)) { + virtio_queue_set_shadow_avail_idx(virtio_get_queue(vdev, vq_idx), + (data >> 16) & 0xFFFF); + } + + virtio_queue_notify(vdev, vq_idx); + return 0; +} + +void handle_diag_500(S390CPU *cpu, uintptr_t ra) +{ + CPUS390XState *env = &cpu->env; + const uint64_t subcode = env->regs[1]; + + switch (subcode) { + case DIAG500_VIRTIO_NOTIFY: + env->regs[2] = handle_virtio_notify(env->regs[2]); + break; + case DIAG500_VIRTIO_CCW_NOTIFY: + env->regs[2] = handle_virtio_ccw_notify(env->regs[2], env->regs[3]); + break; + default: + s390_program_interrupt(env, PGM_SPECIFICATION, ra); + } +} diff --git a/hw/s390x/s390-hypercall.h b/hw/s390x/s390-hypercall.h new file mode 100644 index 0000000000..2fa81dbfdd --- /dev/null +++ b/hw/s390x/s390-hypercall.h @@ -0,0 +1,24 @@ +/* + * Support for QEMU/KVM hypercalls on s390x + * + * Copyright IBM Corp. 2012, 2017 + * Author(s): Cornelia Huck + * + * This work is licensed under the terms of the GNU GPL, version 2 or (at + * your option) any later version. See the COPYING file in the top-level + * directory. + */ + +#ifndef HW_S390_HYPERCALL_H +#define HW_S390_HYPERCALL_H + +#include "cpu.h" + +#define DIAG500_VIRTIO_NOTIFY 0 /* legacy, implemented as a NOP */ +#define DIAG500_VIRTIO_RESET 1 /* legacy */ +#define DIAG500_VIRTIO_SET_STATUS 2 /* legacy */ +#define DIAG500_VIRTIO_CCW_NOTIFY 3 /* KVM_S390_VIRTIO_CCW_NOTIFY */ + +void handle_diag_500(S390CPU *cpu, uintptr_t ra); + +#endif /* HW_S390_HYPERCALL_H */ diff --git a/hw/s390x/s390-virtio-hcall.c b/hw/s390x/s390-virtio-hcall.c deleted file mode 100644 index 5fb78a719e..0000000000 --- a/hw/s390x/s390-virtio-hcall.c +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Support for QEMU/KVM hypercalls on s390 - * - * Copyright 2012 IBM Corp. - * Author(s): Cornelia Huck - * - * This work is licensed under the terms of the GNU GPL, version 2 or (at - * your option) any later version. See the COPYING file in the top-level - * directory. - */ - -#include "qemu/osdep.h" -#include "cpu.h" -#include "hw/boards.h" -#include "hw/s390x/s390-virtio-hcall.h" -#include "hw/s390x/ioinst.h" -#include "hw/s390x/css.h" -#include "virtio-ccw.h" - -static int handle_virtio_notify(uint64_t mem) -{ - MachineState *ms = MACHINE(qdev_get_machine()); - - if (mem < ms->ram_size) { - /* Early printk */ - return 0; - } - return -EINVAL; -} - -static int handle_virtio_ccw_notify(uint64_t subch_id, uint64_t data) -{ - SubchDev *sch; - VirtIODevice *vdev; - int cssid, ssid, schid, m; - uint16_t vq_idx = data; - - if (ioinst_disassemble_sch_ident(subch_id, &m, &cssid, &ssid, &schid)) { - return -EINVAL; - } - sch = css_find_subch(m, cssid, ssid, schid); - if (!sch || !css_subch_visible(sch)) { - return -EINVAL; - } - - vdev = virtio_ccw_get_vdev(sch); - if (vq_idx >= VIRTIO_QUEUE_MAX || !virtio_queue_get_num(vdev, vq_idx)) { - return -EINVAL; - } - - if (virtio_vdev_has_feature(vdev, VIRTIO_F_NOTIFICATION_DATA)) { - virtio_queue_set_shadow_avail_idx(virtio_get_queue(vdev, vq_idx), - (data >> 16) & 0xFFFF); - } - - virtio_queue_notify(vdev, vq_idx); - return 0; -} - -void handle_diag_500(S390CPU *cpu, uintptr_t ra) -{ - CPUS390XState *env = &cpu->env; - const uint64_t subcode = env->regs[1]; - - switch (subcode) { - case DIAG500_VIRTIO_NOTIFY: - env->regs[2] = handle_virtio_notify(env->regs[2]); - break; - case DIAG500_VIRTIO_CCW_NOTIFY: - env->regs[2] = handle_virtio_ccw_notify(env->regs[2], env->regs[3]); - break; - default: - s390_program_interrupt(env, PGM_SPECIFICATION, ra); - } -} diff --git a/hw/s390x/s390-virtio-hcall.h b/hw/s390x/s390-virtio-hcall.h deleted file mode 100644 index dca456b926..0000000000 --- a/hw/s390x/s390-virtio-hcall.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Support for QEMU/KVM hypercalls on s390x - * - * Copyright IBM Corp. 2012, 2017 - * Author(s): Cornelia Huck - * - * This work is licensed under the terms of the GNU GPL, version 2 or (at - * your option) any later version. See the COPYING file in the top-level - * directory. - */ - -#ifndef HW_S390_VIRTIO_HCALL_H -#define HW_S390_VIRTIO_HCALL_H - -#include "cpu.h" - -#define DIAG500_VIRTIO_NOTIFY 0 /* legacy, implemented as a NOP */ -#define DIAG500_VIRTIO_RESET 1 /* legacy */ -#define DIAG500_VIRTIO_SET_STATUS 2 /* legacy */ -#define DIAG500_VIRTIO_CCW_NOTIFY 3 /* KVM_S390_VIRTIO_CCW_NOTIFY */ - -void handle_diag_500(S390CPU *cpu, uintptr_t ra); - -#endif /* HW_S390_VIRTIO_HCALL_H */ diff --git a/target/s390x/kvm/kvm.c b/target/s390x/kvm/kvm.c index 508403609f..7a3e1a8e1e 100644 --- a/target/s390x/kvm/kvm.c +++ b/target/s390x/kvm/kvm.c @@ -49,7 +49,7 @@ #include "hw/s390x/ebcdic.h" #include "exec/memattrs.h" #include "hw/s390x/s390-virtio-ccw.h" -#include "hw/s390x/s390-virtio-hcall.h" +#include "hw/s390x/s390-hypercall.h" #include "target/s390x/kvm/pv.h" #include CONFIG_DEVICES diff --git a/target/s390x/tcg/misc_helper.c b/target/s390x/tcg/misc_helper.c index 2b4310003b..b726a95352 100644 --- a/target/s390x/tcg/misc_helper.c +++ b/target/s390x/tcg/misc_helper.c @@ -36,7 +36,7 @@ #include "sysemu/cpus.h" #include "sysemu/sysemu.h" #include "hw/s390x/ebcdic.h" -#include "hw/s390x/s390-virtio-hcall.h" +#include "hw/s390x/s390-hypercall.h" #include "hw/s390x/sclp.h" #include "hw/s390x/s390_flic.h" #include "hw/s390x/ioinst.h"