OpenAMP Library  latest
Loading...
Searching...
No Matches
virtqueue.c File Reference
#include <string.h>
#include <openamp/virtio.h>
#include <openamp/virtqueue.h>
#include <metal/atomic.h>
#include <metal/log.h>
#include <metal/alloc.h>

Functions

static void vq_ring_init (struct virtqueue *, void *, int)
static void vq_ring_update_avail (struct virtqueue *, uint16_t)
static uint16_t vq_ring_add_buffer (struct virtqueue *, struct vring_desc *, uint16_t, struct virtqueue_buf *, int, int)
static int vq_ring_enable_interrupt (struct virtqueue *, uint16_t)
static void vq_ring_free_chain (struct virtqueue *, uint16_t)
static int vq_ring_must_notify (struct virtqueue *vq)
static void vq_ring_notify (struct virtqueue *vq)
static int virtqueue_nused (struct virtqueue *vq)
static int virtqueue_navail (struct virtqueue *vq)
static void * virtqueue_phys_to_virt (struct virtqueue *vq, metal_phys_addr_t phys)
static metal_phys_addr_t virtqueue_virt_to_phys (struct virtqueue *vq, void *buf)
int virtqueue_create (struct virtio_device *virt_dev, unsigned short id, const char *name, struct vring_alloc_info *ring, void(*callback)(struct virtqueue *vq), void(*notify)(struct virtqueue *vq), struct virtqueue *vq)
int virtqueue_add_buffer (struct virtqueue *vq, struct virtqueue_buf *buf_list, int readable, int writable, void *cookie)
void * virtqueue_get_buffer (struct virtqueue *vq, uint32_t *len, uint16_t *idx)
uint32_t virtqueue_get_buffer_length (struct virtqueue *vq, uint16_t idx)
void * virtqueue_get_buffer_addr (struct virtqueue *vq, uint16_t idx)
void virtqueue_free (struct virtqueue *vq)
void * virtqueue_get_first_avail_buffer (struct virtqueue *vq, uint16_t *avail_idx, uint32_t *len)
void * virtqueue_get_next_avail_buffer (struct virtqueue *vq, uint16_t idx, uint16_t *next_idx, uint32_t *next_len)
int virtqueue_add_consumed_buffer (struct virtqueue *vq, uint16_t head_idx, uint32_t len)
int virtqueue_enable_cb (struct virtqueue *vq)
void virtqueue_disable_cb (struct virtqueue *vq)
void virtqueue_kick (struct virtqueue *vq)
void virtqueue_dump (struct virtqueue *vq)
uint32_t virtqueue_get_desc_size (struct virtqueue *vq)
void virtqueue_notification (struct virtqueue *vq)

Function Documentation

◆ virtqueue_add_buffer()

int virtqueue_add_buffer ( struct virtqueue * vq,
struct virtqueue_buf * buf_list,
int readable,
int writable,
void * cookie )

◆ virtqueue_add_consumed_buffer()

int virtqueue_add_consumed_buffer ( struct virtqueue * vq,
uint16_t head_idx,
uint32_t len )

◆ virtqueue_create()

int virtqueue_create ( struct virtio_device * virt_dev,
unsigned short id,
const char * name,
struct vring_alloc_info * ring,
void(* callback )(struct virtqueue *vq),
void(* notify )(struct virtqueue *vq),
struct virtqueue * vq )

◆ virtqueue_disable_cb()

void virtqueue_disable_cb ( struct virtqueue * vq)

◆ virtqueue_dump()

void virtqueue_dump ( struct virtqueue * vq)

◆ virtqueue_enable_cb()

int virtqueue_enable_cb ( struct virtqueue * vq)

◆ virtqueue_free()

void virtqueue_free ( struct virtqueue * vq)

◆ virtqueue_get_buffer()

void * virtqueue_get_buffer ( struct virtqueue * vq,
uint32_t * len,
uint16_t * idx )

◆ virtqueue_get_buffer_addr()

void * virtqueue_get_buffer_addr ( struct virtqueue * vq,
uint16_t idx )

◆ virtqueue_get_buffer_length()

uint32_t virtqueue_get_buffer_length ( struct virtqueue * vq,
uint16_t idx )

◆ virtqueue_get_desc_size()

uint32_t virtqueue_get_desc_size ( struct virtqueue * vq)

◆ virtqueue_get_first_avail_buffer()

void * virtqueue_get_first_avail_buffer ( struct virtqueue * vq,
uint16_t * avail_idx,
uint32_t * len )

◆ virtqueue_get_next_avail_buffer()

void * virtqueue_get_next_avail_buffer ( struct virtqueue * vq,
uint16_t idx,
uint16_t * next_idx,
uint32_t * next_len )

◆ virtqueue_kick()

void virtqueue_kick ( struct virtqueue * vq)

◆ virtqueue_navail()

int virtqueue_navail ( struct virtqueue * vq)
static

◆ virtqueue_notification()

void virtqueue_notification ( struct virtqueue * vq)

◆ virtqueue_nused()

int virtqueue_nused ( struct virtqueue * vq)
static

◆ virtqueue_phys_to_virt()

void * virtqueue_phys_to_virt ( struct virtqueue * vq,
metal_phys_addr_t phys )
inlinestatic

◆ virtqueue_virt_to_phys()

metal_phys_addr_t virtqueue_virt_to_phys ( struct virtqueue * vq,
void * buf )
inlinestatic

◆ vq_ring_add_buffer()

uint16_t vq_ring_add_buffer ( struct virtqueue * vq,
struct vring_desc * desc,
uint16_t head_idx,
struct virtqueue_buf * buf_list,
int readable,
int writable )
static

◆ vq_ring_enable_interrupt()

int vq_ring_enable_interrupt ( struct virtqueue * vq,
uint16_t ndesc )
static

◆ vq_ring_free_chain()

void vq_ring_free_chain ( struct virtqueue * vq,
uint16_t desc_idx )
static

◆ vq_ring_init()

void vq_ring_init ( struct virtqueue * vq,
void * ring_mem,
int alignment )
static

◆ vq_ring_must_notify()

int vq_ring_must_notify ( struct virtqueue * vq)
static

◆ vq_ring_notify()

void vq_ring_notify ( struct virtqueue * vq)
static

◆ vq_ring_update_avail()

void vq_ring_update_avail ( struct virtqueue * vq,
uint16_t desc_idx )
static