Introduce support for
<console type='pty'>
<target type='isa-debug'/>
</console>
which is used as a way to receive debug messages from the
firmware on x86 platforms. The iobase port will default
to 0x402 which is what SeaBIOS/OVMF expect normally.
Signed-off-by: Daniel P. Berrangé <berrange(a)redhat.com>
---
docs/formatdomain.rst | 3 ++-
docs/schemas/domaincommon.rng | 1 +
src/conf/domain_conf.c | 23 +++++++++++++++++------
src/conf/domain_conf.h | 1 +
src/qemu/qemu_command.c | 1 +
5 files changed, 22 insertions(+), 7 deletions(-)
diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst
index acd9020830..9e4e5fd036 100644
--- a/docs/formatdomain.rst
+++ b/docs/formatdomain.rst
@@ -6483,7 +6483,8 @@ values for the ``type`` attribute are: ``serial`` (described below);
``virtio``
(usable for s390 and s390x QEMU guests) are supported for compatibility reasons
but should not be used for new guests: use the ``sclpconsole`` and
``sclplmconsole`` target models, respectively, with the ``serial`` element
-instead.
+instead. ``isa-debug`` provides a virtual console for receiving debug
+messages from the firmware on x86 platforms. :since:`Since: 8.1.0`.
Of the target types listed above, ``serial`` is special in that it doesn't
represents a separate device, but rather the same device as the first ``serial``
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
index 169b8d8dee..4ff3bcda24 100644
--- a/docs/schemas/domaincommon.rng
+++ b/docs/schemas/domaincommon.rng
@@ -4387,6 +4387,7 @@
<value>openvz</value>
<value>sclp</value>
<value>sclplm</value>
+ <value>isa-debug</value>
</choice>
</attribute>
</define>
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 393f9d9478..c73085a513 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -672,6 +672,7 @@ VIR_ENUM_IMPL(virDomainChrConsoleTarget,
"openvz",
"sclp",
"sclplm",
+ "isa-debug",
);
VIR_ENUM_IMPL(virDomainChrSerialTargetModel,
@@ -5382,7 +5383,7 @@ virDomainChrIsaSerialDefPostParse(virDomainDef *def)
}
-static void
+static int
virDomainChrDefPostParse(virDomainChrDef *chr,
const virDomainDef *def)
{
@@ -5391,9 +5392,18 @@ virDomainChrDefPostParse(virDomainChrDef *chr,
virDomainChrGetDomainPtrs(def, chr->deviceType, &arrPtr, &cnt);
- if (chr->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE &&
- chr->targetType == VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_NONE) {
- chr->targetType = VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SERIAL;
+ if (chr->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE) {
+ switch (chr->targetType) {
+ case VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_NONE:
+ chr->targetType = VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SERIAL;
+ break;
+ case VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_ISA_DEBUG:
+ if (!ARCH_IS_X86(def->os.arch)) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("isa-debug console type only valid on x86
architecture"));
+ return -1;
+ }
+ }
}
if (chr->target.port == -1 &&
@@ -5409,6 +5419,8 @@ virDomainChrDefPostParse(virDomainChrDef *chr,
chr->target.port = maxport + 1;
}
+
+ return 0;
}
@@ -5620,8 +5632,7 @@ virDomainDeviceDefPostParseCommon(virDomainDeviceDef *dev,
switch ((virDomainDeviceType)dev->type) {
case VIR_DOMAIN_DEVICE_CHR:
- virDomainChrDefPostParse(dev->data.chr, def);
- ret = 0;
+ ret = virDomainChrDefPostParse(dev->data.chr, def);
break;
case VIR_DOMAIN_DEVICE_RNG:
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index e2f35fe20b..7f845b609d 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -1183,6 +1183,7 @@ typedef enum {
VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_OPENVZ,
VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SCLP,
VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SCLPLM,
+ VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_ISA_DEBUG,
VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_LAST
} virDomainChrConsoleTargetType;
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 60b4f96e06..030c27b963 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -10845,6 +10845,7 @@ qemuBuildConsoleChrDeviceProps(const virDomainDef *def,
case VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_UML:
case VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_LXC:
case VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_OPENVZ:
+ case VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_ISA_DEBUG:
case VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_LAST:
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("unsupported console target type %s"),
--
2.33.1