qemu_capabilities.h 12.8 KB
Newer Older
1 2 3
/*
 * qemu_capabilities.h: QEMU capabilities generation
 *
4
 * Copyright (C) 2006-2012 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 "virobject.h"
31
# include "qemu_monitor.h"
32 33 34

/* Internal flags to keep track of qemu command line capabilities */
enum qemuCapsFlags {
E
Eric Blake 已提交
35 36 37 38 39 40 41 42 43 44 45 46 47
    QEMU_CAPS_KQEMU              =  0, /* Whether KQEMU is compiled in */
    QEMU_CAPS_VNC_COLON          =  1, /* VNC takes or address + display */
    QEMU_CAPS_NO_REBOOT          =  2, /* Is the -no-reboot flag available */
    QEMU_CAPS_DRIVE              =  3, /* Is the new -drive arg available */
    QEMU_CAPS_DRIVE_BOOT         =  4, /* Does -drive support boot=on */
    QEMU_CAPS_NAME               =  5, /* Is the -name flag available */
    QEMU_CAPS_UUID               =  6, /* Is the -uuid flag available */
    QEMU_CAPS_DOMID              =  7, /* Xenner: -domid flag available */
    QEMU_CAPS_VNET_HDR           =  8,
    QEMU_CAPS_MIGRATE_KVM_STDIO  =  9, /* avoid kvm tcp migration bug */
    QEMU_CAPS_MIGRATE_QEMU_TCP   = 10, /* have qemu tcp migration */
    QEMU_CAPS_MIGRATE_QEMU_EXEC  = 11, /* have qemu exec migration */
    QEMU_CAPS_DRIVE_CACHE_V2     = 12, /* cache= flag wanting new v2 values */
48
    QEMU_CAPS_KVM                = 13, /* Whether KVM is enabled by default */
E
Eric Blake 已提交
49 50
    QEMU_CAPS_DRIVE_FORMAT       = 14, /* Is -drive format= avail */
    QEMU_CAPS_VGA                = 15, /* Is -vga avail */
51 52

    /* features added in qemu-0.10.0 or later */
E
Eric Blake 已提交
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
    QEMU_CAPS_0_10               = 16,
    QEMU_CAPS_NET_NAME           = QEMU_CAPS_0_10, /* -net ...,name=str */
    QEMU_CAPS_HOST_NET_ADD       = QEMU_CAPS_0_10, /* host_net_add command */

