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