qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Gerd Hoffmann <kraxel@redhat.com>
To: qemu-devel@nongnu.org
Cc: Cornelia Huck <cornelia.huck@de.ibm.com>,
	Gerd Hoffmann <kraxel@redhat.com>,
	"Michael S. Tsirkin" <mst@redhat.com>
Subject: [Qemu-devel] [PATCH 17/33] virtio-pci: add flags to enable/disable legacy/modern
Date: Thu,  4 Jun 2015 12:34:26 +0200	[thread overview]
Message-ID: <1433414083-9720-18-git-send-email-kraxel@redhat.com> (raw)
In-Reply-To: <1433414083-9720-1-git-send-email-kraxel@redhat.com>

Add VIRTIO_PCI_FLAG_DISABLE_LEGACY and VIRTIO_PCI_FLAG_DISABLE_MODERN
for VirtIOPCIProxy->flags.  Also add properties for them.  They can be
used to disable modern (virtio 1.0) or legacy (virtio 0.9) modes.

By default only legacy is advertized, modern will be turned on by
default once all remaining spec compilance issues are addressed.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
 hw/virtio/virtio-pci.c | 48 ++++++++++++++++++++++++++++++++++--------------
 hw/virtio/virtio-pci.h |  6 ++++++
 2 files changed, 40 insertions(+), 14 deletions(-)

diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c
index ddeaf63..2182b41 100644
--- a/hw/virtio/virtio-pci.c
+++ b/hw/virtio/virtio-pci.c
@@ -1190,6 +1190,8 @@ static void virtio_pci_device_plugged(DeviceState *d, Error **errp)
 {
     VirtIOPCIProxy *proxy = VIRTIO_PCI(d);
     VirtioBusState *bus = &proxy->bus;
+    bool legacy = !(proxy->flags & VIRTIO_PCI_FLAG_DISABLE_LEGACY);
+    bool modern = !(proxy->flags & VIRTIO_PCI_FLAG_DISABLE_MODERN);
     uint8_t *config;
     uint32_t size;
     VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus);
@@ -1198,13 +1200,24 @@ static void virtio_pci_device_plugged(DeviceState *d, Error **errp)
     if (proxy->class_code) {
         pci_config_set_class(config, proxy->class_code);
     }
-    pci_set_word(config + PCI_SUBSYSTEM_VENDOR_ID,
-                 pci_get_word(config + PCI_VENDOR_ID));
-    pci_set_word(config + PCI_SUBSYSTEM_ID, virtio_bus_get_vdev_id(bus));
+
+    if (legacy) {
+        /* legacy and transitional */
+        pci_set_word(config + PCI_SUBSYSTEM_VENDOR_ID,
+                     pci_get_word(config + PCI_VENDOR_ID));
+        pci_set_word(config + PCI_SUBSYSTEM_ID, virtio_bus_get_vdev_id(bus));
+    } else {
+        /* pure virtio-1.0 */
+        pci_set_word(config + PCI_VENDOR_ID,
+                     PCI_VENDOR_ID_REDHAT_QUMRANET);
+        pci_set_word(config + PCI_DEVICE_ID,
+                     0x1040 + virtio_bus_get_vdev_id(bus));
+        pci_config_set_revision(config, 1);
+    }
     config[PCI_INTERRUPT_PIN] = 1;
 
 
