Zephyr Project API 4.4.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
virtio.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2024 Antmicro <www.antmicro.com>
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
12
13#ifndef ZEPHYR_VIRTIO_VIRTIO_H_
14#define ZEPHYR_VIRTIO_VIRTIO_H_
15#include <zephyr/device.h>
16#include "virtio/virtqueue.h"
17
18#ifdef __cplusplus
19extern "C" {
20#endif
21
30
40 uint16_t queue_idx, uint16_t max_queue_size, void *opaque
41);
42
47
52typedef struct virtq *(*virtio_api_get_virtqueue)(const struct device *dev, uint16_t queue_idx);
53
58typedef void (*virtio_api_notify_virtqueue)(const struct device *dev, uint16_t queue_idx);
59
64typedef void *(*virtio_api_get_device_specific_config)(const struct device *dev);
65
70typedef bool (*virtio_api_read_device_feature_bit)(const struct device *dev, int bit);
71
76typedef int (*virtio_api_write_driver_feature_bit)(const struct device *dev, int bit, bool value);
77
82typedef int (*virtio_api_commit_feature_bits)(const struct device *dev);
83
89 const struct device *dev, uint16_t num_queues, virtio_enumerate_queues cb, void *opaque
90);
91
96typedef void (*virtio_api_finalize_init)(const struct device *dev);
97
119
121
129static inline struct virtq *virtio_get_virtqueue(const struct device *dev, uint16_t queue_idx)
130{
131 return DEVICE_API_GET(virtio, dev)->get_virtqueue(dev, queue_idx);
132}
133
144static inline void virtio_notify_virtqueue(const struct device *dev, uint16_t queue_idx)
145{
146 DEVICE_API_GET(virtio, dev)->notify_virtqueue(dev, queue_idx);
147}
148
155static inline void *virtio_get_device_specific_config(const struct device *dev)
156{
157 return DEVICE_API_GET(virtio, dev)->get_device_specific_config(dev);
158}
159
167static inline bool virtio_read_device_feature_bit(const struct device *dev, int bit)
168{
169 return DEVICE_API_GET(virtio, dev)->read_device_feature_bit(dev, bit);
170}
171
180static inline int virtio_write_driver_feature_bit(const struct device *dev, int bit, bool value)
181{
182 return DEVICE_API_GET(virtio, dev)->write_driver_feature_bit(dev, bit, value);
183}
184
191static inline int virtio_commit_feature_bits(const struct device *dev)
192{
193 return DEVICE_API_GET(virtio, dev)->commit_feature_bits(dev);
194}
195
205static inline int virtio_init_virtqueues(
206 const struct device *dev, uint16_t num_queues, virtio_enumerate_queues cb, void *opaque)
207{
208 return DEVICE_API_GET(virtio, dev)->init_virtqueues(dev, num_queues, cb, opaque);
209}
210
216static inline void virtio_finalize_init(const struct device *dev)
217{
218 DEVICE_API_GET(virtio, dev)->finalize_init(dev);
219}
220
224
225#ifdef __cplusplus
226}
227#endif
228
229#endif /* ZEPHYR_VIRTIO_VIRTIO_H_ */
#define DEVICE_API_GET(_class, _dev)
Expands to the pointer of a device's API for a given class.
Definition device.h:1461
int(* virtio_api_commit_feature_bits)(const struct device *dev)
Type definition of VIRTIO API function for committing the feature bits.
Definition virtio.h:82
static void * virtio_get_device_specific_config(const struct device *dev)
Returns device specific config.
Definition virtio.h:155
static void virtio_finalize_init(const struct device *dev)
Finalizes initialization of the virtio device.
Definition virtio.h:216
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.
Definition virtio.h:76
static struct virtq * virtio_get_virtqueue(const struct device *dev, uint16_t queue_idx)
Returns virtqueue at given idx.
Definition virtio.h:129
static bool virtio_read_device_feature_bit(const struct device *dev, int bit)
Returns feature bit offered by virtio device.
Definition virtio.h:167
void(* virtio_api_notify_virtqueue)(const struct device *dev, uint16_t queue_idx)
Type definition of VIRTIO API function for notifying a virtqueue.
Definition virtio.h:58
void *(* virtio_api_get_device_specific_config)(const struct device *dev)
Type definition of VIRTIO API function for getting the device specific config.
Definition virtio.h:64
static int virtio_commit_feature_bits(const struct device *dev)
Commits feature bits.
Definition virtio.h:191
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.
Definition virtio.h:70
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.
Definition virtio.h:88
void(* virtio_api_finalize_init)(const struct device *dev)
Type definition of VIRTIO API function for finalizing the initialization.
Definition virtio.h:96
static int virtio_write_driver_feature_bit(const struct device *dev, int bit, bool value)
Sets feature bit.
Definition virtio.h:180
uint16_t(* virtio_enumerate_queues)(uint16_t queue_idx, uint16_t max_queue_size, void *opaque)
Callback used during virtqueue enumeration.
Definition virtio.h:39
static void virtio_notify_virtqueue(const struct device *dev, uint16_t queue_idx)
Notifies virtqueue.
Definition virtio.h:144
struct virtq *(* virtio_api_get_virtqueue)(const struct device *dev, uint16_t queue_idx)
@def_driverbackendgroup{VIRTIO,virtio_interface}
Definition virtio.h:52
static int virtio_init_virtqueues(const struct device *dev, uint16_t num_queues, virtio_enumerate_queues cb, void *opaque)
Initializes virtqueues.
Definition virtio.h:205
#define bool
Definition stdbool.h:13
__UINT16_TYPE__ uint16_t
Definition stdint.h:89
Runtime device structure (in ROM) per driver instance.
Definition device.h:525
@driver_ops{VIRTIO}
Definition virtio.h:101
virtio_api_init_virtqueues init_virtqueues
@driver_ops_mandatory Initializes virtqueues.
Definition virtio.h:115
virtio_api_commit_feature_bits commit_feature_bits
@driver_ops_mandatory Commits feature bits.
Definition virtio.h:113
virtio_api_read_device_feature_bit read_device_feature_bit
@driver_ops_mandatory Returns feature bit offered by virtio device.
Definition virtio.h:109
virtio_api_notify_virtqueue notify_virtqueue
@driver_ops_mandatory Notifies virtqueue.
Definition virtio.h:105
virtio_api_get_device_specific_config get_device_specific_config
@driver_ops_mandatory Returns device specific config.
Definition virtio.h:107
virtio_api_get_virtqueue get_virtqueue
@driver_ops_mandatory Returns virtqueue at given idx.
Definition virtio.h:103
virtio_api_finalize_init finalize_init
@driver_ops_mandatory Finalizes initialization of the virtio device.
Definition virtio.h:117
virtio_api_write_driver_feature_bit write_driver_feature_bit
@driver_ops_mandatory Sets feature bit.
Definition virtio.h:111
virtqueue
Definition virtqueue.h:154
Header file for the VIRTIO virtqueue API.