qemu_capabilities.h 23.3 KB
Newer Older
1 2 3
/*
 * qemu_capabilities.h: QEMU capabilities generation
 *
4
 * Copyright (C) 2006-2016 Red Hat, Inc.
5 6 7 8 9 10 11 12 13 14 15 16 17
 * Copyright (C) 2006 Daniel P. Berrange
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
18
 * License along with this library.  If not, see
O
Osier Yang 已提交
19
 * <http://www.gnu.org/licenses/>.
20 21 22 23 24 25 26
 *
 * Author: Daniel P. Berrange <berrange@redhat.com>
 */

#ifndef __QEMU_CAPABILITIES_H__
# define __QEMU_CAPABILITIES_H__

27
# include "virobject.h"
28
# include "capabilities.h"
29
# include "vircommand.h"
30
# include "qemu_monitor.h"
31
# include "domain_capabilities.h"
32
# include "virfirmware.h"
33

34 35 36 37 38 39 40 41 42 43 44 45 46 47
/*
 * Internal flags to keep track of qemu command line capabilities
 *
 * As a general rule these flags must not be deleted / renamed, as
 * they are serialized in string format into the runtime XML file
 * for guests, and new libvirt needs to cope with reading flags
 * defined by old libvirt.
 *
 * The exception to this rule is when we drop support for running
 * with older QEMU versions entirely. When a flag is no longer needed
 * we temporarily give it an X_ prefix to indicate it should no
 * longer be used in code. Periodically we can then purge all the
 * X_ flags and re-group what's left.
 */
