# # Copyright 2009, 2013 Red Hat, Inc. # # This work is licensed under the GNU GPLv2 or later. # See the COPYING file in the top-level directory. from .device import Device from ..xmlbuilder import XMLProperty class DeviceVideo(Device): XML_NAME = "video" _XML_PROP_ORDER = ["_model", "vram", "heads", "vgamem"] vram = XMLProperty("./model/@vram", is_int=True) vram64 = XMLProperty("./model/@vram64", is_int=True) ram = XMLProperty("./model/@ram", is_int=True) heads = XMLProperty("./model/@heads", is_int=True) vgamem = XMLProperty("./model/@vgamem", is_int=True) accel3d = XMLProperty("./model/acceleration/@accel3d", is_yesno=True) blob = XMLProperty("./model/@blob", is_onoff=True) primary = XMLProperty("./model/@primary", is_yesno=True) def _set_model(self, val): self._model = val if self._model != "qxl": self.ram = None self.vgamem = None self.vram64 = None def _get_model(self): return self._model _model = XMLProperty("./model/@type") model = property(_get_model, _set_model) ################## # Default config # ################## @staticmethod def default_model(guest): if not guest.os.is_hvm(): return None if guest.os.is_pseries(): return "vga" if guest.os.is_loongarch64(): return "virtio" if guest.os.is_riscv_virt(): # For all cases here the hv and guest are new enough for virtio return "virtio" if guest.os.is_s390x() and guest.conn.is_qemu(): # s390x doesn't support any of the PCI video devices return "virtio" if guest.has_spice() and guest.has_gl(): # virtio is implied in this case return "virtio" if guest.lookup_domcaps().supports_video_virtio() and guest.osinfo.supports_virtiogpu(): # When the guest supports it, this is the top preference return "virtio" if guest.os.is_x86() and guest.has_spice() and guest.lookup_domcaps().supports_video_qxl(): # qxl is only beneficial over regular vga when paired with spice. # The device still may not be available though return "qxl" if guest.is_uefi(): if guest.os.is_arm(): return "ramfb" if guest.lookup_domcaps().supports_video_bochs(): return "bochs" return "vga" def set_defaults(self, guest): if not self.model: self.model = self.default_model(guest) if self.model == "virtio" and guest.has_gl(): self.accel3d = True