{
g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
- if (dev->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO &&
- dev->info.addr.spaprvio.has_reg) {
- virBufferAsprintf(&buf, "spapr-nvram.reg=0x%llx",
- dev->info.addr.spaprvio.reg);
- } else {
- virReportError(VIR_ERR_XML_ERROR, "%s",
- _("nvram address type must be spaprvio"));
- return NULL;
- }
+ virBufferAsprintf(&buf, "spapr-nvram.reg=0x%llx",
+ dev->info.addr.spaprvio.reg);
return virBufferContentAndReset(&buf);
}
static int
qemuBuildNVRAMCommandLine(virCommandPtr cmd,
- const virDomainDef *def,
- virQEMUCapsPtr qemuCaps)
+ const virDomainDef *def)
{
+ g_autofree char *optstr = NULL;
+
if (!def->nvram)
return 0;
- if (qemuDomainIsPSeries(def)) {
- if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_NVRAM)) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
- _("nvram device is not supported by "
- "this QEMU binary"));
- return -1;
- }
-
- g_autofree char *optstr = NULL;
- virCommandAddArg(cmd, "-global");
- optstr = qemuBuildNVRAMDevStr(def->nvram);
- if (!optstr)
- return -1;
- virCommandAddArg(cmd, optstr);
- } else {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
- _("nvram device is only supported for PPC64"));
+ virCommandAddArg(cmd, "-global");
+ optstr = qemuBuildNVRAMDevStr(def->nvram);
+ if (!optstr)
return -1;
- }
+
+ virCommandAddArg(cmd, optstr);
return 0;
}
chardevStdioLogd) < 0)
return NULL;
- if (qemuBuildNVRAMCommandLine(cmd, def, qemuCaps) < 0)
+ if (qemuBuildNVRAMCommandLine(cmd, def) < 0)
return NULL;
if (qemuBuildVMCoreInfoCommandLine(cmd, def, qemuCaps) < 0)
}
+static int
+qemuDomainDeviceDefValidateNVRAM(virDomainNVRAMDefPtr nvram,
+ const virDomainDef *def,
+ virQEMUCapsPtr qemuCaps)
+{
+ if (!nvram)
+ return 0;
+
+ if (qemuDomainIsPSeries(def)) {
+ if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_NVRAM)) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("nvram device is not supported by "
+ "this QEMU binary"));
+ return -1;
+ }
+ } else {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("nvram device is only supported for PPC64"));
+ return -1;
+ }
+
+ if (!(nvram->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO &&
+ nvram->info.addr.spaprvio.has_reg)) {
+
+ virReportError(VIR_ERR_XML_ERROR, "%s",
+ _("nvram address type must be spaprvio"));
+ return -1;
+ }
+
+ return 0;
+}
+
+
static int
qemuDomainDefValidate(const virDomainDef *def,
void *opaque)
ret = qemuDomainDeviceDefValidateFS(dev->data.fs, def, qemuCaps);
break;
+ case VIR_DOMAIN_DEVICE_NVRAM:
+ ret = qemuDomainDeviceDefValidateNVRAM(dev->data.nvram, def, qemuCaps);
+ break;
+
case VIR_DOMAIN_DEVICE_LEASE:
case VIR_DOMAIN_DEVICE_SOUND:
case VIR_DOMAIN_DEVICE_HUB:
- case VIR_DOMAIN_DEVICE_NVRAM:
case VIR_DOMAIN_DEVICE_SHMEM:
case VIR_DOMAIN_DEVICE_MEMORY:
case VIR_DOMAIN_DEVICE_PANIC:
QEMU_CAPS_DEVICE_VIRTIO_RNG);
DO_TEST("pseries-nvram",
- QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
+ QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
+ QEMU_CAPS_DEVICE_NVRAM);
DO_TEST("pseries-panic-missing",
QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
DO_TEST("pseries-panic-no-address",