13#ifndef ZEPHYR_VIRTIO_VIRTQUEUE_H_
14#define ZEPHYR_VIRTIO_VIRTQUEUE_H_
38#define VIRTQ_DESC_F_NEXT 1
42#define VIRTQ_DESC_F_WRITE 2
void(* virtq_receive_callback)(void *opaque, uint32_t used_len)
receive callback function type
Definition virtqueue.h:130
int virtq_create(struct virtq *v, size_t size)
creates virtqueue
void virtq_add_free_desc(struct virtq *v, uint16_t desc_idx)
adds free descriptor back
int virtq_add_buffer_chain(struct virtq *v, struct virtq_buf *bufs, uint16_t bufs_size, uint16_t device_readable_count, virtq_receive_callback cb, void *cb_opaque, k_timeout_t timeout)
adds chain of buffers to the virtqueue
int virtq_get_free_desc(struct virtq *v, uint16_t *desc_idx, k_timeout_t timeout)
gets next free descriptor
void virtq_free(struct virtq *v)
frees virtqueue
__UINT32_TYPE__ uint32_t
Definition stdint.h:90
__UINT64_TYPE__ uint64_t
Definition stdint.h:91
__UINT16_TYPE__ uint16_t
Definition stdint.h:89
Kernel Spin Lock.
Definition spinlock.h:45
Kernel timeout type.
Definition clock.h:65
virtqueue available ring
Definition virtqueue.h:73
uint16_t ring[]
ring with indexes of descriptors
Definition virtqueue.h:85
uint16_t idx
head of the ring, by increasing it newly added descriptors are committed
Definition virtqueue.h:81
uint16_t flags
ring flags, e.g.
Definition virtqueue.h:77
single buffer passed to virtq_add_buffer_chain
Definition virtqueue.h:222
uint32_t len
length of the buffer
Definition virtqueue.h:230
void * addr
virtual address of the buffer
Definition virtqueue.h:226
virtqueue descriptor
Definition virtqueue.h:49
uint64_t addr
physical address of the buffer
Definition virtqueue.h:53
uint32_t len
length of the buffer
Definition virtqueue.h:57
uint16_t next
chaining next descriptor, valid if flags & VIRTQ_DESC_F_NEXT
Definition virtqueue.h:65
uint16_t flags
buffer flags
Definition virtqueue.h:61
callback descriptor
Definition virtqueue.h:138
void * opaque
argument passed to the callback function
Definition virtqueue.h:146
virtq_receive_callback cb
callback function pointer
Definition virtqueue.h:142
used descriptor chain
Definition virtqueue.h:93
uint32_t id
index of the head of descriptor chain
Definition virtqueue.h:97
uint32_t len
total amount of bytes written to descriptor chain by the virtio device
Definition virtqueue.h:101
virtqueue used ring
Definition virtqueue.h:109
struct virtq_used_elem ring[]
ring of struct virtq_used_elem
Definition virtqueue.h:121
uint16_t flags
ring flags, e.g.
Definition virtqueue.h:113
uint16_t idx
head of the ring
Definition virtqueue.h:117
virtqueue
Definition virtqueue.h:154
struct virtq_receive_callback_entry * recv_cbs
array with callbacks invoked after receiving buffers back from the device
Definition virtqueue.h:199
struct k_stack free_desc_stack
Stack containing indexes of free descriptors.
Definition virtqueue.h:189
uint16_t free_desc_n
amount of free descriptors in the free_desc_stack
Definition virtqueue.h:194
struct virtq_used * used
used ring
Definition virtqueue.h:175
uint16_t last_used_idx
last seen idx in used ring, used to determine first descriptor to process after receiving virtqueue i...
Definition virtqueue.h:181
struct virtq_avail * avail
available ring
Definition virtqueue.h:171
struct virtq_desc * desc
array with descriptors
Definition virtqueue.h:167
struct k_spinlock lock
lock used to synchronize operations on virtqueue
Definition virtqueue.h:158
uint16_t num
size of virtqueue
Definition virtqueue.h:163