"display", /* 230 */
"intel-iommu",
"smm",
+ "virtio-pci-disable-legacy",
);
ARRAY_CARDINALITY(virQEMUCapsObjectPropsUSBNECXHCI) },
};
+struct virQEMUCapsPropTypeObjects {
+ const char *prop;
+ int flag;
+ const char **objects;
+};
+
+static const char *virQEMUCapsVirtioPCIDisableLegacyObjects[] = {
+ "virtio-balloon-pci",
+ "virtio-blk-pci",
+ "virtio-scsi-pci",
+ "virtio-serial-pci",
+ "virtio-9p-pci",
+ "virtio-net-pci",
+ "virtio-rng-pci",
+ "virtio-gpu-pci",
+ "virtio-input-host-pci",
+ "virtio-keyboard-pci",
+ "virtio-mouse-pci",
+ "virtio-tablet-pci",
+ NULL
+};
+
+static struct virQEMUCapsPropTypeObjects virQEMUCapsPropObjects[] = {
+ { "disable-legacy",
+ QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY,
+ virQEMUCapsVirtioPCIDisableLegacyObjects }
+};
+
static void
virQEMUCapsProcessStringFlags(virQEMUCapsPtr qemuCaps,
}
+static void
+virQEMUCapsProcessProps(virQEMUCapsPtr qemuCaps,
+ size_t nprops,
+ struct virQEMUCapsPropTypeObjects *props,
+ const char *object,
+ size_t nvalues,
+ char *const*values)
+{
+ size_t i, j;
+
+ for (i = 0; i < nprops; i++) {
+ if (virQEMUCapsGet(qemuCaps, props[i].flag))
+ continue;
+
+ for (j = 0; j < nvalues; j++) {
+ if (STREQ(values[j], props[i].prop)) {
+ if (virStringArrayHasString(props[i].objects, object))
+ virQEMUCapsSet(qemuCaps, props[i].flag);
+ break;
+ }
+ }
+ }
+}
+
+
static void
virQEMUCapsFreeStringList(size_t len,
char **values)
virQEMUCapsObjectProps[i].nprops,
virQEMUCapsObjectProps[i].props,
nvalues, values);
+ virQEMUCapsProcessProps(qemuCaps,
+ ARRAY_CARDINALITY(virQEMUCapsPropObjects),
+ virQEMUCapsPropObjects, type,
+ nvalues, values);
virQEMUCapsFreeStringList(nvalues, values);
}
QEMU_CAPS_DISPLAY, /* -display */
QEMU_CAPS_DEVICE_INTEL_IOMMU, /* -device intel-iommu */
QEMU_CAPS_MACHINE_SMM_OPT, /* -machine xxx,smm=on/off/auto */
+ QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY, /* virtio-*pci.disable-legacy */
QEMU_CAPS_LAST /* this must always be the last item */
} virQEMUCapsFlags;