"unknown", "yes", "no",
);
+
+VIR_ENUM_DECL(virDomainCapsFeature);
+VIR_ENUM_IMPL(virDomainCapsFeature,
+ VIR_DOMAIN_CAPS_FEATURE_LAST,
+ "iothreads",
+ "vmcoreinfo",
+ "genid",
+);
+
static virClassPtr virDomainCapsClass;
static virClassPtr virDomainCapsCPUModelsClass;
void
virDomainCapsFeaturesInitUnsupported(virDomainCapsPtr caps)
{
- caps->iothreads = VIR_TRISTATE_BOOL_NO;
- caps->vmcoreinfo = VIR_TRISTATE_BOOL_NO;
- caps->genid = VIR_TRISTATE_BOOL_NO;
+ size_t i;
+
+ for (i = 0; i < VIR_DOMAIN_CAPS_FEATURE_LAST; i++)
+ caps->features[i] = VIR_TRISTATE_BOOL_NO;
}
virBufferPtr buf)
{
g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(buf);
+ size_t i;
virDomainCapsFeatureGICFormat(&childBuf, &caps->gic);
- qemuDomainCapsFeatureFormatSimple(&childBuf, "vmcoreinfo", caps->vmcoreinfo);
- qemuDomainCapsFeatureFormatSimple(&childBuf, "genid", caps->genid);
+
+ for (i = 0; i < VIR_DOMAIN_CAPS_FEATURE_LAST; i++) {
+ if (i == VIR_DOMAIN_CAPS_FEATURE_IOTHREADS)
+ continue;
+
+ qemuDomainCapsFeatureFormatSimple(&childBuf,
+ virDomainCapsFeatureTypeToString(i),
+ caps->features[i]);
+ }
+
virDomainCapsFeatureSEVFormat(&childBuf, caps->sev);
virXMLFormatElement(buf, "features", NULL, &childBuf);
if (caps->maxvcpus)
virBufferAsprintf(&buf, "<vcpu max='%d'/>\n", caps->maxvcpus);
- qemuDomainCapsFeatureFormatSimple(&buf, "iothreads", caps->iothreads);
+ qemuDomainCapsFeatureFormatSimple(&buf, "iothreads",
+ caps->features[VIR_DOMAIN_CAPS_FEATURE_IOTHREADS]);
virDomainCapsOSFormat(&buf, &caps->os);
virDomainCapsCPUFormat(&buf, &caps->cpu);
unsigned int reduced_phys_bits;
};
+typedef enum {
+ VIR_DOMAIN_CAPS_FEATURE_IOTHREADS = 0,
+ VIR_DOMAIN_CAPS_FEATURE_VMCOREINFO,
+ VIR_DOMAIN_CAPS_FEATURE_GENID,
+
+ VIR_DOMAIN_CAPS_FEATURE_LAST
+} virDomainCapsFeature;
+
struct _virDomainCaps {
virObjectLockable parent;
/* Some machine specific info */
int maxvcpus;
- virTristateBool iothreads; /* Whether I/O threads are supported or not. */
virDomainCapsOS os;
virDomainCapsCPU cpu;
/* add new domain devices here */
virDomainCapsFeatureGIC gic;
- virTristateBool vmcoreinfo;
- virTristateBool genid;
virSEVCapabilityPtr sev;
/* add new domain features here */
+
+ virTristateBool features[VIR_DOMAIN_CAPS_FEATURE_LAST];
};
G_DEFINE_AUTOPTR_CLEANUP_FUNC(virDomainCaps, virObjectUnref);
virQEMUCapsFillDomainIOThreadCaps(virQEMUCapsPtr qemuCaps,
virDomainCapsPtr domCaps)
{
- domCaps->iothreads = virTristateBoolFromBool(
+ domCaps->features[VIR_DOMAIN_CAPS_FEATURE_IOTHREADS] = virTristateBoolFromBool(
virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_IOTHREAD));
}
domCaps->maxvcpus = MIN(domCaps->maxvcpus, hostmaxvcpus);
}
- domCaps->vmcoreinfo = virTristateBoolFromBool(
+ domCaps->features[VIR_DOMAIN_CAPS_FEATURE_VMCOREINFO] = virTristateBoolFromBool(
virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VMCOREINFO));
- domCaps->genid = virTristateBoolFromBool(
+ domCaps->features[VIR_DOMAIN_CAPS_FEATURE_GENID] = virTristateBoolFromBool(
virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VMGENID));
if (virQEMUCapsFillDomainOSCaps(os,