STREQ(def->os.machine, "isapc");
}
+bool
+virQEMUCapsSupportsI8042(virQEMUCaps *qemuCaps,
+ const virDomainDef *def)
+{
+ if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_I8042))
+ return false;
+
+ return qemuDomainIsI440FX(def) ||
+ qemuDomainIsQ35(def) ||
+ qemuDomainIsXenFV(def) ||
+ STREQ(def->os.machine, "isapc");
+}
+
/*
* The preferred machine to use if none is listed explicitly
QEMU_CAPS_SMP_DIES, /* -smp dies= */
/* 350 */
- QEMU_CAPS_DEVICE_I8042, /* PS/2 controller */
+ QEMU_CAPS_DEVICE_I8042, /* PS/2 controller, use virQEMUCapsSupportsI8042() to query this capability */
QEMU_CAPS_OBJECT_RNG_BUILTIN, /* -object rng-builtin */
X_QEMU_CAPS_VIRTIO_NET_FAILOVER, /* virtio-net-*.failover */
QEMU_CAPS_DEVICE_TPM_SPAPR, /* -device tpm-spapr */
bool virQEMUCapsSupportsVmport(virQEMUCaps *qemuCaps,
const virDomainDef *def);
+bool virQEMUCapsSupportsI8042(virQEMUCaps *qemuCaps,
+ const virDomainDef *def);
+
const char *virQEMUCapsGetBinary(virQEMUCaps *qemuCaps);
virArch virQEMUCapsGetArch(virQEMUCaps *qemuCaps);
unsigned int virQEMUCapsGetVersion(virQEMUCaps *qemuCaps);
static int
-qemuDomainDefAddImplicitInputDevice(virDomainDef *def)
+qemuDomainDefAddImplicitInputDevice(virDomainDef *def,
+ virQEMUCaps *qemuCaps)
{
- if (ARCH_IS_X86(def->os.arch)) {
+ if (virQEMUCapsSupportsI8042(qemuCaps, def)) {
if (virDomainDefMaybeAddInput(def,
VIR_DOMAIN_INPUT_TYPE_MOUSE,
VIR_DOMAIN_INPUT_BUS_PS2) < 0)
bool addITCOWatchdog = false;
/* add implicit input devices */
- if (qemuDomainDefAddImplicitInputDevice(def) < 0)
+ if (qemuDomainDefAddImplicitInputDevice(def, qemuCaps) < 0)
return -1;
/* Add implicit PCI root controller if the machine has one */
return false;
}
+static bool
+qemuDomainMachineIsXenFV(const char *machine,
+ const virArch arch)
+{
+ if (!ARCH_IS_X86(arch))
+ return false;
+
+ if (STREQ(machine, "xenfv") ||
+ STRPREFIX(machine, "xenfv-")) {
+ return true;
+ }
+
+ return false;
+}
+
/* You should normally avoid this function and use
* qemuDomainHasBuiltinIDE() instead. */
return qemuDomainMachineIsLoongArchVirt(def->os.machine, def->os.arch);
}
+bool
+qemuDomainIsXenFV(const virDomainDef *def)
+{
+ return qemuDomainMachineIsXenFV(def->os.machine, def->os.arch);
+}
+
bool
qemuDomainHasPCIRoot(const virDomainDef *def)
bool qemuDomainIsRISCVVirt(const virDomainDef *def);
bool qemuDomainIsPSeries(const virDomainDef *def);
bool qemuDomainIsMipsMalta(const virDomainDef *def);
+bool qemuDomainIsXenFV(const virDomainDef *def);
bool qemuDomainHasPCIRoot(const virDomainDef *def);
bool qemuDomainHasPCIeRoot(const virDomainDef *def);
bool qemuDomainHasBuiltinIDE(const virDomainDef *def);
int cap;
int ccwCap;
- if (input->bus == VIR_DOMAIN_INPUT_BUS_PS2 && !ARCH_IS_X86(def->os.arch) &&
- !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_I8042)) {
+ if (input->bus == VIR_DOMAIN_INPUT_BUS_PS2 &&
+ !virQEMUCapsSupportsI8042(qemuCaps, def)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("%1$s is not supported by this QEMU binary"),
virDomainInputBusTypeToString(input->bus));