48
typedef enum {
49
    /* 0 */
50
    X_QEMU_CAPS_KQEMU, /* Whether KQEMU is compiled in */
51
    X_QEMU_CAPS_VNC_COLON, /* VNC takes or address + display */
52
    X_QEMU_CAPS_NO_REBOOT, /* Is the -no-reboot flag available */
53
    X_QEMU_CAPS_DRIVE, /* Is the new -drive arg available */
54 55 56
    QEMU_CAPS_DRIVE_BOOT, /* Does -drive support boot=on */

    /* 5 */
57
    X_QEMU_CAPS_NAME, /* Is the -name flag available */
58
    X_QEMU_CAPS_UUID, /* Is the -uuid flag available */
59
    X_QEMU_CAPS_DOMID, /* Xenner: -domid flag available */
60
    X_QEMU_CAPS_VNET_HDR,
61
    X_QEMU_CAPS_MIGRATE_KVM_STDIO, /* avoid kvm tcp migration bug */
62 63

    /* 10 */
64 65
    X_QEMU_CAPS_MIGRATE_QEMU_TCP, /* have qemu tcp migration */
    X_QEMU_CAPS_MIGRATE_QEMU_EXEC, /* have qemu exec migration */
66
    X_QEMU_CAPS_DRIVE_CACHE_V2, /* cache= flag wanting new v2 values */
67
    QEMU_CAPS_KVM, /* Whether KVM is enabled by default */
68
    X_QEMU_CAPS_DRIVE_FORMAT, /* Is -drive format= avail */
69 70

    /* 15 */
71
    X_QEMU_CAPS_VGA, /* Is -vga avail */
72
    X_QEMU_CAPS_0_10, /* features added in qemu-0.10.0 or later */
J
Ján Tomko 已提交
73
    X_QEMU_CAPS_PCIDEVICE, /* PCI device assignment supported */
74 75 76 77
    QEMU_CAPS_MEM_PATH, /* mmap'ped guest backing supported */
    QEMU_CAPS_DRIVE_SERIAL, /* -driver serial=  available */

    /* 20 */
78
    X_QEMU_CAPS_XEN_DOMID, /* -xen-domid */
79
    X_QEMU_CAPS_MIGRATE_QEMU_UNIX, /* qemu migration via unix sockets */
80 81 82 83 84
    QEMU_CAPS_CHARDEV, /* Is the new -chardev arg available */
    QEMU_CAPS_ENABLE_KVM, /* -enable-kvm flag */
    QEMU_CAPS_MONITOR_JSON, /* JSON mode for monitor */

    /* 25 */
85
    X_QEMU_CAPS_BALLOON, /* -balloon available */
J
Ján Tomko 已提交
86
    X_QEMU_CAPS_DEVICE, /* Is the -device arg available */
87
    QEMU_CAPS_SDL, /* Is the new -sdl arg available */
88
    X_QEMU_CAPS_SMP_TOPOLOGY, /* -smp has sockets/cores/threads */
89 90 91 92 93 94 95 96 97 98 99 100 101 102
    QEMU_CAPS_NETDEV, /* -netdev flag & netdev_add/remove */

    /* 30 */
    QEMU_CAPS_RTC, /* The -rtc flag for clock options */
    QEMU_CAPS_VHOST_NET, /* vhost-net support available */
    QEMU_CAPS_RTC_TD_HACK, /* -rtc-td-hack available */
    QEMU_CAPS_NO_HPET, /* -no-hpet flag is supported */
    QEMU_CAPS_NO_KVM_PIT, /* -no-kvm-pit-reinjection supported */

    /* 35 */
    QEMU_CAPS_TDF, /* -tdf flag (user-mode pit catchup) */
    QEMU_CAPS_PCI_CONFIGFD, /* pci-assign.configfd */
    QEMU_CAPS_NODEFCONFIG, /* -nodefconfig */
    QEMU_CAPS_BOOT_MENU, /* -boot menu=on support */
103
    X_QEMU_CAPS_ENABLE_KQEMU, /* -enable-kqemu flag */
104 105 106 107 108

    /* 40 */
    QEMU_CAPS_FSDEV, /* -fstype filesystem passthrough */
    QEMU_CAPS_NESTING, /* -enable-nesting (SVM/VMX) */
    QEMU_CAPS_NAME_PROCESS, /* Is -name process= available */
J
Ján Tomko 已提交
109
    X_QEMU_CAPS_DRIVE_READONLY, /* -drive readonly=on|off */
110 111 112
    QEMU_CAPS_SMBIOS_TYPE, /* Is -smbios type= available */

    /* 45 */
113
    X_QEMU_CAPS_VGA_QXL, /* The 'qxl' arg for '-vga' */
114 115
    QEMU_CAPS_SPICE, /* Is -spice avail */
    QEMU_CAPS_VGA_NONE, /* The 'none' arg for '-vga' */
116
    X_QEMU_CAPS_MIGRATE_QEMU_FD, /* -incoming fd:n */
117 118 119 120 121
    QEMU_CAPS_BOOTINDEX, /* -device bootindex property */

    /* 50 */
    QEMU_CAPS_HDA_DUPLEX, /* -device hda-duplex */
    QEMU_CAPS_DRIVE_AIO, /* -drive aio= supported */
122
    X_QEMU_CAPS_PCI_MULTIBUS, /* bus=pci.0 vs bus=pci */
123 124 125 126 127 128 129 130
    QEMU_CAPS_PCI_BOOTINDEX, /* pci-assign.bootindex */
    QEMU_CAPS_CCID_EMULATED, /* -device ccid-card-emulated */

    /* 55 */
    QEMU_CAPS_CCID_PASSTHRU, /* -device ccid-card-passthru */
    QEMU_CAPS_CHARDEV_SPICEVMC, /* newer -chardev spicevmc */
    QEMU_CAPS_DEVICE_SPICEVMC, /* older -device spicevmc*/
    QEMU_CAPS_VIRTIO_TX_ALG, /* -device virtio-net-pci,tx=string */
131
    X_QEMU_CAPS_DEVICE_QXL_VGA, /* primary qxl device named qxl-vga? */
132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155

    /* 60 */
    QEMU_CAPS_PCI_MULTIFUNCTION, /* -device multifunction=on|off */
    QEMU_CAPS_VIRTIO_IOEVENTFD, /* virtio-{net|blk}-pci.ioeventfd=on */
    QEMU_CAPS_SGA, /* Serial Graphics Adapter */
    QEMU_CAPS_VIRTIO_BLK_EVENT_IDX, /* virtio-blk-pci.event_idx */
    QEMU_CAPS_VIRTIO_NET_EVENT_IDX, /* virtio-net-pci.event_idx */

    /* 65 */
    QEMU_CAPS_DRIVE_CACHE_DIRECTSYNC, /* Is cache=directsync supported? */
    QEMU_CAPS_PIIX3_USB_UHCI, /* -device piix3-usb-uhci */
    QEMU_CAPS_PIIX4_USB_UHCI, /* -device piix4-usb-uhci */
    QEMU_CAPS_USB_EHCI, /* -device usb-ehci */
    QEMU_CAPS_ICH9_USB_EHCI1, /* -device ich9-usb-ehci1 and friends */

    /* 70 */
    QEMU_CAPS_VT82C686B_USB_UHCI, /* -device vt82c686b-usb-uhci */
    QEMU_CAPS_PCI_OHCI, /* -device pci-ohci */
    QEMU_CAPS_USB_REDIR, /* -device usb-redir */
    QEMU_CAPS_USB_HUB, /* -device usb-hub */
    QEMU_CAPS_NO_SHUTDOWN, /* usable -no-shutdown */

    /* 75 */
    QEMU_CAPS_DRIVE_CACHE_UNSAFE, /* Is cache=unsafe supported? */
156
    X_QEMU_CAPS_PCI_ROMBAR, /* -device rombar=0|1 */
157 158 159 160 161 162
    QEMU_CAPS_ICH9_AHCI, /* -device ich9-ahci */
    QEMU_CAPS_NO_ACPI, /* -no-acpi */
    QEMU_CAPS_FSDEV_READONLY, /* -fsdev readonly supported */

    /* 80 */
    QEMU_CAPS_VIRTIO_BLK_SCSI, /* virtio-blk-pci.scsi */
163
    X_QEMU_CAPS_VIRTIO_BLK_SG_IO, /* SG_IO commands */
164
    QEMU_CAPS_DRIVE_COPY_ON_READ, /* -drive copy-on-read */
A
Andrea Bolognani 已提交
165
    X_QEMU_CAPS_CPU_HOST, /* support for -cpu host */
166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193
    QEMU_CAPS_FSDEV_WRITEOUT, /* -fsdev writeout supported */

    /* 85 */
    QEMU_CAPS_DRIVE_IOTUNE, /* -drive bps= and friends */
    QEMU_CAPS_WAKEUP, /* system_wakeup monitor command */
    QEMU_CAPS_SCSI_DISK_CHANNEL, /* Is scsi-disk.channel available? */
    QEMU_CAPS_SCSI_BLOCK, /* -device scsi-block */
    QEMU_CAPS_TRANSACTION, /* transaction monitor command */

    /* 90 */
    QEMU_CAPS_BLOCKJOB_SYNC, /* old block_job_cancel, block_stream */
    QEMU_CAPS_BLOCKJOB_ASYNC, /* new block-job-cancel, block-stream */
    QEMU_CAPS_SCSI_CD, /* -device scsi-cd */
    QEMU_CAPS_IDE_CD, /* -device ide-cd */
    QEMU_CAPS_NO_USER_CONFIG, /* -no-user-config */

    /* 95 */
    QEMU_CAPS_HDA_MICRO, /* -device hda-micro */
    QEMU_CAPS_DUMP_GUEST_MEMORY, /* dump-guest-memory command */
    QEMU_CAPS_NEC_USB_XHCI, /* -device nec-usb-xhci */
    QEMU_CAPS_VIRTIO_S390, /* -device virtio-*-s390 */
    QEMU_CAPS_BALLOON_EVENT, /* Async event for balloon changes */

    /* 100 */
    QEMU_CAPS_NETDEV_BRIDGE, /* bridge helper support */
    QEMU_CAPS_SCSI_LSI, /* -device lsi */
    QEMU_CAPS_VIRTIO_SCSI, /* -device virtio-scsi-* */
    QEMU_CAPS_BLOCKIO, /* -device ...logical_block_size & co */
194
    QEMU_CAPS_PIIX_DISABLE_S3, /* -M pc S3 BIOS Advertisement on/off */
195 196

    /* 105 */
197
    QEMU_CAPS_PIIX_DISABLE_S4, /* -M pc S4 BIOS Advertisement on/off */
198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256
    QEMU_CAPS_USB_REDIR_FILTER, /* usb-redir.filter */
    QEMU_CAPS_IDE_DRIVE_WWN, /* Is ide-drive.wwn available? */
    QEMU_CAPS_SCSI_DISK_WWN, /* Is scsi-disk.wwn available? */
    QEMU_CAPS_SECCOMP_SANDBOX, /* -sandbox */

    /* 110 */
    QEMU_CAPS_REBOOT_TIMEOUT, /* -boot reboot-timeout */
    QEMU_CAPS_DUMP_GUEST_CORE, /* dump-guest-core-parameter */
    QEMU_CAPS_SEAMLESS_MIGRATION, /* seamless-migration for SPICE */
    QEMU_CAPS_BLOCK_COMMIT, /* block-commit */
    QEMU_CAPS_VNC, /* Is -vnc available? */

    /* 115 */
    QEMU_CAPS_DRIVE_MIRROR, /* drive-mirror monitor command */
    QEMU_CAPS_USB_REDIR_BOOTINDEX, /* usb-redir.bootindex */
    QEMU_CAPS_USB_HOST_BOOTINDEX, /* usb-host.bootindex */
    QEMU_CAPS_DISK_SNAPSHOT, /* blockdev-snapshot-sync command */
    QEMU_CAPS_DEVICE_QXL, /* -device qxl */

    /* 120 */
    QEMU_CAPS_DEVICE_VGA, /* -device VGA */
    QEMU_CAPS_DEVICE_CIRRUS_VGA, /* -device cirrus-vga */
    QEMU_CAPS_DEVICE_VMWARE_SVGA, /* -device vmware-svga */
    QEMU_CAPS_DEVICE_VIDEO_PRIMARY, /* -device safe for primary video device */
    QEMU_CAPS_SCLP_S390, /* -device sclp* */

    /* 125 */
    QEMU_CAPS_DEVICE_USB_SERIAL, /* -device usb-serial */
    QEMU_CAPS_DEVICE_USB_NET, /* -device usb-net */
    QEMU_CAPS_ADD_FD, /* -add-fd */
    QEMU_CAPS_NBD_SERVER, /* nbd-server-start QMP command */
    QEMU_CAPS_DEVICE_VIRTIO_RNG, /* virtio-rng device */

    /* 130 */
    QEMU_CAPS_OBJECT_RNG_RANDOM, /* the rng-random backend for virtio rng */
    QEMU_CAPS_OBJECT_RNG_EGD, /* EGD protocol daemon for rng */
    QEMU_CAPS_VIRTIO_CCW, /* -device virtio-*-ccw */
    QEMU_CAPS_DTB, /* -dtb file */
    QEMU_CAPS_SCSI_MEGASAS, /* -device megasas */

    /* 135 */
    QEMU_CAPS_IPV6_MIGRATION, /* -incoming [::] */
    QEMU_CAPS_MACHINE_OPT, /* -machine xxxx*/
    QEMU_CAPS_MACHINE_USB_OPT, /* -machine xxx,usb=on/off */
    QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, /* -tpmdev passthrough */
    QEMU_CAPS_DEVICE_TPM_TIS, /* -device tpm_tis */

    /* 140 */
    QEMU_CAPS_DEVICE_NVRAM, /* -global spapr-nvram.reg=xxxx */
    QEMU_CAPS_DEVICE_PCI_BRIDGE, /* -device pci-bridge */
    QEMU_CAPS_DEVICE_VFIO_PCI, /* -device vfio-pci */
    QEMU_CAPS_VFIO_PCI_BOOTINDEX, /* bootindex param for vfio-pci device */
    QEMU_CAPS_DEVICE_SCSI_GENERIC, /* -device scsi-generic */

    /* 145 */
    QEMU_CAPS_DEVICE_SCSI_GENERIC_BOOTINDEX, /* -device scsi-generic.bootindex */
    QEMU_CAPS_MEM_MERGE, /* -machine mem-merge */
    QEMU_CAPS_VNC_WEBSOCKET, /* -vnc x:y,websocket */
    QEMU_CAPS_DRIVE_DISCARD, /* -drive discard=off(ignore)|on(unmap) */
257
    QEMU_CAPS_REALTIME_MLOCK, /* -realtime mlock=on|off */
258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304

    /* 150 */
    QEMU_CAPS_VNC_SHARE_POLICY, /* set display sharing policy */
    QEMU_CAPS_DEVICE_DEL_EVENT, /* DEVICE_DELETED event */
    QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, /* -device i82801b11-bridge */
    QEMU_CAPS_I440FX_PCI_HOLE64_SIZE, /* i440FX-pcihost.pci-hole64-size */
    QEMU_CAPS_Q35_PCI_HOLE64_SIZE, /* q35-pcihost.pci-hole64-size */

    /* 155 */
    QEMU_CAPS_DEVICE_USB_STORAGE, /* -device usb-storage */
    QEMU_CAPS_USB_STORAGE_REMOVABLE, /* usb-storage.removable */
    QEMU_CAPS_DEVICE_VIRTIO_MMIO, /* -device virtio-mmio */
    QEMU_CAPS_DEVICE_ICH9_INTEL_HDA, /* -device ich9-intel-hda */
    QEMU_CAPS_KVM_PIT_TICK_POLICY, /* kvm-pit.lost_tick_policy */

    /* 160 */
    QEMU_CAPS_BOOT_STRICT, /* -boot strict */
    QEMU_CAPS_DEVICE_PANIC, /* -device pvpanic */
    QEMU_CAPS_ENABLE_FIPS, /* -enable-fips */
    QEMU_CAPS_SPICE_FILE_XFER_DISABLE, /* -spice disable-agent-file-xfer */
    QEMU_CAPS_CHARDEV_SPICEPORT, /* -chardev spiceport */

    /* 165 */
    QEMU_CAPS_DEVICE_USB_KBD, /* -device usb-kbd */
    QEMU_CAPS_HOST_PCI_MULTIDOMAIN, /* support domain > 0 in host pci address */
    QEMU_CAPS_MSG_TIMESTAMP, /* -msg timestamp */
    QEMU_CAPS_ACTIVE_COMMIT, /* block-commit works without 'top' */
    QEMU_CAPS_CHANGE_BACKING_FILE, /* change name of backing file in metadata */

    /* 170 */
    QEMU_CAPS_OBJECT_MEMORY_RAM, /* -object memory-backend-ram */
    QEMU_CAPS_NUMA, /* newer -numa handling with disjoint cpu ranges */
    QEMU_CAPS_OBJECT_MEMORY_FILE, /* -object memory-backend-file */
    QEMU_CAPS_OBJECT_USB_AUDIO, /* usb-audio device support */
    QEMU_CAPS_RTC_RESET_REINJECTION, /* rtc-reset-reinjection monitor command */

    /* 175 */
    QEMU_CAPS_SPLASH_TIMEOUT, /* -boot splash-time */
    QEMU_CAPS_OBJECT_IOTHREAD, /* -object iothread */
    QEMU_CAPS_MIGRATE_RDMA, /* have rdma migration */
    QEMU_CAPS_DEVICE_IVSHMEM, /* -device ivshmem */
    QEMU_CAPS_DRIVE_IOTUNE_MAX, /* -drive bps_max= and friends */

    /* 180 */
    QEMU_CAPS_VGA_VGAMEM, /* -device VGA.vgamem_mb */
    QEMU_CAPS_VMWARE_SVGA_VGAMEM, /* -device vmware-svga.vgamem_mb */
    QEMU_CAPS_QXL_VGAMEM, /* -device qxl.vgamem_mb */
305
    X_QEMU_CAPS_QXL_VGA_VGAMEM, /* -device qxl-vga.vgamem_mb */
306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328
    QEMU_CAPS_DEVICE_PC_DIMM, /* pc-dimm device */

    /* 185 */
    QEMU_CAPS_MACHINE_VMPORT_OPT, /* -machine xxx,vmport=on/off/auto */
    QEMU_CAPS_AES_KEY_WRAP, /* -machine aes_key_wrap */
    QEMU_CAPS_DEA_KEY_WRAP, /* -machine dea_key_wrap */
    QEMU_CAPS_DEVICE_PCI_SERIAL, /* -device pci-serial */
    QEMU_CAPS_CPU_AARCH64_OFF, /* -cpu ...,aarch64=off */

    /* 190 */
    QEMU_CAPS_VHOSTUSER_MULTIQUEUE, /* vhost-user with -netdev queues= */
    QEMU_CAPS_MIGRATION_EVENT, /* MIGRATION event */
    QEMU_CAPS_OBJECT_GPEX, /* have generic PCI host controller */
    QEMU_CAPS_DEVICE_IOH3420, /* -device ioh3420 */
    QEMU_CAPS_DEVICE_X3130_UPSTREAM, /* -device x3130-upstream */

    /* 195 */
    QEMU_CAPS_DEVICE_XIO3130_DOWNSTREAM, /* -device xio3130-downstream */
    QEMU_CAPS_DEVICE_RTL8139, /* -device rtl8139 */
    QEMU_CAPS_DEVICE_E1000, /* -device e1000 */
    QEMU_CAPS_DEVICE_VIRTIO_NET, /* -device virtio-net-* */
    QEMU_CAPS_MACH_VIRT_GIC_VERSION, /* -machine virt,gic-version */

329 330
    /* 200 */
    QEMU_CAPS_INCOMING_DEFER, /* -incoming defer and migrate_incoming */
331
    QEMU_CAPS_DEVICE_VIRTIO_GPU, /* -device virtio-gpu-* */
332
    QEMU_CAPS_VIRTIO_GPU_VIRGL, /* -device virtio-gpu-*.virgl */
333 334 335 336 337
    QEMU_CAPS_VIRTIO_KEYBOARD, /* -device virtio-keyboard-{device,pci} */
    QEMU_CAPS_VIRTIO_MOUSE, /* -device virtio-mouse-{device,pci} */

    /* 205 */
    QEMU_CAPS_VIRTIO_TABLET, /* -device virtio-tablet-{device,pci} */
338
    QEMU_CAPS_VIRTIO_INPUT_HOST, /* -device virtio-input-host-{device,pci} */
339
    QEMU_CAPS_CHARDEV_FILE_APPEND, /* -chardev file,append=on|off */
340 341
    QEMU_CAPS_ICH9_DISABLE_S3, /* -M q35 S3 BIOS Advertisement on/off */
    QEMU_CAPS_ICH9_DISABLE_S4, /* -M q35 S4 BIOS Advertisement on/off */
342

343 344
    /* 210 */
    QEMU_CAPS_VSERPORT_CHANGE, /* VSERPORT_CHANGE event */
345 346
    QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE, /* virtio-balloon-{device,pci,ccw}.
                                           * deflate-on-oom */
347
    QEMU_CAPS_SCSI_MPTSAS1068, /* -device mptsas1068 */
348
    QEMU_CAPS_SPICE_GL, /* -spice gl */
349 350 351
    QEMU_CAPS_QXL_VRAM64, /* -device qxl.vram64_size_mb */

    /* 215 */
352
    X_QEMU_CAPS_QXL_VGA_VRAM64, /* -device qxl-vga.vram64_size_mb */
353
    QEMU_CAPS_CHARDEV_LOGFILE, /* -chardev logfile=xxxx */
354
    QEMU_CAPS_NAME_DEBUG_THREADS, /* Is -name debug-threads= available */
355
    QEMU_CAPS_OBJECT_SECRET, /* -object secret */
356
    QEMU_CAPS_DEVICE_PXB, /* -device pxb */
357

358 359
    /* 220 */
    QEMU_CAPS_DEVICE_PXB_PCIE, /* -device pxb-pcie */
360
    QEMU_CAPS_DEVICE_TRAY_MOVED, /* DEVICE_TRAY_MOVED event */
361
    QEMU_CAPS_NEC_USB_XHCI_PORTS, /* -device nec-usb-xhci.p3 ports setting */
362
    QEMU_CAPS_VIRTIO_SCSI_IOTHREAD, /* virtio-scsi-{pci,ccw}.iothread */
363
    QEMU_CAPS_NAME_GUEST, /* -name guest= */
364

365 366
    /* 225 */
    QEMU_CAPS_QXL_MAX_OUTPUTS, /* -device qxl,max-outputs= */
367
    X_QEMU_CAPS_QXL_VGA_MAX_OUTPUTS, /* -device qxl-vga,max-outputs= */
368
    QEMU_CAPS_SPICE_UNIX, /* -spice unix */
369
    QEMU_CAPS_DRIVE_DETECT_ZEROES, /* -drive detect-zeroes= */
B
Boris Fiuczynski 已提交
370
    QEMU_CAPS_OBJECT_TLS_CREDS_X509, /* -object tls-creds-x509 */
371

372
    /* 230 */
P
Paolo Bonzini 已提交
373
    QEMU_CAPS_DISPLAY, /* -display */
J
Ján Tomko 已提交
374
    QEMU_CAPS_DEVICE_INTEL_IOMMU, /* -device intel-iommu */
M
Michal Privoznik 已提交
375
    QEMU_CAPS_MACHINE_SMM_OPT, /* -machine xxx,smm=on/off/auto */
376
    QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY, /* virtio-*pci.disable-legacy */
377
    QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS, /* qmp command query-hotpluggable-cpus */
378

379 380
    /* 235 */
    QEMU_CAPS_VIRTIO_NET_RX_QUEUE_SIZE, /* virtio-net-*.rx_queue_size */
381
    QEMU_CAPS_MACHINE_IOMMU, /* -machine iommu=on */
382
    QEMU_CAPS_DEVICE_VIRTIO_VGA, /* -device virtio-vga */
383
    QEMU_CAPS_DRIVE_IOTUNE_MAX_LENGTH, /* -drive bps_max_length = and friends */
384 385 386 387
    QEMU_CAPS_DEVICE_IVSHMEM_PLAIN, /* -device ivshmem-plain */

    /* 240 */
    QEMU_CAPS_DEVICE_IVSHMEM_DOORBELL, /* -device ivshmem-doorbell */
388
    QEMU_CAPS_QUERY_QMP_SCHEMA, /* query-qmp-schema command */
389
    QEMU_CAPS_GLUSTER_DEBUG_LEVEL, /* -drive gluster.debug_level={0..9} */
390
    QEMU_CAPS_DEVICE_VHOST_SCSI, /* -device vhost-scsi-{ccw,pci} */
391
    QEMU_CAPS_DRIVE_IOTUNE_GROUP, /* -drive throttling.group=<name> */
392

393 394
    /* 245 */
    QEMU_CAPS_QUERY_CPU_MODEL_EXPANSION, /* qmp query-cpu-model-expansion */
395
    QEMU_CAPS_VIRTIO_NET_HOST_MTU, /* virtio-net-*.host_mtu */
396
    QEMU_CAPS_SPICE_RENDERNODE, /* -spice rendernode */
397
    QEMU_CAPS_DEVICE_NVDIMM, /* -device nvdimm */
398
    QEMU_CAPS_DEVICE_PCIE_ROOT_PORT, /* -device pcie-root-port */
399

400 401
    /* 250 */
    QEMU_CAPS_QUERY_CPU_DEFINITIONS, /* qmp query-cpu-definitions */
402
    QEMU_CAPS_BLOCK_WRITE_THRESHOLD, /* BLOCK_WRITE_THRESHOLD event */
403
    QEMU_CAPS_QUERY_NAMED_BLOCK_NODES, /* qmp query-named-block-nodes */
404
    QEMU_CAPS_CPU_CACHE, /* -cpu supports host-cache-info and l3-cache properties */
405
    QEMU_CAPS_DEVICE_QEMU_XHCI, /* -device qemu-xhci */
406

407
    QEMU_CAPS_LAST /* this must always be the last item */
408
} virQEMUCapsFlags;
409

