7#ifndef ZEPHYR_VIRTIO_VIRTQUEUE_H_
8#define ZEPHYR_VIRTIO_VIRTQUEUE_H_
32#define VIRTQ_DESC_F_NEXT 1
36#define VIRTQ_DESC_F_WRITE 2
void(* virtq_receive_callback)(void *opaque, uint32_t used_len)
receive callback function type
Definition virtqueue.h:124
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:67
uint16_t ring[]
ring with indexes of descriptors
Definition virtqueue.h:79
uint16_t idx
head of the ring, by increasing it newly added descriptors are committed
Definition virtqueue.h:75
uint16_t flags
ring flags, e.g.
Definition virtqueue.h:71
single buffer passed to virtq_add_buffer_chain
Definition virtqueue.h:216
uint32_t len
length of the buffer
Definition virtqueue.h:224
void * addr
virtual address of the buffer
Definition virtqueue.h:220
virtqueue descriptor
Definition virtqueue.h:43
uint64_t addr
physical address of the buffer
Definition virtqueue.h:47
uint32_t len
length of the buffer
Definition virtqueue.h:51
uint16_t next
chaining next descriptor, valid if flags & VIRTQ_DESC_F_NEXT
Definition virtqueue.h:59
uint16_t flags
buffer flags
Definition virtqueue.h:55
callback descriptor
Definition virtqueue.h:132
void * opaque
argument passed to the callback function
Definition virtqueue.h:140
virtq_receive_callback cb
callback function pointer
Definition virtqueue.h:136
used descriptor chain
Definition virtqueue.h:87
uint32_t id
index of the head of descriptor chain
Definition virtqueue.h:91
uint32_t len
total amount of bytes written to descriptor chain by the virtio device
Definition virtqueue.h:95
virtqueue used ring
Definition virtqueue.h:103
struct virtq_used_elem ring[]
ring of struct virtq_used_elem
Definition virtqueue.h:115
uint16_t flags
ring flags, e.g.
Definition virtqueue.h:107
uint16_t idx
head of the ring
Definition virtqueue.h:111
virtqueue
Definition virtqueue.h:148
struct virtq_receive_callback_entry * recv_cbs
array with callbacks invoked after receiving buffers back from the device
Definition virtqueue.h:193
struct k_stack free_desc_stack
Stack containing indexes of free descriptors.
Definition virtqueue.h:183
uint16_t free_desc_n
amount of free descriptors in the free_desc_stack
Definition virtqueue.h:188
struct virtq_used * used
used ring
Definition virtqueue.h:169
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:175
struct virtq_avail * avail
available ring
Definition virtqueue.h:165
struct virtq_desc * desc
array with descriptors
Definition virtqueue.h:161
struct k_spinlock lock
lock used to synchronize operations on virtqueue
Definition virtqueue.h:152
uint16_t num
size of virtqueue
Definition virtqueue.h:157