mirror of
https://github.com/qemu/qemu.git
synced 2024-11-25 11:53:39 +08:00
6b8f102054
Move host_features from the individual transport proxies into the virtio device. Transports may continue to add feature bits during device plugging. This should it make easier to offer different sets of host features for virtio-1/transitional support. Tested-by: Shannon Zhao <shannon.zhao@linaro.org> Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
209 lines
5.4 KiB
C
209 lines
5.4 KiB
C
/*
|
|
* Virtio PCI Bindings
|
|
*
|
|
* Copyright IBM, Corp. 2007
|
|
* Copyright (c) 2009 CodeSourcery
|
|
*
|
|
* Authors:
|
|
* Anthony Liguori <aliguori@us.ibm.com>
|
|
* Paul Brook <paul@codesourcery.com>
|
|
*
|
|
* This work is licensed under the terms of the GNU GPL, version 2. See
|
|
* the COPYING file in the top-level directory.
|
|
*/
|
|
|
|
#ifndef QEMU_VIRTIO_PCI_H
|
|
#define QEMU_VIRTIO_PCI_H
|
|
|
|
#include "hw/pci/msi.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-balloon.h"
|
|
#include "hw/virtio/virtio-bus.h"
|
|
#include "hw/virtio/virtio-9p.h"
|
|
#ifdef CONFIG_VIRTFS
|
|
#include "hw/9pfs/virtio-9p.h"
|
|
#endif
|
|
#ifdef CONFIG_VHOST_SCSI
|
|
#include "hw/virtio/vhost-scsi.h"
|
|
#endif
|
|
|
|
typedef struct VirtIOPCIProxy VirtIOPCIProxy;
|
|
typedef struct VirtIOBlkPCI VirtIOBlkPCI;
|
|
typedef struct VirtIOSCSIPCI VirtIOSCSIPCI;
|
|
typedef struct VirtIOBalloonPCI VirtIOBalloonPCI;
|
|
typedef struct VirtIOSerialPCI VirtIOSerialPCI;
|
|
typedef struct VirtIONetPCI VirtIONetPCI;
|
|
typedef struct VHostSCSIPCI VHostSCSIPCI;
|
|
typedef struct VirtIORngPCI VirtIORngPCI;
|
|
|
|
/* virtio-pci-bus */
|
|
|
|
typedef struct VirtioBusState VirtioPCIBusState;
|
|
typedef struct VirtioBusClass VirtioPCIBusClass;
|
|
|
|
#define TYPE_VIRTIO_PCI_BUS "virtio-pci-bus"
|
|
#define VIRTIO_PCI_BUS(obj) \
|
|
OBJECT_CHECK(VirtioPCIBusState, (obj), TYPE_VIRTIO_PCI_BUS)
|
|
#define VIRTIO_PCI_BUS_GET_CLASS(obj) \
|
|
OBJECT_GET_CLASS(VirtioPCIBusClass, obj, TYPE_VIRTIO_PCI_BUS)
|
|
#define VIRTIO_PCI_BUS_CLASS(klass) \
|
|
OBJECT_CLASS_CHECK(VirtioPCIBusClass, klass, TYPE_VIRTIO_PCI_BUS)
|
|
|
|
/* Need to activate work-arounds for buggy guests at vmstate load. */
|
|
#define VIRTIO_PCI_FLAG_BUS_MASTER_BUG_MIGRATION_BIT 0
|
|
#define VIRTIO_PCI_FLAG_BUS_MASTER_BUG_MIGRATION \
|
|
(1 << VIRTIO_PCI_FLAG_BUS_MASTER_BUG_MIGRATION_BIT)
|
|
|
|
/* Performance improves when virtqueue kick processing is decoupled from the
|
|
* vcpu thread using ioeventfd for some devices. */
|
|
#define VIRTIO_PCI_FLAG_USE_IOEVENTFD_BIT 1
|
|
#define VIRTIO_PCI_FLAG_USE_IOEVENTFD (1 << VIRTIO_PCI_FLAG_USE_IOEVENTFD_BIT)
|
|
|
|
typedef struct {
|
|
MSIMessage msg;
|
|
int virq;
|
|
unsigned int users;
|
|
} VirtIOIRQFD;
|
|
|
|
/*
|
|
* virtio-pci: This is the PCIDevice which has a virtio-pci-bus.
|
|
*/
|
|
#define TYPE_VIRTIO_PCI "virtio-pci"
|
|
#define VIRTIO_PCI_GET_CLASS(obj) \
|
|
OBJECT_GET_CLASS(VirtioPCIClass, obj, TYPE_VIRTIO_PCI)
|
|
#define VIRTIO_PCI_CLASS(klass) \
|
|
OBJECT_CLASS_CHECK(VirtioPCIClass, klass, TYPE_VIRTIO_PCI)
|
|
#define VIRTIO_PCI(obj) \
|
|
OBJECT_CHECK(VirtIOPCIProxy, (obj), TYPE_VIRTIO_PCI)
|
|
|
|
typedef struct VirtioPCIClass {
|
|
PCIDeviceClass parent_class;
|
|
void (*realize)(VirtIOPCIProxy *vpci_dev, Error **errp);
|
|
} VirtioPCIClass;
|
|
|
|
struct VirtIOPCIProxy {
|
|
PCIDevice pci_dev;
|
|
MemoryRegion bar;
|
|
uint32_t flags;
|
|
uint32_t class_code;
|
|
uint32_t nvectors;
|
|
bool ioeventfd_disabled;
|
|
bool ioeventfd_started;
|
|
VirtIOIRQFD *vector_irqfd;
|
|
int nvqs_with_notifiers;
|
|
VirtioBusState bus;
|
|
};
|
|
|
|
|
|
/*
|
|
* virtio-scsi-pci: This extends VirtioPCIProxy.
|
|
*/
|
|
#define TYPE_VIRTIO_SCSI_PCI "virtio-scsi-pci"
|
|
#define VIRTIO_SCSI_PCI(obj) \
|
|
OBJECT_CHECK(VirtIOSCSIPCI, (obj), TYPE_VIRTIO_SCSI_PCI)
|
|
|
|
struct VirtIOSCSIPCI {
|
|
VirtIOPCIProxy parent_obj;
|
|
VirtIOSCSI vdev;
|
|
};
|
|
|
|
#ifdef CONFIG_VHOST_SCSI
|
|
/*
|
|
* vhost-scsi-pci: This extends VirtioPCIProxy.
|
|
*/
|
|
#define TYPE_VHOST_SCSI_PCI "vhost-scsi-pci"
|
|
#define VHOST_SCSI_PCI(obj) \
|
|
OBJECT_CHECK(VHostSCSIPCI, (obj), TYPE_VHOST_SCSI_PCI)
|
|
|
|
struct VHostSCSIPCI {
|
|
VirtIOPCIProxy parent_obj;
|
|
VHostSCSI vdev;
|
|
};
|
|
#endif
|
|
|
|
/*
|
|
* virtio-blk-pci: This extends VirtioPCIProxy.
|
|
*/
|
|
#define TYPE_VIRTIO_BLK_PCI "virtio-blk-pci"
|
|
#define VIRTIO_BLK_PCI(obj) \
|
|
OBJECT_CHECK(VirtIOBlkPCI, (obj), TYPE_VIRTIO_BLK_PCI)
|
|
|
|
struct VirtIOBlkPCI {
|
|
VirtIOPCIProxy parent_obj;
|
|
VirtIOBlock vdev;
|
|
};
|
|
|
|
/*
|
|
* virtio-balloon-pci: This extends VirtioPCIProxy.
|
|
*/
|
|
#define TYPE_VIRTIO_BALLOON_PCI "virtio-balloon-pci"
|
|
#define VIRTIO_BALLOON_PCI(obj) \
|
|
OBJECT_CHECK(VirtIOBalloonPCI, (obj), TYPE_VIRTIO_BALLOON_PCI)
|
|
|
|
struct VirtIOBalloonPCI {
|
|
VirtIOPCIProxy parent_obj;
|
|
VirtIOBalloon vdev;
|
|
};
|
|
|
|
/*
|
|
* virtio-serial-pci: This extends VirtioPCIProxy.
|
|
*/
|
|
#define TYPE_VIRTIO_SERIAL_PCI "virtio-serial-pci"
|
|
#define VIRTIO_SERIAL_PCI(obj) \
|
|
OBJECT_CHECK(VirtIOSerialPCI, (obj), TYPE_VIRTIO_SERIAL_PCI)
|
|
|
|
struct VirtIOSerialPCI {
|
|
VirtIOPCIProxy parent_obj;
|
|
VirtIOSerial vdev;
|
|
};
|
|
|
|
/*
|
|
* virtio-net-pci: This extends VirtioPCIProxy.
|
|
*/
|
|
#define TYPE_VIRTIO_NET_PCI "virtio-net-pci"
|
|
#define VIRTIO_NET_PCI(obj) \
|
|
OBJECT_CHECK(VirtIONetPCI, (obj), TYPE_VIRTIO_NET_PCI)
|
|
|
|
struct VirtIONetPCI {
|
|
VirtIOPCIProxy parent_obj;
|
|
VirtIONet vdev;
|
|
};
|
|
|
|
/*
|
|
* virtio-9p-pci: This extends VirtioPCIProxy.
|
|
*/
|
|
|
|
#ifdef CONFIG_VIRTFS
|
|
|
|
#define TYPE_VIRTIO_9P_PCI "virtio-9p-pci"
|
|
#define VIRTIO_9P_PCI(obj) \
|
|
OBJECT_CHECK(V9fsPCIState, (obj), TYPE_VIRTIO_9P_PCI)
|
|
|
|
typedef struct V9fsPCIState {
|
|
VirtIOPCIProxy parent_obj;
|
|
V9fsState vdev;
|
|
} V9fsPCIState;
|
|
|
|
#endif
|
|
|
|
/*
|
|
* virtio-rng-pci: This extends VirtioPCIProxy.
|
|
*/
|
|
#define TYPE_VIRTIO_RNG_PCI "virtio-rng-pci"
|
|
#define VIRTIO_RNG_PCI(obj) \
|
|
OBJECT_CHECK(VirtIORngPCI, (obj), TYPE_VIRTIO_RNG_PCI)
|
|
|
|
struct VirtIORngPCI {
|
|
VirtIOPCIProxy parent_obj;
|
|
VirtIORNG vdev;
|
|
};
|
|
|
|
/* Virtio ABI version, if we increment this, we break the guest driver. */
|
|
#define VIRTIO_PCI_ABI_VERSION 0
|
|
|
|
#endif
|