viona_ring_addr
volatile uint32_t *idp = viona_ring_addr(vrp, used_id_off);
volatile uint32_t *lenp = viona_ring_addr(vrp, used_len_off);
viona_ring_addr(&ring->vr_used, SPLIT_USED_IDX_OFF(ring));
viona_ring_addr(&ring->vr_used, SPLIT_USED_FLAGS_OFF(ring));
viona_ring_addr(&ring->vr_used, SPLIT_USED_FLAGS_OFF(ring));
viona_ring_addr(&ring->vr_avail, SPLIT_AVAIL_IDX_OFF(ring));
viona_ring_addr(&ring->vr_avail,
*descp = *(const struct virtio_desc *)viona_ring_addr(&ring->vr_desc,
viona_ring_addr(&ring->vr_avail, SPLIT_AVAIL_ENT_OFF(ring, idx));