    QEMU_CAPS_PCIDEVICE          = 17, /* PCI device assignment supported */
    QEMU_CAPS_MEM_PATH           = 18, /* mmap'ped guest backing supported */
    QEMU_CAPS_DRIVE_SERIAL       = 19, /* -driver serial=  available */
    QEMU_CAPS_XEN_DOMID          = 20, /* -xen-domid */
    QEMU_CAPS_MIGRATE_QEMU_UNIX  = 21, /* qemu migration via unix sockets */
    QEMU_CAPS_CHARDEV            = 22, /* Is the new -chardev arg available */
    QEMU_CAPS_ENABLE_KVM         = 23, /* -enable-kvm flag */
    QEMU_CAPS_MONITOR_JSON       = 24, /* JSON mode for monitor */
    QEMU_CAPS_BALLOON            = 25, /* -balloon available */
    QEMU_CAPS_DEVICE             = 26, /* Is the new -device arg available */
    QEMU_CAPS_SDL                = 27, /* Is the new -sdl arg available */
    QEMU_CAPS_SMP_TOPOLOGY       = 28, /* -smp has sockets/cores/threads */
    QEMU_CAPS_NETDEV             = 29, /* -netdev flag & netdev_add/remove */
    QEMU_CAPS_RTC                = 30, /* The -rtc flag for clock options */
    QEMU_CAPS_VHOST_NET          = 31, /* vhost-net support available */
    QEMU_CAPS_RTC_TD_HACK        = 32, /* -rtc-td-hack available */
    QEMU_CAPS_NO_HPET            = 33, /* -no-hpet flag is supported */
    QEMU_CAPS_NO_KVM_PIT         = 34, /* -no-kvm-pit-reinjection supported */
    QEMU_CAPS_TDF                = 35, /* -tdf flag (user-mode pit catchup) */
    QEMU_CAPS_PCI_CONFIGFD       = 36, /* pci-assign.configfd */
    QEMU_CAPS_NODEFCONFIG        = 37, /* -nodefconfig */
    QEMU_CAPS_BOOT_MENU          = 38, /* -boot menu=on support */
    QEMU_CAPS_ENABLE_KQEMU       = 39, /* -enable-kqemu flag */
    QEMU_CAPS_FSDEV              = 40, /* -fstype filesystem passthrough */
    QEMU_CAPS_NESTING            = 41, /* -enable-nesting (SVM/VMX) */
    QEMU_CAPS_NAME_PROCESS       = 42, /* Is -name process= available */
    QEMU_CAPS_DRIVE_READONLY     = 43, /* -drive readonly=on|off */
    QEMU_CAPS_SMBIOS_TYPE        = 44, /* Is -smbios type= available */
    QEMU_CAPS_VGA_QXL            = 45, /* The 'qxl' arg for '-vga' */
    QEMU_CAPS_SPICE              = 46, /* Is -spice avail */
    QEMU_CAPS_VGA_NONE           = 47, /* The 'none' arg for '-vga' */
    QEMU_CAPS_MIGRATE_QEMU_FD    = 48, /* -incoming fd:n */
    QEMU_CAPS_BOOTINDEX          = 49, /* -device bootindex property */
    QEMU_CAPS_HDA_DUPLEX         = 50, /* -device hda-duplex */
    QEMU_CAPS_DRIVE_AIO          = 51, /* -drive aio= supported */
    QEMU_CAPS_PCI_MULTIBUS       = 52, /* bus=pci.0 vs bus=pci */
    QEMU_CAPS_PCI_BOOTINDEX      = 53, /* pci-assign.bootindex */
    QEMU_CAPS_CCID_EMULATED      = 54, /* -device ccid-card-emulated */
    QEMU_CAPS_CCID_PASSTHRU      = 55, /* -device ccid-card-passthru */
    QEMU_CAPS_CHARDEV_SPICEVMC   = 56, /* newer -chardev spicevmc */
    QEMU_CAPS_DEVICE_SPICEVMC    = 57, /* older -device spicevmc*/
    QEMU_CAPS_VIRTIO_TX_ALG      = 58, /* -device virtio-net-pci,tx=string */
    QEMU_CAPS_DEVICE_QXL_VGA     = 59, /* primary qxl device named qxl-vga? */
    QEMU_CAPS_PCI_MULTIFUNCTION  = 60, /* -device multifunction=on|off */
    QEMU_CAPS_VIRTIO_IOEVENTFD   = 61, /* virtio-{net|blk}-pci.ioeventfd=on */
    QEMU_CAPS_SGA                = 62, /* Serial Graphics Adapter */
103 104
    QEMU_CAPS_VIRTIO_BLK_EVENT_IDX = 63, /* virtio-blk-pci.event_idx */
    QEMU_CAPS_VIRTIO_NET_EVENT_IDX = 64, /* virtio-net-pci.event_idx */
105
    QEMU_CAPS_DRIVE_CACHE_DIRECTSYNC = 65, /* Is cache=directsync supported? */
E
Eric Blake 已提交
106 107 108 109
    QEMU_CAPS_PIIX3_USB_UHCI     = 66, /* -device piix3-usb-uhci */
    QEMU_CAPS_PIIX4_USB_UHCI     = 67, /* -device piix4-usb-uhci */
    QEMU_CAPS_USB_EHCI           = 68, /* -device usb-ehci */
    QEMU_CAPS_ICH9_USB_EHCI1     = 69, /* -device ich9-usb-ehci1 and friends */
M
Marc-André Lureau 已提交
110
    QEMU_CAPS_VT82C686B_USB_UHCI = 70, /* -device vt82c686b-usb-uhci */
E
Eric Blake 已提交
111 112 113 114
    QEMU_CAPS_PCI_OHCI           = 71, /* -device pci-ohci */
    QEMU_CAPS_USB_REDIR          = 72, /* -device usb-redir */
    QEMU_CAPS_USB_HUB            = 73, /* -device usb-hub */
    QEMU_CAPS_NO_SHUTDOWN        = 74, /* usable -no-shutdown */
115
    QEMU_CAPS_DRIVE_CACHE_UNSAFE = 75, /* Is cache=unsafe supported? */
116
    QEMU_CAPS_PCI_ROMBAR         = 76, /* -device rombar=0|1 */
E
Eric Blake 已提交
117 118 119
    QEMU_CAPS_ICH9_AHCI          = 77, /* -device ich9-ahci */
    QEMU_CAPS_NO_ACPI            = 78, /* -no-acpi */
    QEMU_CAPS_FSDEV_READONLY     = 79, /* -fsdev readonly supported */
120
    QEMU_CAPS_VIRTIO_BLK_SCSI    = 80, /* virtio-blk-pci.scsi */
E
Eric Blake 已提交
121
    QEMU_CAPS_VIRTIO_BLK_SG_IO   = 81, /* SG_IO commands, since 0.11 */
O
Osier Yang 已提交
122
    QEMU_CAPS_DRIVE_COPY_ON_READ = 82, /* -drive copy-on-read */
E
Eric Blake 已提交
123
    QEMU_CAPS_CPU_HOST           = 83, /* support for -cpu host */
124
    QEMU_CAPS_FSDEV_WRITEOUT     = 84, /* -fsdev writeout supported */
E
Eric Blake 已提交
125
    QEMU_CAPS_DRIVE_IOTUNE       = 85, /* -drive bps= and friends */
126
    QEMU_CAPS_WAKEUP             = 86, /* system_wakeup monitor command */
127
    QEMU_CAPS_SCSI_DISK_CHANNEL  = 87, /* Is scsi-disk.channel available? */
128
    QEMU_CAPS_SCSI_BLOCK         = 88, /* -device scsi-block */
129
    QEMU_CAPS_TRANSACTION        = 89, /* transaction monitor command */
130 131
    QEMU_CAPS_BLOCKJOB_SYNC      = 90, /* RHEL 6.2 block_job_cancel */
    QEMU_CAPS_BLOCKJOB_ASYNC     = 91, /* qemu 1.1 block-job-cancel */
132
    QEMU_CAPS_SCSI_CD            = 92, /* -device scsi-cd */
133
    QEMU_CAPS_IDE_CD             = 93, /* -device ide-cd */
134
    QEMU_CAPS_NO_USER_CONFIG     = 94, /* -no-user-config */
M
Marc-André Lureau 已提交
135
    QEMU_CAPS_HDA_MICRO          = 95, /* -device hda-micro */
136
    QEMU_CAPS_DUMP_GUEST_MEMORY  = 96, /* dump-guest-memory command */
G
Gerd Hoffmann 已提交
137
    QEMU_CAPS_NEC_USB_XHCI       = 97, /* -device nec-usb-xhci */
138
    QEMU_CAPS_VIRTIO_S390        = 98, /* -device virtio-*-s390 */
139
    QEMU_CAPS_BALLOON_EVENT      = 99, /* Async event for balloon changes */
R
Richa Marwaha 已提交
140
    QEMU_CAPS_NETDEV_BRIDGE      = 100, /* bridge helper support */
141 142
    QEMU_CAPS_SCSI_LSI           = 101, /* -device lsi */
    QEMU_CAPS_VIRTIO_SCSI_PCI    = 102, /* -device virtio-scsi-pci */
V
Viktor Mihajlovski 已提交
143
    QEMU_CAPS_BLOCKIO            = 103, /* -device ...logical_block_size & co */
144 145
    QEMU_CAPS_DISABLE_S3         = 104, /* S3 BIOS Advertisement on/off */
    QEMU_CAPS_DISABLE_S4         = 105, /* S4 BIOS Advertisement on/off */
146
    QEMU_CAPS_USB_REDIR_FILTER   = 106, /* usb-redir.filter */
147 148
    QEMU_CAPS_IDE_DRIVE_WWN      = 107, /* Is ide-drive.wwn available? */
    QEMU_CAPS_SCSI_DISK_WWN      = 108, /* Is scsi-disk.wwn available? */
149
    QEMU_CAPS_SECCOMP_SANDBOX    = 109, /* -sandbox */
150
    QEMU_CAPS_REBOOT_TIMEOUT     = 110, /* -boot reboot-timeout */
151
    QEMU_CAPS_DUMP_GUEST_CORE    = 111, /* dump-guest-core-parameter */
152
    QEMU_CAPS_SEAMLESS_MIGRATION = 112, /* seamless-migration for SPICE */
153
    QEMU_CAPS_BLOCK_COMMIT       = 113, /* block-commit */
154
    QEMU_CAPS_VNC                = 114, /* Is -vnc available? */
155
    QEMU_CAPS_DRIVE_MIRROR       = 115, /* drive-mirror monitor command */
156 157
    QEMU_CAPS_USB_REDIR_BOOTINDEX = 116, /* usb-redir.bootindex */
    QEMU_CAPS_USB_HOST_BOOTINDEX = 117, /* usb-host.bootindex */
158
    QEMU_CAPS_DISK_SNAPSHOT      = 118, /* blockdev-snapshot-sync command */
159 160 161 162 163 164
    QEMU_CAPS_DEVICE_QXL         = 119, /* -device qxl */
    QEMU_CAPS_DEVICE_VGA         = 120, /* -device VGA */
    QEMU_CAPS_DEVICE_CIRRUS_VGA  = 121, /* -device cirrus-vga */
    QEMU_CAPS_DEVICE_VMWARE_SVGA = 122, /* -device vmware-svga */
    QEMU_CAPS_DEVICE_VIDEO_PRIMARY = 123, /* safe to use -device XXX
                                           for primary video device */
165
    QEMU_CAPS_SCLP_S390          = 124, /* -device sclp* */
G
Guannan Ren 已提交
166
    QEMU_CAPS_DEVICE_USB_SERIAL  = 125, /* -device usb-serial */
G
Guannan Ren 已提交
167
    QEMU_CAPS_DEVICE_USB_NET     = 126, /* -device usb-net */
168
    QEMU_CAPS_ADD_FD             = 127, /* -add-fd */
169

170
    QEMU_CAPS_LAST,                   /* this must always be the last item */
171 172
};

