Revision 53c25cea hw/virtio.h
b/hw/virtio.h | ||
---|---|---|
15 | 15 |
#define _QEMU_VIRTIO_H |
16 | 16 |
|
17 | 17 |
#include "hw.h" |
18 |
#include "pci.h"
|
|
18 |
#include "qdev.h"
|
|
19 | 19 |
|
20 | 20 |
/* from Linux's linux/virtio_config.h */ |
21 | 21 |
|
... | ... | |
70 | 70 |
struct iovec out_sg[VIRTQUEUE_MAX_SIZE]; |
71 | 71 |
} VirtQueueElement; |
72 | 72 |
|
73 |
typedef struct { |
|
74 |
void (*update_irq)(void * opaque); |
|
75 |
} VirtIOBindings; |
|
76 |
|
|
73 | 77 |
#define VIRTIO_PCI_QUEUE_MAX 16 |
74 | 78 |
|
75 | 79 |
struct VirtIODevice |
76 | 80 |
{ |
77 |
PCIDevice pci_dev; |
|
78 | 81 |
const char *name; |
79 |
uint32_t addr; |
|
80 | 82 |
uint8_t status; |
81 | 83 |
uint8_t isr; |
82 | 84 |
uint16_t queue_sel; |
... | ... | |
90 | 92 |
void (*set_config)(VirtIODevice *vdev, const uint8_t *config); |
91 | 93 |
void (*reset)(VirtIODevice *vdev); |
92 | 94 |
VirtQueue *vq; |
95 |
const VirtIOBindings *binding; |
|
96 |
void *binding_opaque; |
|
97 |
uint16_t device_id; |
|
93 | 98 |
}; |
94 | 99 |
|
95 |
VirtIODevice *virtio_init_pci(PCIDevice *pci_dev, const char *name, |
|
96 |
uint16_t vendor, uint16_t device, |
|
97 |
uint16_t subvendor, uint16_t subdevice, |
|
98 |
uint16_t class_code, uint8_t pif, |
|
99 |
size_t config_size); |
|
100 |
|
|
101 | 100 |
VirtQueue *virtio_add_queue(VirtIODevice *vdev, int queue_size, |
102 | 101 |
void (*handle_output)(VirtIODevice *, |
103 | 102 |
VirtQueue *)); |
... | ... | |
127 | 126 |
|
128 | 127 |
int virtio_queue_empty(VirtQueue *vq); |
129 | 128 |
|
129 |
/* Host binding interface. */ |
|
130 |
|
|
131 |
VirtIODevice *virtio_common_init(const char *name, uint16_t device_id, |
|
132 |
size_t config_size, size_t struct_size); |
|
133 |
uint32_t virtio_config_readb(VirtIODevice *vdev, uint32_t addr); |
|
134 |
uint32_t virtio_config_readw(VirtIODevice *vdev, uint32_t addr); |
|
135 |
uint32_t virtio_config_readl(VirtIODevice *vdev, uint32_t addr); |
|
136 |
void virtio_config_writeb(VirtIODevice *vdev, uint32_t addr, uint32_t data); |
|
137 |
void virtio_config_writew(VirtIODevice *vdev, uint32_t addr, uint32_t data); |
|
138 |
void virtio_config_writel(VirtIODevice *vdev, uint32_t addr, uint32_t data); |
|
139 |
void virtio_queue_set_addr(VirtIODevice *vdev, int n, target_phys_addr_t addr); |
|
140 |
target_phys_addr_t virtio_queue_get_addr(VirtIODevice *vdev, int n); |
|
141 |
int virtio_queue_get_num(VirtIODevice *vdev, int n); |
|
142 |
void virtio_queue_notify(VirtIODevice *vdev, int n); |
|
143 |
void virtio_reset(void *opaque); |
|
144 |
void virtio_update_irq(VirtIODevice *vdev); |
|
145 |
|
|
146 |
void virtio_bind_device(VirtIODevice *vdev, const VirtIOBindings *binding, |
|
147 |
void *opaque); |
|
148 |
|
|
149 |
/* Base devices. */ |
|
150 |
VirtIODevice *virtio_blk_init(DeviceState *dev); |
|
151 |
VirtIODevice *virtio_net_init(DeviceState *dev); |
|
152 |
VirtIODevice *virtio_console_init(DeviceState *dev); |
|
153 |
VirtIODevice *virtio_balloon_init(DeviceState *dev); |
|
154 |
|
|
130 | 155 |
#endif |
Also available in: Unified diff