static char *
-qemuBuildTPMDevStr(const virDomainDef *def)
+qemuBuildTPMDevStr(const virDomainDef *def,
+ virQEMUCapsPtr qemuCaps)
{
g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
- const virDomainTPMDef *tpm = def->tpm;
+ virDomainTPMDef *tpm = def->tpm;
const char *model = virDomainTPMModelTypeToString(tpm->model);
virBufferAsprintf(&buf, "%s,tpmdev=tpm-%s,id=%s",
model, tpm->info.alias, tpm->info.alias);
+ if (qemuBuildDeviceAddressStr(&buf, def, &tpm->info, qemuCaps) < 0)
+ return NULL;
+
return virBufferContentAndReset(&buf);
}
static int
qemuBuildTPMCommandLine(virCommandPtr cmd,
- const virDomainDef *def)
+ const virDomainDef *def,
+ virQEMUCapsPtr qemuCaps)
{
char *optstr;
g_autofree char *chardev = NULL;
VIR_FREE(fdset);
}
- if (!(optstr = qemuBuildTPMDevStr(def)))
+ if (!(optstr = qemuBuildTPMDevStr(def, qemuCaps)))
return -1;
virCommandAddArgList(cmd, "-device", optstr, NULL);
chardevStdioLogd) < 0)
return NULL;
- if (qemuBuildTPMCommandLine(cmd, def) < 0)
+ if (qemuBuildTPMCommandLine(cmd, def, qemuCaps) < 0)
return NULL;
if (qemuBuildInputCommandLine(cmd, def, qemuCaps) < 0)
#define VIO_ADDR_SCSI 0x2000ul
#define VIO_ADDR_SERIAL 0x30000000ul
#define VIO_ADDR_NVRAM 0x3000ul
+#define VIO_ADDR_TPM 0x4000ul
/**
return -1;
}
+ if (def->tpm) {
+ if (qemuDomainIsPSeries(def))
+ def->tpm->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO;
+ if (qemuDomainAssignSpaprVIOAddress(def, &def->tpm->info,
+ VIO_ADDR_TPM) < 0)
+ return -1;
+ }
+
/* No other devices are currently supported on spapr-vio */
return 0;