-    if (1) { /* TODO: Make this optional, dependent on virtio 1.0 */
+    if (modern) {
         struct virtio_pci_cap common = {
             .cfg_type = VIRTIO_PCI_CAP_COMMON_CFG,
             .cap_len = sizeof common,
@@ -1318,18 +1331,21 @@ static void virtio_pci_device_plugged(DeviceState *d, Error **errp)
 
     proxy->pci_dev.config_write = virtio_write_config;
 
-    size = VIRTIO_PCI_REGION_SIZE(&proxy->pci_dev)
-         + virtio_bus_get_vdev_config_len(bus);
-    if (size & (size - 1)) {
-        size = 1 << qemu_fls(size);
+    if (legacy) {
+        size = VIRTIO_PCI_REGION_SIZE(&proxy->pci_dev)
+            + virtio_bus_get_vdev_config_len(bus);
+        if (size & (size - 1)) {
+            size = 1 << qemu_fls(size);
+        }
+
+        memory_region_init_io(&proxy->bar, OBJECT(proxy),
+                              &virtio_pci_config_ops,
+                              proxy, "virtio-pci", size);
+
+        pci_register_bar(&proxy->pci_dev, 0, PCI_BASE_ADDRESS_SPACE_IO,
+                         &proxy->bar);
     }
 
-    memory_region_init_io(&proxy->bar, OBJECT(proxy), &virtio_pci_config_ops,
-                          proxy, "virtio-pci", size);
-
-    pci_register_bar(&proxy->pci_dev, 0, PCI_BASE_ADDRESS_SPACE_IO,
-                     &proxy->bar);
-
     if (!kvm_has_many_ioeventfds()) {
         proxy->flags &= ~VIRTIO_PCI_FLAG_USE_IOEVENTFD;
     }
@@ -1372,6 +1388,10 @@ static void virtio_pci_reset(DeviceState *qdev)
 static Property virtio_pci_properties[] = {
     DEFINE_PROP_BIT("virtio-pci-bus-master-bug-migration", VirtIOPCIProxy, flags,
                     VIRTIO_PCI_FLAG_BUS_MASTER_BUG_MIGRATION_BIT, false),
+    DEFINE_PROP_BIT("disable-legacy", VirtIOPCIProxy, flags,
+                    VIRTIO_PCI_FLAG_DISABLE_LEGACY_BIT, false),
+    DEFINE_PROP_BIT("disable-modern", VirtIOPCIProxy, flags,
+                    VIRTIO_PCI_FLAG_DISABLE_MODERN_BIT, true),
     DEFINE_PROP_END_OF_LIST(),
 };
 
diff --git a/hw/virtio/virtio-pci.h b/hw/virtio/virtio-pci.h
index 7a6481f..4e9b2db 100644
--- a/hw/virtio/virtio-pci.h
+++ b/hw/virtio/virtio-pci.h
@@ -63,6 +63,12 @@ typedef struct VirtioBusClass VirtioPCIBusClass;
 #define VIRTIO_PCI_FLAG_USE_IOEVENTFD_BIT 1
 #define VIRTIO_PCI_FLAG_USE_IOEVENTFD   (1 << VIRTIO_PCI_FLAG_USE_IOEVENTFD_BIT)
 
+/* virtio version flags */
+#define VIRTIO_PCI_FLAG_DISABLE_LEGACY_BIT 2
+#define VIRTIO_PCI_FLAG_DISABLE_MODERN_BIT 3
+#define VIRTIO_PCI_FLAG_DISABLE_LEGACY (1 << VIRTIO_PCI_FLAG_DISABLE_LEGACY_BIT)
+#define VIRTIO_PCI_FLAG_DISABLE_MODERN (1 << VIRTIO_PCI_FLAG_DISABLE_MODERN_BIT)
+
 typedef struct {
     MSIMessage msg;
     int virq;
-- 
1.8.3.1

  parent reply	other threads:[~2015-06-04 10:35 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-06-04 10:34 [Qemu-devel] [PATCH 00/33] virtio 1.0 patch series rebased Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 01/33] virtio: 64bit features fixups Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 02/33] virtio: endianness checks for virtio 1.0 devices Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 03/33] virtio: allow virtio-1 queue layout Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 04/33] dataplane: allow virtio-1 devices Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 05/33] virtio: disallow late feature changes for virtio-1 Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 06/33] virtio: allow to fail setting status Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 07/33] virtio-net: no writeable mac for virtio-1 Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 08/33] virtio-net: support longer header Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 09/33] virtio-net: enable virtio 1.0 Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 10/33] vhost_net: add version_1 feature Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 11/33] vhost: 64 bit features Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 12/33] linux-headers: add virtio_pci Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 13/33] virtio-pci: initial virtio 1.0 support Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 14/33] virtio: generation counter support Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 15/33] virtio: add modern config accessors Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 16/33] virtio-pci: switch to modern accessors for 1.0 Gerd Hoffmann
2015-06-04 10:34 ` Gerd Hoffmann [this message]
2015-06-04 10:52   ` [Qemu-devel] [PATCH 17/33] virtio-pci: add flags to enable/disable legacy/modern Daniel P. Berrange
2015-06-04 11:07     ` Michael S. Tsirkin
2015-06-04 15:13     ` Gerd Hoffmann
2015-06-05 13:01       ` Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 18/33] virtio-pci: make QEMU_VIRTIO_PCI_QUEUE_MEM_MULT smaller Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 19/33] virtio-pci: change & document virtio pci bar layout Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 20/33] virtio-pci: make modern bar 64bit + prefetchable Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 21/33] virtio-pci: correctly set host notifiers for modern bar Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 22/33] virtio_balloon: header update Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 23/33] virtio-balloon: switch to virtio_add_feature Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 24/33] virtio-pci: add struct VirtIOPCIRegion for virtio-1 regions Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 25/33] virtio-pci: add virtio_pci_modern_regions_init() Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 26/33] virtio-pci: add virtio_pci_modern_region_map() Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 27/33] virtio-pci: move virtio_pci_add_mem_cap call to virtio_pci_modern_region_map Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 28/33] virtio-pci: move cap type to VirtIOPCIRegion Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 29/33] virtio-pci: drop identical virtio_pci_cap Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 30/33] virtio-pci: fill VirtIOPCIRegions early Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 31/33] pci: add PCI_CLASS_INPUT_* Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 32/33] virtio-input: core code & base class [pci] Gerd Hoffmann
2015-06-04 10:34 ` [Qemu-devel] [PATCH 33/33] virtio-input: emulated devices [pci] Gerd Hoffmann
2015-06-04 11:02 ` [Qemu-devel] [PATCH 00/33] virtio 1.0 patch series rebased Michael S. Tsirkin
2015-06-11  8:26   ` Gerd Hoffmann
2015-06-11 10:32     ` Michael S. Tsirkin
2015-06-09 10:32 ` Gerd Hoffmann
2015-06-09 10:53   ` Michael S. Tsirkin
2015-06-10 12:36 ` Michael S. Tsirkin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1433414083-9720-18-git-send-email-kraxel@redhat.com \
    --to=kraxel@redhat.com \
    --cc=cornelia.huck@de.ibm.com \
    --cc=mst@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).