1 #ifndef VRING_ACCESSORS_H
2 #define VRING_ACCESSORS_H
4 #include "standard-headers/linux/virtio_ring.h"
5 #include "hw/virtio/virtio.h"
6 #include "hw/virtio/virtio-access.h"
8 static inline uint16_t vring_get_used_idx(VirtIODevice
*vdev
, Vring
*vring
)
10 return virtio_tswap16(vdev
, vring
->vr
.used
->idx
);
13 static inline void vring_set_used_idx(VirtIODevice
*vdev
, Vring
*vring
,
16 vring
->vr
.used
->idx
= virtio_tswap16(vdev
, idx
);
19 static inline uint16_t vring_get_avail_idx(VirtIODevice
*vdev
, Vring
*vring
)
21 return virtio_tswap16(vdev
, vring
->vr
.avail
->idx
);
24 static inline uint16_t vring_get_avail_ring(VirtIODevice
*vdev
, Vring
*vring
,
27 return virtio_tswap16(vdev
, vring
->vr
.avail
->ring
[i
]);
30 static inline void vring_set_used_ring_id(VirtIODevice
*vdev
, Vring
*vring
,
33 vring
->vr
.used
->ring
[i
].id
= virtio_tswap32(vdev
, id
);
36 static inline void vring_set_used_ring_len(VirtIODevice
*vdev
, Vring
*vring
,
39 vring
->vr
.used
->ring
[i
].len
= virtio_tswap32(vdev
, len
);
42 static inline uint16_t vring_get_used_flags(VirtIODevice
*vdev
, Vring
*vring
)
44 return virtio_tswap16(vdev
, vring
->vr
.used
->flags
);
47 static inline uint16_t vring_get_avail_flags(VirtIODevice
*vdev
, Vring
*vring
)
49 return virtio_tswap16(vdev
, vring
->vr
.avail
->flags
);
52 static inline void vring_set_used_flags(VirtIODevice
*vdev
, Vring
*vring
,
55 vring
->vr
.used
->flags
|= virtio_tswap16(vdev
, flags
);
58 static inline void vring_clear_used_flags(VirtIODevice
*vdev
, Vring
*vring
,
61 vring
->vr
.used
->flags
&= virtio_tswap16(vdev
, ~flags
);
64 static inline unsigned int vring_get_num(Vring
*vring
)
69 /* Are there more descriptors available? */
70 static inline bool vring_more_avail(VirtIODevice
*vdev
, Vring
*vring
)
72 return vring_get_avail_idx(vdev
, vring
) != vring
->last_avail_idx
;