]> git.proxmox.com Git - mirror_qemu.git/blame - include/hw/virtio/vhost-backend.h
Merge tag 'pull-ufs-20231013' of https://gitlab.com/jeuk20.kim/qemu into staging
[mirror_qemu.git] / include / hw / virtio / vhost-backend.h
CommitLineData
24d1eb33
NN
1/*
2 * vhost-backend
3 *
4 * Copyright (c) 2013 Virtual Open Systems Sarl.
5 *
6 * This work is licensed under the terms of the GNU GPL, version 2 or later.
7 * See the COPYING file in the top-level directory.
8 *
9 */
10
2a6a4076
MA
11#ifndef VHOST_BACKEND_H
12#define VHOST_BACKEND_H
1be0ac21 13
c471ad0e
JW
14#include "exec/memory.h"
15
1a1bfac9
NN
16typedef enum VhostBackendType {
17 VHOST_BACKEND_TYPE_NONE = 0,
18 VHOST_BACKEND_TYPE_KERNEL = 1,
19 VHOST_BACKEND_TYPE_USER = 2,
108a6481
CL
20 VHOST_BACKEND_TYPE_VDPA = 3,
21 VHOST_BACKEND_TYPE_MAX = 4,
1a1bfac9
NN
22} VhostBackendType;
23
4c3e257b 24typedef enum VhostSetConfigType {
f8ed3648 25 VHOST_SET_CONFIG_TYPE_FRONTEND = 0,
4c3e257b
CL
26 VHOST_SET_CONFIG_TYPE_MIGRATION = 1,
27} VhostSetConfigType;
28
5ad204bf 29struct vhost_inflight;
24d1eb33 30struct vhost_dev;
9a78a5dd 31struct vhost_log;
21e70425
MAL
32struct vhost_memory;
33struct vhost_vring_file;
34struct vhost_vring_state;
35struct vhost_vring_addr;
36struct vhost_scsi_target;
020e571b 37struct vhost_iotlb_msg;
35f20bb7 38struct vhost_virtqueue;
24d1eb33 39
28770ff9
KW
40typedef int (*vhost_backend_init)(struct vhost_dev *dev, void *opaque,
41 Error **errp);
24d1eb33 42typedef int (*vhost_backend_cleanup)(struct vhost_dev *dev);
2ce68e4c 43typedef int (*vhost_backend_memslots_limit)(struct vhost_dev *dev);
24d1eb33 44
21e70425
MAL
45typedef int (*vhost_net_set_backend_op)(struct vhost_dev *dev,
46 struct vhost_vring_file *file);
c5f048d8 47typedef int (*vhost_net_set_mtu_op)(struct vhost_dev *dev, uint16_t mtu);
21e70425
MAL
48typedef int (*vhost_scsi_set_endpoint_op)(struct vhost_dev *dev,
49 struct vhost_scsi_target *target);
50typedef int (*vhost_scsi_clear_endpoint_op)(struct vhost_dev *dev,
51 struct vhost_scsi_target *target);
52typedef int (*vhost_scsi_get_abi_version_op)(struct vhost_dev *dev,
53 int *version);
9a78a5dd
MAL
54typedef int (*vhost_set_log_base_op)(struct vhost_dev *dev, uint64_t base,
55 struct vhost_log *log);
21e70425
MAL
56typedef int (*vhost_set_mem_table_op)(struct vhost_dev *dev,
57 struct vhost_memory *mem);
58typedef int (*vhost_set_vring_addr_op)(struct vhost_dev *dev,
59 struct vhost_vring_addr *addr);
60typedef int (*vhost_set_vring_endian_op)(struct vhost_dev *dev,
61 struct vhost_vring_state *ring);
62typedef int (*vhost_set_vring_num_op)(struct vhost_dev *dev,
63 struct vhost_vring_state *ring);
64typedef int (*vhost_set_vring_base_op)(struct vhost_dev *dev,
65 struct vhost_vring_state *ring);
66typedef int (*vhost_get_vring_base_op)(struct vhost_dev *dev,
67 struct vhost_vring_state *ring);
68typedef int (*vhost_set_vring_kick_op)(struct vhost_dev *dev,
69 struct vhost_vring_file *file);
70typedef int (*vhost_set_vring_call_op)(struct vhost_dev *dev,
71 struct vhost_vring_file *file);
60dc3c5b
KK
72typedef int (*vhost_set_vring_err_op)(struct vhost_dev *dev,
73 struct vhost_vring_file *file);
69e87b32
JW
74typedef int (*vhost_set_vring_busyloop_timeout_op)(struct vhost_dev *dev,
75 struct vhost_vring_state *r);
21e70425
MAL
76typedef int (*vhost_set_features_op)(struct vhost_dev *dev,
77 uint64_t features);
78typedef int (*vhost_get_features_op)(struct vhost_dev *dev,
79 uint64_t *features);
b37556ed 80typedef int (*vhost_set_backend_cap_op)(struct vhost_dev *dev);
21e70425
MAL
81typedef int (*vhost_set_owner_op)(struct vhost_dev *dev);
82typedef int (*vhost_reset_device_op)(struct vhost_dev *dev);
83typedef int (*vhost_get_vq_index_op)(struct vhost_dev *dev, int idx);
84typedef int (*vhost_set_vring_enable_op)(struct vhost_dev *dev,
85 int enable);
1be0ac21 86typedef bool (*vhost_requires_shm_log_op)(struct vhost_dev *dev);
3e866365
TC
87typedef int (*vhost_migration_done_op)(struct vhost_dev *dev,
88 char *mac_addr);
fc0b9b0e
SH
89typedef int (*vhost_vsock_set_guest_cid_op)(struct vhost_dev *dev,
90 uint64_t guest_cid);
91typedef int (*vhost_vsock_set_running_op)(struct vhost_dev *dev, int start);
c471ad0e
JW
92typedef void (*vhost_set_iotlb_callback_op)(struct vhost_dev *dev,
93 int enabled);
020e571b
MC
94typedef int (*vhost_send_device_iotlb_msg_op)(struct vhost_dev *dev,
95 struct vhost_iotlb_msg *imsg);
4c3e257b
CL
96typedef int (*vhost_set_config_op)(struct vhost_dev *dev, const uint8_t *data,
97 uint32_t offset, uint32_t size,
98 uint32_t flags);
99typedef int (*vhost_get_config_op)(struct vhost_dev *dev, uint8_t *config,
50de5138 100 uint32_t config_len, Error **errp);
c2bea314 101
efbfeb81
GA
102typedef int (*vhost_crypto_create_session_op)(struct vhost_dev *dev,
103 void *session_info,
104 uint64_t *session_id);
105typedef int (*vhost_crypto_close_session_op)(struct vhost_dev *dev,
106 uint64_t session_id);
107
552b2522 108typedef bool (*vhost_backend_no_private_memslots_op)(struct vhost_dev *dev);
988a2775 109
5ad204bf
XY
110typedef int (*vhost_get_inflight_fd_op)(struct vhost_dev *dev,
111 uint16_t queue_size,
112 struct vhost_inflight *inflight);
113
114typedef int (*vhost_set_inflight_fd_op)(struct vhost_dev *dev,
115 struct vhost_inflight *inflight);
116
68513bcd 117typedef int (*vhost_dev_start_op)(struct vhost_dev *dev, bool started);
35f20bb7
CL
118
119typedef int (*vhost_vq_get_addr_op)(struct vhost_dev *dev,
120 struct vhost_vring_addr *addr,
121 struct vhost_virtqueue *vq);
b4ab225c
CL
122
123typedef int (*vhost_get_device_id_op)(struct vhost_dev *dev, uint32_t *dev_id);
124
f6c99c34
CL
125typedef bool (*vhost_force_iommu_op)(struct vhost_dev *dev);
126
9b30cdf9
CL
127typedef int (*vhost_set_config_call_op)(struct vhost_dev *dev,
128 int fd);
c3716f26
EP
129
130typedef void (*vhost_reset_status_op)(struct vhost_dev *dev);
131
24d1eb33 132typedef struct VhostOps {
1a1bfac9 133 VhostBackendType backend_type;
24d1eb33
NN
134 vhost_backend_init vhost_backend_init;
135 vhost_backend_cleanup vhost_backend_cleanup;
2ce68e4c 136 vhost_backend_memslots_limit vhost_backend_memslots_limit;
552b2522 137 vhost_backend_no_private_memslots_op vhost_backend_no_private_memslots;
21e70425 138 vhost_net_set_backend_op vhost_net_set_backend;
c5f048d8 139 vhost_net_set_mtu_op vhost_net_set_mtu;
21e70425
MAL
140 vhost_scsi_set_endpoint_op vhost_scsi_set_endpoint;
141 vhost_scsi_clear_endpoint_op vhost_scsi_clear_endpoint;
142 vhost_scsi_get_abi_version_op vhost_scsi_get_abi_version;
c2bea314 143 vhost_set_log_base_op vhost_set_log_base;
21e70425
MAL
144 vhost_set_mem_table_op vhost_set_mem_table;
145 vhost_set_vring_addr_op vhost_set_vring_addr;
146 vhost_set_vring_endian_op vhost_set_vring_endian;
147 vhost_set_vring_num_op vhost_set_vring_num;
148 vhost_set_vring_base_op vhost_set_vring_base;
149 vhost_get_vring_base_op vhost_get_vring_base;
150 vhost_set_vring_kick_op vhost_set_vring_kick;
151 vhost_set_vring_call_op vhost_set_vring_call;
60dc3c5b 152 vhost_set_vring_err_op vhost_set_vring_err;
69e87b32 153 vhost_set_vring_busyloop_timeout_op vhost_set_vring_busyloop_timeout;
21e70425
MAL
154 vhost_set_features_op vhost_set_features;
155 vhost_get_features_op vhost_get_features;
b37556ed 156 vhost_set_backend_cap_op vhost_set_backend_cap;
21e70425
MAL
157 vhost_set_owner_op vhost_set_owner;
158 vhost_reset_device_op vhost_reset_device;
159 vhost_get_vq_index_op vhost_get_vq_index;
160 vhost_set_vring_enable_op vhost_set_vring_enable;
1be0ac21 161 vhost_requires_shm_log_op vhost_requires_shm_log;
3e866365 162 vhost_migration_done_op vhost_migration_done;
fc0b9b0e
SH
163 vhost_vsock_set_guest_cid_op vhost_vsock_set_guest_cid;
164 vhost_vsock_set_running_op vhost_vsock_set_running;
c471ad0e 165 vhost_set_iotlb_callback_op vhost_set_iotlb_callback;
020e571b 166 vhost_send_device_iotlb_msg_op vhost_send_device_iotlb_msg;
4c3e257b
CL
167 vhost_get_config_op vhost_get_config;
168 vhost_set_config_op vhost_set_config;
efbfeb81
GA
169 vhost_crypto_create_session_op vhost_crypto_create_session;
170 vhost_crypto_close_session_op vhost_crypto_close_session;
5ad204bf
XY
171 vhost_get_inflight_fd_op vhost_get_inflight_fd;
172 vhost_set_inflight_fd_op vhost_set_inflight_fd;
68513bcd 173 vhost_dev_start_op vhost_dev_start;
35f20bb7 174 vhost_vq_get_addr_op vhost_vq_get_addr;
b4ab225c 175 vhost_get_device_id_op vhost_get_device_id;
f6c99c34 176 vhost_force_iommu_op vhost_force_iommu;
9b30cdf9 177 vhost_set_config_call_op vhost_set_config_call;
c3716f26 178 vhost_reset_status_op vhost_reset_status;
24d1eb33
NN
179} VhostOps;
180
020e571b
MC
181int vhost_backend_update_device_iotlb(struct vhost_dev *dev,
182 uint64_t iova, uint64_t uaddr,
183 uint64_t len,
184 IOMMUAccessFlags perm);
185
186int vhost_backend_invalidate_device_iotlb(struct vhost_dev *dev,
187 uint64_t iova, uint64_t len);
188
189int vhost_backend_handle_iotlb_msg(struct vhost_dev *dev,
190 struct vhost_iotlb_msg *imsg);
191
bd2e44fe
MAL
192int vhost_user_gpu_set_socket(struct vhost_dev *dev, int fd);
193
16094766
AE
194int vhost_user_get_shared_object(struct vhost_dev *dev, unsigned char *uuid,
195 int *dmabuf_fd);
196
2a6a4076 197#endif /* VHOST_BACKEND_H */