410 411
typedef struct _virQEMUCaps virQEMUCaps;
typedef virQEMUCaps *virQEMUCapsPtr;
412

413 414
typedef struct _virQEMUCapsCache virQEMUCapsCache;
typedef virQEMUCapsCache *virQEMUCapsCachePtr;
415

416
virQEMUCapsPtr virQEMUCapsNew(void);
417

418
void virQEMUCapsSet(virQEMUCapsPtr qemuCaps,
419
                    virQEMUCapsFlags flag) ATTRIBUTE_NONNULL(1);
420

421
void virQEMUCapsSetList(virQEMUCapsPtr qemuCaps, ...) ATTRIBUTE_NONNULL(1);
422

423
void virQEMUCapsClear(virQEMUCapsPtr qemuCaps,
424
                      virQEMUCapsFlags flag) ATTRIBUTE_NONNULL(1);
425

426
bool virQEMUCapsGet(virQEMUCapsPtr qemuCaps,
427
                    virQEMUCapsFlags flag);
428

D
Daniel P. Berrange 已提交
429 430 431
bool virQEMUCapsHasPCIMultiBus(virQEMUCapsPtr qemuCaps,
                               virDomainDefPtr def);

432 433 434
bool virQEMUCapsSupportsVmport(virQEMUCapsPtr qemuCaps,
                               const virDomainDef *def);

