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 11 #ifndef VHOST_BACKEND_H_ 12 #define VHOST_BACKEND_H_ 13 14 15 typedef enum VhostBackendType { 16 VHOST_BACKEND_TYPE_NONE = 0, 17 VHOST_BACKEND_TYPE_KERNEL = 1, 18 VHOST_BACKEND_TYPE_USER = 2, 19 VHOST_BACKEND_TYPE_MAX = 3, 20 } VhostBackendType; 21 22 struct vhost_dev; 23 struct vhost_log; 24 struct vhost_memory; 25 struct vhost_vring_file; 26 struct vhost_vring_state; 27 struct vhost_vring_addr; 28 struct vhost_scsi_target; 29 30 typedef int (*vhost_backend_init)(struct vhost_dev *dev, void *opaque); 31 typedef int (*vhost_backend_cleanup)(struct vhost_dev *dev); 32 typedef int (*vhost_backend_memslots_limit)(struct vhost_dev *dev); 33 34 typedef int (*vhost_net_set_backend_op)(struct vhost_dev *dev, 35 struct vhost_vring_file *file); 36 typedef int (*vhost_scsi_set_endpoint_op)(struct vhost_dev *dev, 37 struct vhost_scsi_target *target); 38 typedef int (*vhost_scsi_clear_endpoint_op)(struct vhost_dev *dev, 39 struct vhost_scsi_target *target); 40 typedef int (*vhost_scsi_get_abi_version_op)(struct vhost_dev *dev, 41 int *version); 42 typedef int (*vhost_set_log_base_op)(struct vhost_dev *dev, uint64_t base, 43 struct vhost_log *log); 44 typedef int (*vhost_set_mem_table_op)(struct vhost_dev *dev, 45 struct vhost_memory *mem); 46 typedef int (*vhost_set_vring_addr_op)(struct vhost_dev *dev, 47 struct vhost_vring_addr *addr); 48 typedef int (*vhost_set_vring_endian_op)(struct vhost_dev *dev, 49 struct vhost_vring_state *ring); 50 typedef int (*vhost_set_vring_num_op)(struct vhost_dev *dev, 51 struct vhost_vring_state *ring); 52 typedef int (*vhost_set_vring_base_op)(struct vhost_dev *dev, 53 struct vhost_vring_state *ring); 54 typedef int (*vhost_get_vring_base_op)(struct vhost_dev *dev, 55 struct vhost_vring_state *ring); 56 typedef int (*vhost_set_vring_kick_op)(struct vhost_dev *dev, 57 struct vhost_vring_file *file); 58 typedef int (*vhost_set_vring_call_op)(struct vhost_dev *dev, 59 struct vhost_vring_file *file); 60 typedef int (*vhost_set_features_op)(struct vhost_dev *dev, 61 uint64_t features); 62 typedef int (*vhost_get_features_op)(struct vhost_dev *dev, 63 uint64_t *features); 64 typedef int (*vhost_set_owner_op)(struct vhost_dev *dev); 65 typedef int (*vhost_reset_device_op)(struct vhost_dev *dev); 66 typedef int (*vhost_get_vq_index_op)(struct vhost_dev *dev, int idx); 67 typedef int (*vhost_set_vring_enable_op)(struct vhost_dev *dev, 68 int enable); 69 typedef bool (*vhost_requires_shm_log_op)(struct vhost_dev *dev); 70 typedef int (*vhost_migration_done_op)(struct vhost_dev *dev, 71 char *mac_addr); 72 typedef bool (*vhost_backend_can_merge_op)(struct vhost_dev *dev, 73 uint64_t start1, uint64_t size1, 74 uint64_t start2, uint64_t size2); 75 76 typedef struct VhostOps { 77 VhostBackendType backend_type; 78 vhost_backend_init vhost_backend_init; 79 vhost_backend_cleanup vhost_backend_cleanup; 80 vhost_backend_memslots_limit vhost_backend_memslots_limit; 81 vhost_net_set_backend_op vhost_net_set_backend; 82 vhost_scsi_set_endpoint_op vhost_scsi_set_endpoint; 83 vhost_scsi_clear_endpoint_op vhost_scsi_clear_endpoint; 84 vhost_scsi_get_abi_version_op vhost_scsi_get_abi_version; 85 vhost_set_log_base_op vhost_set_log_base; 86 vhost_set_mem_table_op vhost_set_mem_table; 87 vhost_set_vring_addr_op vhost_set_vring_addr; 88 vhost_set_vring_endian_op vhost_set_vring_endian; 89 vhost_set_vring_num_op vhost_set_vring_num; 90 vhost_set_vring_base_op vhost_set_vring_base; 91 vhost_get_vring_base_op vhost_get_vring_base; 92 vhost_set_vring_kick_op vhost_set_vring_kick; 93 vhost_set_vring_call_op vhost_set_vring_call; 94 vhost_set_features_op vhost_set_features; 95 vhost_get_features_op vhost_get_features; 96 vhost_set_owner_op vhost_set_owner; 97 vhost_reset_device_op vhost_reset_device; 98 vhost_get_vq_index_op vhost_get_vq_index; 99 vhost_set_vring_enable_op vhost_set_vring_enable; 100 vhost_requires_shm_log_op vhost_requires_shm_log; 101 vhost_migration_done_op vhost_migration_done; 102 vhost_backend_can_merge_op vhost_backend_can_merge; 103 } VhostOps; 104 105 extern const VhostOps user_ops; 106 107 int vhost_set_backend_type(struct vhost_dev *dev, 108 VhostBackendType backend_type); 109 110 #endif /* VHOST_BACKEND_H_ */ 111