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
46__subsystem struct virtio_driver_api {
47 struct virtq *(*get_virtqueue)(const struct device *dev, uint16_t queue_idx);
48 void (*notify_virtqueue)(const struct device *dev, uint16_t queue_idx);
49 void *(*get_device_specific_config)(const struct device *dev);
50 bool (*read_device_feature_bit)(const struct device *dev, int bit);
51 int (*write_driver_feature_bit)(const struct device *dev, int bit, bool value);
52 int (*commit_feature_bits)(const struct device *dev);
54 const struct device *dev, uint16_t num_queues, virtio_enumerate_queues cb,
55 void *opaque
56 );
57 void (*finalize_init)(const struct device *dev);
58};
59
67static inline struct virtq *virtio_get_virtqueue(const struct device *dev, uint16_t queue_idx)
68{
69 return DEVICE_API_GET(virtio, dev)->get_virtqueue(dev, queue_idx);
70}
71
82static inline void virtio_notify_virtqueue(const struct device *dev, uint16_t queue_idx)
83{
84 DEVICE_API_GET(virtio, dev)->notify_virtqueue(dev, queue_idx);
85}
86
93static inline void *virtio_get_device_specific_config(const struct device *dev)
94{
95 return DEVICE_API_GET(virtio, dev)->get_device_specific_config(dev);
96}
97
105static inline bool virtio_read_device_feature_bit(const struct device *dev, int bit)
106{
107 return DEVICE_API_GET(virtio, dev)->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 return DEVICE_API_GET(virtio, dev)->write_driver_feature_bit(dev, bit, value);
121}
122
129static inline int virtio_commit_feature_bits(const struct device *dev)
130{
131 return DEVICE_API_GET(virtio, dev)->commit_feature_bits(dev);
132}
133
143static inline int virtio_init_virtqueues(
144 const struct device *dev, uint16_t num_queues, virtio_enumerate_queues cb, void *opaque)
145{
146 return DEVICE_API_GET(virtio, dev)->init_virtqueues(dev, num_queues, cb, opaque);
147}
148
154static inline void virtio_finalize_init(const struct device *dev)
155{
156 DEVICE_API_GET(virtio, dev)->finalize_init(dev);
157}
158
162
163#ifdef __cplusplus
164}
165#endif
166
167#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:1449
static void * virtio_get_device_specific_config(const struct device *dev)
Returns device specific config.
Definition virtio.h:93
static void virtio_finalize_init(const struct device *dev)
Finalizes initialization of the virtio device.
Definition virtio.h:154
static struct virtq * virtio_get_virtqueue(const struct device *dev, uint16_t queue_idx)
Returns virtqueue at given idx.
Definition virtio.h:67
static bool virtio_read_device_feature_bit(const struct device *dev, int bit)
Returns feature bit offered by virtio device.
Definition virtio.h:105
static int virtio_commit_feature_bits(const struct device *dev)
Commits feature bits.
Definition virtio.h:129
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:39
static void virtio_notify_virtqueue(const struct device *dev, uint16_t queue_idx)
Notifies virtqueue.
Definition virtio.h:82
static int virtio_init_virtqueues(const struct device *dev, uint16_t num_queues, virtio_enumerate_queues cb, void *opaque)
Initializes virtqueues.
Definition virtio.h:143
#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:513
Virtio api structure.
Definition virtio.h:46
void(* finalize_init)(const struct device *dev)
Definition virtio.h:57
void(* notify_virtqueue)(const struct device *dev, uint16_t queue_idx)
Definition virtio.h:48
bool(* read_device_feature_bit)(const struct device *dev, int bit)
Definition virtio.h:50
int(* commit_feature_bits)(const struct device *dev)
Definition virtio.h:52
int(* init_virtqueues)(const struct device *dev, uint16_t num_queues, virtio_enumerate_queues cb, void *opaque)
Definition virtio.h:53
int(* write_driver_feature_bit)(const struct device *dev, int bit, bool value)
Definition virtio.h:51
virtqueue
Definition virtqueue.h:148