Zephyr Project API 4.1.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
7#ifndef ZEPHYR_VIRTIO_VIRTIO_H_
8#define ZEPHYR_VIRTIO_VIRTIO_H_
9#include <zephyr/device.h>
10#include "virtqueue.h"
11
12#ifdef __cplusplus
13extern "C" {
14#endif
15
32 uint16_t queue_idx, uint16_t max_queue_size, void *opaque
33);
34
38__subsystem struct virtio_driver_api {
39 struct virtq *(*get_virtqueue)(const struct device *dev, uint16_t queue_idx);
40 void (*notify_virtqueue)(const struct device *dev, uint16_t queue_idx);
41 void *(*get_device_specific_config)(const struct device *dev);
42 bool (*read_device_feature_bit)(const struct device *dev, int bit);
43 int (*write_driver_feature_bit)(const struct device *dev, int bit, bool value);
44 int (*commit_feature_bits)(const struct device *dev);
46 const struct device *dev, uint16_t num_queues, virtio_enumerate_queues cb,
47 void *opaque
48 );
49 void (*finalize_init)(const struct device *dev);
50};
51
59static inline struct virtq *virtio_get_virtqueue(const struct device *dev, uint16_t queue_idx)
60{
61 const struct virtio_driver_api *api = dev->api;
62
63 return api->get_virtqueue(dev, queue_idx);
64}
65
76static inline void virtio_notify_virtqueue(const struct device *dev, uint16_t queue_idx)
77{
78 const struct virtio_driver_api *api = dev->api;
79
80 api->notify_virtqueue(dev, queue_idx);
81}
82
89static inline void *virtio_get_device_specific_config(const struct device *dev)
90{
91 const struct virtio_driver_api *api = dev->api;
92
93 return api->get_device_specific_config(dev);
94}
95
103static inline bool virtio_read_device_feature_bit(const struct device *dev, int bit)
104{
105 const struct virtio_driver_api *api = dev->api;
106
107 return api->read_device_feature_bit(dev, bit);
108}
109
118static inline int virtio_write_driver_feature_bit(const struct device *dev, int bit, bool value)
119{
120 const struct virtio_driver_api *api = dev->api;
121
122 return api->write_driver_feature_bit(dev, bit, value);
123}
124
131static inline int virtio_commit_feature_bits(const struct device *dev)
132{
133 const struct virtio_driver_api *api = dev->api;
134
135 return api->commit_feature_bits(dev);
136}
137
147static inline int virtio_init_virtqueues(
148 const struct device *dev, uint16_t num_queues, virtio_enumerate_queues cb, void *opaque)
149{
150 const struct virtio_driver_api *api = dev->api;
151
152 return api->init_virtqueues(dev, num_queues, cb, opaque);
153}
154
160static inline void virtio_finalize_init(const struct device *dev)
161{
162 const struct virtio_driver_api *api = dev->api;
163
164 api->finalize_init(dev);
165}
166
171#ifdef __cplusplus
172}
173#endif
174
175#endif /* ZEPHYR_VIRTIO_VIRTIO_H_ */
static void * virtio_get_device_specific_config(const struct device *dev)
Returns device specific config.
Definition virtio.h:89
static void virtio_finalize_init(const struct device *dev)
Finalizes initialization of the virtio device.
Definition virtio.h:160
static struct virtq * virtio_get_virtqueue(const struct device *dev, uint16_t queue_idx)
Returns virtqueue at given idx.
Definition virtio.h:59
static bool virtio_read_device_feature_bit(const struct device *dev, int bit)
Returns feature bit offered by virtio device.
Definition virtio.h:103
static int virtio_commit_feature_bits(const struct device *dev)
Commits feature bits.
Definition virtio.h:131
static int virtio_write_driver_feature_bit(const struct device *dev, int bit, bool value)
Sets feature bit.
Definition virtio.h:118
uint16_t(* virtio_enumerate_queues)(uint16_t queue_idx, uint16_t max_queue_size, void *opaque)
Callback used during virtqueue enumeration.
Definition virtio.h:31
static void virtio_notify_virtqueue(const struct device *dev, uint16_t queue_idx)
Notifies virtqueue.
Definition virtio.h:76
static int virtio_init_virtqueues(const struct device *dev, uint16_t num_queues, virtio_enumerate_queues cb, void *opaque)
Initializes virtqueues.
Definition virtio.h:147
#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:510
const void * api
Address of the API structure exposed by the device instance.
Definition device.h:516
Virtio api structure.
Definition virtio.h:38
void(* finalize_init)(const struct device *dev)
Definition virtio.h:49
void(* notify_virtqueue)(const struct device *dev, uint16_t queue_idx)
Definition virtio.h:40
struct virtq *(* get_virtqueue)(const struct device *dev, uint16_t queue_idx)
Definition virtio.h:39
bool(* read_device_feature_bit)(const struct device *dev, int bit)
Definition virtio.h:42
void *(* get_device_specific_config)(const struct device *dev)
Definition virtio.h:41
int(* commit_feature_bits)(const struct device *dev)
Definition virtio.h:44
int(* init_virtqueues)(const struct device *dev, uint16_t num_queues, virtio_enumerate_queues cb, void *opaque)
Definition virtio.h:45
int(* write_driver_feature_bit)(const struct device *dev, int bit, bool value)
Definition virtio.h:43
virtqueue
Definition virtqueue.h:147