mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-07-29 05:13:54 -06:00
hw/virtio: Add support for VDPA network simulation devices
This patch adds support for VDPA network simulation devices. The device is developed based on virtio-net and tap backend, and supports hardware live migration function. For more details, please refer to "docs/system/devices/vdpa-net.rst" Signed-off-by: Hao Chen <chenh@yusur.tech> Message-Id: <20240221073802.2888022-1-chenh@yusur.tech> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
043e127a12
commit
cd341fd1ff
9 changed files with 399 additions and 3 deletions
|
@ -35,6 +35,9 @@
|
|||
(0x1ULL << VIRTIO_F_NOTIFY_ON_EMPTY) | \
|
||||
(0x1ULL << VIRTIO_F_ANY_LAYOUT))
|
||||
|
||||
#define LM_DISABLE 0x00
|
||||
#define LM_ENABLE 0x01
|
||||
|
||||
struct VirtQueue;
|
||||
|
||||
static inline hwaddr vring_align(hwaddr addr,
|
||||
|
@ -95,6 +98,11 @@ enum virtio_device_endian {
|
|||
VIRTIO_DEVICE_ENDIAN_BIG,
|
||||
};
|
||||
|
||||
typedef struct BitmapMemoryRegionCaches {
|
||||
struct rcu_head rcu;
|
||||
MemoryRegionCache bitmap;
|
||||
} BitmapMemoryRegionCaches;
|
||||
|
||||
/**
|
||||
* struct VirtIODevice - common VirtIO structure
|
||||
* @name: name of the device
|
||||
|
@ -128,6 +136,14 @@ struct VirtIODevice
|
|||
uint32_t generation;
|
||||
int nvectors;
|
||||
VirtQueue *vq;
|
||||
uint8_t lm_logging_ctrl;
|
||||
uint32_t lm_base_addr_low;
|
||||
uint32_t lm_base_addr_high;
|
||||
uint32_t lm_end_addr_low;
|
||||
uint32_t lm_end_addr_high;
|
||||
|
||||
BitmapMemoryRegionCaches *caches;
|
||||
|
||||
MemoryListener listener;
|
||||
uint16_t device_id;
|
||||
/* @vm_running: current VM running state via virtio_vmstate_change() */
|
||||
|
@ -379,8 +395,11 @@ hwaddr virtio_queue_get_desc_size(VirtIODevice *vdev, int n);
|
|||
hwaddr virtio_queue_get_avail_size(VirtIODevice *vdev, int n);
|
||||
hwaddr virtio_queue_get_used_size(VirtIODevice *vdev, int n);
|
||||
unsigned int virtio_queue_get_last_avail_idx(VirtIODevice *vdev, int n);
|
||||
unsigned int virtio_queue_get_vring_states(VirtIODevice *vdev, int n);
|
||||
void virtio_queue_set_last_avail_idx(VirtIODevice *vdev, int n,
|
||||
unsigned int idx);
|
||||
void virtio_queue_set_vring_states(VirtIODevice *vdev, int n,
|
||||
unsigned int idx);
|
||||
void virtio_queue_restore_last_avail_idx(VirtIODevice *vdev, int n);
|
||||
void virtio_queue_invalidate_signalled_used(VirtIODevice *vdev, int n);
|
||||
void virtio_queue_update_used_idx(VirtIODevice *vdev, int n);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue