1a5cf2bb4SCornelia Huck /* 2a5cf2bb4SCornelia Huck * virtio ccw target definitions 3a5cf2bb4SCornelia Huck * 4de6a9218SPierre Morel * Copyright 2012,2015 IBM Corp. 5a5cf2bb4SCornelia Huck * Author(s): Cornelia Huck <cornelia.huck@de.ibm.com> 6de6a9218SPierre Morel * Pierre Morel <pmorel@linux.vnet.ibm.com> 7a5cf2bb4SCornelia Huck * 8a5cf2bb4SCornelia Huck * This work is licensed under the terms of the GNU GPL, version 2 or (at 9a5cf2bb4SCornelia Huck * your option) any later version. See the COPYING file in the top-level 10a5cf2bb4SCornelia Huck * directory. 11a5cf2bb4SCornelia Huck */ 12a5cf2bb4SCornelia Huck 13a5cf2bb4SCornelia Huck #ifndef HW_S390X_VIRTIO_CCW_H 14a5cf2bb4SCornelia Huck #define HW_S390X_VIRTIO_CCW_H 15a5cf2bb4SCornelia Huck 16db1015e9SEduardo Habkost #include "qom/object.h" 17a9c94277SMarkus Armbruster #include "hw/virtio/virtio-bus.h" 18a9c94277SMarkus Armbruster #include "hw/s390x/s390_flic.h" 19a9c94277SMarkus Armbruster #include "hw/s390x/css.h" 20b804e8a6SJing Liu #include "ccw-device.h" 21b804e8a6SJing Liu #include "hw/s390x/css-bridge.h" 22a5cf2bb4SCornelia Huck 23a5cf2bb4SCornelia Huck #define VIRTIO_CCW_CU_TYPE 0x3832 24a5cf2bb4SCornelia Huck #define VIRTIO_CCW_CHPID_TYPE 0x32 25a5cf2bb4SCornelia Huck 26a5cf2bb4SCornelia Huck #define CCW_CMD_SET_VQ 0x13 27a5cf2bb4SCornelia Huck #define CCW_CMD_VDEV_RESET 0x33 28a5cf2bb4SCornelia Huck #define CCW_CMD_READ_FEAT 0x12 29a5cf2bb4SCornelia Huck #define CCW_CMD_WRITE_FEAT 0x11 30a5cf2bb4SCornelia Huck #define CCW_CMD_READ_CONF 0x22 31a5cf2bb4SCornelia Huck #define CCW_CMD_WRITE_CONF 0x21 32a5cf2bb4SCornelia Huck #define CCW_CMD_WRITE_STATUS 0x31 33a5cf2bb4SCornelia Huck #define CCW_CMD_SET_IND 0x43 34a5cf2bb4SCornelia Huck #define CCW_CMD_SET_CONF_IND 0x53 35a5cf2bb4SCornelia Huck #define CCW_CMD_READ_VQ_CONF 0x32 36e32652f7SPierre Morel #define CCW_CMD_READ_STATUS 0x72 377e749462SCornelia Huck #define CCW_CMD_SET_IND_ADAPTER 0x73 38c42767f2SThomas Huth #define CCW_CMD_SET_VIRTIO_REV 0x83 39a5cf2bb4SCornelia Huck 40a5cf2bb4SCornelia Huck #define TYPE_VIRTIO_CCW_DEVICE "virtio-ccw-device" 41a489d195SEduardo Habkost OBJECT_DECLARE_TYPE(VirtioCcwDevice, VirtIOCCWDeviceClass, VIRTIO_CCW_DEVICE) 42a5cf2bb4SCornelia Huck 43a5cf2bb4SCornelia Huck typedef struct VirtioBusState VirtioCcwBusState; 44a5cf2bb4SCornelia Huck typedef struct VirtioBusClass VirtioCcwBusClass; 45a5cf2bb4SCornelia Huck 46a5cf2bb4SCornelia Huck #define TYPE_VIRTIO_CCW_BUS "virtio-ccw-bus" 478110fa1dSEduardo Habkost DECLARE_OBJ_CHECKERS(VirtioCcwBusState, VirtioCcwBusClass, 488110fa1dSEduardo Habkost VIRTIO_CCW_BUS, TYPE_VIRTIO_CCW_BUS) 49a5cf2bb4SCornelia Huck 502dd9d8cfSGerd Hoffmann /* 512dd9d8cfSGerd Hoffmann * modules can reference this symbol to avoid being loaded 522dd9d8cfSGerd Hoffmann * into system emulators without ccw support 532dd9d8cfSGerd Hoffmann */ 542dd9d8cfSGerd Hoffmann extern bool have_virtio_ccw; 55a5cf2bb4SCornelia Huck 56db1015e9SEduardo Habkost struct VirtIOCCWDeviceClass { 57b804e8a6SJing Liu CCWDeviceClass parent_class; 585e5ced38SMarkus Armbruster void (*realize)(VirtioCcwDevice *dev, Error **errp); 59b69c3c21SMarkus Armbruster void (*unrealize)(VirtioCcwDevice *dev); 60*6affa00dSPeter Maydell ResettablePhases parent_phases; 61db1015e9SEduardo Habkost }; 62a5cf2bb4SCornelia Huck 63b4436a0bSCornelia Huck /* Performance improves when virtqueue kick processing is decoupled from the 64b4436a0bSCornelia Huck * vcpu thread using ioeventfd for some devices. */ 65b4436a0bSCornelia Huck #define VIRTIO_CCW_FLAG_USE_IOEVENTFD_BIT 1 66b4436a0bSCornelia Huck #define VIRTIO_CCW_FLAG_USE_IOEVENTFD (1 << VIRTIO_CCW_FLAG_USE_IOEVENTFD_BIT) 67b4436a0bSCornelia Huck 68a5cf2bb4SCornelia Huck struct VirtioCcwDevice { 69b804e8a6SJing Liu CcwDevice parent_obj; 70c42767f2SThomas Huth int revision; 71542571d5SCornelia Huck uint32_t max_rev; 72a5cf2bb4SCornelia Huck VirtioBusState bus; 73b4436a0bSCornelia Huck uint32_t flags; 747e749462SCornelia Huck uint8_t thinint_isc; 75d426d9fbSCornelia Huck AdapterRoutes routes; 76a5cf2bb4SCornelia Huck /* Guest provided values: */ 777bca3892SCornelia Huck IndAddr *indicators; 787bca3892SCornelia Huck IndAddr *indicators2; 797bca3892SCornelia Huck IndAddr *summary_indicator; 807e749462SCornelia Huck uint64_t ind_bit; 8147e13dfdSHalil Pasic bool force_revision_1; 82a5cf2bb4SCornelia Huck }; 83a5cf2bb4SCornelia Huck 84c42767f2SThomas Huth /* The maximum virtio revision we support. */ 857aa2adc2SPierre Morel #define VIRTIO_CCW_MAX_REV 2 virtio_ccw_rev_max(VirtioCcwDevice * dev)86542571d5SCornelia Huckstatic inline int virtio_ccw_rev_max(VirtioCcwDevice *dev) 87c42767f2SThomas Huth { 88542571d5SCornelia Huck return dev->max_rev; 89c42767f2SThomas Huth } 90c42767f2SThomas Huth 91a5cf2bb4SCornelia Huck VirtIODevice *virtio_ccw_get_vdev(SubchDev *sch); 92de6a9218SPierre Morel 93a5cf2bb4SCornelia Huck #endif 94