OpenAMP Library  353
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(*)(struct virtqueue *vq)  callback,
void(*)(struct virtqueue *vq)  notify,
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()

static int virtqueue_navail ( struct virtqueue vq)
static

◆ virtqueue_notification()

void virtqueue_notification ( struct virtqueue vq)

◆ virtqueue_nused()

static int virtqueue_nused ( struct virtqueue vq)
static

◆ virtqueue_phys_to_virt()

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

◆ virtqueue_virt_to_phys()

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

◆ vq_ring_add_buffer()

static 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()

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

◆ vq_ring_free_chain()

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

◆ vq_ring_init()

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

◆ vq_ring_must_notify()

static int vq_ring_must_notify ( struct virtqueue vq)
static

◆ vq_ring_notify()

static void vq_ring_notify ( struct virtqueue vq)
static

◆ vq_ring_update_avail()

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