OpenAMP Library  353
remoteproc_virtio.c File Reference
#include <openamp/remoteproc.h>
#include <openamp/remoteproc_virtio.h>
#include <openamp/virtqueue.h>
#include <metal/sys.h>
#include <metal/utilities.h>
#include <metal/alloc.h>
#include <metal/sleep.h>

Functions

static void rproc_virtio_delete_virtqueues (struct virtio_device *vdev)
 
static int rproc_virtio_create_virtqueue (struct virtio_device *vdev, unsigned int flags, unsigned int idx, const char *name, vq_callback callback)
 
static int rproc_virtio_create_virtqueues (struct virtio_device *vdev, unsigned int flags, unsigned int nvqs, const char *names[], vq_callback callbacks[], void *callback_args[])
 
static void rproc_virtio_virtqueue_notify (struct virtqueue *vq)
 
static unsigned char rproc_virtio_get_status (struct virtio_device *vdev)
 
static uint32_t rproc_virtio_get_dfeatures (struct virtio_device *vdev)
 
static uint32_t rproc_virtio_get_features (struct virtio_device *vdev)
 
static void rproc_virtio_read_config (struct virtio_device *vdev, uint32_t offset, void *dst, int length)
 
struct virtio_devicerproc_virtio_create_vdev (unsigned int role, unsigned int notifyid, void *rsc, struct metal_io_region *rsc_io, void *priv, rpvdev_notify_func notify, virtio_dev_reset_cb rst_cb)
 Create rproc virtio vdev. More...
 
void rproc_virtio_remove_vdev (struct virtio_device *vdev)
 Remove rproc virtio vdev. More...
 
int rproc_virtio_init_vring (struct virtio_device *vdev, unsigned int index, unsigned int notifyid, void *va, struct metal_io_region *io, unsigned int num_descs, unsigned int align)
 Initialize rproc virtio vring. More...
 
int rproc_virtio_notified (struct virtio_device *vdev, uint32_t notifyid)
 remoteproc virtio is got notified More...
 
void rproc_virtio_wait_remote_ready (struct virtio_device *vdev)
 Blocking function, waiting for the remote core is ready to start communications. More...
 

Variables

static const struct virtio_dispatch remoteproc_virtio_dispatch_funcs
 

Function Documentation

◆ rproc_virtio_create_vdev()

struct virtio_device* rproc_virtio_create_vdev ( unsigned int  role,
unsigned int  notifyid,
void *  rsc,
struct metal_io_region *  rsc_io,
void *  priv,
rpvdev_notify_func  notify,
virtio_dev_reset_cb  rst_cb 
)

Create rproc virtio vdev.

Parameters
roleVIRTIO_DEV_DRIVER or VIRTIO_DEV_DEVICE
notifyidVirtio device notification id
rscPointer to the virtio device resource
rsc_ioPointer to the virtio device resource I/O region
privPointer to the private data
notifyvdev and virtqueue notification function
rst_cbReset virtio device callback
Returns
pointer to the created virtio device for success, NULL for failure.

◆ rproc_virtio_create_virtqueue()

static int rproc_virtio_create_virtqueue ( struct virtio_device vdev,
unsigned int  flags,
unsigned int  idx,
const char *  name,
vq_callback  callback 
)
static

◆ rproc_virtio_create_virtqueues()

static int rproc_virtio_create_virtqueues ( struct virtio_device vdev,
unsigned int  flags,
unsigned int  nvqs,
const char *  names[],
vq_callback  callbacks[],
void *  callback_args[] 
)
static

◆ rproc_virtio_delete_virtqueues()

static void rproc_virtio_delete_virtqueues ( struct virtio_device vdev)
static

◆ rproc_virtio_get_dfeatures()

static uint32_t rproc_virtio_get_dfeatures ( struct virtio_device vdev)
static

◆ rproc_virtio_get_features()

static uint32_t rproc_virtio_get_features ( struct virtio_device vdev)
static

◆ rproc_virtio_get_status()

static unsigned char rproc_virtio_get_status ( struct virtio_device vdev)
static

◆ rproc_virtio_init_vring()

int rproc_virtio_init_vring ( struct virtio_device vdev,
unsigned int  index,
unsigned int  notifyid,
void *  va,
struct metal_io_region *  io,
unsigned int  num_descs,
unsigned int  align 
)

Initialize rproc virtio vring.

Parameters
vdevPointer to the virtio device
indexvring index in the virtio device
notifyidremoteproc vring notification id
vavring virtual address
ioPointer to vring I/O region
num_descsNumber of descriptors
alignvring alignment
Returns
0 for success, negative value for failure.

◆ rproc_virtio_notified()

int rproc_virtio_notified ( struct virtio_device vdev,
uint32_t  notifyid 
)

remoteproc virtio is got notified

Parameters
vdevPointer to the virtio device
notifyidNotify id
Returns
0 for successful, negative value for failure

◆ rproc_virtio_read_config()

static void rproc_virtio_read_config ( struct virtio_device vdev,
uint32_t  offset,
void *  dst,
int  length 
)
static

◆ rproc_virtio_remove_vdev()

void rproc_virtio_remove_vdev ( struct virtio_device vdev)

Remove rproc virtio vdev.

Parameters
vdevPointer to the virtio device

◆ rproc_virtio_virtqueue_notify()

static void rproc_virtio_virtqueue_notify ( struct virtqueue vq)
static

◆ rproc_virtio_wait_remote_ready()

void rproc_virtio_wait_remote_ready ( struct virtio_device vdev)

Blocking function, waiting for the remote core is ready to start communications.

Parameters
vdevPointer to the virtio device

Variable Documentation

◆ remoteproc_virtio_dispatch_funcs

const struct virtio_dispatch remoteproc_virtio_dispatch_funcs
static
Initial value:
= {
.create_virtqueues = rproc_virtio_create_virtqueues,
.delete_virtqueues = rproc_virtio_delete_virtqueues,
.get_status = rproc_virtio_get_status,
.get_features = rproc_virtio_get_features,
.read_config = rproc_virtio_read_config,
}
static int rproc_virtio_create_virtqueues(struct virtio_device *vdev, unsigned int flags, unsigned int nvqs, const char *names[], vq_callback callbacks[], void *callback_args[])
Definition: remoteproc_virtio.c:74
static void rproc_virtio_virtqueue_notify(struct virtqueue *vq)
Definition: remoteproc_virtio.c:102
static void rproc_virtio_read_config(struct virtio_device *vdev, uint32_t offset, void *dst, int length)
Definition: remoteproc_virtio.c:216
static void rproc_virtio_delete_virtqueues(struct virtio_device *vdev)
Definition: remoteproc_virtio.c:20
static unsigned char rproc_virtio_get_status(struct virtio_device *vdev)
Definition: remoteproc_virtio.c:116
static uint32_t rproc_virtio_get_features(struct virtio_device *vdev)
Definition: remoteproc_virtio.c:168