M
Michal Privoznik 已提交
435 436 437
bool virQEMUCapsSupportsSMM(virQEMUCapsPtr qemuCaps,
                            const virDomainDef *def);

438
char *virQEMUCapsFlagsString(virQEMUCapsPtr qemuCaps);
439

440 441 442
const char *virQEMUCapsGetBinary(virQEMUCapsPtr qemuCaps);
virArch virQEMUCapsGetArch(virQEMUCapsPtr qemuCaps);
unsigned int virQEMUCapsGetVersion(virQEMUCapsPtr qemuCaps);
443
const char *virQEMUCapsGetPackage(virQEMUCapsPtr qemuCaps);
444
unsigned int virQEMUCapsGetKVMVersion(virQEMUCapsPtr qemuCaps);
445
int virQEMUCapsAddCPUDefinitions(virQEMUCapsPtr qemuCaps,
446
                                 virDomainVirtType type,
447
                                 const char **name,
448 449
                                 size_t count,
                                 virDomainCapsCPUUsable usable);
450
int virQEMUCapsGetCPUDefinitions(virQEMUCapsPtr qemuCaps,
451
                                 virDomainVirtType type,
452 453
                                 char ***names,
                                 size_t *count);
454 455 456 457

typedef enum {
    /* Host CPU definition reported in domain capabilities. */
    VIR_QEMU_CAPS_HOST_CPU_REPORTED,
458 459
    /* Migratable host CPU definition used for updating guest CPU. */
    VIR_QEMU_CAPS_HOST_CPU_MIGRATABLE,
460 461 462 463
    /* CPU definition with features detected by libvirt using virCPUGetHost
     * combined with features reported by QEMU. This is used for backward
     * compatible comparison between a guest CPU and a host CPU. */
    VIR_QEMU_CAPS_HOST_CPU_FULL,
464 465
} virQEMUCapsHostCPUType;

