]> git.proxmox.com Git - mirror_qemu.git/blame - hw/virtio/virtio-pci.h
virtio-pci: fix migration for pci bus master
[mirror_qemu.git] / hw / virtio / virtio-pci.h
CommitLineData
9fe1ebeb
AK
1/*
2 * Virtio PCI Bindings
3 *
4 * Copyright IBM, Corp. 2007
5 * Copyright (c) 2009 CodeSourcery
6 *
7 * Authors:
8 * Anthony Liguori <aliguori@us.ibm.com>
9 * Paul Brook <paul@codesourcery.com>
10 *
11 * This work is licensed under the terms of the GNU GPL, version 2. See
12 * the COPYING file in the top-level directory.
13 */
14
15#ifndef QEMU_VIRTIO_PCI_H
16#define QEMU_VIRTIO_PCI_H
17
cf7c3f0c 18#include "hw/pci/msi.h"
0d09e41a
PB
19#include "hw/virtio/virtio-blk.h"
20#include "hw/virtio/virtio-net.h"
21#include "hw/virtio/virtio-rng.h"
22#include "hw/virtio/virtio-serial.h"
23#include "hw/virtio/virtio-scsi.h"
24#include "hw/virtio/virtio-balloon.h"
25#include "hw/virtio/virtio-bus.h"
26#include "hw/virtio/virtio-9p.h"
234a336f
FK
27#ifdef CONFIG_VIRTFS
28#include "hw/9pfs/virtio-9p.h"
29#endif
50787628
NB
30#ifdef CONFIG_VHOST_SCSI
31#include "hw/virtio/vhost-scsi.h"
32#endif
0a2acf5e 33
085bccb7 34typedef struct VirtIOPCIProxy VirtIOPCIProxy;
653ced07 35typedef struct VirtIOBlkPCI VirtIOBlkPCI;
bc7b90a0 36typedef struct VirtIOSCSIPCI VirtIOSCSIPCI;
e378e88d 37typedef struct VirtIOBalloonPCI VirtIOBalloonPCI;
f7f7464a 38typedef struct VirtIOSerialPCI VirtIOSerialPCI;
e37da394 39typedef struct VirtIONetPCI VirtIONetPCI;
50787628 40typedef struct VHostSCSIPCI VHostSCSIPCI;
59ccd20a 41typedef struct VirtIORngPCI VirtIORngPCI;
085bccb7 42
0a2acf5e
FK
43/* virtio-pci-bus */
44
45typedef struct VirtioBusState VirtioPCIBusState;
46typedef struct VirtioBusClass VirtioPCIBusClass;
47
48#define TYPE_VIRTIO_PCI_BUS "virtio-pci-bus"
49#define VIRTIO_PCI_BUS(obj) \
50 OBJECT_CHECK(VirtioPCIBusState, (obj), TYPE_VIRTIO_PCI_BUS)
51#define VIRTIO_PCI_BUS_GET_CLASS(obj) \
52 OBJECT_GET_CLASS(VirtioPCIBusClass, obj, TYPE_VIRTIO_PCI_BUS)
53#define VIRTIO_PCI_BUS_CLASS(klass) \
54 OBJECT_CLASS_CHECK(VirtioPCIBusClass, klass, TYPE_VIRTIO_PCI_BUS)
9fe1ebeb 55
68a27b20
MT
56/* Need to activate work-arounds for buggy guests at vmstate load. */
57#define VIRTIO_PCI_FLAG_BUS_MASTER_BUG_MIGRATION_BIT 0
58#define VIRTIO_PCI_FLAG_BUS_MASTER_BUG_MIGRATION \
59 (1 << VIRTIO_PCI_FLAG_BUS_MASTER_BUG_MIGRATION_BIT)
60
5745e38a
AK
61/* Performance improves when virtqueue kick processing is decoupled from the
62 * vcpu thread using ioeventfd for some devices. */
63#define VIRTIO_PCI_FLAG_USE_IOEVENTFD_BIT 1
64#define VIRTIO_PCI_FLAG_USE_IOEVENTFD (1 << VIRTIO_PCI_FLAG_USE_IOEVENTFD_BIT)
65
7d37d351 66typedef struct {
774345f9 67 MSIMessage msg;
7d37d351
JK
68 int virq;
69 unsigned int users;
70} VirtIOIRQFD;
71
085bccb7
FK
72/*
73 * virtio-pci: This is the PCIDevice which has a virtio-pci-bus.
74 */
75#define TYPE_VIRTIO_PCI "virtio-pci"
76#define VIRTIO_PCI_GET_CLASS(obj) \
77 OBJECT_GET_CLASS(VirtioPCIClass, obj, TYPE_VIRTIO_PCI)
78#define VIRTIO_PCI_CLASS(klass) \
79 OBJECT_CLASS_CHECK(VirtioPCIClass, klass, TYPE_VIRTIO_PCI)
80#define VIRTIO_PCI(obj) \
81 OBJECT_CHECK(VirtIOPCIProxy, (obj), TYPE_VIRTIO_PCI)
82
83typedef struct VirtioPCIClass {
84 PCIDeviceClass parent_class;
85 int (*init)(VirtIOPCIProxy *vpci_dev);
86} VirtioPCIClass;
87
88struct VirtIOPCIProxy {
9fe1ebeb 89 PCIDevice pci_dev;
da146d0a 90 MemoryRegion bar;
9fe1ebeb 91 uint32_t flags;
9fe1ebeb
AK
92 uint32_t class_code;
93 uint32_t nvectors;
9fe1ebeb 94 uint32_t host_features;
9fe1ebeb
AK
95 bool ioeventfd_disabled;
96 bool ioeventfd_started;
7d37d351 97 VirtIOIRQFD *vector_irqfd;
2d620f59 98 int nvqs_with_notifiers;
085bccb7
FK
99 VirtioBusState bus;
100};
9fe1ebeb 101
bc7b90a0
FK
102
103/*
104 * virtio-scsi-pci: This extends VirtioPCIProxy.
105 */
106#define TYPE_VIRTIO_SCSI_PCI "virtio-scsi-pci"
107#define VIRTIO_SCSI_PCI(obj) \
108 OBJECT_CHECK(VirtIOSCSIPCI, (obj), TYPE_VIRTIO_SCSI_PCI)
109
110struct VirtIOSCSIPCI {
111 VirtIOPCIProxy parent_obj;
112 VirtIOSCSI vdev;
113};
114
50787628
NB
115#ifdef CONFIG_VHOST_SCSI
116/*
117 * vhost-scsi-pci: This extends VirtioPCIProxy.
118 */
119#define TYPE_VHOST_SCSI_PCI "vhost-scsi-pci"
120#define VHOST_SCSI_PCI(obj) \
121 OBJECT_CHECK(VHostSCSIPCI, (obj), TYPE_VHOST_SCSI_PCI)
122
123struct VHostSCSIPCI {
124 VirtIOPCIProxy parent_obj;
125 VHostSCSI vdev;
126};
127#endif
128
653ced07
FK
129/*
130 * virtio-blk-pci: This extends VirtioPCIProxy.
131 */
132#define TYPE_VIRTIO_BLK_PCI "virtio-blk-pci"
133#define VIRTIO_BLK_PCI(obj) \
134 OBJECT_CHECK(VirtIOBlkPCI, (obj), TYPE_VIRTIO_BLK_PCI)
135
136struct VirtIOBlkPCI {
137 VirtIOPCIProxy parent_obj;
138 VirtIOBlock vdev;
653ced07
FK
139};
140
e378e88d
FK
141/*
142 * virtio-balloon-pci: This extends VirtioPCIProxy.
143 */
144#define TYPE_VIRTIO_BALLOON_PCI "virtio-balloon-pci"
145#define VIRTIO_BALLOON_PCI(obj) \
146 OBJECT_CHECK(VirtIOBalloonPCI, (obj), TYPE_VIRTIO_BALLOON_PCI)
147
148struct VirtIOBalloonPCI {
149 VirtIOPCIProxy parent_obj;
150 VirtIOBalloon vdev;
151};
152
f7f7464a
FK
153/*
154 * virtio-serial-pci: This extends VirtioPCIProxy.
155 */
156#define TYPE_VIRTIO_SERIAL_PCI "virtio-serial-pci"
157#define VIRTIO_SERIAL_PCI(obj) \
158 OBJECT_CHECK(VirtIOSerialPCI, (obj), TYPE_VIRTIO_SERIAL_PCI)
159
160struct VirtIOSerialPCI {
161 VirtIOPCIProxy parent_obj;
162 VirtIOSerial vdev;
163};
164
e37da394
FK
165/*
166 * virtio-net-pci: This extends VirtioPCIProxy.
167 */
168#define TYPE_VIRTIO_NET_PCI "virtio-net-pci"
169#define VIRTIO_NET_PCI(obj) \
170 OBJECT_CHECK(VirtIONetPCI, (obj), TYPE_VIRTIO_NET_PCI)
171
172struct VirtIONetPCI {
173 VirtIOPCIProxy parent_obj;
174 VirtIONet vdev;
175};
176
234a336f
FK
177/*
178 * virtio-9p-pci: This extends VirtioPCIProxy.
179 */
180
181#ifdef CONFIG_VIRTFS
182
183#define TYPE_VIRTIO_9P_PCI "virtio-9p-pci"
184#define VIRTIO_9P_PCI(obj) \
185 OBJECT_CHECK(V9fsPCIState, (obj), TYPE_VIRTIO_9P_PCI)
186
187typedef struct V9fsPCIState {
188 VirtIOPCIProxy parent_obj;
189 V9fsState vdev;
190} V9fsPCIState;
191
192#endif
193
59ccd20a
FK
194/*
195 * virtio-rng-pci: This extends VirtioPCIProxy.
196 */
197#define TYPE_VIRTIO_RNG_PCI "virtio-rng-pci"
198#define VIRTIO_RNG_PCI(obj) \
199 OBJECT_CHECK(VirtIORngPCI, (obj), TYPE_VIRTIO_RNG_PCI)
200
201struct VirtIORngPCI {
202 VirtIOPCIProxy parent_obj;
203 VirtIORNG vdev;
204};
205
befeac45
MT
206/* Virtio ABI version, if we increment this, we break the guest driver. */
207#define VIRTIO_PCI_ABI_VERSION 0
208
9fe1ebeb 209#endif