7#ifndef ZEPHYR_VIRTIO_VIRTQUEUE_H_
8#define ZEPHYR_VIRTIO_VIRTQUEUE_H_
31#define VIRTQ_DESC_F_NEXT 1
35#define VIRTQ_DESC_F_WRITE 2
void(* virtq_receive_callback)(void *opaque, uint32_t used_len)
receive callback function type
Definition virtqueue.h:123
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 sys_clock.h:65
virtqueue available ring
Definition virtqueue.h:66
uint16_t ring[]
ring with indexes of descriptors
Definition virtqueue.h:78
uint16_t idx
head of the ring, by increasing it newly added descriptors are committed
Definition virtqueue.h:74
uint16_t flags
ring flags, e.g.
Definition virtqueue.h:70
single buffer passed to virtq_add_buffer_chain
Definition virtqueue.h:215
uint32_t len
length of the buffer
Definition virtqueue.h:223
void * addr
virtual address of the buffer
Definition virtqueue.h:219
virtqueue descriptor
Definition virtqueue.h:42
uint64_t addr
physical address of the buffer
Definition virtqueue.h:46
uint32_t len
length of the buffer
Definition virtqueue.h:50
uint16_t next
chaining next descriptor, valid if flags & VIRTQ_DESC_F_NEXT
Definition virtqueue.h:58
uint16_t flags
buffer flags
Definition virtqueue.h:54
callback descriptor
Definition virtqueue.h:131
void * opaque
argument passed to the callback function
Definition virtqueue.h:139
virtq_receive_callback cb
callback function pointer
Definition virtqueue.h:135
used descriptor chain
Definition virtqueue.h:86
uint32_t id
index of the head of descriptor chain
Definition virtqueue.h:90
uint32_t len
total amount of bytes written to descriptor chain by the virtio device
Definition virtqueue.h:94
virtqueue used ring
Definition virtqueue.h:102
struct virtq_used_elem ring[]
ring of struct virtq_used_elem
Definition virtqueue.h:114
uint16_t flags
ring flags, e.g.
Definition virtqueue.h:106
uint16_t idx
head of the ring
Definition virtqueue.h:110
virtqueue
Definition virtqueue.h:147
struct virtq_receive_callback_entry * recv_cbs
array with callbacks invoked after receiving buffers back from the device
Definition virtqueue.h:192
struct k_stack free_desc_stack
Stack containing indexes of free descriptors.
Definition virtqueue.h:182
uint16_t free_desc_n
amount of free descriptors in the free_desc_stack
Definition virtqueue.h:187
struct virtq_used * used
used ring
Definition virtqueue.h:168
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:174
struct virtq_avail * avail
available ring
Definition virtqueue.h:164
struct virtq_desc * desc
array with descriptors
Definition virtqueue.h:160
struct k_spinlock lock
lock used to synchronize operations on virtqueue
Definition virtqueue.h:151
uint16_t num
size of virtqueue
Definition virtqueue.h:156