173 174
typedef struct _qemuCaps qemuCaps;
typedef qemuCaps *qemuCapsPtr;
175

176 177 178
typedef struct _qemuCapsCache qemuCapsCache;
typedef qemuCapsCache *qemuCapsCachePtr;

179
qemuCapsPtr qemuCapsNew(void);
180
qemuCapsPtr qemuCapsNewCopy(qemuCapsPtr caps);
181
qemuCapsPtr qemuCapsNewForBinary(const char *binary,
182
                                 const char *libDir,
183 184
                                 uid_t runUid,
                                 gid_t runGid);
185

186 187 188
int qemuCapsProbeQMP(qemuCapsPtr caps,
                     qemuMonitorPtr mon);

189
void qemuCapsSet(qemuCapsPtr caps,
190 191
                 enum qemuCapsFlags flag) ATTRIBUTE_NONNULL(1);

192
void qemuCapsSetList(qemuCapsPtr caps, ...) ATTRIBUTE_NONNULL(1);
193

194
void qemuCapsClear(qemuCapsPtr caps,
195
                   enum qemuCapsFlags flag) ATTRIBUTE_NONNULL(1);
196

197
bool qemuCapsGet(qemuCapsPtr caps,
198 199
                 enum qemuCapsFlags flag);

200 201
char *qemuCapsFlagsString(qemuCapsPtr caps);

