The function is static and will be needed in the virtio device config helper. Signed-off-by: Peter Krempa <pkrempa@xxxxxxxxxx> --- src/qemu/qemu_command.c | 248 ++++++++++++++++++++-------------------- 1 file changed, 124 insertions(+), 124 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 3c468ab0a4..e86c3bda22 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -583,6 +583,130 @@ qemuBuildDeviceAddressProps(virJSONValue *props, } +/** + * qemuDeviceVideoGetModel: + * @qemuCaps: qemu capabilities + * @video: video device definition + * @virtio: the returned video device is a 'virtio' device + * @virtioBusSuffix: the returned device needs to get the bus-suffix + * + * Returns the model fo the device for @video and @qemuCaps. @virtio and + * @virtioBusSuffix are filled with the corresponding flags. + */ +static const char * +qemuDeviceVideoGetModel(virQEMUCaps *qemuCaps, + const virDomainVideoDef *video, + bool *virtio, + bool *virtioBusSuffix) +{ + const char *model = NULL; + bool primaryVga = false; + virTristateSwitch accel3d = VIR_TRISTATE_SWITCH_ABSENT; + + *virtio = false; + *virtioBusSuffix = false; + + if (video->accel) + accel3d = video->accel->accel3d; + + if (video->primary && qemuDomainSupportsVideoVga(video, qemuCaps)) + primaryVga = true; + + /* We try to chose the best model for primary video device by preferring + * model with VGA compatibility mode. For some video devices on some + * architectures there might not be such model so fallback to one + * without VGA compatibility mode. */ + if (video->backend == VIR_DOMAIN_VIDEO_BACKEND_TYPE_VHOSTUSER) { + if (primaryVga) { + model = "vhost-user-vga"; + } else { + model = "vhost-user-gpu"; + *virtio = true; + *virtioBusSuffix = true; + } + } else { + if (primaryVga) { + switch ((virDomainVideoType) video->type) { + case VIR_DOMAIN_VIDEO_TYPE_VGA: + model = "VGA"; + break; + case VIR_DOMAIN_VIDEO_TYPE_CIRRUS: + model = "cirrus-vga"; + break; + case VIR_DOMAIN_VIDEO_TYPE_VMVGA: + model = "vmware-svga"; + break; + case VIR_DOMAIN_VIDEO_TYPE_QXL: + model = "qxl-vga"; + break; + case VIR_DOMAIN_VIDEO_TYPE_VIRTIO: + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_VGA_GL) && + accel3d == VIR_TRISTATE_SWITCH_ON) + model = "virtio-vga-gl"; + else + model = "virtio-vga"; + + *virtio = true; + *virtioBusSuffix = false; + break; + case VIR_DOMAIN_VIDEO_TYPE_BOCHS: + model = "bochs-display"; + break; + case VIR_DOMAIN_VIDEO_TYPE_RAMFB: + model = "ramfb"; + break; + case VIR_DOMAIN_VIDEO_TYPE_DEFAULT: + case VIR_DOMAIN_VIDEO_TYPE_XEN: + case VIR_DOMAIN_VIDEO_TYPE_VBOX: + case VIR_DOMAIN_VIDEO_TYPE_PARALLELS: + case VIR_DOMAIN_VIDEO_TYPE_GOP: + case VIR_DOMAIN_VIDEO_TYPE_NONE: + case VIR_DOMAIN_VIDEO_TYPE_LAST: + break; + } + } else { + switch ((virDomainVideoType) video->type) { + case VIR_DOMAIN_VIDEO_TYPE_QXL: + model = "qxl"; + break; + case VIR_DOMAIN_VIDEO_TYPE_VIRTIO: + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_GPU_GL_PCI) && + accel3d == VIR_TRISTATE_SWITCH_ON) + model = "virtio-gpu-gl"; + else + model = "virtio-gpu"; + + *virtio = true; + *virtioBusSuffix = true; + break; + case VIR_DOMAIN_VIDEO_TYPE_DEFAULT: + case VIR_DOMAIN_VIDEO_TYPE_VGA: + case VIR_DOMAIN_VIDEO_TYPE_CIRRUS: + case VIR_DOMAIN_VIDEO_TYPE_VMVGA: + case VIR_DOMAIN_VIDEO_TYPE_XEN: + case VIR_DOMAIN_VIDEO_TYPE_VBOX: + case VIR_DOMAIN_VIDEO_TYPE_PARALLELS: + case VIR_DOMAIN_VIDEO_TYPE_GOP: + case VIR_DOMAIN_VIDEO_TYPE_NONE: + case VIR_DOMAIN_VIDEO_TYPE_BOCHS: + case VIR_DOMAIN_VIDEO_TYPE_RAMFB: + case VIR_DOMAIN_VIDEO_TYPE_LAST: + break; + } + } + } + + if (!model || STREQ(model, "")) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("invalid model for video type '%s'"), + virDomainVideoTypeToString(video->type)); + return NULL; + } + + return model; +} + + static void qemuBuildVirtioDevGetConfigDev(virDomainDeviceDef *device, bool *has_tmodel, @@ -4291,130 +4415,6 @@ qemuBuildSoundCommandLine(virCommand *cmd, } -/** - * qemuDeviceVideoGetModel: - * @qemuCaps: qemu capabilities - * @video: video device definition - * @virtio: the returned video device is a 'virtio' device - * @virtioBusSuffix: the returned device needs to get the bus-suffix - * - * Returns the model fo the device for @video and @qemuCaps. @virtio and - * @virtioBusSuffix are filled with the corresponding flags. - */ -static const char * -qemuDeviceVideoGetModel(virQEMUCaps *qemuCaps, - const virDomainVideoDef *video, - bool *virtio, - bool *virtioBusSuffix) -{ - const char *model = NULL; - bool primaryVga = false; - virTristateSwitch accel3d = VIR_TRISTATE_SWITCH_ABSENT; - - *virtio = false; - *virtioBusSuffix = false; - - if (video->accel) - accel3d = video->accel->accel3d; - - if (video->primary && qemuDomainSupportsVideoVga(video, qemuCaps)) - primaryVga = true; - - /* We try to chose the best model for primary video device by preferring - * model with VGA compatibility mode. For some video devices on some - * architectures there might not be such model so fallback to one - * without VGA compatibility mode. */ - if (video->backend == VIR_DOMAIN_VIDEO_BACKEND_TYPE_VHOSTUSER) { - if (primaryVga) { - model = "vhost-user-vga"; - } else { - model = "vhost-user-gpu"; - *virtio = true; - *virtioBusSuffix = true; - } - } else { - if (primaryVga) { - switch ((virDomainVideoType) video->type) { - case VIR_DOMAIN_VIDEO_TYPE_VGA: - model = "VGA"; - break; - case VIR_DOMAIN_VIDEO_TYPE_CIRRUS: - model = "cirrus-vga"; - break; - case VIR_DOMAIN_VIDEO_TYPE_VMVGA: - model = "vmware-svga"; - break; - case VIR_DOMAIN_VIDEO_TYPE_QXL: - model = "qxl-vga"; - break; - case VIR_DOMAIN_VIDEO_TYPE_VIRTIO: - if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_VGA_GL) && - accel3d == VIR_TRISTATE_SWITCH_ON) - model = "virtio-vga-gl"; - else - model = "virtio-vga"; - - *virtio = true; - *virtioBusSuffix = false; - break; - case VIR_DOMAIN_VIDEO_TYPE_BOCHS: - model = "bochs-display"; - break; - case VIR_DOMAIN_VIDEO_TYPE_RAMFB: - model = "ramfb"; - break; - case VIR_DOMAIN_VIDEO_TYPE_DEFAULT: - case VIR_DOMAIN_VIDEO_TYPE_XEN: - case VIR_DOMAIN_VIDEO_TYPE_VBOX: - case VIR_DOMAIN_VIDEO_TYPE_PARALLELS: - case VIR_DOMAIN_VIDEO_TYPE_GOP: - case VIR_DOMAIN_VIDEO_TYPE_NONE: - case VIR_DOMAIN_VIDEO_TYPE_LAST: - break; - } - } else { - switch ((virDomainVideoType) video->type) { - case VIR_DOMAIN_VIDEO_TYPE_QXL: - model = "qxl"; - break; - case VIR_DOMAIN_VIDEO_TYPE_VIRTIO: - if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_GPU_GL_PCI) && - accel3d == VIR_TRISTATE_SWITCH_ON) - model = "virtio-gpu-gl"; - else - model = "virtio-gpu"; - - *virtio = true; - *virtioBusSuffix = true; - break; - case VIR_DOMAIN_VIDEO_TYPE_DEFAULT: - case VIR_DOMAIN_VIDEO_TYPE_VGA: - case VIR_DOMAIN_VIDEO_TYPE_CIRRUS: - case VIR_DOMAIN_VIDEO_TYPE_VMVGA: - case VIR_DOMAIN_VIDEO_TYPE_XEN: - case VIR_DOMAIN_VIDEO_TYPE_VBOX: - case VIR_DOMAIN_VIDEO_TYPE_PARALLELS: - case VIR_DOMAIN_VIDEO_TYPE_GOP: - case VIR_DOMAIN_VIDEO_TYPE_NONE: - case VIR_DOMAIN_VIDEO_TYPE_BOCHS: - case VIR_DOMAIN_VIDEO_TYPE_RAMFB: - case VIR_DOMAIN_VIDEO_TYPE_LAST: - break; - } - } - } - - if (!model || STREQ(model, "")) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("invalid model for video type '%s'"), - virDomainVideoTypeToString(video->type)); - return NULL; - } - - return model; -} - - static char * qemuBuildDeviceVideoStr(const virDomainDef *def, virDomainVideoDef *video, -- 2.31.1