Add qemu 2.4.0
[kvmfornfv.git] / qemu / include / hw / virtio / dataplane / vring-accessors.h
1 #ifndef VRING_ACCESSORS_H
2 #define VRING_ACCESSORS_H
3
4 #include "standard-headers/linux/virtio_ring.h"
5 #include "hw/virtio/virtio.h"
6 #include "hw/virtio/virtio-access.h"
7
8 static inline uint16_t vring_get_used_idx(VirtIODevice *vdev, Vring *vring)
9 {
10     return virtio_tswap16(vdev, vring->vr.used->idx);
11 }
12
13 static inline void vring_set_used_idx(VirtIODevice *vdev, Vring *vring,
14                                       uint16_t idx)
15 {
16     vring->vr.used->idx = virtio_tswap16(vdev, idx);
17 }
18
19 static inline uint16_t vring_get_avail_idx(VirtIODevice *vdev, Vring *vring)
20 {
21     return virtio_tswap16(vdev, vring->vr.avail->idx);
22 }
23
24 static inline uint16_t vring_get_avail_ring(VirtIODevice *vdev, Vring *vring,
25                                             int i)
26 {
27     return virtio_tswap16(vdev, vring->vr.avail->ring[i]);
28 }
29
30 static inline void vring_set_used_ring_id(VirtIODevice *vdev, Vring *vring,
31                                           int i, uint32_t id)
32 {
33     vring->vr.used->ring[i].id = virtio_tswap32(vdev, id);
34 }
35
36 static inline void vring_set_used_ring_len(VirtIODevice *vdev, Vring *vring,
37                                           int i, uint32_t len)
38 {
39     vring->vr.used->ring[i].len = virtio_tswap32(vdev, len);
40 }
41
42 static inline uint16_t vring_get_used_flags(VirtIODevice *vdev, Vring *vring)
43 {
44     return virtio_tswap16(vdev, vring->vr.used->flags);
45 }
46
47 static inline uint16_t vring_get_avail_flags(VirtIODevice *vdev, Vring *vring)
48 {
49     return virtio_tswap16(vdev, vring->vr.avail->flags);
50 }
51
52 static inline void vring_set_used_flags(VirtIODevice *vdev, Vring *vring,
53                                         uint16_t flags)
54 {
55     vring->vr.used->flags |= virtio_tswap16(vdev, flags);
56 }
57
58 static inline void vring_clear_used_flags(VirtIODevice *vdev, Vring *vring,
59                                           uint16_t flags)
60 {
61     vring->vr.used->flags &= virtio_tswap16(vdev, ~flags);
62 }
63
64 static inline unsigned int vring_get_num(Vring *vring)
65 {
66     return vring->vr.num;
67 }
68
69 /* Are there more descriptors available? */
70 static inline bool vring_more_avail(VirtIODevice *vdev, Vring *vring)
71 {
72     return vring_get_avail_idx(vdev, vring) != vring->last_avail_idx;
73 }
74
75 #endif