vhost-backend.h 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  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. #ifndef VHOST_BACKEND_H
  11. #define VHOST_BACKEND_H
  12. #include "exec/memory.h"
  13. typedef enum VhostBackendType {
  14. VHOST_BACKEND_TYPE_NONE = 0,
  15. VHOST_BACKEND_TYPE_KERNEL = 1,
  16. VHOST_BACKEND_TYPE_USER = 2,
  17. VHOST_BACKEND_TYPE_VDPA = 3,
  18. VHOST_BACKEND_TYPE_MAX = 4,
  19. } VhostBackendType;
  20. typedef enum VhostSetConfigType {
  21. VHOST_SET_CONFIG_TYPE_MASTER = 0,
  22. VHOST_SET_CONFIG_TYPE_MIGRATION = 1,
  23. } VhostSetConfigType;
  24. struct vhost_inflight;
  25. struct vhost_dev;
  26. struct vhost_log;
  27. struct vhost_memory;
  28. struct vhost_vring_file;
  29. struct vhost_vring_state;
  30. struct vhost_vring_addr;
  31. struct vhost_scsi_target;
  32. struct vhost_iotlb_msg;
  33. struct vhost_virtqueue;
  34. typedef int (*vhost_backend_init)(struct vhost_dev *dev, void *opaque);
  35. typedef int (*vhost_backend_cleanup)(struct vhost_dev *dev);
  36. typedef int (*vhost_backend_memslots_limit)(struct vhost_dev *dev);
  37. typedef int (*vhost_net_set_backend_op)(struct vhost_dev *dev,
  38. struct vhost_vring_file *file);
  39. typedef int (*vhost_net_set_mtu_op)(struct vhost_dev *dev, uint16_t mtu);
  40. typedef int (*vhost_scsi_set_endpoint_op)(struct vhost_dev *dev,
  41. struct vhost_scsi_target *target);
  42. typedef int (*vhost_scsi_clear_endpoint_op)(struct vhost_dev *dev,
  43. struct vhost_scsi_target *target);
  44. typedef int (*vhost_scsi_get_abi_version_op)(struct vhost_dev *dev,
  45. int *version);
  46. typedef int (*vhost_set_log_base_op)(struct vhost_dev *dev, uint64_t base,
  47. struct vhost_log *log);
  48. typedef int (*vhost_set_mem_table_op)(struct vhost_dev *dev,
  49. struct vhost_memory *mem);
  50. typedef int (*vhost_set_vring_addr_op)(struct vhost_dev *dev,
  51. struct vhost_vring_addr *addr);
  52. typedef int (*vhost_set_vring_endian_op)(struct vhost_dev *dev,
  53. struct vhost_vring_state *ring);
  54. typedef int (*vhost_set_vring_num_op)(struct vhost_dev *dev,
  55. struct vhost_vring_state *ring);
  56. typedef int (*vhost_set_vring_base_op)(struct vhost_dev *dev,
  57. struct vhost_vring_state *ring);
  58. typedef int (*vhost_get_vring_base_op)(struct vhost_dev *dev,
  59. struct vhost_vring_state *ring);
  60. typedef int (*vhost_set_vring_kick_op)(struct vhost_dev *dev,
  61. struct vhost_vring_file *file);
  62. typedef int (*vhost_set_vring_call_op)(struct vhost_dev *dev,
  63. struct vhost_vring_file *file);
  64. typedef int (*vhost_set_vring_busyloop_timeout_op)(struct vhost_dev *dev,
  65. struct vhost_vring_state *r);
  66. typedef int (*vhost_set_features_op)(struct vhost_dev *dev,
  67. uint64_t features);
  68. typedef int (*vhost_get_features_op)(struct vhost_dev *dev,
  69. uint64_t *features);
  70. typedef int (*vhost_set_owner_op)(struct vhost_dev *dev);
  71. typedef int (*vhost_reset_device_op)(struct vhost_dev *dev);
  72. typedef int (*vhost_get_vq_index_op)(struct vhost_dev *dev, int idx);
  73. typedef int (*vhost_set_vring_enable_op)(struct vhost_dev *dev,
  74. int enable);
  75. typedef bool (*vhost_requires_shm_log_op)(struct vhost_dev *dev);
  76. typedef int (*vhost_migration_done_op)(struct vhost_dev *dev,
  77. char *mac_addr);
  78. typedef bool (*vhost_backend_can_merge_op)(struct vhost_dev *dev,
  79. uint64_t start1, uint64_t size1,
  80. uint64_t start2, uint64_t size2);
  81. typedef int (*vhost_vsock_set_guest_cid_op)(struct vhost_dev *dev,
  82. uint64_t guest_cid);
  83. typedef int (*vhost_vsock_set_running_op)(struct vhost_dev *dev, int start);
  84. typedef void (*vhost_set_iotlb_callback_op)(struct vhost_dev *dev,
  85. int enabled);
  86. typedef int (*vhost_send_device_iotlb_msg_op)(struct vhost_dev *dev,
  87. struct vhost_iotlb_msg *imsg);
  88. typedef int (*vhost_set_config_op)(struct vhost_dev *dev, const uint8_t *data,
  89. uint32_t offset, uint32_t size,
  90. uint32_t flags);
  91. typedef int (*vhost_get_config_op)(struct vhost_dev *dev, uint8_t *config,
  92. uint32_t config_len);
  93. typedef int (*vhost_crypto_create_session_op)(struct vhost_dev *dev,
  94. void *session_info,
  95. uint64_t *session_id);
  96. typedef int (*vhost_crypto_close_session_op)(struct vhost_dev *dev,
  97. uint64_t session_id);
  98. typedef bool (*vhost_backend_mem_section_filter_op)(struct vhost_dev *dev,
  99. MemoryRegionSection *section);
  100. typedef int (*vhost_get_inflight_fd_op)(struct vhost_dev *dev,
  101. uint16_t queue_size,
  102. struct vhost_inflight *inflight);
  103. typedef int (*vhost_set_inflight_fd_op)(struct vhost_dev *dev,
  104. struct vhost_inflight *inflight);
  105. typedef int (*vhost_dev_start_op)(struct vhost_dev *dev, bool started);
  106. typedef int (*vhost_vq_get_addr_op)(struct vhost_dev *dev,
  107. struct vhost_vring_addr *addr,
  108. struct vhost_virtqueue *vq);
  109. typedef int (*vhost_get_device_id_op)(struct vhost_dev *dev, uint32_t *dev_id);
  110. typedef bool (*vhost_force_iommu_op)(struct vhost_dev *dev);
  111. typedef struct VhostOps {
  112. VhostBackendType backend_type;
  113. vhost_backend_init vhost_backend_init;
  114. vhost_backend_cleanup vhost_backend_cleanup;
  115. vhost_backend_memslots_limit vhost_backend_memslots_limit;
  116. vhost_net_set_backend_op vhost_net_set_backend;
  117. vhost_net_set_mtu_op vhost_net_set_mtu;
  118. vhost_scsi_set_endpoint_op vhost_scsi_set_endpoint;
  119. vhost_scsi_clear_endpoint_op vhost_scsi_clear_endpoint;
  120. vhost_scsi_get_abi_version_op vhost_scsi_get_abi_version;
  121. vhost_set_log_base_op vhost_set_log_base;
  122. vhost_set_mem_table_op vhost_set_mem_table;
  123. vhost_set_vring_addr_op vhost_set_vring_addr;
  124. vhost_set_vring_endian_op vhost_set_vring_endian;
  125. vhost_set_vring_num_op vhost_set_vring_num;
  126. vhost_set_vring_base_op vhost_set_vring_base;
  127. vhost_get_vring_base_op vhost_get_vring_base;
  128. vhost_set_vring_kick_op vhost_set_vring_kick;
  129. vhost_set_vring_call_op vhost_set_vring_call;
  130. vhost_set_vring_busyloop_timeout_op vhost_set_vring_busyloop_timeout;
  131. vhost_set_features_op vhost_set_features;
  132. vhost_get_features_op vhost_get_features;
  133. vhost_set_owner_op vhost_set_owner;
  134. vhost_reset_device_op vhost_reset_device;
  135. vhost_get_vq_index_op vhost_get_vq_index;
  136. vhost_set_vring_enable_op vhost_set_vring_enable;
  137. vhost_requires_shm_log_op vhost_requires_shm_log;
  138. vhost_migration_done_op vhost_migration_done;
  139. vhost_backend_can_merge_op vhost_backend_can_merge;
  140. vhost_vsock_set_guest_cid_op vhost_vsock_set_guest_cid;
  141. vhost_vsock_set_running_op vhost_vsock_set_running;
  142. vhost_set_iotlb_callback_op vhost_set_iotlb_callback;
  143. vhost_send_device_iotlb_msg_op vhost_send_device_iotlb_msg;
  144. vhost_get_config_op vhost_get_config;
  145. vhost_set_config_op vhost_set_config;
  146. vhost_crypto_create_session_op vhost_crypto_create_session;
  147. vhost_crypto_close_session_op vhost_crypto_close_session;
  148. vhost_backend_mem_section_filter_op vhost_backend_mem_section_filter;
  149. vhost_get_inflight_fd_op vhost_get_inflight_fd;
  150. vhost_set_inflight_fd_op vhost_set_inflight_fd;
  151. vhost_dev_start_op vhost_dev_start;
  152. vhost_vq_get_addr_op vhost_vq_get_addr;
  153. vhost_get_device_id_op vhost_get_device_id;
  154. vhost_force_iommu_op vhost_force_iommu;
  155. } VhostOps;
  156. extern const VhostOps user_ops;
  157. extern const VhostOps vdpa_ops;
  158. int vhost_set_backend_type(struct vhost_dev *dev,
  159. VhostBackendType backend_type);
  160. int vhost_backend_update_device_iotlb(struct vhost_dev *dev,
  161. uint64_t iova, uint64_t uaddr,
  162. uint64_t len,
  163. IOMMUAccessFlags perm);
  164. int vhost_backend_invalidate_device_iotlb(struct vhost_dev *dev,
  165. uint64_t iova, uint64_t len);
  166. int vhost_backend_handle_iotlb_msg(struct vhost_dev *dev,
  167. struct vhost_iotlb_msg *imsg);
  168. int vhost_user_gpu_set_socket(struct vhost_dev *dev, int fd);
  169. #endif /* VHOST_BACKEND_H */