11 #include <metal/spinlock.h>
13 #if defined __cplusplus
18 #define VIRTIO_ID_NETWORK 0x01UL
19 #define VIRTIO_ID_BLOCK 0x02UL
20 #define VIRTIO_ID_CONSOLE 0x03UL
21 #define VIRTIO_ID_ENTROPY 0x04UL
22 #define VIRTIO_ID_BALLOON 0x05UL
23 #define VIRTIO_ID_IOMEMORY 0x06UL
24 #define VIRTIO_ID_RPMSG 0x07UL
25 #define VIRTIO_ID_SCSI 0x08UL
26 #define VIRTIO_ID_9P 0x09UL
27 #define VIRTIO_DEV_ANY_ID (-1)UL
30 #define VIRTIO_CONFIG_STATUS_ACK 0x01
31 #define VIRTIO_CONFIG_STATUS_DRIVER 0x02
32 #define VIRTIO_CONFIG_STATUS_DRIVER_OK 0x04
33 #define VIRTIO_CONFIG_STATUS_NEEDS_RESET 0x40
34 #define VIRTIO_CONFIG_STATUS_FAILED 0x80
37 #define VIRTIO_DEV_DRIVER 0UL
38 #define VIRTIO_DEV_DEVICE 1UL
40 #define VIRTIO_DEV_MASTER deprecated_virtio_dev_master()
41 #define VIRTIO_DEV_SLAVE deprecated_virtio_dev_slave()
55 #ifdef VIRTIO_MASTER_ONLY
56 #define VIRTIO_DRIVER_ONLY
57 #warning "VIRTIO_MASTER_ONLY is deprecated, please use VIRTIO_DRIVER_ONLY"
60 #ifdef VIRTIO_SLAVE_ONLY
61 #define VIRTIO_DEVICE_ONLY
62 #warning "VIRTIO_SLAVE_ONLY is deprecated, please use VIRTIO_DEVICE_ONLY"
74 #define VIRTIO_F_NOTIFY_ON_EMPTY (1 << 24)
80 #define VIRTIO_F_BAD_FEATURE (1 << 30)
87 #define VIRTIO_TRANSPORT_F_START 28
88 #define VIRTIO_TRANSPORT_F_END 32
110 struct metal_io_region *
io;
160 void *dst,
int length);
162 void *src,
int length);
168 unsigned int nvqs,
const char *names[],
171 #if defined __cplusplus
uint32_t device
Definition: virtio.h:66
uint32_t vendor
Definition: virtio.h:67
unsigned int role
Definition: virtio.h:124
virtio_dev_reset_cb reset_cb
Definition: virtio.h:125
void * priv
Definition: virtio.h:127
struct virtio_vring_info * vrings_info
Definition: virtio.h:129
struct virtio_device_id id
Definition: virtio.h:120
uint32_t notifyid
Definition: virtio.h:119
const struct virtio_dispatch * func
Definition: virtio.h:126
unsigned int vrings_num
Definition: virtio.h:128
uint64_t features
Definition: virtio.h:123
void(* read_config)(struct virtio_device *dev, uint32_t offset, void *dst, int length)
Definition: virtio.h:159
void(* reset_device)(struct virtio_device *dev)
Definition: virtio.h:163
uint32_t(* negotiate_features)(struct virtio_device *dev, uint32_t features)
Definition: virtio.h:151
void(* notify)(struct virtqueue *vq)
Definition: virtio.h:164
uint8_t(* get_status)(struct virtio_device *dev)
Definition: virtio.h:147
void(* set_features)(struct virtio_device *dev, uint32_t feature)
Definition: virtio.h:150
uint32_t(* get_features)(struct virtio_device *dev)
Definition: virtio.h:149
void(* set_status)(struct virtio_device *dev, uint8_t status)
Definition: virtio.h:148
void(* write_config)(struct virtio_device *dev, uint32_t offset, void *src, int length)
Definition: virtio.h:161
const char * vfd_str
Definition: virtio.h:96
uint32_t vfd_val
Definition: virtio.h:95
struct vring_alloc_info info
Definition: virtio.h:108
uint32_t notifyid
Definition: virtio.h:109
struct virtqueue * vq
Definition: virtio.h:107
struct metal_io_region * io
Definition: virtio.h:110
Definition: virtqueue.h:60
Definition: virtqueue.h:105
void(* virtio_dev_reset_cb)(struct virtio_device *vdev)
Definition: virtio.h:90
#define VIRTIO_DEV_DRIVER
Definition: virtio.h:37
const char * virtio_dev_name(uint16_t devid)
static __deprecated int deprecated_virtio_dev_master(void)
Definition: virtio.h:43
int virtio_create_virtqueues(struct virtio_device *vdev, unsigned int flags, unsigned int nvqs, const char *names[], vq_callback callbacks[])
Definition: virtio.c:86
static __deprecated int deprecated_virtio_dev_slave(void)
Definition: virtio.h:49
#define VIRTIO_DEV_DEVICE
Definition: virtio.h:38
void virtio_describe(struct virtio_device *dev, const char *msg, uint32_t features, struct virtio_feature_desc *feature_desc)
Definition: virtio.c:75
void(* vq_callback)(struct virtqueue *)
Definition: virtqueue.h:112