202
const char *qemuCapsGetBinary(qemuCapsPtr caps);
203
virArch qemuCapsGetArch(qemuCapsPtr caps);
204 205
unsigned int qemuCapsGetVersion(qemuCapsPtr caps);
unsigned int qemuCapsGetKVMVersion(qemuCapsPtr caps);
206 207
int qemuCapsAddCPUDefinition(qemuCapsPtr caps,
                             const char *name);
208 209 210 211 212 213 214
size_t qemuCapsGetCPUDefinitions(qemuCapsPtr caps,
                                 char ***names);
size_t qemuCapsGetMachineTypes(qemuCapsPtr caps,
                               char ***names);
const char *qemuCapsGetCanonicalMachine(qemuCapsPtr caps,
                                        const char *name);

215 216 217 218
int qemuCapsGetMachineTypesCaps(qemuCapsPtr caps,
                                size_t *nmachines,
                                virCapsGuestMachinePtr **machines);

219 220
bool qemuCapsIsValid(qemuCapsPtr caps);

221

222
qemuCapsCachePtr qemuCapsCacheNew(const char *libDir,
223
                                  uid_t uid, gid_t gid);
224 225 226 227
qemuCapsPtr qemuCapsCacheLookup(qemuCapsCachePtr cache, const char *binary);
qemuCapsPtr qemuCapsCacheLookupCopy(qemuCapsCachePtr cache, const char *binary);
void qemuCapsCacheFree(qemuCapsCachePtr cache);

228
virCapsPtr qemuCapsInit(qemuCapsCachePtr cache);
229

230 231 232
int qemuCapsGetDefaultVersion(virCapsPtr caps,
                              qemuCapsCachePtr capsCache,
                              unsigned int *version);
233

234
/* Only for use by test suite */
235 236
int qemuCapsParseHelpStr(const char *qemu,
                         const char *str,
237
                         qemuCapsPtr caps,
238 239
                         unsigned int *version,
                         unsigned int *is_kvm,
240 241
                         unsigned int *kvm_version,
                         bool check_yajl);
242
/* Only for use by test suite */
243
int qemuCapsParseDeviceStr(qemuCapsPtr caps, const char *str);
244

245
VIR_ENUM_DECL(qemuCaps);
246

247
bool qemuCapsUsedQMP(qemuCapsPtr caps);
248
#endif /* __QEMU_CAPABILITIES_H__*/