root / hw / vhost.h @ 31410948
History | View | Annotate | Download (2 kB)
1 | d5970055 | Michael S. Tsirkin | #ifndef VHOST_H
|
---|---|---|---|
2 | d5970055 | Michael S. Tsirkin | #define VHOST_H
|
3 | d5970055 | Michael S. Tsirkin | |
4 | d5970055 | Michael S. Tsirkin | #include "hw/hw.h" |
5 | d5970055 | Michael S. Tsirkin | #include "hw/virtio.h" |
6 | 022c62cb | Paolo Bonzini | #include "exec/memory.h" |
7 | d5970055 | Michael S. Tsirkin | |
8 | d5970055 | Michael S. Tsirkin | /* Generic structures common for any vhost based device. */
|
9 | d5970055 | Michael S. Tsirkin | struct vhost_virtqueue {
|
10 | d5970055 | Michael S. Tsirkin | int kick;
|
11 | d5970055 | Michael S. Tsirkin | int call;
|
12 | d5970055 | Michael S. Tsirkin | void *desc;
|
13 | d5970055 | Michael S. Tsirkin | void *avail;
|
14 | d5970055 | Michael S. Tsirkin | void *used;
|
15 | d5970055 | Michael S. Tsirkin | int num;
|
16 | d5970055 | Michael S. Tsirkin | unsigned long long used_phys; |
17 | d5970055 | Michael S. Tsirkin | unsigned used_size;
|
18 | d5970055 | Michael S. Tsirkin | void *ring;
|
19 | d5970055 | Michael S. Tsirkin | unsigned long long ring_phys; |
20 | d5970055 | Michael S. Tsirkin | unsigned ring_size;
|
21 | f56a1247 | Michael S. Tsirkin | EventNotifier masked_notifier; |
22 | d5970055 | Michael S. Tsirkin | }; |
23 | d5970055 | Michael S. Tsirkin | |
24 | d5970055 | Michael S. Tsirkin | typedef unsigned long vhost_log_chunk_t; |
25 | d5970055 | Michael S. Tsirkin | #define VHOST_LOG_PAGE 0x1000 |
26 | d5970055 | Michael S. Tsirkin | #define VHOST_LOG_BITS (8 * sizeof(vhost_log_chunk_t)) |
27 | d5970055 | Michael S. Tsirkin | #define VHOST_LOG_CHUNK (VHOST_LOG_PAGE * VHOST_LOG_BITS)
|
28 | d5970055 | Michael S. Tsirkin | |
29 | d5970055 | Michael S. Tsirkin | struct vhost_memory;
|
30 | d5970055 | Michael S. Tsirkin | struct vhost_dev {
|
31 | 04097f7c | Avi Kivity | MemoryListener memory_listener; |
32 | d5970055 | Michael S. Tsirkin | int control;
|
33 | d5970055 | Michael S. Tsirkin | struct vhost_memory *mem;
|
34 | 2817b260 | Avi Kivity | int n_mem_sections;
|
35 | 2817b260 | Avi Kivity | MemoryRegionSection *mem_sections; |
36 | d5970055 | Michael S. Tsirkin | struct vhost_virtqueue *vqs;
|
37 | d5970055 | Michael S. Tsirkin | int nvqs;
|
38 | a9f98bb5 | Jason Wang | /* the first virtuque which would be used by this vhost dev */
|
39 | a9f98bb5 | Jason Wang | int vq_index;
|
40 | d5970055 | Michael S. Tsirkin | unsigned long long features; |
41 | d5970055 | Michael S. Tsirkin | unsigned long long acked_features; |
42 | d5970055 | Michael S. Tsirkin | unsigned long long backend_features; |
43 | d5970055 | Michael S. Tsirkin | bool started;
|
44 | d5970055 | Michael S. Tsirkin | bool log_enabled;
|
45 | d5970055 | Michael S. Tsirkin | vhost_log_chunk_t *log; |
46 | d5970055 | Michael S. Tsirkin | unsigned long long log_size; |
47 | 5430a28f | mst@redhat.com | bool force;
|
48 | d5970055 | Michael S. Tsirkin | }; |
49 | d5970055 | Michael S. Tsirkin | |
50 | 1241ed94 | Stefan Hajnoczi | int vhost_dev_init(struct vhost_dev *hdev, int devfd, const char *devpath, |
51 | 1241ed94 | Stefan Hajnoczi | bool force);
|
52 | d5970055 | Michael S. Tsirkin | void vhost_dev_cleanup(struct vhost_dev *hdev); |
53 | 5430a28f | mst@redhat.com | bool vhost_dev_query(struct vhost_dev *hdev, VirtIODevice *vdev); |
54 | d5970055 | Michael S. Tsirkin | int vhost_dev_start(struct vhost_dev *hdev, VirtIODevice *vdev); |
55 | d5970055 | Michael S. Tsirkin | void vhost_dev_stop(struct vhost_dev *hdev, VirtIODevice *vdev); |
56 | b0b3db79 | Michael S. Tsirkin | int vhost_dev_enable_notifiers(struct vhost_dev *hdev, VirtIODevice *vdev); |
57 | b0b3db79 | Michael S. Tsirkin | void vhost_dev_disable_notifiers(struct vhost_dev *hdev, VirtIODevice *vdev); |
58 | d5970055 | Michael S. Tsirkin | |
59 | f56a1247 | Michael S. Tsirkin | /* Test and clear masked event pending status.
|
60 | f56a1247 | Michael S. Tsirkin | * Should be called after unmask to avoid losing events.
|
61 | f56a1247 | Michael S. Tsirkin | */
|
62 | f56a1247 | Michael S. Tsirkin | bool vhost_virtqueue_pending(struct vhost_dev *hdev, int n); |
63 | f56a1247 | Michael S. Tsirkin | |
64 | f56a1247 | Michael S. Tsirkin | /* Mask/unmask events from this vq.
|
65 | f56a1247 | Michael S. Tsirkin | */
|
66 | f56a1247 | Michael S. Tsirkin | void vhost_virtqueue_mask(struct vhost_dev *hdev, VirtIODevice *vdev, int n, |
67 | f56a1247 | Michael S. Tsirkin | bool mask);
|
68 | d5970055 | Michael S. Tsirkin | #endif |