OpenAMP Library  353
virtio_mmio_drv.c File Reference
#include <metal/device.h>
#include <openamp/open_amp.h>
#include <openamp/virtio.h>
#include <openamp/virtio_mmio.h>
#include <openamp/virtqueue.h>
#include <stdbool.h>

Typedefs

typedef void(* virtio_mmio_vq_callback) (void *)
 

Functions

void virtio_mmio_isr (struct virtio_device *vdev)
 VIRTIO MMIO interrupt service routine. More...
 
static int virtio_mmio_create_virtqueues (struct virtio_device *vdev, unsigned int flags, unsigned int nvqs, const char *names[], vq_callback callbacks[], void *callback_args[])
 
static void virtio_mmio_write32 (struct virtio_device *vdev, int offset, uint32_t value)
 
static uint32_t virtio_mmio_read32 (struct virtio_device *vdev, int offset)
 
static uint8_t virtio_mmio_read8 (struct virtio_device *vdev, int offset)
 
static void virtio_mmio_set_status (struct virtio_device *vdev, uint8_t status)
 
static uint8_t virtio_mmio_get_status (struct virtio_device *vdev)
 
static void virtio_mmio_write_config (struct virtio_device *vdev, uint32_t offset, void *dst, int length)
 
static void virtio_mmio_read_config (struct virtio_device *vdev, uint32_t offset, void *dst, int length)
 
static uint32_t _virtio_mmio_get_features (struct virtio_device *vdev, int idx)
 
static uint32_t virtio_mmio_get_features (struct virtio_device *vdev)
 
static void _virtio_mmio_set_features (struct virtio_device *vdev, uint32_t features, int idx)
 
static void virtio_mmio_set_features (struct virtio_device *vdev, uint32_t features)
 
static void virtio_mmio_reset_device (struct virtio_device *vdev)
 
static void virtio_mmio_notify (struct virtqueue *vq)
 
static int virtio_mmio_get_metal_io (struct virtio_device *vdev, uintptr_t virt_mem_ptr, uintptr_t cfg_mem_ptr)
 
uint32_t virtio_mmio_get_max_elem (struct virtio_device *vdev, int idx)
 
int virtio_mmio_device_init (struct virtio_mmio_device *vmdev, uintptr_t virt_mem_ptr, uintptr_t cfg_mem_ptr, void *user_data)
 VIRTIO MMIO device initialization. More...
 
void virtio_mmio_register_device (struct virtio_device *vdev, int vq_num, struct virtqueue **vqs)
 Register a VIRTIO device with the VIRTIO stack. More...
 
struct virtqueuevirtio_mmio_setup_virtqueue (struct virtio_device *vdev, unsigned int idx, struct virtqueue *vq, void(*cb)(void *), void *cb_arg, const char *vq_name)
 Setup a virtqueue structure. More...
 

Variables

const struct virtio_dispatch virtio_mmio_dispatch
 

Typedef Documentation

◆ virtio_mmio_vq_callback

typedef void(* virtio_mmio_vq_callback) (void *)

Function Documentation

◆ _virtio_mmio_get_features()

static uint32_t _virtio_mmio_get_features ( struct virtio_device vdev,
int  idx 
)
static

◆ _virtio_mmio_set_features()

static void _virtio_mmio_set_features ( struct virtio_device vdev,
uint32_t  features,
int  idx 
)
static

◆ virtio_mmio_create_virtqueues()

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

◆ virtio_mmio_device_init()

int virtio_mmio_device_init ( struct virtio_mmio_device vmdev,
uintptr_t  virt_mem_ptr,
uintptr_t  cfg_mem_ptr,
void *  user_data 
)

VIRTIO MMIO device initialization.

Parameters
vmdevPointer to virtio_mmio_device structure.
virt_mem_ptrGuest virtio (shared) memory base address (virtual).
cfg_mem_ptrVirtio device configuration memory base address (virtual).
user_dataPointer to custom user data.
Returns
int 0 for success.

◆ virtio_mmio_get_features()

static uint32_t virtio_mmio_get_features ( struct virtio_device vdev)
static

◆ virtio_mmio_get_max_elem()

uint32_t virtio_mmio_get_max_elem ( struct virtio_device vdev,
int  idx 
)

◆ virtio_mmio_get_metal_io()