466
virCPUDefPtr virQEMUCapsGetHostModel(virQEMUCapsPtr qemuCaps,
467 468 469
                                     virDomainVirtType type,
                                     virQEMUCapsHostCPUType cpuType);

470 471 472 473
bool virQEMUCapsIsCPUModeSupported(virQEMUCapsPtr qemuCaps,
                                   virCapsPtr caps,
                                   virDomainVirtType type,
                                   virCPUMode mode);
474 475
const char *virQEMUCapsGetCanonicalMachine(virQEMUCapsPtr qemuCaps,
                                           const char *name);
476 477
int virQEMUCapsGetMachineMaxCpus(virQEMUCapsPtr qemuCaps,
                                 const char *name);
478 479
bool virQEMUCapsGetMachineHotplugCpus(virQEMUCapsPtr qemuCaps,
                                      const char *name);
480 481 482
int virQEMUCapsGetMachineTypesCaps(virQEMUCapsPtr qemuCaps,
                                   size_t *nmachines,
                                   virCapsGuestMachinePtr **machines);
483

484
bool virQEMUCapsIsValid(virQEMUCapsPtr qemuCaps,
485 486 487
                        time_t ctime,
                        uid_t runUid,
                        gid_t runGid);
488

489 490
void virQEMUCapsFilterByMachineType(virQEMUCapsPtr qemuCaps,
                                    const char *machineType);
