X-Git-Url: https://repo.jachan.dev/qemu.git/blobdiff_plain/4ceb193d30fe9b1cda0dc73bddb8051659926fb9..f3a1b5068cea303a55e2a21a97e66d057eaae638:/hw/s390x/s390-virtio-bus.h diff --git a/hw/s390x/s390-virtio-bus.h b/hw/s390x/s390-virtio-bus.h index 1daf753884..7ad295e68f 100644 --- a/hw/s390x/s390-virtio-bus.h +++ b/hw/s390x/s390-virtio-bus.h @@ -19,35 +19,40 @@ #ifndef HW_S390_VIRTIO_BUS_H #define HW_S390_VIRTIO_BUS_H 1 +#include + +#include "standard-headers/asm-s390/kvm_virtio.h" +#include "standard-headers/linux/virtio_ring.h" #include "hw/virtio/virtio-blk.h" #include "hw/virtio/virtio-net.h" #include "hw/virtio/virtio-rng.h" #include "hw/virtio/virtio-serial.h" #include "hw/virtio/virtio-scsi.h" #include "hw/virtio/virtio-bus.h" +#ifdef CONFIG_VHOST_SCSI +#include "hw/virtio/vhost-scsi.h" +#endif + +typedef struct kvm_device_desc KvmDeviceDesc; -#define VIRTIO_DEV_OFFS_TYPE 0 /* 8 bits */ -#define VIRTIO_DEV_OFFS_NUM_VQ 1 /* 8 bits */ -#define VIRTIO_DEV_OFFS_FEATURE_LEN 2 /* 8 bits */ -#define VIRTIO_DEV_OFFS_CONFIG_LEN 3 /* 8 bits */ -#define VIRTIO_DEV_OFFS_STATUS 4 /* 8 bits */ -#define VIRTIO_DEV_OFFS_CONFIG 5 /* dynamic */ +#define VIRTIO_DEV_OFFS_TYPE offsetof(KvmDeviceDesc, type) +#define VIRTIO_DEV_OFFS_NUM_VQ offsetof(KvmDeviceDesc, num_vq) +#define VIRTIO_DEV_OFFS_FEATURE_LEN offsetof(KvmDeviceDesc, feature_len) +#define VIRTIO_DEV_OFFS_CONFIG_LEN offsetof(KvmDeviceDesc, config_len) +#define VIRTIO_DEV_OFFS_STATUS offsetof(KvmDeviceDesc, status) +#define VIRTIO_DEV_OFFS_CONFIG offsetof(KvmDeviceDesc, config) -#define VIRTIO_VQCONFIG_OFFS_TOKEN 0 /* 64 bits */ -#define VIRTIO_VQCONFIG_OFFS_ADDRESS 8 /* 64 bits */ -#define VIRTIO_VQCONFIG_OFFS_NUM 16 /* 16 bits */ -#define VIRTIO_VQCONFIG_LEN 24 +typedef struct kvm_vqconfig KvmVqConfig; +#define VIRTIO_VQCONFIG_OFFS_TOKEN offsetof(KvmVqConfig,token) /* 64 bit */ +#define VIRTIO_VQCONFIG_OFFS_ADDRESS offsetof(KvmVqConfig, address) /* 64 bit */ +#define VIRTIO_VQCONFIG_OFFS_NUM offsetof(KvmVqConfig, num) /* 16 bit */ +#define VIRTIO_VQCONFIG_LEN sizeof(KvmVqConfig) #define VIRTIO_RING_LEN (TARGET_PAGE_SIZE * 3) -#define VIRTIO_VRING_AVAIL_IDX_OFFS 2 -#define VIRTIO_VRING_USED_IDX_OFFS 2 +#define VIRTIO_VRING_AVAIL_IDX_OFFS offsetof(struct vring_avail, idx) +#define VIRTIO_VRING_USED_IDX_OFFS offsetof(struct vring_used, idx) #define S390_DEVICE_PAGES 512 -#define VIRTIO_PARAM_MASK 0xff -#define VIRTIO_PARAM_VRING_INTERRUPT 0x0 -#define VIRTIO_PARAM_CONFIG_CHANGED 0x1 -#define VIRTIO_PARAM_DEV_ADD 0x2 - #define TYPE_VIRTIO_S390_DEVICE "virtio-s390-device" #define VIRTIO_S390_DEVICE(obj) \ OBJECT_CHECK(VirtIOS390Device, (obj), TYPE_VIRTIO_S390_DEVICE) @@ -76,11 +81,9 @@ typedef struct VirtioBusClass VirtioS390BusClass; typedef struct VirtIOS390Device VirtIOS390Device; -void virtio_s390_bus_new(VirtioBusState *bus, VirtIOS390Device *dev); - typedef struct VirtIOS390DeviceClass { DeviceClass qdev; - int (*init)(VirtIOS390Device *dev); + void (*realize)(VirtIOS390Device *dev, Error **errp); } VirtIOS390DeviceClass; struct VirtIOS390Device { @@ -89,10 +92,6 @@ struct VirtIOS390Device { ram_addr_t feat_offs; uint8_t feat_len; VirtIODevice *vdev; - NICConf nic; - uint32_t host_features; - virtio_net_conf net; - VirtIORNGConf rng; VirtioBusState bus; }; @@ -108,7 +107,6 @@ typedef struct VirtIOS390Bus { void s390_virtio_device_update_status(VirtIOS390Device *dev); -VirtIOS390Device *s390_virtio_bus_console(VirtIOS390Bus *bus); VirtIOS390Bus *s390_virtio_bus_init(ram_addr_t *ram_size); VirtIOS390Device *s390_virtio_bus_find_vring(VirtIOS390Bus *bus, @@ -126,7 +124,6 @@ void s390_virtio_reset_idx(VirtIOS390Device *dev); typedef struct VirtIOBlkS390 { VirtIOS390Device parent_obj; VirtIOBlock vdev; - VirtIOBlkConf blk; } VirtIOBlkS390; /* virtio-scsi-s390 */ @@ -151,4 +148,39 @@ typedef struct VirtIOSerialS390 { VirtIOSerial vdev; } VirtIOSerialS390; +/* virtio-net-s390 */ + +#define TYPE_VIRTIO_NET_S390 "virtio-net-s390" +#define VIRTIO_NET_S390(obj) \ + OBJECT_CHECK(VirtIONetS390, (obj), TYPE_VIRTIO_NET_S390) + +typedef struct VirtIONetS390 { + VirtIOS390Device parent_obj; + VirtIONet vdev; +} VirtIONetS390; + +/* vhost-scsi-s390 */ + +#ifdef CONFIG_VHOST_SCSI +#define TYPE_VHOST_SCSI_S390 "vhost-scsi-s390" +#define VHOST_SCSI_S390(obj) \ + OBJECT_CHECK(VHostSCSIS390, (obj), TYPE_VHOST_SCSI_S390) + +typedef struct VHostSCSIS390 { + VirtIOS390Device parent_obj; + VHostSCSI vdev; +} VHostSCSIS390; +#endif + +/* virtio-rng-s390 */ + +#define TYPE_VIRTIO_RNG_S390 "virtio-rng-s390" +#define VIRTIO_RNG_S390(obj) \ + OBJECT_CHECK(VirtIORNGS390, (obj), TYPE_VIRTIO_RNG_S390) + +typedef struct VirtIORNGS390 { + VirtIOS390Device parent_obj; + VirtIORNG vdev; +} VirtIORNGS390; + #endif