<dd>
The optional <code>address</code> sub-element can be used to
tie the video device to a particular PCI slot.
+ On S390, <code>address</code> can be used to provide the
+ CCW address for the video device (<span class="since">
+ since 4.2.0</span>).
</dd>
<dt><code>driver</code></dt>
"", /* don't support vbox */
"qxl",
"", /* don't support parallels */
- "virtio-gpu-pci",
+ "virtio-gpu",
"" /* don't support gop */);
VIR_ENUM_DECL(qemuSoundCodec)
goto error;
}
- virBufferAsprintf(&buf, "%s,id=%s", model, video->info.alias);
+ if (STREQ(model, "virtio-gpu")) {
+ if (video->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW)
+ virBufferAsprintf(&buf, "%s-ccw", model);
+ else
+ virBufferAsprintf(&buf, "%s-pci", model);
+ } else {
+ virBufferAsprintf(&buf, "%s", model);
+ }
+
+ virBufferAsprintf(&buf, ",id=%s", video->info.alias);
if (video->accel && video->accel->accel3d == VIR_TRISTATE_SWITCH_ON) {
virBufferAsprintf(&buf, ",virgl=%s",
{
/*
declare address-less virtio devices to be of address type 'type'
- disks, networks, consoles, controllers, memballoon and rng in this
- order
+ disks, networks, videos, consoles, controllers, memballoon and rng
+ in this order
if type is ccw filesystem devices are declared to be of address type ccw
*/
size_t i;
}
}
+ for (i = 0; i < def->nvideos; i++) {
+ virDomainVideoDefPtr video = def->videos[i];
+
+ if (video->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE &&
+ video->type == VIR_DOMAIN_VIDEO_TYPE_VIRTIO)
+ video->info.type = type;
+ }
+
for (i = 0; i < def->ninputs; i++) {
if (def->inputs[i]->bus == VIR_DOMAIN_INPUT_BUS_VIRTIO &&
def->inputs[i]->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE)
(video->type == VIR_DOMAIN_VIDEO_TYPE_QXL &&
!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_QXL)) ||
(video->type == VIR_DOMAIN_VIDEO_TYPE_VIRTIO &&
- !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_GPU))) {
+ !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_GPU)) ||
+ (video->type == VIR_DOMAIN_VIDEO_TYPE_VIRTIO &&
+ video->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW &&
+ !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_GPU_CCW))) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("this QEMU does not support '%s' video device"),
virDomainVideoTypeToString(video->type));
--- /dev/null
+LC_ALL=C \
+PATH=/bin \
+HOME=/home/test \
+USER=test \
+LOGNAME=test \
+QEMU_AUDIO_DRV=none \
+/usr/bin/qemu-system-s390x \
+-name QEMUGuest1 \
+-S \
+-M s390-ccw-virtio \
+-m 214 \
+-smp 1,sockets=1,cores=1,threads=1 \
+-uuid c7a5fdbd-edaf-9455-926a-d65c16db1803 \
+-nodefaults \
+-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest1/monitor.sock,\
+server,nowait \
+-mon chardev=charmonitor,id=monitor,mode=readline \
+-boot c \
+-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-virtio-disk0 \
+-device virtio-blk-ccw,devno=fe.0.0000,drive=drive-virtio-disk0,\
+id=virtio-disk0 \
+-vnc 127.0.0.1:0 \
+-device virtio-gpu-ccw,id=video0,max_outputs=1,devno=fe.0.0002 \
+-device virtio-gpu-ccw,id=video1,max_outputs=1,devno=fe.0.0003 \
+-device virtio-balloon-ccw,id=balloon0,devno=fe.0.0001
DO_TEST("disk-many-format-probing", QEMU_CAPS_DRIVE_BOOT);
driver.config->allowDiskFormatProbing = false;
+ DO_TEST("video-virtio-gpu-ccw", QEMU_CAPS_VIRTIO_CCW,
+ QEMU_CAPS_DEVICE_VIRTIO_GPU,
+ QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
+ QEMU_CAPS_VIRTIO_GPU_MAX_OUTPUTS,
+ QEMU_CAPS_VNC,
+ QEMU_CAPS_DEVICE_VIRTIO_GPU_CCW);
+
if (getenv("LIBVIRT_SKIP_CLEANUP") == NULL)
virFileDeleteTree(fakerootdir);