Zephyr Project API 4.4.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches

Interfaces for Virtual I/O (VIRTIO) devices. More...

Topics

 Virtqueue Interface
 Virtqueue Interface.

Files

file  virtio.h
 Main header file for Virtio driver API.
file  virtio_config.h
 VIRTIO common definitions based on the specification.

Data Structures

struct  virtio_driver_api
 @driver_ops{VIRTIO} More...

Typedefs

typedef uint16_t(* virtio_enumerate_queues) (uint16_t queue_idx, uint16_t max_queue_size, void *opaque)
 Callback used during virtqueue enumeration.

Functions

static struct virtqvirtio_get_virtqueue (const struct device *dev, uint16_t queue_idx)
 Returns virtqueue at given idx.
static void virtio_notify_virtqueue (const struct device *dev, uint16_t queue_idx)
 Notifies virtqueue.
static void * virtio_get_device_specific_config (const struct device *dev)
 Returns device specific config.
static bool virtio_read_device_feature_bit (const struct device *dev, int bit)
 Returns feature bit offered by virtio device.
static int virtio_write_driver_feature_bit (const struct device *dev, int bit, bool value)
 Sets feature bit.
static int virtio_commit_feature_bits (const struct device *dev)
 Commits feature bits.
static int virtio_init_virtqueues (const struct device *dev, uint16_t num_queues, virtio_enumerate_queues cb, void *opaque)
 Initializes virtqueues.
static void virtio_finalize_init (const struct device *dev)
 Finalizes initialization of the virtio device.
typedef struct virtq *(* virtio_api_get_virtqueue) (const struct device *dev, uint16_t queue_idx)
 @def_driverbackendgroup{VIRTIO,virtio_interface}
typedef void(* virtio_api_notify_virtqueue) (const struct device *dev, uint16_t queue_idx)
 Type definition of VIRTIO API function for notifying a virtqueue.
typedef void *(* virtio_api_get_device_specific_config) (const struct device *dev)
 Type definition of VIRTIO API function for getting the device specific config.
typedef bool(* virtio_api_read_device_feature_bit) (const struct device *dev, int bit)
 Type definition of VIRTIO API function for reading a device feature bit.
typedef int(* virtio_api_write_driver_feature_bit) (const struct device *dev, int bit, bool value)
 Type definition of VIRTIO API function for writing a driver feature bit.
typedef int(* virtio_api_commit_feature_bits) (const struct device *dev)
 Type definition of VIRTIO API function for committing the feature bits.
typedef int(* virtio_api_init_virtqueues) (const struct device *dev, uint16_t num_queues, virtio_enumerate_queues cb, void *opaque)
 Type definition of VIRTIO API function for initializing the virtqueues.
typedef void(* virtio_api_finalize_init) (const struct device *dev)
 Type definition of VIRTIO API function for finalizing the initialization.

Detailed Description

Interfaces for Virtual I/O (VIRTIO) devices.

Since
4.2
Version
0.1.0

Typedef Documentation

◆ virtio_api_commit_feature_bits

typedef int(* virtio_api_commit_feature_bits) (const struct device *dev)

#include <virtio.h>

Type definition of VIRTIO API function for committing the feature bits.

See virtio_commit_feature_bits() for argument descriptions.

◆ virtio_api_finalize_init

typedef void(* virtio_api_finalize_init) (const struct device *dev)

#include <virtio.h>

Type definition of VIRTIO API function for finalizing the initialization.

See virtio_finalize_init() for argument descriptions.

◆ virtio_api_get_device_specific_config

typedef void *(* virtio_api_get_device_specific_config) (const struct device *dev)

#include <virtio.h>

Type definition of VIRTIO API function for getting the device specific config.

See virtio_get_device_specific_config() for argument descriptions.

◆ virtio_api_get_virtqueue

typedef struct virtq *(* virtio_api_get_virtqueue) (const struct device *dev, uint16_t queue_idx)

#include <virtio.h>

@def_driverbackendgroup{VIRTIO,virtio_interface}

Type definition of VIRTIO API function for getting a virtqueue. See virtio_get_virtqueue() for argument descriptions.

◆ virtio_api_init_virtqueues

