qemu/hw/virtio/virtio-pci.c
<<
>>
Prefs
   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 * Contributions after 2012-01-13 are licensed under the terms of the
  15 * GNU GPL, version 2 or (at your option) any later version.
  16 */
  17
  18#include "qemu/osdep.h"
  19
  20#include "standard-headers/linux/virtio_pci.h"
  21#include "hw/virtio/virtio.h"
  22#include "hw/virtio/virtio-blk.h"
  23#include "hw/virtio/virtio-net.h"
  24#include "hw/virtio/virtio-serial.h"
  25#include "hw/virtio/virtio-scsi.h"
  26#include "hw/virtio/virtio-balloon.h"
  27#include "hw/virtio/virtio-input.h"
  28#include "hw/pci/pci.h"
  29#include "qapi/error.h"
  30#include "qemu/error-report.h"
  31#include "hw/pci/msi.h"
  32#include "hw/pci/msix.h"
  33#include "hw/loader.h"
  34#include "sysemu/kvm.h"
  35#include "sysemu/block-backend.h"
  36#include "virtio-pci.h"
  37#include "qemu/range.h"
  38#include "hw/virtio/virtio-bus.h"
  39#include "qapi/visitor.h"
  40
  41#define VIRTIO_PCI_REGION_SIZE(dev)     VIRTIO_PCI_CONFIG_OFF(msix_present(dev))
  42
  43#undef VIRTIO_PCI_CONFIG
  44
  45/* The remaining space is defined by each driver as the per-driver
  46 * configuration space */
  47#define VIRTIO_PCI_CONFIG_SIZE(dev)     VIRTIO_PCI_CONFIG_OFF(msix_enabled(dev))
  48
  49static void virtio_pci_bus_new(VirtioBusState *bus, size_t bus_size,
  50                               VirtIOPCIProxy *dev);
  51static void virtio_pci_reset(DeviceState *qdev);
  52
  53/* virtio device */
  54/* DeviceState to VirtIOPCIProxy. For use off data-path. TODO: use QOM. */
  55static inline VirtIOPCIProxy *to_virtio_pci_proxy(DeviceState *d)
  56{
  57    return container_of(d, VirtIOPCIProxy, pci_dev.qdev);
  58}
  59
  60/* DeviceState to VirtIOPCIProxy. Note: used on datapath,
  61 * be careful and test performance if you change this.
  62 */
  63static inline VirtIOPCIProxy *to_virtio_pci_proxy_fast(DeviceState *d)
  64{
  65    return container_of(d, VirtIOPCIProxy, pci_dev.qdev);
  66}
  67
  68static void virtio_pci_notify(DeviceState *d, uint16_t vector)
  69{
  70    VirtIOPCIProxy *proxy = to_virtio_pci_proxy_fast(d);
  71
  72    if (msix_enabled(&proxy->pci_dev))
  73        msix_notify(&proxy->pci_dev, vector);
  74    else {
  75        VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus);
  76        pci_set_irq(&proxy->pci_dev, atomic_read(&vdev->isr) & 1);
  77    }
  78}
  79
  80static void virtio_pci_save_config(DeviceState *d, QEMUFile *f)
  81{
  82    VirtIOPCIProxy *proxy = to_virtio_pci_proxy(d);
  83    VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus);
  84
  85    pci_device_save(&proxy->pci_dev, f);
  86    msix_save(&proxy->pci_dev, f);
  87    if (msix_present(&proxy->pci_dev))
  88        qemu_put_be16(f, vdev->config_vector);
  89}
  90
  91static void virtio_pci_load_modern_queue_state(VirtIOPCIQueue *vq,
  92                                               QEMUFile *f)
  93{
  94    vq->num = qemu_get_be16(f);
  95    vq->enabled = qemu_get_be16(f);
  96    vq->desc[0] = qemu_get_be32(f);
  97    vq->desc[1] = qemu_get_be32(f);
  98    vq->avail[0] = qemu_get_be32(f);
  99    vq->avail[1] = qemu_get_be32(f);
 100    vq->used[0] = qemu_get_be32(f);
 101    vq->used[1] = qemu_get_be32(f);
 102}
 103
 104static bool virtio_pci_has_extra_state(DeviceState *d)
 105{
 106    VirtIOPCIProxy *proxy = to_virtio_pci_proxy(d);
 107
 108    return proxy->flags & VIRTIO_PCI_FLAG_MIGRATE_EXTRA;
 109}
 110
 111static int get_virtio_pci_modern_state(QEMUFile *f, void *pv, size_t size)
 112{
 113    VirtIOPCIProxy *proxy = pv;
 114    int i;
 115
 116    proxy->dfselect = qemu_get_be32(f);
 117    proxy->gfselect = qemu_get_be32(f);
 118    proxy->guest_features[0] = qemu_get_be32(f);
 119    proxy->guest_features[1] = qemu_get_be32(f);
 120    for (i = 0; i < VIRTIO_QUEUE_MAX; i++) {
 121        virtio_pci_load_modern_queue_state(&proxy->vqs[i], f);
 122    }
 123
 124    return 0;
 125}
 126
 127static void virtio_pci_save_modern_queue_state(VirtIOPCIQueue *vq,
 128                                               QEMUFile *f)
 129{
 130    qemu_put_be16(f, vq->num);
 131    qemu_put_be16(f, vq->enabled);
 132    qemu_put_be32(f, vq->desc[0]);
 133    qemu_put_be32(f, vq->desc[1]);
 134    qemu_put_be32(f, vq->avail[0]);
 135    qemu_put_be32(f, vq->avail[1]);
 136    qemu_put_be32(f, vq->used[0]);
 137    qemu_put_be32(f, vq->used[1]);
 138}
 139
 140static void put_virtio_pci_modern_state(QEMUFile *f, void *pv, size_t size)
 141{
 142    VirtIOPCIProxy *proxy = pv;
 143    int i;
 144
 145    qemu_put_be32(f, proxy->dfselect);
 146    qemu_put_be32(f, proxy->gfselect);
 147    qemu_put_be32(f, proxy->guest_features[0]);
 148    qemu_put_be32(f, proxy->guest_features[1]);
 149    for (i = 0; i < VIRTIO_QUEUE_MAX; i++) {
 150        virtio_pci_save_modern_queue_state(&proxy->vqs[i], f);
 151    }
 152}
 153
 154static const VMStateInfo vmstate_info_virtio_pci_modern_state = {
 155    .name = "virtqueue_state",
 156    .get = get_virtio_pci_modern_state,
 157    .put = put_virtio_pci_modern_state,
 158};
 159
 160static bool virtio_pci_modern_state_needed(void *opaque)
 161{
 162    VirtIOPCIProxy *proxy = opaque;
 163
 164    return virtio_pci_modern(proxy);
 165}
 166
 167static const VMStateDescription vmstate_virtio_pci_modern_state = {
 168    .name = "virtio_pci/modern_state",
 169    .version_id = 1,
 170    .minimum_version_id = 1,
 171    .needed = &virtio_pci_modern_state_needed,
 172    .fields = (VMStateField[]) {
 173        {
 174            .name         = "modern_state",
 175            .version_id   = 0,
 176            .field_exists = NULL,
 177            .size         = 0,
 178            .info         = &vmstate_info_virtio_pci_modern_state,
 179            .flags        = VMS_SINGLE,
 180            .offset       = 0,
 181        },
 182        VMSTATE_END_OF_LIST()
 183    }
 184};
 185
 186static const VMStateDescription vmstate_virtio_pci = {
 187    .name = "virtio_pci",
 188    .version_id = 1,
 189    .minimum_version_id = 1,
 190    .minimum_version_id_old = 1,
 191    .fields = (VMStateField[]) {
 192        VMSTATE_END_OF_LIST()
 193    },
 194    .subsections = (const VMStateDescription*[]) {
 195        &vmstate_virtio_pci_modern_state,
 196        NULL
 197    }
 198};
 199
 200static void virtio_pci_save_extra_state(DeviceState *d, QEMUFile *f)
 201{
 202    VirtIOPCIProxy *proxy = to_virtio_pci_proxy(d);
 203
 204    vmstate_save_state(f, &vmstate_virtio_pci, proxy, NULL);
 205}
 206
 207static int virtio_pci_load_extra_state(DeviceState *d, QEMUFile *f)
 208{
 209    VirtIOPCIProxy *proxy = to_virtio_pci_proxy(d);
 210
 211    return vmstate_load_state(f, &vmstate_virtio_pci, proxy, 1);
 212}
 213
 214static void virtio_pci_save_queue(DeviceState *d, int n, QEMUFile *f)
 215{
 216    VirtIOPCIProxy *proxy = to_virtio_pci_proxy(d);
 217    VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus);
 218
 219    if (msix_present(&proxy->pci_dev))
 220        qemu_put_be16(f, virtio_queue_vector(vdev, n));
 221}
 222
 223static int virtio_pci_load_config(DeviceState *d, QEMUFile *f)
 224{
 225    VirtIOPCIProxy *proxy = to_virtio_pci_proxy(d);
 226    VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus);
 227
 228    int ret;
 229    ret = pci_device_load(&proxy->pci_dev, f);
 230    if (ret) {
 231        return ret;
 232    }
 233    msix_unuse_all_vectors(&proxy->pci_dev);
 234    msix_load(&proxy->pci_dev, f);
 235    if (msix_present(&proxy->pci_dev)) {
 236        qemu_get_be16s(f, &vdev->config_vector);
 237    } else {
 238        vdev->config_vector = VIRTIO_NO_VECTOR;
 239    }
 240    if (vdev->config_vector != VIRTIO_NO_VECTOR) {
 241        return msix_vector_use(&proxy->pci_dev, vdev->config_vector);
 242    }
 243    return 0;
 244}
 245
 246static int virtio_pci_load_queue(DeviceState *d, int n, QEMUFile *f)
 247{
 248    VirtIOPCIProxy *proxy = to_virtio_pci_proxy(d);
 249    VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus);
 250
 251    uint16_t vector;
 252    if (msix_present(&proxy->pci_dev)) {
 253        qemu_get_be16s(f, &vector);
 254    } else {
 255        vector = VIRTIO_NO_VECTOR;
 256    }
 257    virtio_queue_set_vector(vdev, n, vector);
 258    if (vector != VIRTIO_NO_VECTOR) {
 259        return msix_vector_use(&proxy->pci_dev, vector);
 260    }
 261
 262    return 0;
 263}
 264
 265static bool virtio_pci_ioeventfd_enabled(DeviceState *d)
 266{
 267    VirtIOPCIProxy *proxy = to_virtio_pci_proxy(d);
 268
 269    return (proxy->flags & VIRTIO_PCI_FLAG_USE_IOEVENTFD) != 0;
 270}
 271
 272#define QEMU_VIRTIO_PCI_QUEUE_MEM_MULT 0x1000
 273
 274static inline int virtio_pci_queue_mem_mult(struct VirtIOPCIProxy *proxy)
 275{
 276    return (proxy->flags & VIRTIO_PCI_FLAG_PAGE_PER_VQ) ?
 277        QEMU_VIRTIO_PCI_QUEUE_MEM_MULT : 4;
 278}
 279
 280static int virtio_pci_ioeventfd_assign(DeviceState *d, EventNotifier *notifier,
 281                                       int n, bool assign)
 282{
 283    VirtIOPCIProxy *proxy = to_virtio_pci_proxy(d);
 284    VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus);
 285    VirtQueue *vq = virtio_get_queue(vdev, n);
 286    bool legacy = virtio_pci_legacy(proxy);
 287    bool modern = virtio_pci_modern(proxy);
 288    bool fast_mmio = kvm_ioeventfd_any_length_enabled();
 289    bool modern_pio = proxy->flags & VIRTIO_PCI_FLAG_MODERN_PIO_NOTIFY;
 290    MemoryRegion *modern_mr = &proxy->notify.mr;
 291    MemoryRegion *modern_notify_mr = &proxy->notify_pio.mr;
 292    MemoryRegion *legacy_mr = &proxy->bar;
 293    hwaddr modern_addr = virtio_pci_queue_mem_mult(proxy) *
 294                         virtio_get_queue_index(vq);
 295    hwaddr legacy_addr = VIRTIO_PCI_QUEUE_NOTIFY;
 296
 297    if (assign) {
 298        if (modern) {
 299            if (fast_mmio) {
 300                memory_region_add_eventfd(modern_mr, modern_addr, 0,
 301                                          false, n, notifier);
 302            } else {
 303                memory_region_add_eventfd(modern_mr, modern_addr, 2,
 304                                          false, n, notifier);
 305            }
 306            if (modern_pio) {
 307                memory_region_add_eventfd(modern_notify_mr, 0, 2,
 308                                              true, n, notifier);
 309            }
 310        }
 311        if (legacy) {
 312            memory_region_add_eventfd(legacy_mr, legacy_addr, 2,
 313                                      true, n, notifier);
 314        }
 315    } else {
 316        if (modern) {
 317            if (fast_mmio) {
 318                memory_region_del_eventfd(modern_mr, modern_addr, 0,
 319                                          false, n, notifier);
 320            } else {
 321                memory_region_del_eventfd(modern_mr, modern_addr, 2,
 322                                          false, n, notifier);
 323            }
 324            if (modern_pio) {
 325                memory_region_del_eventfd(modern_notify_mr, 0, 2,
 326                                          true, n, notifier);
 327            }
 328        }
 329        if (legacy) {
 330            memory_region_del_eventfd(legacy_mr, legacy_addr, 2,
 331                                      true, n, notifier);
 332        }
 333    }
 334    return 0;
 335}
 336
 337static void virtio_pci_start_ioeventfd(VirtIOPCIProxy *proxy)
 338{
 339    virtio_bus_start_ioeventfd(&proxy->bus);
 340}
 341
 342static void virtio_pci_stop_ioeventfd(VirtIOPCIProxy *proxy)
 343{
 344    virtio_bus_stop_ioeventfd(&proxy->bus);
 345}
 346
 347static void virtio_ioport_write(void *opaque, uint32_t addr, uint32_t val)
 348{
 349    VirtIOPCIProxy *proxy = opaque;
 350    VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus);
 351    hwaddr pa;
 352
 353    switch (addr) {
 354    case VIRTIO_PCI_GUEST_FEATURES:
 355        /* Guest does not negotiate properly?  We have to assume nothing. */
 356        if (val & (1 << VIRTIO_F_BAD_FEATURE)) {
 357            val = virtio_bus_get_vdev_bad_features(&proxy->bus);
 358        }
 359        virtio_set_features(vdev, val);
 360        break;
 361    case VIRTIO_PCI_QUEUE_PFN:
 362        pa = (hwaddr)val << VIRTIO_PCI_QUEUE_ADDR_SHIFT;
 363        if (pa == 0) {
 364            virtio_pci_reset(DEVICE(proxy));
 365        }
 366        else
 367            virtio_queue_set_addr(vdev, vdev->queue_sel, pa);
 368        break;
 369    case VIRTIO_PCI_QUEUE_SEL:
 370        if (val < VIRTIO_QUEUE_MAX)
 371            vdev->queue_sel = val;
 372        break;
 373    case VIRTIO_PCI_QUEUE_NOTIFY:
 374        if (val < VIRTIO_QUEUE_MAX) {
 375            virtio_queue_notify(vdev, val);
 376        }
 377        break;
 378    case VIRTIO_PCI_STATUS:
 379        if (!(val & VIRTIO_CONFIG_S_DRIVER_OK)) {
 380            virtio_pci_stop_ioeventfd(proxy);
 381        }
 382
 383        virtio_set_status(vdev, val & 0xFF);
 384
 385        if (val & VIRTIO_CONFIG_S_DRIVER_OK) {
 386            virtio_pci_start_ioeventfd(proxy);
 387        }
 388
 389        if (vdev->status == 0) {
 390            virtio_pci_reset(DEVICE(proxy));
 391        }
 392
 393        /* Linux before 2.6.34 drives the device without enabling
 394           the PCI device bus master bit. Enable it automatically
 395           for the guest. This is a PCI spec violation but so is
 396           initiating DMA with bus master bit clear. */
 397        if (val == (VIRTIO_CONFIG_S_ACKNOWLEDGE | VIRTIO_CONFIG_S_DRIVER)) {
 398            pci_default_write_config(&proxy->pci_dev, PCI_COMMAND,
 399                                     proxy->pci_dev.config[PCI_COMMAND] |
 400                                     PCI_COMMAND_MASTER, 1);
 401        }
 402        break;
 403    case VIRTIO_MSI_CONFIG_VECTOR:
 404        msix_vector_unuse(&proxy->pci_dev, vdev->config_vector);
 405        /* Make it possible for guest to discover an error took place. */
 406        if (msix_vector_use(&proxy->pci_dev, val) < 0)
 407            val = VIRTIO_NO_VECTOR;
 408        vdev->config_vector = val;
 409        break;
 410    case VIRTIO_MSI_QUEUE_VECTOR:
 411        msix_vector_unuse(&proxy->pci_dev,
 412                          virtio_queue_vector(vdev, vdev->queue_sel));
 413        /* Make it possible for guest to discover an error took place. */
 414        if (msix_vector_use(&proxy->pci_dev, val) < 0)
 415            val = VIRTIO_NO_VECTOR;
 416        virtio_queue_set_vector(vdev, vdev->queue_sel, val);
 417        break;
 418    default:
 419        error_report("%s: unexpected address 0x%x value 0x%x",
 420                     __func__, addr, val);
 421        break;
 422    }
 423}
 424
 425static uint32_t virtio_ioport_read(VirtIOPCIProxy *proxy, uint32_t addr)
 426{
 427    VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus);
 428    uint32_t ret = 0xFFFFFFFF;
 429
 430    switch (addr) {
 431    case VIRTIO_PCI_HOST_FEATURES:
 432        ret = vdev->host_features;
 433        break;
 434    case VIRTIO_PCI_GUEST_FEATURES:
 435        ret = vdev->guest_features;
 436        break;
 437    case VIRTIO_PCI_QUEUE_PFN:
 438        ret = virtio_queue_get_addr(vdev, vdev->queue_sel)
 439              >> VIRTIO_PCI_QUEUE_ADDR_SHIFT;
 440        break;
 441    case VIRTIO_PCI_QUEUE_NUM:
 442        ret = virtio_queue_get_num(vdev, vdev->queue_sel);
 443        break;
 444    case VIRTIO_PCI_QUEUE_SEL:
 445        ret = vdev->queue_sel;
 446        break;
 447    case VIRTIO_PCI_STATUS:
 448        ret = vdev->status;
 449        break;
 450    case VIRTIO_PCI_ISR:
 451        /* reading from the ISR also clears it. */
 452        ret = atomic_xchg(&vdev->isr, 0);
 453        pci_irq_deassert(&proxy->pci_dev);
 454        break;
 455    case VIRTIO_MSI_CONFIG_VECTOR:
 456        ret = vdev->config_vector;
 457        break;
 458    case VIRTIO_MSI_QUEUE_VECTOR:
 459        ret = virtio_queue_vector(vdev, vdev->queue_sel);
 460        break;
 461    default:
 462        break;
 463    }
 464
 465    return ret;
 466}
 467
 468static uint64_t virtio_pci_config_read(void *opaque, hwaddr addr,
 469                                       unsigned size)
 470{
 471    VirtIOPCIProxy *proxy = opaque;
 472    VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus);
 473    uint32_t config = VIRTIO_PCI_CONFIG_SIZE(&proxy->pci_dev);
 474    uint64_t val = 0;
 475    if (addr < config) {
 476        return virtio_ioport_read(proxy, addr);
 477    }
 478    addr -= config;
 479
 480    switch (size) {
 481    case 1:
 482        val = virtio_config_readb(vdev, addr);
 483        break;
 484    case 2:
 485        val = virtio_config_readw(vdev, addr);
 486        if (virtio_is_big_endian(vdev)) {
 487            val = bswap16(val);
 488        }
 489        break;
 490    case 4:
 491        val = virtio_config_readl(vdev, addr);
 492        if (virtio_is_big_endian(vdev)) {
 493            val = bswap32(val);
 494        }
 495        break;
 496    }
 497    return val;
 498}
 499
 500static void virtio_pci_config_write(void *opaque, hwaddr addr,
 501                                    uint64_t val, unsigned size)
 502{
 503    VirtIOPCIProxy *proxy = opaque;
 504    uint32_t config = VIRTIO_PCI_CONFIG_SIZE(&proxy->pci_dev);
 505    VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus);
 506    if (addr < config) {
 507        virtio_ioport_write(proxy, addr, val);
 508        return;
 509    }
 510    addr -= config;
 511    /*
 512     * Virtio-PCI is odd. Ioports are LE but config space is target native
 513     * endian.
 514     */
 515    switch (size) {
 516    case 1:
 517        virtio_config_writeb(vdev, addr, val);
 518        break;
 519    case 2:
 520        if (virtio_is_big_endian(vdev)) {
 521            val = bswap16(val);
 522        }
 523        virtio_config_writew(vdev, addr, val);
 524        break;
 525    case 4:
 526        if (virtio_is_big_endian(vdev)) {
 527            val = bswap32(val);
 528        }
 529        virtio_config_writel(vdev, addr, val);
 530        break;
 531    }
 532}
 533
 534static const MemoryRegionOps virtio_pci_config_ops = {
 535    .read = virtio_pci_config_read,
 536    .write = virtio_pci_config_write,
 537    .impl = {
 538        .min_access_size = 1,
 539        .max_access_size = 4,
 540    },
 541    .endianness = DEVICE_LITTLE_ENDIAN,
 542};
 543
 544/* Below are generic functions to do memcpy from/to an address space,
 545 * without byteswaps, with input validation.
 546 *
 547 * As regular address_space_* APIs all do some kind of byteswap at least for
 548 * some host/target combinations, we are forced to explicitly convert to a
 549 * known-endianness integer value.
 550 * It doesn't really matter which endian format to go through, so the code
 551 * below selects the endian that causes the least amount of work on the given
 552 * host.
 553 *
 554 * Note: host pointer must be aligned.
 555 */
 556static
 557void virtio_address_space_write(AddressSpace *as, hwaddr addr,
 558                                const uint8_t *buf, int len)
 559{
 560    uint32_t val;
 561
 562    /* address_space_* APIs assume an aligned address.
 563     * As address is under guest control, handle illegal values.
 564     */
 565    addr &= ~(len - 1);
 566
 567    /* Make sure caller aligned buf properly */
 568    assert(!(((uintptr_t)buf) & (len - 1)));
 569
 570    switch (len) {
 571    case 1:
 572        val = pci_get_byte(buf);
 573        address_space_stb(as, addr, val, MEMTXATTRS_UNSPECIFIED, NULL);
 574        break;
 575    case 2:
 576        val = pci_get_word(buf);
 577        address_space_stw_le(as, addr, val, MEMTXATTRS_UNSPECIFIED, NULL);
 578        break;
 579    case 4:
 580        val = pci_get_long(buf);
 581        address_space_stl_le(as, addr, val, MEMTXATTRS_UNSPECIFIED, NULL);
 582        break;
 583    default:
 584        /* As length is under guest control, handle illegal values. */
 585        break;
 586    }
 587}
 588
 589static void
 590virtio_address_space_read(AddressSpace *as, hwaddr addr, uint8_t *buf, int len)
 591{
 592    uint32_t val;
 593
 594    /* address_space_* APIs assume an aligned address.
 595     * As address is under guest control, handle illegal values.
 596     */
 597    addr &= ~(len - 1);
 598
 599    /* Make sure caller aligned buf properly */
 600    assert(!(((uintptr_t)buf) & (len - 1)));
 601
 602    switch (len) {
 603    case 1:
 604        val = address_space_ldub(as, addr, MEMTXATTRS_UNSPECIFIED, NULL);
 605        pci_set_byte(buf, val);
 606        break;
 607    case 2:
 608        val = address_space_lduw_le(as, addr, MEMTXATTRS_UNSPECIFIED, NULL);
 609        pci_set_word(buf, val);
 610        break;
 611    case 4:
 612        val = address_space_ldl_le(as, addr, MEMTXATTRS_UNSPECIFIED, NULL);
 613        pci_set_long(buf, val);
 614        break;
 615    default:
 616        /* As length is under guest control, handle illegal values. */
 617        break;
 618    }
 619}
 620
 621static void virtio_write_config(PCIDevice *pci_dev, uint32_t address,
 622                                uint32_t val, int len)
 623{
 624    VirtIOPCIProxy *proxy = DO_UPCAST(VirtIOPCIProxy, pci_dev, pci_dev);
 625    VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus);
 626    struct virtio_pci_cfg_cap *cfg;
 627
 628    pci_default_write_config(pci_dev, address, val, len);
 629
 630    if (range_covers_byte(address, len, PCI_COMMAND) &&
 631        !(pci_dev->config[PCI_COMMAND] & PCI_COMMAND_MASTER)) {
 632        virtio_pci_stop_ioeventfd(proxy);
 633        virtio_set_status(vdev, vdev->status & ~VIRTIO_CONFIG_S_DRIVER_OK);
 634    }
 635
 636    if (proxy->config_cap &&
 637        ranges_overlap(address, len, proxy->config_cap + offsetof(struct virtio_pci_cfg_cap,
 638                                                                  pci_cfg_data),
 639                       sizeof cfg->pci_cfg_data)) {
 640        uint32_t off;
 641        uint32_t len;
 642
 643        cfg = (void *)(proxy->pci_dev.config + proxy->config_cap);
 644        off = le32_to_cpu(cfg->cap.offset);
 645        len = le32_to_cpu(cfg->cap.length);
 646
 647        if (len == 1 || len == 2 || len == 4) {
 648            assert(len <= sizeof cfg->pci_cfg_data);
 649            virtio_address_space_write(&proxy->modern_as, off,
 650                                       cfg->pci_cfg_data, len);
 651        }
 652    }
 653}
 654
 655static uint32_t virtio_read_config(PCIDevice *pci_dev,
 656                                   uint32_t address, int len)
 657{
 658    VirtIOPCIProxy *proxy = DO_UPCAST(VirtIOPCIProxy, pci_dev, pci_dev);
 659    struct virtio_pci_cfg_cap *cfg;
 660
 661    if (proxy->config_cap &&
 662        ranges_overlap(address, len, proxy->config_cap + offsetof(struct virtio_pci_cfg_cap,
 663                                                                  pci_cfg_data),
 664                       sizeof cfg->pci_cfg_data)) {
 665        uint32_t off;
 666        uint32_t len;
 667
 668        cfg = (void *)(proxy->pci_dev.config + proxy->config_cap);
 669        off = le32_to_cpu(cfg->cap.offset);
 670        len = le32_to_cpu(cfg->cap.length);
 671
 672        if (len == 1 || len == 2 || len == 4) {
 673            assert(len <= sizeof cfg->pci_cfg_data);
 674            virtio_address_space_read(&proxy->modern_as, off,
 675                                      cfg->pci_cfg_data, len);
 676        }
 677    }
 678
 679    return pci_default_read_config(pci_dev, address, len);
 680}
 681
 682static int kvm_virtio_pci_vq_vector_use(VirtIOPCIProxy *proxy,
 683                                        unsigned int queue_no,
 684                                        unsigned int vector)
 685{
 686    VirtIOIRQFD *irqfd = &proxy->vector_irqfd[vector];
 687    int ret;
 688
 689    if (irqfd->users == 0) {
 690        ret = kvm_irqchip_add_msi_route(kvm_state, vector, &proxy->pci_dev);
 691        if (ret < 0) {
 692            return ret;
 693        }
 694        irqfd->virq = ret;
 695    }
 696    irqfd->users++;
 697    return 0;
 698}
 699
 700static void kvm_virtio_pci_vq_vector_release(VirtIOPCIProxy *proxy,
 701                                             unsigned int vector)
 702{
 703    VirtIOIRQFD *irqfd = &proxy->vector_irqfd[vector];
 704    if (--irqfd->users == 0) {
 705        kvm_irqchip_release_virq(kvm_state, irqfd->virq);
 706    }
 707}
 708
 709static int kvm_virtio_pci_irqfd_use(VirtIOPCIProxy *proxy,
 710                                 unsigned int queue_no,
 711                                 unsigned int vector)
 712{
 713    VirtIOIRQFD *irqfd = &proxy->vector_irqfd[vector];
 714    VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus);
 715    VirtQueue *vq = virtio_get_queue(vdev, queue_no);
 716    EventNotifier *n = virtio_queue_get_guest_notifier(vq);
 717    return kvm_irqchip_add_irqfd_notifier_gsi(kvm_state, n, NULL, irqfd->virq);
 718}
 719
 720static void kvm_virtio_pci_irqfd_release(VirtIOPCIProxy *proxy,
 721                                      unsigned int queue_no,
 722                                      unsigned int vector)
 723{
 724    VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus);
 725    VirtQueue *vq = virtio_get_queue(vdev, queue_no);
 726    EventNotifier *n = virtio_queue_get_guest_notifier(vq);
 727    VirtIOIRQFD *irqfd = &proxy->vector_irqfd[vector];
 728    int ret;
 729
 730    ret = kvm_irqchip_remove_irqfd_notifier_gsi(kvm_state, n, irqfd->virq);
 731    assert(ret == 0);
 732}
 733
 734static int kvm_virtio_pci_vector_use(VirtIOPCIProxy *proxy, int nvqs)
 735{
 736    PCIDevice *dev = &proxy->pci_dev;
 737    VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus);
 738    VirtioDeviceClass *k = VIRTIO_DEVICE_GET_CLASS(vdev);
 739    unsigned int vector;
 740    int ret, queue_no;
 741
 742    for (queue_no = 0; queue_no < nvqs; queue_no++) {
 743        if (!virtio_queue_get_num(vdev, queue_no)) {
 744            break;
 745        }
 746        vector = virtio_queue_vector(vdev, queue_no);
 747        if (vector >= msix_nr_vectors_allocated(dev)) {
 748            continue;
 749        }
 750        ret = kvm_virtio_pci_vq_vector_use(proxy, queue_no, vector);
 751        if (ret < 0) {
 752            goto undo;
 753        }
 754        /* If guest supports masking, set up irqfd now.
 755         * Otherwise, delay until unmasked in the frontend.
 756         */
 757        if (vdev->use_guest_notifier_mask && k->guest_notifier_mask) {
 758            ret = kvm_virtio_pci_irqfd_use(proxy, queue_no, vector);
 759            if (ret < 0) {
 760                kvm_virtio_pci_vq_vector_release(proxy, vector);
 761                goto undo;
 762            }
 763        }
 764    }
 765    return 0;
 766
 767undo:
 768    while (--queue_no >= 0) {
 769        vector = virtio_queue_vector(vdev, queue_no);
 770        if (vector >= msix_nr_vectors_allocated(dev)) {
 771            continue;
 772        }
 773        if (vdev->use_guest_notifier_mask && k->guest_notifier_mask) {
 774            kvm_virtio_pci_irqfd_release(proxy, queue_no, vector);
 775        }
 776        kvm_virtio_pci_vq_vector_release(proxy, vector);
 777    }
 778    return ret;
 779}
 780
 781static void kvm_virtio_pci_vector_release(VirtIOPCIProxy *proxy, int nvqs)
 782{
 783    PCIDevice *dev = &proxy->pci_dev;
 784    VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus);
 785    unsigned int vector;
 786    int queue_no;
 787    VirtioDeviceClass *k = VIRTIO_DEVICE_GET_CLASS(vdev);
 788
 789    for (queue_no = 0; queue_no < nvqs; queue_no++) {
 790        if (!virtio_queue_get_num(vdev, queue_no)) {
 791            break;
 792        }
 793        vector = virtio_queue_vector(vdev, queue_no);
 794        if (vector >= msix_nr_vectors_allocated(dev)) {
 795            continue;
 796        }
 797        /* If guest supports masking, clean up irqfd now.
 798         * Otherwise, it was cleaned when masked in the frontend.
 799         */
 800        if (vdev->use_guest_notifier_mask && k->guest_notifier_mask) {
 801            kvm_virtio_pci_irqfd_release(proxy, queue_no, vector);
 802        }
 803        kvm_virtio_pci_vq_vector_release(proxy, vector);
 804    }
 805}
 806
 807static int virtio_pci_vq_vector_unmask(VirtIOPCIProxy *proxy,
 808                                       unsigned int queue_no,
 809                                       unsigned int vector,
 810                                       MSIMessage msg)
 811{
 812    VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus);
 813    VirtioDeviceClass *k = VIRTIO_DEVICE_GET_CLASS(vdev);
 814    VirtQueue *vq = virtio_get_queue(vdev, queue_no);
 815    EventNotifier *n = virtio_queue_get_guest_notifier(vq);
 816    VirtIOIRQFD *irqfd;
 817    int ret = 0;
 818
 819    if (proxy->vector_irqfd) {
 820        irqfd = &proxy->vector_irqfd[vector];
 821        if (irqfd->msg.data != msg.data || irqfd->msg.address != msg.address) {
 822            ret = kvm_irqchip_update_msi_route(kvm_state, irqfd->virq, msg,
 823                                               &proxy->pci_dev);
 824            if (ret < 0) {
 825                return ret;
 826            }
 827            kvm_irqchip_commit_routes(kvm_state);
 828        }
 829    }
 830
 831    /* If guest supports masking, irqfd is already setup, unmask it.
 832     * Otherwise, set it up now.
 833     */
 834    if (vdev->use_guest_notifier_mask && k->guest_notifier_mask) {
 835        k->guest_notifier_mask(vdev, queue_no, false);
 836        /* Test after unmasking to avoid losing events. */
 837        if (k->guest_notifier_pending &&
 838            k->guest_notifier_pending(vdev, queue_no)) {
 839            event_notifier_set(n);
 840        }
 841    } else {
 842        ret = kvm_virtio_pci_irqfd_use(proxy, queue_no, vector);
 843    }
 844    return ret;
 845}
 846
 847static void virtio_pci_vq_vector_mask(VirtIOPCIProxy *proxy,
 848                                             unsigned int queue_no,
 849                                             unsigned int vector)
 850{
 851    VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus);
 852    VirtioDeviceClass *k = VIRTIO_DEVICE_GET_CLASS(vdev);
 853
 854    /* If guest supports masking, keep irqfd but mask it.
 855     * Otherwise, clean it up now.
 856     */ 
 857    if (vdev->use_guest_notifier_mask && k->guest_notifier_mask) {
 858        k->guest_notifier_mask(vdev, queue_no, true);
 859    } else {
 860        kvm_virtio_pci_irqfd_release(proxy, queue_no, vector);
 861    }
 862}
 863
 864static int virtio_pci_vector_unmask(PCIDevice *dev, unsigned vector,
 865                                    MSIMessage msg)
 866{
 867    VirtIOPCIProxy *proxy = container_of(dev, VirtIOPCIProxy, pci_dev);
 868    VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus);
 869    VirtQueue *vq = virtio_vector_first_queue(vdev, vector);
 870    int ret, index, unmasked = 0;
 871
 872    while (vq) {
 873        index = virtio_get_queue_index(vq);
 874        if (!virtio_queue_get_num(vdev, index)) {
 875            break;
 876        }
 877        if (index < proxy->nvqs_with_notifiers) {
 878            ret = virtio_pci_vq_vector_unmask(proxy, index, vector, msg);
 879            if (ret < 0) {
 880                goto undo;
 881            }
 882            ++unmasked;
 883        }
 884        vq = virtio_vector_next_queue(vq);
 885    }
 886
 887    return 0;
 888
 889undo:
 890    vq = virtio_vector_first_queue(vdev, vector);
 891    while (vq && unmasked >= 0) {
 892        index = virtio_get_queue_index(vq);
 893        if (index < proxy->nvqs_with_notifiers) {
 894            virtio_pci_vq_vector_mask(proxy, index, vector);
 895            --unmasked;
 896        }
 897        vq = virtio_vector_next_queue(vq);
 898    }
 899    return ret;
 900}
 901
 902static void virtio_pci_vector_mask(PCIDevice *dev, unsigned vector)
 903{
 904    VirtIOPCIProxy *proxy = container_of(dev, VirtIOPCIProxy, pci_dev);
 905    VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus);
 906    VirtQueue *vq = virtio_vector_first_queue(vdev, vector);
 907    int index;
 908
 909    while (vq) {
 910        index = virtio_get_queue_index(vq);
 911        if (!virtio_queue_get_num(vdev, index)) {
 912            break;
 913        }
 914        if (index < proxy->nvqs_with_notifiers) {
 915            virtio_pci_vq_vector_mask(proxy, index, vector);
 916        }
 917        vq = virtio_vector_next_queue(vq);
 918    }
 919}
 920
 921static void virtio_pci_vector_poll(PCIDevice *dev,
 922                                   unsigned int vector_start,
 923                                   unsigned int vector_end)
 924{
 925    VirtIOPCIProxy *proxy = container_of(dev, VirtIOPCIProxy, pci_dev);
 926    VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus);
 927    VirtioDeviceClass *k = VIRTIO_DEVICE_GET_CLASS(vdev);
 928    int queue_no;
 929    unsigned int vector;
 930    EventNotifier *notifier;
 931    VirtQueue *vq;
 932
 933    for (queue_no = 0; queue_no < proxy->nvqs_with_notifiers; queue_no++) {
 934        if (!virtio_queue_get_num(vdev, queue_no)) {
 935            break;
 936        }
 937        vector = virtio_queue_vector(vdev, queue_no);
 938        if (vector < vector_start || vector >= vector_end ||
 939            !msix_is_masked(dev, vector)) {
 940            continue;
 941        }
 942        vq = virtio_get_queue(vdev, queue_no);
 943        notifier = virtio_queue_get_guest_notifier(vq);
 944        if (k->guest_notifier_pending) {
 945            if (k->guest_notifier_pending(vdev, queue_no)) {
 946                msix_set_pending(dev, vector);
 947            }
 948        } else if (event_notifier_test_and_clear(notifier)) {
 949            msix_set_pending(dev, vector);
 950        }
 951    }
 952}
 953
 954static int virtio_pci_set_guest_notifier(DeviceState *d, int n, bool assign,
 955                                         bool with_irqfd)
 956{
 957    VirtIOPCIProxy *proxy = to_virtio_pci_proxy(d);
 958    VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus);
 959    VirtioDeviceClass *vdc = VIRTIO_DEVICE_GET_CLASS(vdev);
 960    VirtQueue *vq = virtio_get_queue(vdev, n);
 961    EventNotifier *notifier = virtio_queue_get_guest_notifier(vq);
 962
 963    if (assign) {
 964        int r = event_notifier_init(notifier, 0);
 965        if (r < 0) {
 966            return r;
 967        }
 968        virtio_queue_set_guest_notifier_fd_handler(vq, true, with_irqfd);
 969    } else {
 970        virtio_queue_set_guest_notifier_fd_handler(vq, false, with_irqfd);
 971        event_notifier_cleanup(notifier);
 972    }
 973
 974    if (!msix_enabled(&proxy->pci_dev) &&
 975        vdev->use_guest_notifier_mask &&
 976        vdc->guest_notifier_mask) {
 977        vdc->guest_notifier_mask(vdev, n, !assign);
 978    }
 979
 980    return 0;
 981}
 982
 983static bool virtio_pci_query_guest_notifiers(DeviceState *d)
 984{
 985    VirtIOPCIProxy *proxy = to_virtio_pci_proxy(d);
 986    return msix_enabled(&proxy->pci_dev);
 987}
 988
 989static int virtio_pci_set_guest_notifiers(DeviceState *d, int nvqs, bool assign)
 990{
 991    VirtIOPCIProxy *proxy = to_virtio_pci_proxy(d);
 992    VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus);
 993    VirtioDeviceClass *k = VIRTIO_DEVICE_GET_CLASS(vdev);
 994    int r, n;
 995    bool with_irqfd = msix_enabled(&proxy->pci_dev) &&
 996        kvm_msi_via_irqfd_enabled();
 997
 998    nvqs = MIN(nvqs, VIRTIO_QUEUE_MAX);
 999
