OpenAMP Library  main
Loading...
Searching...
No Matches
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.
void rproc_virtio_remove_vdev (struct virtio_device *vdev)
 Remove rproc virtio vdev.
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.
int rproc_virtio_notified (struct virtio_device *vdev, uint32_t notifyid)
 remoteproc virtio is got notified
void rproc_virtio_wait_remote_ready (struct virtio_device *vdev)
 Blocking function, waiting for the remote core is ready to start communications.

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

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

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

void rproc_virtio_delete_virtqueues ( struct virtio_device * vdev)
static

◆ rproc_virtio_get_dfeatures()

uint32_t rproc_virtio_get_dfeatures ( struct virtio_device * vdev)
static

◆ rproc_virtio_get_features()

uint32_t rproc_virtio_get_features ( struct virtio_device * vdev)
static

◆ rproc_virtio_get_status()

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

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

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