| 1 | /* |
| 2 | * vhost-user-blk host device |
| 3 | * Copyright(C) 2017 Intel Corporation. |
| 4 | * |
| 5 | * Authors: |
| 6 | * Changpeng Liu <changpeng.liu@intel.com> |
| 7 | * |
| 8 | * Based on vhost-scsi.h, Copyright IBM, Corp. 2011 |
| 9 | * |
| 10 | * This work is licensed under the terms of the GNU LGPL, version 2 or later. |
| 11 | * See the COPYING.LIB file in the top-level directory. |
| 12 | * |
| 13 | */ |
| 14 | |
| 15 | #ifndef VHOST_USER_BLK_H |
| 16 | #define VHOST_USER_BLK_H |
| 17 | |
| 18 | #include "standard-headers/linux/virtio_blk.h" |
| 19 | #include "hw/block/block.h" |
| 20 | #include "chardev/char-fe.h" |
| 21 | #include "hw/virtio/vhost.h" |
| 22 | #include "hw/virtio/vhost-user.h" |
| 23 | #include "qom/object.h" |
| 24 | |
| 25 | #define TYPE_VHOST_USER_BLK "vhost-user-blk" |
| 26 | OBJECT_DECLARE_SIMPLE_TYPE(VHostUserBlk, VHOST_USER_BLK) |
| 27 | |
| 28 | #define VHOST_USER_BLK_AUTO_NUM_QUEUES UINT16_MAX |
| 29 | |
| 30 | struct VHostUserBlk { |
| 31 | VirtIODevice parent_obj; |
| 32 | CharFrontend chardev; |
| 33 | int32_t bootindex; |
| 34 | struct virtio_blk_config blkcfg; |
| 35 | uint16_t num_queues; |
| 36 | uint32_t queue_size; |
| 37 | bool seg_max_adjust; |
| 38 | struct vhost_dev dev; |
| 39 | struct vhost_inflight *inflight; |
| 40 | VhostUserState vhost_user; |
| 41 | struct vhost_virtqueue *vhost_vqs; |
| 42 | VirtQueue **virtqs; |
| 43 | |
| 44 | /* |
| 45 | * There are at least two steps of initialization of the |
| 46 | * vhost-user device. The first is a "connect" step and |
| 47 | * second is a "start" step. Make a separation between |
| 48 | * those initialization phases by using two fields. |
| 49 | */ |
| 50 | /* vhost_user_blk_connect/vhost_user_blk_disconnect */ |
| 51 | bool connected; |
| 52 | /* vhost_user_blk_start/vhost_user_blk_stop */ |
| 53 | bool started_vu; |
| 54 | |
| 55 | bool skip_get_vring_base_on_force_shutdown; |
| 56 | bool inflight_migration; |
| 57 | }; |
| 58 | |
| 59 | #endif |