static int virtio_mmio_get_metal_io ( struct virtio_device vdev,
uintptr_t  virt_mem_ptr,
uintptr_t  cfg_mem_ptr 
)
static

◆ virtio_mmio_get_status()

static uint8_t virtio_mmio_get_status ( struct virtio_device vdev)
static

◆ virtio_mmio_isr()

void virtio_mmio_isr ( struct virtio_device vdev)

VIRTIO MMIO interrupt service routine.

Parameters
vdevPointer to virtio_device structure.

◆ virtio_mmio_notify()

static void virtio_mmio_notify ( struct virtqueue vq)
static

◆ virtio_mmio_read32()

static uint32_t virtio_mmio_read32 ( struct virtio_device vdev,
int  offset 
)
inlinestatic

◆ virtio_mmio_read8()

static uint8_t virtio_mmio_read8 ( struct virtio_device vdev,
int  offset 
)
inlinestatic

◆ virtio_mmio_read_config()

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

◆ virtio_mmio_register_device()

void virtio_mmio_register_device ( struct virtio_device vdev,
int  vq_num,
struct virtqueue **  vqs 
)

Register a VIRTIO device with the VIRTIO stack.

Parameters
vdevPointer to device structure.
vq_numNumber of virtqueues the device uses.
vqsArray of pointers to vthe virtqueues used by the device.

◆ virtio_mmio_reset_device()

static void virtio_mmio_reset_device ( struct virtio_device vdev)
static

◆ virtio_mmio_set_features()

static void virtio_mmio_set_features ( struct virtio_device vdev,
uint32_t  features 
)
static

◆ virtio_mmio_set_status()

static void virtio_mmio_set_status ( struct virtio_device vdev,
uint8_t  status 
)
inlinestatic

◆ virtio_mmio_setup_virtqueue()

struct virtqueue* virtio_mmio_setup_virtqueue ( struct virtio_device vdev,
unsigned int  idx,
struct virtqueue vq,
void(*)(void *)  cb,
void *  cb_arg,
const char *  vq_name 
)

Setup a virtqueue structure.

Parameters
vdevPointer to device structure.
idxIndex of the virtqueue.
vqPointer to virtqueue structure.
cbPointer to virtqueue callback. Can be NULL.
cb_argArgument for the virtqueue callback.
vq_nameName of the virtqueue.
Returns
pointer to virtqueue structure.

◆ virtio_mmio_write32()

static void virtio_mmio_write32 ( struct virtio_device vdev,
int  offset,
uint32_t  value 
)
inlinestatic

◆ virtio_mmio_write_config()

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

Variable Documentation

◆ virtio_mmio_dispatch

const struct virtio_dispatch virtio_mmio_dispatch
Initial value:
= {
.create_virtqueues = virtio_mmio_create_virtqueues,
.get_status = virtio_mmio_get_status,
.set_status = virtio_mmio_set_status,
.get_features = virtio_mmio_get_features,
.set_features = virtio_mmio_set_features,
.read_config = virtio_mmio_read_config,
.write_config = virtio_mmio_write_config,
.reset_device = virtio_mmio_reset_device,
.notify = virtio_mmio_notify,
}
static void virtio_mmio_set_features(struct virtio_device *vdev, uint32_t features)
Definition: virtio_mmio_drv.c:113
static int virtio_mmio_create_virtqueues(struct virtio_device *vdev, unsigned int flags, unsigned int nvqs, const char *names[], vq_callback callbacks[], void *callback_args[])
Definition: virtio_mmio_drv.c:332
static void virtio_mmio_read_config(struct virtio_device *vdev, uint32_t offset, void *dst, int length)
Definition: virtio_mmio_drv.c:67
static uint32_t virtio_mmio_get_features(struct virtio_device *vdev)
Definition: virtio_mmio_drv.c:91
static void virtio_mmio_reset_device(struct virtio_device *vdev)
Definition: virtio_mmio_drv.c:118
static void virtio_mmio_set_status(struct virtio_device *vdev, uint8_t status)
Definition: virtio_mmio_drv.c:46
static uint8_t virtio_mmio_get_status(struct virtio_device *vdev)
Definition: virtio_mmio_drv.c:51
static void virtio_mmio_notify(struct virtqueue *vq)
Definition: virtio_mmio_drv.c:123
static void virtio_mmio_write_config(struct virtio_device *vdev, uint32_t offset, void *dst, int length)
Definition: virtio_mmio_drv.c:56