12 #include <metal/compiler.h>
14 #if defined __cplusplus
19 #define VRING_DESC_F_NEXT 1
21 #define VRING_DESC_F_WRITE 2
23 #define VRING_DESC_F_INDIRECT 4
29 #define VRING_USED_F_NO_NOTIFY 1
34 #define VRING_AVAIL_F_NO_INTERRUPT 1
115 #define vring_used_event(vr) ((vr)->avail->ring[(vr)->num])
116 #define vring_avail_event(vr) ((vr)->used->ring[(vr)->num].event)
118 static inline int vring_size(
unsigned int num,
unsigned long align)
123 size +=
sizeof(
struct vring_avail) + (num *
sizeof(uint16_t)) +
125 size = (size + align - 1) & ~(align - 1);
139 (((
unsigned long)&vr->
avail->
ring[num] +
sizeof(uint16_t) +
140 align - 1) & ~(align - 1));
153 return (uint16_t)(new_idx - event_idx - 1) <
154 (uint16_t)(new_idx - old);
157 #if defined __cplusplus
Definition: virtio_ring.h:52
uint16_t idx
Definition: virtio_ring.h:54
uint16_t flags
Definition: virtio_ring.h:53
uint16_t ring[0]
Definition: virtio_ring.h:55
Definition: virtio_ring.h:40
uint64_t addr
Definition: virtio_ring.h:42
uint16_t next
Definition: virtio_ring.h:48
uint16_t flags
Definition: virtio_ring.h:46
uint32_t len
Definition: virtio_ring.h:44
Definition: virtio_ring.h:60
uint16_t event
Definition: virtio_ring.h:62
uint32_t id
Definition: virtio_ring.h:64
uint32_t len
Definition: virtio_ring.h:67
Definition: virtio_ring.h:71
struct vring_used_elem ring[0]
Definition: virtio_ring.h:74
uint16_t idx
Definition: virtio_ring.h:73
uint16_t flags
Definition: virtio_ring.h:72
Definition: virtio_ring.h:77
struct vring_desc * desc
Definition: virtio_ring.h:80
struct vring_avail * avail
Definition: virtio_ring.h:81
unsigned int num
Definition: virtio_ring.h:78
struct vring_used * used
Definition: virtio_ring.h:82
METAL_PACKED_BEGIN struct vring_desc METAL_PACKED_END
static int vring_size(unsigned int num, unsigned long align)
Definition: virtio_ring.h:118
static int vring_need_event(uint16_t event_idx, uint16_t new_idx, uint16_t old)
Definition: virtio_ring.h:151
static void vring_init(struct vring *vr, unsigned int num, uint8_t *p, unsigned long align)
Definition: virtio_ring.h:133