typedef int(* virtio_api_init_virtqueues) (const struct device *dev, uint16_t num_queues, virtio_enumerate_queues cb, void *opaque)

#include <virtio.h>

Type definition of VIRTIO API function for initializing the virtqueues.

See virtio_init_virtqueues() for argument descriptions.

◆ virtio_api_notify_virtqueue

typedef void(* virtio_api_notify_virtqueue) (const struct device *dev, uint16_t queue_idx)

#include <virtio.h>

Type definition of VIRTIO API function for notifying a virtqueue.

See virtio_notify_virtqueue() for argument descriptions.

◆ virtio_api_read_device_feature_bit

typedef bool(* virtio_api_read_device_feature_bit) (const struct device *dev, int bit)

#include <virtio.h>

Type definition of VIRTIO API function for reading a device feature bit.

See virtio_read_device_feature_bit() for argument descriptions.

◆ virtio_api_write_driver_feature_bit

typedef int(* virtio_api_write_driver_feature_bit) (const struct device *dev, int bit, bool value)

#include <virtio.h>

Type definition of VIRTIO API function for writing a driver feature bit.

See virtio_write_driver_feature_bit() for argument descriptions.

◆ virtio_enumerate_queues

typedef uint16_t(* virtio_enumerate_queues) (uint16_t queue_idx, uint16_t max_queue_size, void *opaque)

#include <virtio.h>

Callback used during virtqueue enumeration.

Parameters
queue_idxindex of currently inspected queue
max_queue_sizemaximum permitted size of currently inspected queue
opaquepointer to user provided data
Returns
the size of currently inspected virtqueue we want to set

Function Documentation

◆ virtio_commit_feature_bits()

int virtio_commit_feature_bits ( const struct device * dev)
inlinestatic

#include <virtio.h>

Commits feature bits.

Parameters
devvirtio device it operates on
Returns
0 on success or negative error code on failure

◆ virtio_finalize_init()

void virtio_finalize_init ( const struct device * dev)
inlinestatic

#include <virtio.h>

Finalizes initialization of the virtio device.

Parameters
devvirtio device it operates on

◆ virtio_get_device_specific_config()

void * virtio_get_device_specific_config ( const struct device * dev)
inlinestatic

#include <virtio.h>

Returns device specific config.

Parameters
devvirtio device it operates on
Returns
pointer to the device specific config or NULL if its not present

◆ virtio_get_virtqueue()

struct virtq * virtio_get_virtqueue ( const struct device * dev,
uint16_t queue_idx )
inlinestatic

#include <virtio.h>

Returns virtqueue at given idx.

Parameters
devvirtio device it operates on
queue_idxindex of virtqueue to get
Returns
pointer to virtqueue or NULL if not present

◆ virtio_init_virtqueues()

int virtio_init_virtqueues ( const struct device * dev,
uint16_t num_queues,
virtio_enumerate_queues cb,
void * opaque )
inlinestatic

#include <virtio.h>

Initializes virtqueues.

Parameters
devvirtio device it operates on
num_queuesnumber of queues to initialize
cbcallback called for each available virtqueue
opaquepointer to user provided data that will be passed to the callback
Returns
0 on success or negative error code on failure

◆ virtio_notify_virtqueue()

void virtio_notify_virtqueue ( const struct device * dev,
uint16_t queue_idx )
inlinestatic

#include <virtio.h>

Notifies virtqueue.

Note that according to spec 2.7.13.3 the device may access the buffers as soon as the avail->idx is increased, which is done by virtq_add_buffer_chain, so the device may access the buffers even without notifying it with virtio_notify_virtqueue

Parameters
devvirtio device it operates on
queue_idxvirtqueue to be notified

◆ virtio_read_device_feature_bit()

bool virtio_read_device_feature_bit ( const struct device * dev,
int bit )
inlinestatic

#include <virtio.h>

Returns feature bit offered by virtio device.

Parameters
devvirtio device it operates on
bitselected bit
Returns
value of the offered feature bit

◆ virtio_write_driver_feature_bit()

int virtio_write_driver_feature_bit ( const struct device * dev,
int bit,
bool value )
inlinestatic

#include <virtio.h>

Sets feature bit.

Parameters
devvirtio device it operates on
bitselected bit
valuebit value to write
Returns
0 on success or negative error code on failure