1000    /* When deassigning, pass a consistent nvqs value
1001     * to avoid leaking notifiers.
1002     */
1003    assert(assign || nvqs == proxy->nvqs_with_notifiers);
1004
1005    proxy->nvqs_with_notifiers = nvqs;
1006
1007    /* Must unset vector notifier while guest notifier is still assigned */
1008    if ((proxy->vector_irqfd || k->guest_notifier_mask) && !assign) {
1009        msix_unset_vector_notifiers(&proxy->pci_dev);
1010        if (proxy->vector_irqfd) {
1011            kvm_virtio_pci_vector_release(proxy, nvqs);
1012            g_free(proxy->vector_irqfd);
1013            proxy->vector_irqfd = NULL;
1014        }
1015    }
1016
1017    for (n = 0; n < nvqs; n++) {
1018        if (!virtio_queue_get_num(vdev, n)) {
1019            break;
1020        }
1021
1022        r = virtio_pci_set_guest_notifier(d, n, assign, with_irqfd);
1023        if (r < 0) {
1024            goto assign_error;
1025        }
1026    }
1027
1028    /* Must set vector notifier after guest notifier has been assigned */
1029    if ((with_irqfd || k->guest_notifier_mask) && assign) {
1030        if (with_irqfd) {
1031            proxy->vector_irqfd =
1032                g_malloc0(sizeof(*proxy->vector_irqfd) *
1033                          msix_nr_vectors_allocated(&proxy->pci_dev));
1034            r = kvm_virtio_pci_vector_use(proxy, nvqs);
1035            if (r < 0) {
1036                goto assign_error;
1037            }
1038        }
1039        r = msix_set_vector_notifiers(&proxy->pci_dev,
1040                                      virtio_pci_vector_unmask,
1041                                      virtio_pci_vector_mask,
1042                                      virtio_pci_vector_poll);
1043        if (r < 0) {
1044            goto notifiers_error;
1045        }
1046    }
1047
1048    return 0;
1049
1050notifiers_error:
1051    if (with_irqfd) {
1052        assert(assign);
1053        kvm_virtio_pci_vector_release(proxy, nvqs);
1054    }
1055
1056assign_error:
1057    /* We get here on assignment failure. Recover by undoing for VQs 0 .. n. */
1058    assert(assign);
1059    while (--n >= 0) {
1060        virtio_pci_set_guest_notifier(d, n, !assign, with_irqfd);
1061    }
1062    return r;
1063}
1064
1065static void virtio_pci_vmstate_change(DeviceState *d, bool running)
1066{
1067    VirtIOPCIProxy *proxy = to_virtio_pci_proxy(d);
1068    VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus);
1069
1070    if (running) {
1071        /* Old QEMU versions did not set bus master enable on status write.
1072         * Detect DRIVER set and enable it.
1073         */
1074        if ((proxy->flags & VIRTIO_PCI_FLAG_BUS_MASTER_BUG_MIGRATION) &&
1075            (vdev->status & VIRTIO_CONFIG_S_DRIVER) &&
1076            !(proxy->pci_dev.config[PCI_COMMAND] & PCI_COMMAND_MASTER)) {
1077            pci_default_write_config(&proxy->pci_dev, PCI_COMMAND,
1078                                     proxy->pci_dev.config[PCI_COMMAND] |
1079                                     PCI_COMMAND_MASTER, 1);
1080        }
1081        virtio_pci_start_ioeventfd(proxy);
1082    } else {
1083        virtio_pci_stop_ioeventfd(proxy);
1084    }
1085}
1086
1087#ifdef CONFIG_VIRTFS
1088static void virtio_9p_pci_realize(VirtIOPCIProxy *vpci_dev, Error **errp)
1089{
1090    V9fsPCIState *dev = VIRTIO_9P_PCI(vpci_dev);
1091    DeviceState *vdev = DEVICE(&dev->vdev);
1092
1093    qdev_set_parent_bus(vdev, BUS(&vpci_dev->bus));
1094    object_property_set_bool(OBJECT(vdev), true, "realized", errp);
1095}
1096
1097static Property virtio_9p_pci_properties[] = {
1098    DEFINE_PROP_BIT("ioeventfd", VirtIOPCIProxy, flags,
1099                    VIRTIO_PCI_FLAG_USE_IOEVENTFD_BIT, true),
1100    DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors, 2),
1101    DEFINE_PROP_END_OF_LIST(),
1102};
1103
1104static void virtio_9p_pci_class_init(ObjectClass *klass, void *data)
1105{
1106    DeviceClass *dc = DEVICE_CLASS(klass);
1107    PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass);
1108    VirtioPCIClass *k = VIRTIO_PCI_CLASS(klass);
1109
1110    k->realize = virtio_9p_pci_realize;
1111    pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET;
1112    pcidev_k->device_id = PCI_DEVICE_ID_VIRTIO_9P;
1113    pcidev_k->revision = VIRTIO_PCI_ABI_VERSION;
1114    pcidev_k->class_id = 0x2;
1115    set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
1116    dc->props = virtio_9p_pci_properties;
1117}
1118
1119static void virtio_9p_pci_instance_init(Object *obj)
1120{
1121    V9fsPCIState *dev = VIRTIO_9P_PCI(obj);
1122
1123    virtio_instance_init_common(obj, &dev->vdev, sizeof(dev->vdev),
1124                                TYPE_VIRTIO_9P);
1125}
1126
1127static const TypeInfo virtio_9p_pci_info = {
1128    .name          = TYPE_VIRTIO_9P_PCI,
1129    .parent        = TYPE_VIRTIO_PCI,
1130    .instance_size = sizeof(V9fsPCIState),
1131    .instance_init = virtio_9p_pci_instance_init,
1132    .class_init    = virtio_9p_pci_class_init,
1133};
1134#endif /* CONFIG_VIRTFS */
1135
1136/*
1137 * virtio-pci: This is the PCIDevice which has a virtio-pci-bus.
1138 */
1139
1140static int virtio_pci_query_nvectors(DeviceState *d)
1141{
1142    VirtIOPCIProxy *proxy = VIRTIO_PCI(d);
1143
1144    return proxy->nvectors;
1145}
1146
1147static int virtio_pci_add_mem_cap(VirtIOPCIProxy *proxy,
1148                                   struct virtio_pci_cap *cap)
1149{
1150    PCIDevice *dev = &proxy->pci_dev;
1151    int offset;
1152
1153    offset = pci_add_capability(dev, PCI_CAP_ID_VNDR, 0, cap->cap_len);
1154    assert(offset > 0);
1155
1156    assert(cap->cap_len >= sizeof *cap);
1157    memcpy(dev->config + offset + PCI_CAP_FLAGS, &cap->cap_len,
1158           cap->cap_len - PCI_CAP_FLAGS);
1159
1160    return offset;
1161}
1162
1163static uint64_t virtio_pci_common_read(void *opaque, hwaddr addr,
1164                                       unsigned size)
1165{
1166    VirtIOPCIProxy *proxy = opaque;
1167    VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus);
1168    uint32_t val = 0;
1169    int i;
1170
1171    switch (addr) {
1172    case VIRTIO_PCI_COMMON_DFSELECT:
1173        val = proxy->dfselect;
1174        break;
1175    case VIRTIO_PCI_COMMON_DF:
1176        if (proxy->dfselect <= 1) {
1177            VirtioDeviceClass *vdc = VIRTIO_DEVICE_GET_CLASS(vdev);
1178
1179            val = (vdev->host_features & ~vdc->legacy_features) >>
1180                (32 * proxy->dfselect);
1181        }
1182        break;
1183    case VIRTIO_PCI_COMMON_GFSELECT:
1184        val = proxy->gfselect;
1185        break;
1186    case VIRTIO_PCI_COMMON_GF:
1187        if (proxy->gfselect < ARRAY_SIZE(proxy->guest_features)) {
1188            val = proxy->guest_features[proxy->gfselect];
1189        }
1190        break;
1191    case VIRTIO_PCI_COMMON_MSIX:
1192        val = vdev->config_vector;
1193        break;
1194    case VIRTIO_PCI_COMMON_NUMQ:
1195        for (i = 0; i < VIRTIO_QUEUE_MAX; ++i) {
1196            if (virtio_queue_get_num(vdev, i)) {
1197                val = i + 1;
1198            }
1199        }
1200        break;
1201    case VIRTIO_PCI_COMMON_STATUS:
1202        val = vdev->status;
1203        break;
1204    case VIRTIO_PCI_COMMON_CFGGENERATION:
1205        val = vdev->generation;
1206        break;
1207    case VIRTIO_PCI_COMMON_Q_SELECT:
1208        val = vdev->queue_sel;
1209        break;
1210    case VIRTIO_PCI_COMMON_Q_SIZE:
1211        val = virtio_queue_get_num(vdev, vdev->queue_sel);
1212        break;
1213    case VIRTIO_PCI_COMMON_Q_MSIX:
1214        val = virtio_queue_vector(vdev, vdev->queue_sel);
1215        break;
1216    case VIRTIO_PCI_COMMON_Q_ENABLE:
1217        val = proxy->vqs[vdev->queue_sel].enabled;
1218        break;
1219    case VIRTIO_PCI_COMMON_Q_NOFF:
1220        /* Simply map queues in order */
1221        val = vdev->queue_sel;
1222        break;
1223    case VIRTIO_PCI_COMMON_Q_DESCLO:
1224        val = proxy->vqs[vdev->queue_sel].desc[0];
1225        break;
1226    case VIRTIO_PCI_COMMON_Q_DESCHI:
1227        val = proxy->vqs[vdev->queue_sel].desc[1];
1228        break;
1229    case VIRTIO_PCI_COMMON_Q_AVAILLO:
1230        val = proxy->vqs[vdev->queue_sel].avail[0];
1231        break;
1232    case VIRTIO_PCI_COMMON_Q_AVAILHI:
1233        val = proxy->vqs[vdev->queue_sel].avail[1];
1234        break;
1235    case VIRTIO_PCI_COMMON_Q_USEDLO:
1236        val = proxy->vqs[vdev->queue_sel].used[0];
1237        break;
1238    case VIRTIO_PCI_COMMON_Q_USEDHI:
1239        val = proxy->vqs[vdev->queue_sel].used[1];
1240        break;
1241    default:
1242        val = 0;
1243    }
1244
1245    return val;
1246}
1247
1248static void virtio_pci_common_write(void *opaque, hwaddr addr,
1249                                    uint64_t val, unsigned size)
1250{
1251    VirtIOPCIProxy *proxy = opaque;
1252    VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus);
1253
1254    switch (addr) {
1255    case VIRTIO_PCI_COMMON_DFSELECT:
1256        proxy->dfselect = val;
1257        break;
1258    case VIRTIO_PCI_COMMON_GFSELECT:
1259        proxy->gfselect = val;
1260        break;
1261    case VIRTIO_PCI_COMMON_GF:
1262        if (proxy->gfselect < ARRAY_SIZE(proxy->guest_features)) {
1263            proxy->guest_features[proxy->gfselect] = val;
1264            virtio_set_features(vdev,
1265                                (((uint64_t)proxy->guest_features[1]) << 32) |
1266                                proxy->guest_features[0]);
1267        }
1268        break;
1269    case VIRTIO_PCI_COMMON_MSIX:
1270        msix_vector_unuse(&proxy->pci_dev, vdev->config_vector);
1271        /* Make it possible for guest to discover an error took place. */
1272        if (msix_vector_use(&proxy->pci_dev, val) < 0) {
1273            val = VIRTIO_NO_VECTOR;
1274        }
1275        vdev->config_vector = val;
1276        break;
1277    case VIRTIO_PCI_COMMON_STATUS:
1278        if (!(val & VIRTIO_CONFIG_S_DRIVER_OK)) {
1279            virtio_pci_stop_ioeventfd(proxy);
1280        }
1281
1282        virtio_set_status(vdev, val & 0xFF);
1283
1284        if (val & VIRTIO_CONFIG_S_DRIVER_OK) {
1285            virtio_pci_start_ioeventfd(proxy);
1286        }
1287
1288        if (vdev->status == 0) {
1289            virtio_pci_reset(DEVICE(proxy));
1290        }
1291
1292        break;
1293    case VIRTIO_PCI_COMMON_Q_SELECT:
1294        if (val < VIRTIO_QUEUE_MAX) {
1295            vdev->queue_sel = val;
1296        }
1297        break;
1298    case VIRTIO_PCI_COMMON_Q_SIZE:
1299        proxy->vqs[vdev->queue_sel].num = val;
1300        break;
1301    case VIRTIO_PCI_COMMON_Q_MSIX:
1302        msix_vector_unuse(&proxy->pci_dev,
1303                          virtio_queue_vector(vdev, vdev->queue_sel));
1304        /* Make it possible for guest to discover an error took place. */
1305        if (msix_vector_use(&proxy->pci_dev, val) < 0) {
1306            val = VIRTIO_NO_VECTOR;
1307        }
1308        virtio_queue_set_vector(vdev, vdev->queue_sel, val);
1309        break;
1310    case VIRTIO_PCI_COMMON_Q_ENABLE:
1311        /* TODO: need a way to put num back on reset. */
1312        virtio_queue_set_num(vdev, vdev->queue_sel,
1313                             proxy->vqs[vdev->queue_sel].num);
1314        virtio_queue_set_rings(vdev, vdev->queue_sel,
1315                       ((uint64_t)proxy->vqs[vdev->queue_sel].desc[1]) << 32 |
1316                       proxy->vqs[vdev->queue_sel].desc[0],
1317                       ((uint64_t)proxy->vqs[vdev->queue_sel].avail[1]) << 32 |
1318                       proxy->vqs[vdev->queue_sel].avail[0],
1319                       ((uint64_t)proxy->vqs[vdev->queue_sel].used[1]) << 32 |
1320                       proxy->vqs[vdev->queue_sel].used[0]);
1321        proxy->vqs[vdev->queue_sel].enabled = 1;
1322        break;
1323    case VIRTIO_PCI_COMMON_Q_DESCLO:
1324        proxy->vqs[vdev->queue_sel].desc[0] = val;
1325        break;
1326    case VIRTIO_PCI_COMMON_Q_DESCHI:
1327        proxy->vqs[vdev->queue_sel].desc[1] = val;
1328        break;
1329    case VIRTIO_PCI_COMMON_Q_AVAILLO:
1330        proxy->vqs[vdev->queue_sel].avail[0] = val;
1331        break;
1332    case VIRTIO_PCI_COMMON_Q_AVAILHI:
1333        proxy->vqs[vdev->queue_sel].avail[1] = val;
1334        break;
1335    case VIRTIO_PCI_COMMON_Q_USEDLO:
1336        proxy->vqs[vdev->queue_sel].used[0] = val;
1337        break;
1338    case VIRTIO_PCI_COMMON_Q_USEDHI:
1339        proxy->vqs[vdev->queue_sel].used[1] = val;
1340        break;
1341    default:
1342        break;
1343    }
1344}
1345
1346
1347static uint64_t virtio_pci_notify_read(void *opaque, hwaddr addr,
1348                                       unsigned size)
1349{
1350    return 0;
1351}
1352
1353static void virtio_pci_notify_write(void *opaque, hwaddr addr,
1354                                    uint64_t val, unsigned size)
1355{
1356    VirtIODevice *vdev = opaque;
1357    VirtIOPCIProxy *proxy = VIRTIO_PCI(DEVICE(vdev)->parent_bus->parent);
1358    unsigned queue = addr / virtio_pci_queue_mem_mult(proxy);
1359
1360    if (queue < VIRTIO_QUEUE_MAX) {
1361        virtio_queue_notify(vdev, queue);
1362    }
1363}
1364
1365static void virtio_pci_notify_write_pio(void *opaque, hwaddr addr,
1366                                        uint64_t val, unsigned size)
1367{
1368    VirtIODevice *vdev = opaque;
1369    unsigned queue = val;
1370
1371    if (queue < VIRTIO_QUEUE_MAX) {
1372        virtio_queue_notify(vdev, queue);
1373    }
1374}
1375
1376static uint64_t virtio_pci_isr_read(void *opaque, hwaddr addr,
1377                                    unsigned size)
1378{
1379    VirtIOPCIProxy *proxy = opaque;
1380    VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus);
1381    uint64_t val = atomic_xchg(&vdev->isr, 0);
1382    pci_irq_deassert(&proxy->pci_dev);
1383
1384    return val;
1385}
1386
1387static void virtio_pci_isr_write(void *opaque, hwaddr addr,
1388                                 uint64_t val, unsigned size)
1389{
1390}
1391
1392static uint64_t virtio_pci_device_read(void *opaque, hwaddr addr,
1393                                       unsigned size)
1394{
1395    VirtIODevice *vdev = opaque;
1396    uint64_t val = 0;
1397
1398    switch (size) {
1399    case 1:
1400        val = virtio_config_modern_readb(vdev, addr);
1401        break;
1402    case 2:
1403        val = virtio_config_modern_readw(vdev, addr);
1404        break;
1405    case 4:
1406        val = virtio_config_modern_readl(vdev, addr);
1407        break;
1408    }
1409    return val;
1410}
1411
1412static void virtio_pci_device_write(void *opaque, hwaddr addr,
1413                                    uint64_t val, unsigned size)
1414{
1415    VirtIODevice *vdev = opaque;
1416    switch (size) {
1417    case 1:
1418        virtio_config_modern_writeb(vdev, addr, val);
1419        break;
1420    case 2:
1421        virtio_config_modern_writew(vdev, addr, val);
1422        break;
1423    case 4:
1424        virtio_config_modern_writel(vdev, addr, val);
1425        break;
1426    }
1427}
1428
1429static void virtio_pci_modern_regions_init(VirtIOPCIProxy *proxy)
1430{
1431    static const MemoryRegionOps common_ops = {
1432        .read = virtio_pci_common_read,
1433        .write = virtio_pci_common_write,
1434        .impl = {
1435            .min_access_size = 1,
1436            .max_access_size = 4,
1437        },
1438        .endianness = DEVICE_LITTLE_ENDIAN,
1439    };
1440    static const MemoryRegionOps isr_ops = {
1441        .read = virtio_pci_isr_read,
1442        .write = virtio_pci_isr_write,
1443        .impl = {
1444            .min_access_size = 1,
1445            .max_access_size = 4,
1446        },
1447        .endianness = DEVICE_LITTLE_ENDIAN,
1448    };
1449    static const MemoryRegionOps device_ops = {
1450        .read = virtio_pci_device_read,
1451        .write = virtio_pci_device_write,
1452        .impl = {
1453            .min_access_size = 1,
1454            .max_access_size = 4,
1455        },
1456        .endianness = DEVICE_LITTLE_ENDIAN,
1457    };
1458    static const MemoryRegionOps notify_ops = {
1459        .read = virtio_pci_notify_read,
1460        .write = virtio_pci_notify_write,
1461        .impl = {
1462            .min_access_size = 1,
1463            .max_access_size = 4,
1464        },
1465        .endianness = DEVICE_LITTLE_ENDIAN,
1466    };
1467    static const MemoryRegionOps notify_pio_ops = {
1468        .read = virtio_pci_notify_read,
1469        .write = virtio_pci_notify_write_pio,
1470        .impl = {
1471            .min_access_size = 1,
1472            .max_access_size = 4,
1473        },
1474        .endianness = DEVICE_LITTLE_ENDIAN,
1475    };
1476
1477
1478    memory_region_init_io(&proxy->common.mr, OBJECT(proxy),
1479                          &common_ops,
1480                          proxy,
1481                          "virtio-pci-common",
1482                          proxy->common.size);
1483
1484    memory_region_init_io(&proxy->isr.mr, OBJECT(proxy),
1485                          &isr_ops,
1486                          proxy,
1487                          "virtio-pci-isr",
1488                          proxy->isr.size);
1489
1490    memory_region_init_io(&proxy->device.mr, OBJECT(proxy),
1491                          &device_ops,
1492                          virtio_bus_get_device(&proxy->bus),
1493                          "virtio-pci-device",
1494                          proxy->device.size);
1495
1496    memory_region_init_io(&proxy->notify.mr, OBJECT(proxy),
1497                          &notify_ops,
1498                          virtio_bus_get_device(&proxy->bus),
1499                          "virtio-pci-notify",
1500                          proxy->notify.size);
1501
1502    memory_region_init_io(&proxy->notify_pio.mr, OBJECT(proxy),
1503                          &notify_pio_ops,
1504                          virtio_bus_get_device(&proxy->bus),
1505                          "virtio-pci-notify-pio",
1506                          proxy->notify_pio.size);
1507}
1508
1509static void virtio_pci_modern_region_map(VirtIOPCIProxy *proxy,
1510                                         VirtIOPCIRegion *region,
1511                                         struct virtio_pci_cap *cap,
1512                                         MemoryRegion *mr,
1513                                         uint8_t bar)
1514{
1515    memory_region_add_subregion(mr, region->offset, &region->mr);
1516
1517    cap->cfg_type = region->type;
1518    cap->bar = bar;
1519    cap->offset = cpu_to_le32(region->offset);
1520    cap->length = cpu_to_le32(region->size);
1521    virtio_pci_add_mem_cap(proxy, cap);
1522
1523}
1524
1525static void virtio_pci_modern_mem_region_map(VirtIOPCIProxy *proxy,
1526                                             VirtIOPCIRegion *region,
1527                                             struct virtio_pci_cap *cap)
1528{
1529    virtio_pci_modern_region_map(proxy, region, cap,
1530                                 &proxy->modern_bar, proxy->modern_mem_bar_idx);
1531}
1532
1533static void virtio_pci_modern_io_region_map(VirtIOPCIProxy *proxy,
1534                                            VirtIOPCIRegion *region,
1535                                            struct virtio_pci_cap *cap)
1536{
1537    virtio_pci_modern_region_map(proxy, region, cap,
1538                                 &proxy->io_bar, proxy->modern_io_bar_idx);
1539}
1540
1541static void virtio_pci_modern_mem_region_unmap(VirtIOPCIProxy *proxy,
1542                                               VirtIOPCIRegion *region)
1543{
1544    memory_region_del_subregion(&proxy->modern_bar,
1545                                &region->mr);
1546}
1547
1548static void virtio_pci_modern_io_region_unmap(VirtIOPCIProxy *proxy,
1549                                              VirtIOPCIRegion *region)
1550{
1551    memory_region_del_subregion(&proxy->io_bar,
1552                                &region->mr);
1553}
1554
1555static void virtio_pci_pre_plugged(DeviceState *d, Error **errp)
1556{
1557    VirtIOPCIProxy *proxy = VIRTIO_PCI(d);
1558    VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus);
1559
1560    if (virtio_pci_modern(proxy)) {
1561        virtio_add_feature(&vdev->host_features, VIRTIO_F_VERSION_1);
1562    }
1563
1564    virtio_add_feature(&vdev->host_features, VIRTIO_F_BAD_FEATURE);
1565}
1566
1567/* This is called by virtio-bus just after the device is plugged. */
1568static void virtio_pci_device_plugged(DeviceState *d, Error **errp)
1569{
1570    VirtIOPCIProxy *proxy = VIRTIO_PCI(d);
1571    VirtioBusState *bus = &proxy->bus;
1572    bool legacy = virtio_pci_legacy(proxy);
1573    bool modern;
1574    bool modern_pio = proxy->flags & VIRTIO_PCI_FLAG_MODERN_PIO_NOTIFY;
1575    uint8_t *config;
1576    uint32_t size;
1577    VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus);
1578
1579    /*
1580     * Virtio capabilities present without
1581     * VIRTIO_F_VERSION_1 confuses guests
1582     */
1583    if (!proxy->ignore_backend_features &&
1584            !virtio_has_feature(vdev->host_features, VIRTIO_F_VERSION_1)) {
1585        virtio_pci_disable_modern(proxy);
1586
1587        if (!legacy) {
1588            error_setg(errp, "Device doesn't support modern mode, and legacy"
1589                             " mode is disabled");
1590            error_append_hint(errp, "Set disable-legacy to off\n");
1591
1592            return;
1593        }
1594    }
1595
1596    modern = virtio_pci_modern(proxy);
1597
1598    config = proxy->pci_dev.config;
1599    if (proxy->class_code) {
1600        pci_config_set_class(config, proxy->class_code);
1601    }
1602
1603    if (legacy) {
1604        /* legacy and transitional */
1605        pci_set_word(config + PCI_SUBSYSTEM_VENDOR_ID,
1606                     pci_get_word(config + PCI_VENDOR_ID));
1607        pci_set_word(config + PCI_SUBSYSTEM_ID, virtio_bus_get_vdev_id(bus));
1608    } else {
1609        /* pure virtio-1.0 */
1610        pci_set_word(config + PCI_VENDOR_ID,
1611                     PCI_VENDOR_ID_REDHAT_QUMRANET);
1612        pci_set_word(config + PCI_DEVICE_ID,
1613                     0x1040 + virtio_bus_get_vdev_id(bus));
1614        pci_config_set_revision(config, 1);
1615    }
1616    config[PCI_INTERRUPT_PIN] = 1;
1617
1618
1619    if (modern) {
1620        struct virtio_pci_cap cap = {
1621            .cap_len = sizeof cap,
1622        };
1623        struct virtio_pci_notify_cap notify = {
1624            .cap.cap_len = sizeof notify,
1625            .notify_off_multiplier =
1626                cpu_to_le32(virtio_pci_queue_mem_mult(proxy)),
1627        };
1628        struct virtio_pci_cfg_cap cfg = {
1629            .cap.cap_len = sizeof cfg,
1630            .cap.cfg_type = VIRTIO_PCI_CAP_PCI_CFG,
1631        };
1632        struct virtio_pci_notify_cap notify_pio = {
1633            .cap.cap_len = sizeof notify,
1634            .notify_off_multiplier = cpu_to_le32(0x0),
1635        };
1636
1637        struct virtio_pci_cfg_cap *cfg_mask;
1638
1639        virtio_pci_modern_regions_init(proxy);
1640
1641        virtio_pci_modern_mem_region_map(proxy, &proxy->common, &cap);
1642        virtio_pci_modern_mem_region_map(proxy, &proxy->isr, &cap);
1643        virtio_pci_modern_mem_region_map(proxy, &proxy->device, &cap);
1644        virtio_pci_modern_mem_region_map(proxy, &proxy->notify, &notify.cap);
1645
1646        if (modern_pio) {
1647            memory_region_init(&proxy->io_bar, OBJECT(proxy),
1648                               "virtio-pci-io", 0x4);
1649
1650            pci_register_bar(&proxy->pci_dev, proxy->modern_io_bar_idx,
1651                             PCI_BASE_ADDRESS_SPACE_IO, &proxy->io_bar);
1652
1653            virtio_pci_modern_io_region_map(proxy, &proxy->notify_pio,
1654                                            &notify_pio.cap);
1655        }
1656
1657        pci_register_bar(&proxy->pci_dev, proxy->modern_mem_bar_idx,
1658                         PCI_BASE_ADDRESS_SPACE_MEMORY |
1659                         PCI_BASE_ADDRESS_MEM_PREFETCH |
1660                         PCI_BASE_ADDRESS_MEM_TYPE_64,
1661                         &proxy->modern_bar);
1662
1663        proxy->config_cap = virtio_pci_add_mem_cap(proxy, &cfg.cap);
1664        cfg_mask = (void *)(proxy->pci_dev.wmask + proxy->config_cap);
1665        pci_set_byte(&cfg_mask->cap.bar, ~0x0);
1666        pci_set_long((uint8_t *)&cfg_mask->cap.offset, ~0x0);
1667        pci_set_long((uint8_t *)&cfg_mask->cap.length, ~0x0);
1668        pci_set_long(cfg_mask->pci_cfg_data, ~0x0);
1669    }
1670
1671    if (proxy->nvectors) {
1672        int err = msix_init_exclusive_bar(&proxy->pci_dev, proxy->nvectors,
1673                                          proxy->msix_bar_idx);
1674        if (err) {
1675            /* Notice when a system that supports MSIx can't initialize it.  */
1676            if (err != -ENOTSUP) {
1677                error_report("unable to init msix vectors to %" PRIu32,
1678                             proxy->nvectors);
1679            }
1680            proxy->nvectors = 0;
1681        }
1682    }
1683
1684    proxy->pci_dev.config_write = virtio_write_config;
1685    proxy->pci_dev.config_read = virtio_read_config;
1686
1687    if (legacy) {
1688        size = VIRTIO_PCI_REGION_SIZE(&proxy->pci_dev)
1689            + virtio_bus_get_vdev_config_len(bus);
1690        size = pow2ceil(size);
1691
1692        memory_region_init_io(&proxy->bar, OBJECT(proxy),
1693                              &virtio_pci_config_ops,
1694                              proxy, "virtio-pci", size);
1695
1696        pci_register_bar(&proxy->pci_dev, proxy->legacy_io_bar_idx,
1697                         PCI_BASE_ADDRESS_SPACE_IO, &proxy->bar);
1698    }
1699}
1700
1701static void virtio_pci_device_unplugged(DeviceState *d)
1702{
1703    VirtIOPCIProxy *proxy = VIRTIO_PCI(d);
1704    bool modern = virtio_pci_modern(proxy);
1705    bool modern_pio = proxy->flags & VIRTIO_PCI_FLAG_MODERN_PIO_NOTIFY;
1706
1707    virtio_pci_stop_ioeventfd(proxy);
1708
1709    if (modern) {
1710        virtio_pci_modern_mem_region_unmap(proxy, &proxy->common);
1711        virtio_pci_modern_mem_region_unmap(proxy, &proxy->isr);
1712        virtio_pci_modern_mem_region_unmap(proxy, &proxy->device);
1713        virtio_pci_modern_mem_region_unmap(proxy, &proxy->notify);
1714        if (modern_pio) {
1715            virtio_pci_modern_io_region_unmap(proxy, &proxy->notify_pio);
1716        }
1717    }
1718}
1719
1720static void virtio_pci_realize(PCIDevice *pci_dev, Error **errp)
1721{
1722    VirtIOPCIProxy *proxy = VIRTIO_PCI(pci_dev);
1723    VirtioPCIClass *k = VIRTIO_PCI_GET_CLASS(pci_dev);
1724    bool pcie_port = pci_bus_is_express(pci_dev->bus) &&
1725                     !pci_bus_is_root(pci_dev->bus);
1726
1727    if (!kvm_has_many_ioeventfds()) {
1728        proxy->flags &= ~VIRTIO_PCI_FLAG_USE_IOEVENTFD;
1729    }
1730
1731    /*
1732     * virtio pci bar layout used by default.
1733     * subclasses can re-arrange things if needed.
1734     *
1735     *   region 0   --  virtio legacy io bar
1736     *   region 1   --  msi-x bar
1737     *   region 4+5 --  virtio modern memory (64bit) bar
1738     *
1739     */
1740    proxy->legacy_io_bar_idx  = 0;
1741    proxy->msix_bar_idx       = 1;
1742    proxy->modern_io_bar_idx  = 2;
1743    proxy->modern_mem_bar_idx = 4;
1744
1745    proxy->common.offset = 0x0;
1746    proxy->common.size = 0x1000;
1747    proxy->common.type = VIRTIO_PCI_CAP_COMMON_CFG;
1748
1749    proxy->isr.offset = 0x1000;
1750    proxy->isr.size = 0x1000;
1751    proxy->isr.type = VIRTIO_PCI_CAP_ISR_CFG;
1752
1753    proxy->device.offset = 0x2000;
1754    proxy->device.size = 0x1000;
1755    proxy->device.type = VIRTIO_PCI_CAP_DEVICE_CFG;
1756
1757    proxy->notify.offset = 0x3000;
1758    proxy->notify.size = virtio_pci_queue_mem_mult(proxy) * VIRTIO_QUEUE_MAX;
1759    proxy->notify.type = VIRTIO_PCI_CAP_NOTIFY_CFG;
1760
1761    proxy->notify_pio.offset = 0x0;
1762    proxy->notify_pio.size = 0x4;
1763    proxy->notify_pio.type = VIRTIO_PCI_CAP_NOTIFY_CFG;
1764
1765    /* subclasses can enforce modern, so do this unconditionally */
1766    memory_region_init(&proxy->modern_bar, OBJECT(proxy), "virtio-pci",
1767                       /* PCI BAR regions must be powers of 2 */
1768                       pow2ceil(proxy->notify.offset + proxy->notify.size));
1769
1770    memory_region_init_alias(&proxy->modern_cfg,
1771                             OBJECT(proxy),
1772                             "virtio-pci-cfg",
1773                             &proxy->modern_bar,
1774                             0,
1775                             memory_region_size(&proxy->modern_bar));
1776
1777    address_space_init(&proxy->modern_as, &proxy->modern_cfg, "virtio-pci-cfg-as");
1778
1779    if (proxy->disable_legacy == ON_OFF_AUTO_AUTO) {
1780        proxy->disable_legacy = pcie_port ? ON_OFF_AUTO_ON : ON_OFF_AUTO_OFF;
1781    }
1782
1783    if (!virtio_pci_modern(proxy) && !virtio_pci_legacy(proxy)) {
1784        error_setg(errp, "device cannot work as neither modern nor legacy mode"
1785                   " is enabled");
1786        error_append_hint(errp, "Set either disable-modern or disable-legacy"
1787                          " to off\n");
1788        return;
1789    }
1790
1791    if (pcie_port && pci_is_express(pci_dev)) {
1792        int pos;
1793
1794        pos = pcie_endpoint_cap_init(pci_dev, 0);
1795        assert(pos > 0);
1796
1797        pos = pci_add_capability(pci_dev, PCI_CAP_ID_PM, 0, PCI_PM_SIZEOF);
1798        assert(pos > 0);
1799
1800        /*
1801         * Indicates that this function complies with revision 1.2 of the
1802         * PCI Power Management Interface Specification.
1803         */
1804        pci_set_word(pci_dev->config + pos + PCI_PM_PMC, 0x3);
1805    } else {
1806        /*
1807         * make future invocations of pci_is_express() return false
1808         * and pci_config_size() return PCI_CONFIG_SPACE_SIZE.
1809         */
1810        pci_dev->cap_present &= ~QEMU_PCI_CAP_EXPRESS;
1811    }
1812
1813    virtio_pci_bus_new(&proxy->bus, sizeof(proxy->bus), proxy);
1814    if (k->realize) {
1815        k->realize(proxy, errp);
1816    }
1817}
1818
1819static void virtio_pci_exit(PCIDevice *pci_dev)
1820{
1821    VirtIOPCIProxy *proxy = VIRTIO_PCI(pci_dev);
1822
1823    msix_uninit_exclusive_bar(pci_dev);
1824    address_space_destroy(&proxy->modern_as);
1825}
1826
1827static void virtio_pci_reset(DeviceState *qdev)
1828{
1829    VirtIOPCIProxy *proxy = VIRTIO_PCI(qdev);
1830    VirtioBusState *bus = VIRTIO_BUS(&proxy->bus);
1831    int i;
1832
1833    virtio_pci_stop_ioeventfd(proxy);
1834    virtio_bus_reset(bus);
1835    msix_unuse_all_vectors(&proxy->pci_dev);
1836
1837    for (i = 0; i < VIRTIO_QUEUE_MAX; i++) {
1838        proxy->vqs[i].enabled = 0;
1839        proxy->vqs[i].num = 0;
1840        proxy->vqs[i].desc[0] = proxy->vqs[i].desc[1] = 0;
1841        proxy->vqs[i].avail[0] = proxy->vqs[i].avail[1] = 0;
1842        proxy->vqs[i].used[0] = proxy->vqs[i].used[1] = 0;
1843    }
1844}
1845
1846static Property virtio_pci_properties[] = {
1847    DEFINE_PROP_BIT("virtio-pci-bus-master-bug-migration", VirtIOPCIProxy, flags,
1848                    VIRTIO_PCI_FLAG_BUS_MASTER_BUG_MIGRATION_BIT, false),
1849    DEFINE_PROP_ON_OFF_AUTO("disable-legacy", VirtIOPCIProxy, disable_legacy,
1850                            ON_OFF_AUTO_AUTO),
1851    DEFINE_PROP_BOOL("disable-modern", VirtIOPCIProxy, disable_modern, false),
1852    DEFINE_PROP_BIT("migrate-extra", VirtIOPCIProxy, flags,
1853                    VIRTIO_PCI_FLAG_MIGRATE_EXTRA_BIT, true),
1854    DEFINE_PROP_BIT("modern-pio-notify", VirtIOPCIProxy, flags,
1855                    VIRTIO_PCI_FLAG_MODERN_PIO_NOTIFY_BIT, false),
1856    DEFINE_PROP_BIT("x-disable-pcie", VirtIOPCIProxy, flags,
1857                    VIRTIO_PCI_FLAG_DISABLE_PCIE_BIT, false),
1858    DEFINE_PROP_BIT("page-per-vq", VirtIOPCIProxy, flags,
1859                    VIRTIO_PCI_FLAG_PAGE_PER_VQ_BIT, false),
1860    DEFINE_PROP_BOOL("x-ignore-backend-features", VirtIOPCIProxy,
1861                     ignore_backend_features, false),
1862    DEFINE_PROP_END_OF_LIST(),
1863};
1864
1865static void virtio_pci_dc_realize(DeviceState *qdev, Error **errp)
1866{
1867    VirtioPCIClass *vpciklass = VIRTIO_PCI_GET_CLASS(qdev);
1868    VirtIOPCIProxy *proxy = VIRTIO_PCI(qdev);
1869    PCIDevice *pci_dev = &proxy->pci_dev;
1870
1871    if (!(proxy->flags & VIRTIO_PCI_FLAG_DISABLE_PCIE) &&
1872        virtio_pci_modern(proxy)) {
1873        pci_dev->cap_present |= QEMU_PCI_CAP_EXPRESS;
1874    }
1875
1876    vpciklass->parent_dc_realize(qdev, errp);
1877}
1878
1879static void virtio_pci_class_init(ObjectClass *klass, void *data)
1880{
1881    DeviceClass *dc = DEVICE_CLASS(klass);
1882    PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
1883    VirtioPCIClass *vpciklass = VIRTIO_PCI_CLASS(klass);
1884
1885    dc->props = virtio_pci_properties;
1886    k->realize = virtio_pci_realize;
1887    k->exit = virtio_pci_exit;
1888    k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET;
1889    k->revision = VIRTIO_PCI_ABI_VERSION;
1890    k->class_id = PCI_CLASS_OTHERS;
1891    vpciklass->parent_dc_realize = dc->realize;
1892    dc->realize = virtio_pci_dc_realize;
1893    dc->reset = virtio_pci_reset;
1894}
1895
1896static const TypeInfo virtio_pci_info = {
1897    .name          = TYPE_VIRTIO_PCI,
1898    .parent        = TYPE_PCI_DEVICE,
1899    .instance_size = sizeof(VirtIOPCIProxy),
1900    .class_init    = virtio_pci_class_init,
1901    .class_size    = sizeof(VirtioPCIClass),
1902    .abstract      = true,
1903};
1904
1905/* virtio-blk-pci */
1906
1907static Property virtio_blk_pci_properties[] = {
1908    DEFINE_PROP_UINT32("class", VirtIOPCIProxy, class_code, 0),
1909    DEFINE_PROP_BIT("ioeventfd", VirtIOPCIProxy, flags,
1910                    VIRTIO_PCI_FLAG_USE_IOEVENTFD_BIT, true),
1911    DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors, 2),
1912    DEFINE_PROP_END_OF_LIST(),
1913};
1914
1915static void virtio_blk_pci_realize(VirtIOPCIProxy *vpci_dev, Error **errp)
1916{
1917    VirtIOBlkPCI *dev = VIRTIO_BLK_PCI(vpci_dev);
1918    DeviceState *vdev = DEVICE(&dev->vdev);
1919
1920    qdev_set_parent_bus(vdev, BUS(&vpci_dev->bus));
1921    object_property_set_bool(OBJECT(vdev), true, "realized", errp);
1922}
1923
1924static void virtio_blk_pci_class_init(ObjectClass *klass, void *data)
1925{
1926    DeviceClass *dc = DEVICE_CLASS(klass);
1927    VirtioPCIClass *k = VIRTIO_PCI_CLASS(klass);
1928    PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass);
1929
1930    set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
1931    dc->props = virtio_blk_pci_properties;
1932    k->realize = virtio_blk_pci_realize;
1933    pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET;
1934    pcidev_k->device_id = PCI_DEVICE_ID_VIRTIO_BLOCK;
1935    pcidev_k->revision = VIRTIO_PCI_ABI_VERSION;
1936    pcidev_k->class_id = PCI_CLASS_STORAGE_SCSI;
1937}
1938
1939static void virtio_blk_pci_instance_init(Object *obj)
1940{
1941    VirtIOBlkPCI *dev = VIRTIO_BLK_PCI(obj);
1942
1943    virtio_instance_init_common(obj, &dev->vdev, sizeof(dev->vdev),
1944                                TYPE_VIRTIO_BLK);
1945    object_property_add_alias(obj, "iothread", OBJECT(&dev->vdev),"iothread",
1946                              &error_abort);
1947    object_property_add_alias(obj, "bootindex", OBJECT(&dev->vdev),
1948                              "bootindex", &error_abort);
1949}
1950
1951static const TypeInfo virtio_blk_pci_info = {
1952    .name          = TYPE_VIRTIO_BLK_PCI,
1953    .parent        = TYPE_VIRTIO_PCI,
1954    .instance_size = sizeof(VirtIOBlkPCI),
1955    .instance_init = virtio_blk_pci_instance_init,
1956    .class_init    = virtio_blk_pci_class_init,
1957};
1958
1959/* virtio-scsi-pci */
1960
1961static Property virtio_scsi_pci_properties[] = {
1962    DEFINE_PROP_BIT("ioeventfd", VirtIOPCIProxy, flags,
1963                    VIRTIO_PCI_FLAG_USE_IOEVENTFD_BIT, true),
1964    DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors,
1965                       DEV_NVECTORS_UNSPECIFIED),
1966    DEFINE_PROP_END_OF_LIST(),
1967};
1968
1969static void virtio_scsi_pci_realize(VirtIOPCIProxy *vpci_dev, Error **errp)
1970{
1971    VirtIOSCSIPCI *dev = VIRTIO_SCSI_PCI(vpci_dev);
1972    DeviceState *vdev = DEVICE(&dev->vdev);
1973    VirtIOSCSICommon *vs = VIRTIO_SCSI_COMMON(vdev);
1974    DeviceState *proxy = DEVICE(vpci_dev);
1975    char *bus_name;
1976
1977    if (vpci_dev->nvectors == DEV_NVECTORS_UNSPECIFIED) {
1978        vpci_dev->nvectors = vs->conf.num_queues + 3;
1979    }
1980
1981    /*
1982     * For command line compatibility, this sets the virtio-scsi-device bus
1983     * name as before.
1984     */
1985    if (proxy->id) {
1986        bus_name = g_strdup_printf("%s.0", proxy->id);
1987        virtio_device_set_child_bus_name(VIRTIO_DEVICE(vdev), bus_name);
1988        g_free(bus_name);
1989    }
1990
1991    qdev_set_parent_bus(vdev, BUS(&vpci_dev->bus));
1992    object_property_set_bool(OBJECT(vdev), true, "realized", errp);
1993}
1994
1995static void virtio_scsi_pci_class_init(ObjectClass *klass, void *data)
1996{
1997    DeviceClass *dc = DEVICE_CLASS(klass);
1998    VirtioPCIClass *k = VIRTIO_PCI_CLASS(klass);
1999    PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass);
2000
2001    k->realize = virtio_scsi_pci_realize;
2002    set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
2003    dc->props = virtio_scsi_pci_properties;
2004    pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET;
2005    pcidev_k->device_id = PCI_DEVICE_ID_VIRTIO_SCSI;
2006    pcidev_k->revision = 0x00;
2007    pcidev_k->class_id = PCI_CLASS_STORAGE_SCSI;
2008}
2009
2010static void virtio_scsi_pci_instance_init(Object *obj)
2011{
2012    VirtIOSCSIPCI *dev = VIRTIO_SCSI_PCI(obj);
2013
2014    virtio_instance_init_common(obj, &dev->vdev, sizeof(dev->vdev),
2015                                TYPE_VIRTIO_SCSI);
2016    object_property_add_alias(obj, "iothread", OBJECT(&dev->vdev), "iothread",
2017                              &error_abort);
2018}
2019
2020static const TypeInfo virtio_scsi_pci_info = {
2021    .name          = TYPE_VIRTIO_SCSI_PCI,
2022    .parent        = TYPE_VIRTIO_PCI,
2023    .instance_size = sizeof(VirtIOSCSIPCI),
2024    .instance_init = virtio_scsi_pci_instance_init,
2025    .class_init    = virtio_scsi_pci_class_init,
2026};
2027
2028/* vhost-scsi-pci */
2029
2030#ifdef CONFIG_VHOST_SCSI
2031static Property vhost_scsi_pci_properties[] = {
2032    DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors,
2033                       DEV_NVECTORS_UNSPECIFIED),
2034    DEFINE_PROP_END_OF_LIST(),
2035};
2036
2037static void vhost_scsi_pci_realize(VirtIOPCIProxy *vpci_dev, Error **errp)
2038{
2039    VHostSCSIPCI *dev = VHOST_SCSI_PCI(vpci_dev);
2040    DeviceState *vdev = DEVICE(&dev->vdev);
2041    VirtIOSCSICommon *vs = VIRTIO_SCSI_COMMON(vdev);
2042
2043    if (vpci_dev->nvectors == DEV_NVECTORS_UNSPECIFIED) {
2044        vpci_dev->nvectors = vs->conf.num_queues + 3;
2045    }
2046
2047    qdev_set_parent_bus(vdev, BUS(&vpci_dev->bus));
2048    object_property_set_bool(OBJECT(vdev), true, "realized", errp);
2049}
2050
2051static void vhost_scsi_pci_class_init(ObjectClass *klass, void *data)
2052{
2053    DeviceClass *dc = DEVICE_CLASS(klass);
2054    VirtioPCIClass *k = VIRTIO_PCI_CLASS(klass);
2055    PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass);
2056    k->realize = vhost_scsi_pci_realize;
2057    set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
2058    dc->props = vhost_scsi_pci_properties;
2059    pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET;
2060    pcidev_k->device_id = PCI_DEVICE_ID_VIRTIO_SCSI;
2061    pcidev_k->revision = 0x00;
2062    pcidev_k->class_id = PCI_CLASS_STORAGE_SCSI;
2063}
2064
2065static void vhost_scsi_pci_instance_init(Object *obj)
2066{
2067    VHostSCSIPCI *dev = VHOST_SCSI_PCI(obj);
2068
2069    virtio_instance_init_common(obj, &dev->vdev, sizeof(dev->vdev),
2070                                TYPE_VHOST_SCSI);
2071    object_property_add_alias(obj, "bootindex", OBJECT(&dev->vdev),
2072                              "bootindex", &error_abort);
2073}
2074
2075static const TypeInfo vhost_scsi_pci_info = {
2076    .name          = TYPE_VHOST_SCSI_PCI,
2077    .parent        = TYPE_VIRTIO_PCI,
2078    .instance_size = sizeof(VHostSCSIPCI),
2079    .instance_init = vhost_scsi_pci_instance_init,
2080    .class_init    = vhost_scsi_pci_class_init,
2081};
2082#endif
2083
2084/* vhost-vsock-pci */
2085
2086#ifdef CONFIG_VHOST_VSOCK
2087static Property vhost_vsock_pci_properties[] = {
2088    DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors, 3),
2089    DEFINE_PROP_END_OF_LIST(),
2090};
2091
2092static void vhost_vsock_pci_realize(VirtIOPCIProxy *vpci_dev, Error **errp)
2093{
2094    VHostVSockPCI *dev = VHOST_VSOCK_PCI(vpci_dev);
2095    DeviceState *vdev = DEVICE(&dev->vdev);
2096
2097    qdev_set_parent_bus(vdev, BUS(&vpci_dev->bus));
2098    object_property_set_bool(OBJECT(vdev), true, "realized", errp);
2099}
2100
2101static void vhost_vsock_pci_class_init(ObjectClass *klass, void *data)
2102{
2103    DeviceClass *dc = DEVICE_CLASS(klass);
2104    VirtioPCIClass *k = VIRTIO_PCI_CLASS(klass);
2105    PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass);
2106    k->realize = vhost_vsock_pci_realize;
2107    set_bit(DEVICE_CATEGORY_MISC, dc->categories);
2108    dc->props = vhost_vsock_pci_properties;
2109    pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET;
2110    pcidev_k->device_id = PCI_DEVICE_ID_VIRTIO_VSOCK;
2111    pcidev_k->revision = 0x00;
2112    pcidev_k->class_id = PCI_CLASS_COMMUNICATION_OTHER;
2113}
2114
2115static void vhost_vsock_pci_instance_init(Object *obj)
2116{
2117    VHostVSockPCI *dev = VHOST_VSOCK_PCI(obj);
2118
2119    virtio_instance_init_common(obj, &dev->vdev, sizeof(dev->vdev),
2120                                TYPE_VHOST_VSOCK);
2121}
2122
2123static const TypeInfo vhost_vsock_pci_info = {
2124    .name          = TYPE_VHOST_VSOCK_PCI,
2125    .parent        = TYPE_VIRTIO_PCI,
2126    .instance_size = sizeof(VHostVSockPCI),
2127    .instance_init = vhost_vsock_pci_instance_init,
2128    .class_init    = vhost_vsock_pci_class_init,
2129};
2130#endif
2131
2132/* virtio-balloon-pci */
2133
2134static Property virtio_balloon_pci_properties[] = {
2135    DEFINE_PROP_UINT32("class", VirtIOPCIProxy, class_code, 0),
2136    DEFINE_PROP_END_OF_LIST(),
2137};
2138
2139static void virtio_balloon_pci_realize(VirtIOPCIProxy *vpci_dev, Error **errp)
2140{
2141    VirtIOBalloonPCI *dev = VIRTIO_BALLOON_PCI(vpci_dev);
2142    DeviceState *vdev = DEVICE(&dev->vdev);
2143
2144    if (vpci_dev->class_code != PCI_CLASS_OTHERS &&
2145        vpci_dev->class_code != PCI_CLASS_MEMORY_RAM) { /* qemu < 1.1 */
2146        vpci_dev->class_code = PCI_CLASS_OTHERS;
2147    }
2148
2149    qdev_set_parent_bus(vdev, BUS(&vpci_dev->bus));
2150    object_property_set_bool(OBJECT(vdev), true, "realized", errp);
2151}
2152
2153static void virtio_balloon_pci_class_init(ObjectClass *klass, void *data)
2154{
2155    DeviceClass *dc = DEVICE_CLASS(klass);
2156    VirtioPCIClass *k = VIRTIO_PCI_CLASS(klass);
2157    PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass);
2158    k->realize = virtio_balloon_pci_realize;
2159    set_bit(DEVICE_CATEGORY_MISC, dc->categories);
2160    dc->props = virtio_balloon_pci_properties;
2161    pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET;
2162    pcidev_k->device_id = PCI_DEVICE_ID_VIRTIO_BALLOON;
2163    pcidev_k->revision = VIRTIO_PCI_ABI_VERSION;
2164    pcidev_k->class_id = PCI_CLASS_OTHERS;
2165}
2166
2167static void virtio_balloon_pci_instance_init(Object *obj)
2168{
2169    VirtIOBalloonPCI *dev = VIRTIO_BALLOON_PCI(obj);
2170
2171    virtio_instance_init_common(obj, &dev->vdev, sizeof(dev->vdev),
2172                                TYPE_VIRTIO_BALLOON);
2173    object_property_add_alias(obj, "guest-stats", OBJECT(&dev->vdev),
2174                                  "guest-stats", &error_abort);
2175    object_property_add_alias(obj, "guest-stats-polling-interval",
2176                              OBJECT(&dev->vdev),
2177                              "guest-stats-polling-interval", &error_abort);
2178}
2179
2180static const TypeInfo virtio_balloon_pci_info = {
2181    .name          = TYPE_VIRTIO_BALLOON_PCI,
2182    .parent        = TYPE_VIRTIO_PCI,
2183    .instance_size = sizeof(VirtIOBalloonPCI),
2184    .instance_init = virtio_balloon_pci_instance_init,
2185    .class_init    = virtio_balloon_pci_class_init,
2186};
2187
2188/* virtio-serial-pci */
2189
2190static void virtio_serial_pci_realize(VirtIOPCIProxy *vpci_dev, Error **errp)
2191{
2192    VirtIOSerialPCI *dev = VIRTIO_SERIAL_PCI(vpci_dev);
2193    DeviceState *vdev = DEVICE(&dev->vdev);
2194    DeviceState *proxy = DEVICE(vpci_dev);
2195    char *bus_name;
2196
2197    if (vpci_dev->class_code != PCI_CLASS_COMMUNICATION_OTHER &&
2198        vpci_dev->class_code != PCI_CLASS_DISPLAY_OTHER && /* qemu 0.10 */
2199        vpci_dev->class_code != PCI_CLASS_OTHERS) {        /* qemu-kvm  */
2200            vpci_dev->class_code = PCI_CLASS_COMMUNICATION_OTHER;
2201    }
2202
2203    /* backwards-compatibility with machines that were created with
2204       DEV_NVECTORS_UNSPECIFIED */
2205    if (vpci_dev->nvectors == DEV_NVECTORS_UNSPECIFIED) {
2206        vpci_dev->nvectors = dev->vdev.serial.max_virtserial_ports + 1;
2207    }
2208
2209    /*
2210     * For command line compatibility, this sets the virtio-serial-device bus
2211     * name as before.
2212     */
2213    if (proxy->id) {
2214        bus_name = g_strdup_printf("%s.0", proxy->id);
2215        virtio_device_set_child_bus_name(VIRTIO_DEVICE(vdev), bus_name);
2216        g_free(bus_name);
2217    }
2218
2219    qdev_set_parent_bus(vdev, BUS(&vpci_dev->bus));
2220    object_property_set_bool(OBJECT(vdev), true, "realized", errp);
2221}
2222
2223static Property virtio_serial_pci_properties[] = {
2224    DEFINE_PROP_BIT("ioeventfd", VirtIOPCIProxy, flags,
2225                    VIRTIO_PCI_FLAG_USE_IOEVENTFD_BIT, true),
2226    DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors, 2),
2227    DEFINE_PROP_UINT32("class", VirtIOPCIProxy, class_code, 0),
2228    DEFINE_PROP_END_OF_LIST(),
2229};
2230
2231static void virtio_serial_pci_class_init(ObjectClass *klass, void *data)
2232{
2233    DeviceClass *dc = DEVICE_CLASS(klass);
2234    VirtioPCIClass *k = VIRTIO_PCI_CLASS(klass);
2235    PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass);
2236    k->realize = virtio_serial_pci_realize;
2237    set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
2238    dc->props = virtio_serial_pci_properties;
2239    pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET;
2240    pcidev_k->device_id = PCI_DEVICE_ID_VIRTIO_CONSOLE;
2241    pcidev_k->revision = VIRTIO_PCI_ABI_VERSION;
2242    pcidev_k->class_id = PCI_CLASS_COMMUNICATION_OTHER;
2243}
2244
2245static void virtio_serial_pci_instance_init(Object *obj)
2246{
2247    VirtIOSerialPCI *dev = VIRTIO_SERIAL_PCI(obj);
2248
2249    virtio_instance_init_common(obj, &dev->vdev, sizeof(dev->vdev),
2250                                TYPE_VIRTIO_SERIAL);
2251}
2252
2253static const TypeInfo virtio_serial_pci_info = {
2254    .name          = TYPE_VIRTIO_SERIAL_PCI,
2255    .parent        = TYPE_VIRTIO_PCI,
2256    .instance_size = sizeof(VirtIOSerialPCI),
2257    .instance_init = virtio_serial_pci_instance_init,
2258    .class_init    = virtio_serial_pci_class_init,
2259};
2260
2261/* virtio-net-pci */
2262
2263static Property virtio_net_properties[] = {
2264    DEFINE_PROP_BIT("ioeventfd", VirtIOPCIProxy, flags,
2265                    VIRTIO_PCI_FLAG_USE_IOEVENTFD_BIT, false),
2266    DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors, 3),
2267    DEFINE_PROP_END_OF_LIST(),
2268};
2269
2270static void virtio_net_pci_realize(VirtIOPCIProxy *vpci_dev, Error **errp)
2271{
2272    DeviceState *qdev = DEVICE(vpci_dev);
2273    VirtIONetPCI *dev = VIRTIO_NET_PCI(vpci_dev);
2274    DeviceState *vdev = DEVICE(&dev->vdev);
2275
2276    virtio_net_set_netclient_name(&dev->vdev, qdev->id,
2277                                  object_get_typename(OBJECT(qdev)));
2278    qdev_set_parent_bus(vdev, BUS(&vpci_dev->bus));
2279    object_property_set_bool(OBJECT(vdev), true, "realized", errp);
2280}
2281
2282static void virtio_net_pci_class_init(ObjectClass *klass, void *data)
2283{
2284    DeviceClass *dc = DEVICE_CLASS(klass);
2285    PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
2286    VirtioPCIClass *vpciklass = VIRTIO_PCI_CLASS(klass);
2287
2288    k->romfile = "efi-virtio.rom";
2289    k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET;
2290    k->device_id = PCI_DEVICE_ID_VIRTIO_NET;
2291    k->revision = VIRTIO_PCI_ABI_VERSION;
2292    k->class_id = PCI_CLASS_NETWORK_ETHERNET;
2293    set_bit(DEVICE_CATEGORY_NETWORK, dc->categories);
2294    dc->props = virtio_net_properties;
2295    vpciklass->realize = virtio_net_pci_realize;
2296}
2297
2298static void virtio_net_pci_instance_init(Object *obj)
2299{
2300    VirtIONetPCI *dev = VIRTIO_NET_PCI(obj);
2301
2302    virtio_instance_init_common(obj, &dev->vdev, sizeof(dev->vdev),
2303                                TYPE_VIRTIO_NET);
2304    object_property_add_alias(obj, "bootindex", OBJECT(&dev->vdev),
2305                              "bootindex", &error_abort);
2306}
2307
2308static const TypeInfo virtio_net_pci_info = {
2309    .name          = TYPE_VIRTIO_NET_PCI,
2310    .parent        = TYPE_VIRTIO_PCI,
2311    .instance_size = sizeof(VirtIONetPCI),
2312    .instance_init = virtio_net_pci_instance_init,
2313    .class_init    = virtio_net_pci_class_init,
2314};
2315
2316/* virtio-rng-pci */
2317
2318static void virtio_rng_pci_realize(VirtIOPCIProxy *vpci_dev, Error **errp)
2319{
2320    VirtIORngPCI *vrng = VIRTIO_RNG_PCI(vpci_dev);
2321    DeviceState *vdev = DEVICE(&vrng->vdev);
2322    Error *err = NULL;
2323
2324    qdev_set_parent_bus(vdev, BUS(&vpci_dev->bus));
2325    object_property_set_bool(OBJECT(vdev), true, "realized", &err);
2326    if (err) {
2327        error_propagate(errp, err);
2328        return;
2329    }
2330
2331    object_property_set_link(OBJECT(vrng),
2332                             OBJECT(vrng->vdev.conf.rng), "rng",
2333                             NULL);
2334}
2335
2336static void virtio_rng_pci_class_init(ObjectClass *klass, void *data)
2337{
2338    DeviceClass *dc = DEVICE_CLASS(klass);
2339    VirtioPCIClass *k = VIRTIO_PCI_CLASS(klass);
2340    PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass);
2341
2342    k->realize = virtio_rng_pci_realize;
2343    set_bit(DEVICE_CATEGORY_MISC, dc->categories);
2344
2345    pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET;
2346    pcidev_k->device_id = PCI_DEVICE_ID_VIRTIO_RNG;
2347    pcidev_k->revision = VIRTIO_PCI_ABI_VERSION;
2348    pcidev_k->class_id = PCI_CLASS_OTHERS;
2349}
2350
2351static void virtio_rng_initfn(Object *obj)
2352{
2353    VirtIORngPCI *dev = VIRTIO_RNG_PCI(obj);
2354
2355    virtio_instance_init_common(obj, &dev->vdev, sizeof(dev->vdev),
2356                                TYPE_VIRTIO_RNG);
2357    object_property_add_alias(obj, "rng", OBJECT(&dev->vdev), "rng",
2358                              &error_abort);
2359}
2360
2361static const TypeInfo virtio_rng_pci_info = {
2362    .name          = TYPE_VIRTIO_RNG_PCI,
2363    .parent        = TYPE_VIRTIO_PCI,
2364    .instance_size = sizeof(VirtIORngPCI),
2365    .instance_init = virtio_rng_initfn,
2366    .class_init    = virtio_rng_pci_class_init,
2367};
2368
2369/* virtio-input-pci */
2370
2371static Property virtio_input_pci_properties[] = {
2372    DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors, 2),
2373    DEFINE_PROP_END_OF_LIST(),
2374};
2375
2376static void virtio_input_pci_realize(VirtIOPCIProxy *vpci_dev, Error **errp)
2377{
2378    VirtIOInputPCI *vinput = VIRTIO_INPUT_PCI(vpci_dev);
2379    DeviceState *vdev = DEVICE(&vinput->vdev);
2380
2381    qdev_set_parent_bus(vdev, BUS(&vpci_dev->bus));
2382    virtio_pci_force_virtio_1(vpci_dev);
2383    object_property_set_bool(OBJECT(vdev), true, "realized", errp);
2384}
2385
2386static void virtio_input_pci_class_init(ObjectClass *klass, void *data)
2387{
2388    DeviceClass *dc = DEVICE_CLASS(klass);
2389    VirtioPCIClass *k = VIRTIO_PCI_CLASS(klass);
2390    PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass);
2391
2392    dc->props = virtio_input_pci_properties;
2393    k->realize = virtio_input_pci_realize;
2394    set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
2395
2396    pcidev_k->class_id = PCI_CLASS_INPUT_OTHER;
2397}
2398
2399static void virtio_input_hid_kbd_pci_class_init(ObjectClass *klass, void *data)
2400{
2401    PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass);
2402
2403    pcidev_k->class_id = PCI_CLASS_INPUT_KEYBOARD;
2404}
2405
2406static void virtio_input_hid_mouse_pci_class_init(ObjectClass *klass,
2407                                                  void *data)
2408{
2409    PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass);
2410
2411    pcidev_k->class_id = PCI_CLASS_INPUT_MOUSE;
2412}
2413
2414static void virtio_keyboard_initfn(Object *obj)
2415{
2416    VirtIOInputHIDPCI *dev = VIRTIO_INPUT_HID_PCI(obj);
2417
2418    virtio_instance_init_common(obj, &dev->vdev, sizeof(dev->vdev),
2419                                TYPE_VIRTIO_KEYBOARD);
2420}
2421
2422static void virtio_mouse_initfn(Object *obj)
2423{
2424    VirtIOInputHIDPCI *dev = VIRTIO_INPUT_HID_PCI(obj);
2425
2426    virtio_instance_init_common(obj, &dev->vdev, sizeof(dev->vdev),
2427                                TYPE_VIRTIO_MOUSE);
2428}
2429
2430static void virtio_tablet_initfn(Object *obj)
2431{
2432    VirtIOInputHIDPCI *dev = VIRTIO_INPUT_HID_PCI(obj);
2433
2434    virtio_instance_init_common(obj, &dev->vdev, sizeof(dev->vdev),
2435                                TYPE_VIRTIO_TABLET);
2436}
2437
2438static const TypeInfo virtio_input_pci_info = {
2439    .name          = TYPE_VIRTIO_INPUT_PCI,
2440    .parent        = TYPE_VIRTIO_PCI,
2441    .instance_size = sizeof(VirtIOInputPCI),
2442    .class_init    = virtio_input_pci_class_init,
2443    .abstract      = true,
2444};
2445
2446static const TypeInfo virtio_input_hid_pci_info = {
2447    .name          = TYPE_VIRTIO_INPUT_HID_PCI,
2448    .parent        = TYPE_VIRTIO_INPUT_PCI,
2449    .instance_size = sizeof(VirtIOInputHIDPCI),
2450    .abstract      = true,
2451};
2452
2453static const TypeInfo virtio_keyboard_pci_info = {
2454    .name          = TYPE_VIRTIO_KEYBOARD_PCI,
2455    .parent        = TYPE_VIRTIO_INPUT_HID_PCI,
2456    .class_init    = virtio_input_hid_kbd_pci_class_init,
2457    .instance_size = sizeof(VirtIOInputHIDPCI),
2458    .instance_init = virtio_keyboard_initfn,
2459};
2460
2461static const TypeInfo virtio_mouse_pci_info = {
2462    .name          = TYPE_VIRTIO_MOUSE_PCI,
2463    .parent        = TYPE_VIRTIO_INPUT_HID_PCI,
2464    .class_init    = virtio_input_hid_mouse_pci_class_init,
2465    .instance_size = sizeof(VirtIOInputHIDPCI),
2466    .instance_init = virtio_mouse_initfn,
2467};
2468
2469static const TypeInfo virtio_tablet_pci_info = {
2470    .name          = TYPE_VIRTIO_TABLET_PCI,
2471    .parent        = TYPE_VIRTIO_INPUT_HID_PCI,
2472    .instance_size = sizeof(VirtIOInputHIDPCI),
2473    .instance_init = virtio_tablet_initfn,
2474};
2475
2476#ifdef CONFIG_LINUX
2477static void virtio_host_initfn(Object *obj)
2478{
2479    VirtIOInputHostPCI *dev = VIRTIO_INPUT_HOST_PCI(obj);
2480
2481    virtio_instance_init_common(obj, &dev->vdev, sizeof(dev->vdev),
2482                                TYPE_VIRTIO_INPUT_HOST);
2483}
2484
2485static const TypeInfo virtio_host_pci_info = {
2486    .name          = TYPE_VIRTIO_INPUT_HOST_PCI,
2487    .parent        = TYPE_VIRTIO_INPUT_PCI,
2488    .instance_size = sizeof(VirtIOInputHostPCI),
2489    .instance_init = virtio_host_initfn,
2490};
2491#endif
2492
2493/* virtio-pci-bus */
2494
2495static void virtio_pci_bus_new(VirtioBusState *bus, size_t bus_size,
2496                               VirtIOPCIProxy *dev)
2497{
2498    DeviceState *qdev = DEVICE(dev);
2499    char virtio_bus_name[] = "virtio-bus";
2500
2501    qbus_create_inplace(bus, bus_size, TYPE_VIRTIO_PCI_BUS, qdev,
2502                        virtio_bus_name);
2503}
2504
2505static void virtio_pci_bus_class_init(ObjectClass *klass, void *data)
2506{
2507    BusClass *bus_class = BUS_CLASS(klass);
2508    VirtioBusClass *k = VIRTIO_BUS_CLASS(klass);
2509    bus_class->max_dev = 1;
2510    k->notify = virtio_pci_notify;
2511    k->save_config = virtio_pci_save_config;
2512    k->load_config = virtio_pci_load_config;
2513    k->save_queue = virtio_pci_save_queue;
2514    k->load_queue = virtio_pci_load_queue;
2515    k->save_extra_state = virtio_pci_save_extra_state;
2516    k->load_extra_state = virtio_pci_load_extra_state;
2517    k->has_extra_state = virtio_pci_has_extra_state;
2518    k->query_guest_notifiers = virtio_pci_query_guest_notifiers;
2519    k->set_guest_notifiers = virtio_pci_set_guest_notifiers;
2520    k->vmstate_change = virtio_pci_vmstate_change;
2521    k->pre_plugged = virtio_pci_pre_plugged;
2522    k->device_plugged = virtio_pci_device_plugged;
2523    k->device_unplugged = virtio_pci_device_unplugged;
2524    k->query_nvectors = virtio_pci_query_nvectors;
2525    k->ioeventfd_enabled = virtio_pci_ioeventfd_enabled;
2526    k->ioeventfd_assign = virtio_pci_ioeventfd_assign;
2527}
2528
2529static const TypeInfo virtio_pci_bus_info = {
2530    .name          = TYPE_VIRTIO_PCI_BUS,
2531    .parent        = TYPE_VIRTIO_BUS,
2532    .instance_size = sizeof(VirtioPCIBusState),
2533    .class_init    = virtio_pci_bus_class_init,
2534};
2535
2536static void virtio_pci_register_types(void)
2537{
2538    type_register_static(&virtio_rng_pci_info);
2539    type_register_static(&virtio_input_pci_info);
2540    type_register_static(&virtio_input_hid_pci_info);
2541    type_register_static(&virtio_keyboard_pci_info);
2542    type_register_static(&virtio_mouse_pci_info);
2543    type_register_static(&virtio_tablet_pci_info);
2544#ifdef CONFIG_LINUX
2545    type_register_static(&virtio_host_pci_info);
2546#endif
2547    type_register_static(&virtio_pci_bus_info);
2548    type_register_static(&virtio_pci_info);
2549#ifdef CONFIG_VIRTFS
2550    type_register_static(&virtio_9p_pci_info);
2551#endif
2552    type_register_static(&virtio_blk_pci_info);
2553    type_register_static(&virtio_scsi_pci_info);
2554    type_register_static(&virtio_balloon_pci_info);
2555    type_register_static(&virtio_serial_pci_info);
2556    type_register_static(&virtio_net_pci_info);
2557#ifdef CONFIG_VHOST_SCSI
2558    type_register_static(&vhost_scsi_pci_info);
2559#endif
2560#ifdef CONFIG_VHOST_VSOCK
2561    type_register_static(&vhost_vsock_pci_info);
2562#endif
2563}
2564
2565type_init(virtio_pci_register_types)
2566