491

492
virQEMUCapsCachePtr virQEMUCapsCacheNew(const char *libDir,
493
                                        const char *cacheDir,
494
                                        uid_t uid, gid_t gid);
495 496
virQEMUCapsPtr virQEMUCapsCacheLookup(virCapsPtr caps,
                                      virQEMUCapsCachePtr cache,
497
                                      const char *binary);
498 499
virQEMUCapsPtr virQEMUCapsCacheLookupCopy(virCapsPtr caps,
                                          virQEMUCapsCachePtr cache,
500 501
                                          const char *binary,
                                          const char *machineType);
502 503
virQEMUCapsPtr virQEMUCapsCacheLookupByArch(virCapsPtr caps,
                                            virQEMUCapsCachePtr cache,
504
                                            virArch arch);
505
void virQEMUCapsCacheFree(virQEMUCapsCachePtr cache);
506

507
virCapsPtr virQEMUCapsInit(virQEMUCapsCachePtr cache);
508

509 510 511
int virQEMUCapsGetDefaultVersion(virCapsPtr caps,
                                 virQEMUCapsCachePtr capsCache,
                                 unsigned int *version);
512

513
VIR_ENUM_DECL(virQEMUCaps);
514

515
bool virQEMUCapsSupportsChardev(const virDomainDef *def,
516 517 518
                                virQEMUCapsPtr qemuCaps,
                                virDomainChrDefPtr chr);

519 520 521 522
bool virQEMUCapsSupportsGICVersion(virQEMUCapsPtr qemuCaps,
                                   virDomainVirtType virtType,
                                   virGICVersion version);

523 524 525
bool virQEMUCapsIsMachineSupported(virQEMUCapsPtr qemuCaps,
                                   const char *canonical_machine);

526
const char *virQEMUCapsGetDefaultMachine(virQEMUCapsPtr qemuCaps);
527

528 529 530 531 532 533 534
int virQEMUCapsInitGuestFromBinary(virCapsPtr caps,
                                   const char *binary,
                                   virQEMUCapsPtr qemubinCaps,
                                   const char *kvmbin,
                                   virQEMUCapsPtr kvmbinCaps,
                                   virArch guestarch);

535 536
int virQEMUCapsFillDomainCaps(virCapsPtr caps,
                              virDomainCapsPtr domCaps,
537
                              virQEMUCapsPtr qemuCaps,
538
                              virFirmwarePtr *firmwares,
539
                              size_t nfirmwares);
540

541
#endif /* __QEMU_CAPABILITIES_H__*/