qemu-e2k/include/hw
Daniil Tatianin d74c30c811 virtio: introduce VirtIOConfigSizeParams & virtio_get_config_size
This is the first step towards moving all device config size calculation
logic into the virtio core code. In particular, this adds a struct that
contains all the necessary information for common virtio code to be able
to calculate the final config size for a device. This is expected to be
used with the new virtio_get_config_size helper, which calculates the
final length based on the provided host features.

This builds on top of already existing code like VirtIOFeature and
virtio_feature_get_config_size(), but adds additional fields, as well as
sanity checking so that device-specifc code doesn't have to duplicate it.

An example usage would be:

    static const VirtIOFeature dev_features[] = {
        {.flags = 1ULL << FEATURE_1_BIT,
         .end = endof(struct virtio_dev_config, feature_1)},
        {.flags = 1ULL << FEATURE_2_BIT,
         .end = endof(struct virtio_dev_config, feature_2)},
        {}
    };

    static const VirtIOConfigSizeParams dev_cfg_size_params = {
        .min_size = DEV_BASE_CONFIG_SIZE,
        .max_size = sizeof(struct virtio_dev_config),
        .feature_sizes = dev_features
    };

    // code inside my_dev_device_realize()
    size_t config_size = virtio_get_config_size(&dev_cfg_size_params,
                                                host_features);
    virtio_init(vdev, VIRTIO_ID_MYDEV, config_size);

Currently every device is expected to write its own boilerplate from the
example above in device_realize(), however, the next step of this
transition is moving VirtIOConfigSizeParams into VirtioDeviceClass,
so that it can be done automatically by the virtio initialization code.

All of the users of virtio_feature_get_config_size have been converted
to use virtio_get_config_size so it's no longer needed and is removed
with this commit.

Signed-off-by: Daniil Tatianin <d-tatianin@yandex-team.ru>
Message-Id: <20220906073111.353245-2-d-tatianin@yandex-team.ru>
Reviewed-by: Raphael Norwitz <raphael.norwitz@nutanix.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
2022-10-07 09:41:51 -04:00
..
acpi
adc
arm hw/arm/xlnx-zynqmp: Connect ZynqMP's USB controllers 2022-09-29 17:40:01 +01:00
audio
block block: add missed block_acct_setup with new block device init procedure 2022-09-30 18:42:34 +02:00
char
core hw/core: Add CPUClass.get_pc 2022-10-04 12:13:12 -07:00
cpu
cris
cxl hw/cxl: Fix size of constant in interleave granularity function. 2022-07-26 10:40:58 -04:00
display
dma
firmware
gpio
hyperv
i2c
i386 hw: Add compat machines for 7.2 2022-08-25 21:59:04 +02:00
ide hw/ide/core.c: Implement ATA INITIALIZE_DEVICE_PARAMETERS command 2022-09-30 18:43:44 +02:00
input pckbd: remove legacy i8042_mm_init() function 2022-07-18 19:28:46 +01:00
intc hw/intc: Move mtimer/mtimecmp to aclint 2022-09-07 09:19:10 +02:00
ipack
ipmi
isa
kvm
loongarch hw/loongarch: Improve acpi dsdt table 2022-09-20 15:44:25 +08:00
m68k
mem acpi/nvdimm: Define trace events for NVDIMM and substitute nvdimm_debug() 2022-07-26 10:37:46 -04:00
mips
misc
net
nubus
nvram x86: return modified setup_data only if read as memory, not as file 2022-09-27 11:30:59 +02:00
openrisc hw/openrisc: Split re-usable boot time apis out to boot.c 2022-09-04 07:02:56 +01:00
pci
pci-bridge
pci-host hw/loongarch: Add platform bus support 2022-09-20 15:44:24 +08:00
ppc hw/ppc/spapr: Fix code style problems reported by checkpatch 2022-09-20 12:31:53 -03:00
rdma
remote
riscv hw/riscv/sifive_e: Fix inheritance of SiFiveEState 2022-09-27 07:04:38 +10:00
rtc goldfish_rtc: Add big-endian property 2022-09-04 07:02:56 +01:00
rx
s390x s390x/s390-virtio-ccw: add zpcii-disable machine property 2022-09-26 17:23:47 +02:00
scsi scsi: Add buf_len parameter to scsi_req_new() 2022-09-01 07:42:37 +02:00
sd
sensor
sh4
southbridge
sparc
ssi
timer hw/intc: Move mtimer/mtimecmp to aclint 2022-09-07 09:19:10 +02:00
tricore
usb usb/msd: add usb_msd_fatal_error() and fix guest-triggerable assert 2022-09-27 07:32:30 +02:00
vfio
virtio virtio: introduce VirtIOConfigSizeParams & virtio_get_config_size 2022-10-07 09:41:51 -04:00
watchdog
xen
xtensa
boards.h hw: Add compat machines for 7.2 2022-08-25 21:59:04 +02:00
clock.h
elf_ops.h
fw-path-provider.h
hotplug.h
hw.h
ide.h
irq.h
loader-fit.h
loader.h
nmi.h
or-irq.h
pcmcia.h
platform-bus.h
ptimer.h
qdev-clock.h
qdev-core.h misc: fix commonly doubled up words 2022-08-01 11:58:02 +02:00
qdev-dma.h
qdev-properties-system.h
qdev-properties.h
register.h
registerfields.h
resettable.h
stream.h
sysbus.h
usb.h
vmstate-if.h