4 * Copyright(c) 2017-2018 Intel Corporation.
5 * Copyright(c) 2020 Red Hat, Inc.
7 * This work is licensed under the terms of the GNU GPL, version 2 or later.
8 * See the COPYING file in the top-level directory.
12 #ifndef HW_VIRTIO_VHOST_VDPA_H
13 #define HW_VIRTIO_VHOST_VDPA_H
17 #include "hw/virtio/vhost-iova-tree.h"
18 #include "hw/virtio/vhost-shadow-virtqueue.h"
19 #include "hw/virtio/virtio.h"
20 #include "standard-headers/linux/vhost_types.h"
22 typedef struct VhostVDPAHostNotifier
{
25 } VhostVDPAHostNotifier
;
27 typedef struct vhost_vdpa
{
31 bool iotlb_batch_begin_sent
;
32 MemoryListener listener
;
33 struct vhost_vdpa_iova_range iova_range
;
34 uint64_t acked_features
;
35 bool shadow_vqs_enabled
;
36 /* IOVA mapping used by the Shadow Virtqueue */
37 VhostIOVATree
*iova_tree
;
38 Error
*migration_blocker
;
39 GPtrArray
*shadow_vqs
;
40 const VhostShadowVirtqueueOps
*shadow_vq_ops
;
41 void *shadow_vq_ops_opaque
;
42 struct vhost_dev
*dev
;
43 VhostVDPAHostNotifier notifier
[VIRTIO_QUEUE_MAX
];
46 int vhost_vdpa_dma_map(struct vhost_vdpa
*v
, hwaddr iova
, hwaddr size
,
47 void *vaddr
, bool readonly
);
48 int vhost_vdpa_dma_unmap(struct vhost_vdpa
*v
, hwaddr iova
, hwaddr size
);