From nobody Sun May 5 20:20:31 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 148904884354972.9598152165014; Thu, 9 Mar 2017 00:40:43 -0800 (PST) Received: from localhost ([::1]:60993 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cltco-0007Dh-EN for importer@patchew.org; Thu, 09 Mar 2017 03:40:42 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44835) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cltaw-0006SF-FG for qemu-devel@nongnu.org; Thu, 09 Mar 2017 03:38:47 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cltar-000125-Kr for qemu-devel@nongnu.org; Thu, 09 Mar 2017 03:38:46 -0500 Received: from mx1.redhat.com ([209.132.183.28]:54908) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1cltar-00011Z-FM for qemu-devel@nongnu.org; Thu, 09 Mar 2017 03:38:41 -0500 Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id A0A2480F7C for ; Thu, 9 Mar 2017 08:38:41 +0000 (UTC) Received: from nilsson.home.kraxel.org (ovpn-116-80.ams2.redhat.com [10.36.116.80]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id v298cdxW020519; Thu, 9 Mar 2017 03:38:40 -0500 Received: by nilsson.home.kraxel.org (Postfix, from userid 500) id E63288084D; Thu, 9 Mar 2017 09:38:34 +0100 (CET) From: Gerd Hoffmann To: qemu-devel@nongnu.org Date: Thu, 9 Mar 2017 09:38:27 +0100 Message-Id: <1489048710-22084-2-git-send-email-kraxel@redhat.com> In-Reply-To: <1489048710-22084-1-git-send-email-kraxel@redhat.com> References: <1489048710-22084-1-git-send-email-kraxel@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Thu, 09 Mar 2017 08:38:41 +0000 (UTC) Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH v2 1/4] virtio-gpu: add xres and yres properties X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Gerd Hoffmann , "Michael S. Tsirkin" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" So the default resolution is configurable. Signed-off-by: Gerd Hoffmann Reviewed-by: Marc-Andr=C3=A9 Lureau --- hw/display/virtio-gpu.c | 6 ++++-- include/hw/virtio/virtio-gpu.h | 2 ++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/hw/display/virtio-gpu.c b/hw/display/virtio-gpu.c index 9b530ab..01bceb4 100644 --- a/hw/display/virtio-gpu.c +++ b/hw/display/virtio-gpu.c @@ -1170,8 +1170,8 @@ static void virtio_gpu_device_realize(DeviceState *qd= ev, Error **errp) virtio_init(VIRTIO_DEVICE(g), "virtio-gpu", VIRTIO_ID_GPU, g->config_size); =20 - g->req_state[0].width =3D 1024; - g->req_state[0].height =3D 768; + g->req_state[0].width =3D g->conf.xres; + g->req_state[0].height =3D g->conf.yres; =20 if (virtio_gpu_virgl_enabled(g->conf)) { /* use larger control queue in 3d mode */ @@ -1291,6 +1291,8 @@ static Property virtio_gpu_properties[] =3D { DEFINE_PROP_BIT("stats", VirtIOGPU, conf.flags, VIRTIO_GPU_FLAG_STATS_ENABLED, false), #endif + DEFINE_PROP_UINT32("xres", VirtIOGPU, conf.xres, 1024), + DEFINE_PROP_UINT32("yres", VirtIOGPU, conf.yres, 768), DEFINE_PROP_END_OF_LIST(), }; =20 diff --git a/include/hw/virtio/virtio-gpu.h b/include/hw/virtio/virtio-gpu.h index f3a98a3..f3ffdce 100644 --- a/include/hw/virtio/virtio-gpu.h +++ b/include/hw/virtio/virtio-gpu.h @@ -72,6 +72,8 @@ struct virtio_gpu_conf { uint64_t max_hostmem; uint32_t max_outputs; uint32_t flags; + uint32_t xres; + uint32_t yres; }; =20 struct virtio_gpu_ctrl_command { --=20 1.8.3.1 From nobody Sun May 5 20:20:31 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 148904890890096.34039783324499; Thu, 9 Mar 2017 00:41:48 -0800 (PST) Received: from localhost ([::1]:32770 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cltdr-00086K-N0 for importer@patchew.org; Thu, 09 Mar 2017 03:41:47 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44828) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cltaw-0006SC-E9 for qemu-devel@nongnu.org; Thu, 09 Mar 2017 03:38:48 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cltas-00012T-5s for qemu-devel@nongnu.org; Thu, 09 Mar 2017 03:38:46 -0500 Received: from mx1.redhat.com ([209.132.183.28]:45394) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1cltar-00011l-UF for qemu-devel@nongnu.org; Thu, 09 Mar 2017 03:38:42 -0500 Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 17127C054C55 for ; Thu, 9 Mar 2017 08:38:42 +0000 (UTC) Received: from nilsson.home.kraxel.org (ovpn-116-80.ams2.redhat.com [10.36.116.80]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id v298cdKT031026; Thu, 9 Mar 2017 03:38:40 -0500 Received: by nilsson.home.kraxel.org (Postfix, from userid 500) id 0713A8092C; Thu, 9 Mar 2017 09:38:35 +0100 (CET) From: Gerd Hoffmann To: qemu-devel@nongnu.org Date: Thu, 9 Mar 2017 09:38:28 +0100 Message-Id: <1489048710-22084-3-git-send-email-kraxel@redhat.com> In-Reply-To: <1489048710-22084-1-git-send-email-kraxel@redhat.com> References: <1489048710-22084-1-git-send-email-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Thu, 09 Mar 2017 08:38:42 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH v2 2/4] qxl: add xres and yres properties X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Gerd Hoffmann Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Add properties for the default display resolution, pass on that information to the guest so the driver can use it. Also move up qxl_crc32() function so we don't need a forward declaration. Additionally guest driver updates are needed so the guest driver will actually pick this up, which will probably land in linux kernel 4.12. Signed-off-by: Gerd Hoffmann --- hw/display/qxl.c | 34 ++++++++++++++++++++++++---------- hw/display/qxl.h | 2 ++ 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/hw/display/qxl.c b/hw/display/qxl.c index af4c0ca..3bb8159 100644 --- a/hw/display/qxl.c +++ b/hw/display/qxl.c @@ -304,6 +304,16 @@ void qxl_spice_reset_cursor(PCIQXLDevice *qxl) qxl->ssd.cursor =3D cursor_builtin_hidden(); } =20 +static uint32_t qxl_crc32(const uint8_t *p, unsigned len) +{ + /* + * zlib xors the seed with 0xffffffff, and xors the result + * again with 0xffffffff; Both are not done with linux's crc32, + * which we want to be compatible with, so undo that. + */ + return crc32(0xffffffff, p, len) ^ 0xffffffff; +} + static ram_addr_t qxl_rom_size(void) { #define QXL_REQUIRED_SZ (sizeof(QXLRom) + sizeof(QXLModes) + sizeof(qxl_mo= des)) @@ -368,6 +378,18 @@ static void init_qxl_rom(PCIQXLDevice *d) rom->num_pages =3D cpu_to_le32(num_pages); rom->ram_header_offset =3D cpu_to_le32(d->vga.vram_size - ram_header_= size); =20 + if (d->xres && d->yres) { + /* needs linux kernel 4.12+ to work */ + rom->client_monitors_config.count =3D 1; + rom->client_monitors_config.heads[0].left =3D 0; + rom->client_monitors_config.heads[0].top =3D 0; + rom->client_monitors_config.heads[0].right =3D cpu_to_le32(d->xres= ); + rom->client_monitors_config.heads[0].bottom =3D cpu_to_le32(d->yre= s); + rom->client_monitors_config_crc =3D qxl_crc32( + (const uint8_t *)&rom->client_monitors_config, + sizeof(rom->client_monitors_config)); + } + d->shadow_rom =3D *rom; d->rom =3D rom; d->modes =3D modes; @@ -981,16 +1003,6 @@ static void interface_set_client_capabilities(QXLInst= ance *sin, qxl_send_events(qxl, QXL_INTERRUPT_CLIENT); } =20 -static uint32_t qxl_crc32(const uint8_t *p, unsigned len) -{ - /* - * zlib xors the seed with 0xffffffff, and xors the result - * again with 0xffffffff; Both are not done with linux's crc32, - * which we want to be compatible with, so undo that. - */ - return crc32(0xffffffff, p, len) ^ 0xffffffff; -} - static bool qxl_rom_monitors_config_changed(QXLRom *rom, VDAgentMonitorsConfig *monitors_config, unsigned int max_outputs) @@ -2360,6 +2372,8 @@ static Property qxl_properties[] =3D { #if SPICE_SERVER_VERSION >=3D 0x000c06 /* release 0.12.6 */ DEFINE_PROP_UINT16("max_outputs", PCIQXLDevice, max_outputs, 0), #endif + DEFINE_PROP_UINT32("xres", PCIQXLDevice, xres, 0), + DEFINE_PROP_UINT32("yres", PCIQXLDevice, yres, 0), DEFINE_PROP_END_OF_LIST(), }; =20 diff --git a/hw/display/qxl.h b/hw/display/qxl.h index d2d49dd..cfc0410 100644 --- a/hw/display/qxl.h +++ b/hw/display/qxl.h @@ -118,6 +118,8 @@ typedef struct PCIQXLDevice { uint32_t vram_size_mb; uint32_t vram32_size_mb; uint32_t vgamem_size_mb; + uint32_t xres; + uint32_t yres; =20 /* qxl_render_update state */ int render_update_cookie_num; --=20 1.8.3.1 From nobody Sun May 5 20:20:31 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1489048910784785.7360350594901; Thu, 9 Mar 2017 00:41:50 -0800 (PST) Received: from localhost ([::1]:32771 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cltdt-00087v-E0 for importer@patchew.org; Thu, 09 Mar 2017 03:41:49 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44829) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cltaw-0006SD-ED for qemu-devel@nongnu.org; Thu, 09 Mar 2017 03:38:47 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cltar-00011p-GD for qemu-devel@nongnu.org; Thu, 09 Mar 2017 03:38:46 -0500 Received: from mx1.redhat.com ([209.132.183.28]:56224) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1cltar-00011N-A9 for qemu-devel@nongnu.org; Thu, 09 Mar 2017 03:38:41 -0500 Received: from smtp.corp.redhat.com (int-mx16.intmail.prod.int.phx2.redhat.com [10.5.11.28]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 44971C04BD2B for ; Thu, 9 Mar 2017 08:38:41 +0000 (UTC) Received: from nilsson.home.kraxel.org (ovpn-116-80.ams2.redhat.com [10.36.116.80]) by smtp.corp.redhat.com (Postfix) with ESMTP id 800FF2D654; Thu, 9 Mar 2017 08:38:40 +0000 (UTC) Received: by nilsson.home.kraxel.org (Postfix, from userid 500) id 1DBDD805BC; Thu, 9 Mar 2017 09:38:35 +0100 (CET) From: Gerd Hoffmann To: qemu-devel@nongnu.org Date: Thu, 9 Mar 2017 09:38:29 +0100 Message-Id: <1489048710-22084-4-git-send-email-kraxel@redhat.com> In-Reply-To: <1489048710-22084-1-git-send-email-kraxel@redhat.com> References: <1489048710-22084-1-git-send-email-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.74 on 10.5.11.28 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Thu, 09 Mar 2017 08:38:41 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH v2 3/4] stdvga: move common properties to common base class X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Gerd Hoffmann Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Gerd Hoffmann --- hw/display/vga-pci.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/hw/display/vga-pci.c b/hw/display/vga-pci.c index ac9a764..8500362 100644 --- a/hw/display/vga-pci.c +++ b/hw/display/vga-pci.c @@ -306,15 +306,12 @@ static void pci_secondary_vga_reset(DeviceState *dev) vga_common_reset(&d->vga); } =20 -static Property vga_pci_properties[] =3D { - DEFINE_PROP_UINT32("vgamem_mb", PCIVGAState, vga.vram_size_mb, 16), +static Property vga_pci_primary_properties[] =3D { DEFINE_PROP_BIT("mmio", PCIVGAState, flags, PCI_VGA_FLAG_ENABLE_MMIO, = true), - DEFINE_PROP_BIT("qemu-extended-regs", - PCIVGAState, flags, PCI_VGA_FLAG_ENABLE_QEXT, true), DEFINE_PROP_END_OF_LIST(), }; =20 -static Property secondary_pci_properties[] =3D { +static Property vga_pci_common_properties[] =3D { DEFINE_PROP_UINT32("vgamem_mb", PCIVGAState, vga.vram_size_mb, 16), DEFINE_PROP_BIT("qemu-extended-regs", PCIVGAState, flags, PCI_VGA_FLAG_ENABLE_QEXT, true), @@ -329,6 +326,7 @@ static void vga_pci_class_init(ObjectClass *klass, void= *data) k->vendor_id =3D PCI_VENDOR_ID_QEMU; k->device_id =3D PCI_DEVICE_ID_QEMU_VGA; dc->vmsd =3D &vmstate_vga_pci; + dc->props =3D vga_pci_common_properties; set_bit(DEVICE_CATEGORY_DISPLAY, dc->categories); } =20 @@ -348,7 +346,7 @@ static void vga_class_init(ObjectClass *klass, void *da= ta) k->realize =3D pci_std_vga_realize; k->romfile =3D "vgabios-stdvga.bin"; k->class_id =3D PCI_CLASS_DISPLAY_VGA; - dc->props =3D vga_pci_properties; + dc->props =3D vga_pci_primary_properties; dc->hotpluggable =3D false; } =20 @@ -359,7 +357,6 @@ static void secondary_class_init(ObjectClass *klass, vo= id *data) =20 k->realize =3D pci_secondary_vga_realize; k->class_id =3D PCI_CLASS_DISPLAY_OTHER; - dc->props =3D secondary_pci_properties; dc->reset =3D pci_secondary_vga_reset; } =20 --=20 1.8.3.1 From nobody Sun May 5 20:20:31 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 14890487877571006.429204321488; Thu, 9 Mar 2017 00:39:47 -0800 (PST) Received: from localhost ([::1]:60990 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cltbu-0006V9-8b for importer@patchew.org; Thu, 09 Mar 2017 03:39:46 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44831) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cltaw-0006SE-ER for qemu-devel@nongnu.org; Thu, 09 Mar 2017 03:38:48 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cltas-00012b-EH for qemu-devel@nongnu.org; Thu, 09 Mar 2017 03:38:46 -0500 Received: from mx1.redhat.com ([209.132.183.28]:56334) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1cltas-000122-63 for qemu-devel@nongnu.org; Thu, 09 Mar 2017 03:38:42 -0500 Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 52B9D80464 for ; Thu, 9 Mar 2017 08:38:42 +0000 (UTC) Received: from nilsson.home.kraxel.org (ovpn-116-80.ams2.redhat.com [10.36.116.80]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id v298cdTh030027; Thu, 9 Mar 2017 03:38:40 -0500 Received: by nilsson.home.kraxel.org (Postfix, from userid 500) id 3D1C08096F; Thu, 9 Mar 2017 09:38:35 +0100 (CET) From: Gerd Hoffmann To: qemu-devel@nongnu.org Date: Thu, 9 Mar 2017 09:38:30 +0100 Message-Id: <1489048710-22084-5-git-send-email-kraxel@redhat.com> In-Reply-To: <1489048710-22084-1-git-send-email-kraxel@redhat.com> References: <1489048710-22084-1-git-send-email-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Thu, 09 Mar 2017 08:38:42 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH v2 4/4] [RfC] stdvga: add xres and yres properties. X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Gerd Hoffmann , "Michael S. Tsirkin" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Add two new registers to the qemu extended register range, carrying the suggested width and height of the display device. In case the xres and yres properties are set, fill these new registers accordingly. Additionally guest driver updates are needed to support the new registers. These changes will probably land in linux kernel 4.12. TODO: add compat properties to turn off qemu-display-size for machine types older than 2.10 Signed-off-by: Gerd Hoffmann --- hw/display/vga-pci.c | 52 ++++++++++++++++++++++++++++++++++-----------= ---- hw/display/vga_int.h | 6 ++++-- hw/display/virtio-vga.c | 3 ++- 3 files changed, 42 insertions(+), 19 deletions(-) diff --git a/hw/display/vga-pci.c b/hw/display/vga-pci.c index 8500362..10b1832 100644 --- a/hw/display/vga-pci.c +++ b/hw/display/vga-pci.c @@ -31,23 +31,28 @@ #include "ui/pixel_ops.h" #include "qemu/timer.h" #include "hw/loader.h" +#include "sysemu/sysemu.h" =20 #define PCI_VGA_IOPORT_OFFSET 0x400 #define PCI_VGA_IOPORT_SIZE (0x3e0 - 0x3c0) #define PCI_VGA_BOCHS_OFFSET 0x500 #define PCI_VGA_BOCHS_SIZE (0x0b * 2) #define PCI_VGA_QEXT_OFFSET 0x600 -#define PCI_VGA_QEXT_SIZE (2 * 4) +#define PCI_VGA_QEXT_SIZE_V1 (2 * 4) +#define PCI_VGA_QEXT_SIZE_V2 (4 * 4) #define PCI_VGA_MMIO_SIZE 0x1000 =20 #define PCI_VGA_QEXT_REG_SIZE (0 * 4) #define PCI_VGA_QEXT_REG_BYTEORDER (1 * 4) #define PCI_VGA_QEXT_LITTLE_ENDIAN 0x1e1e1e1e #define PCI_VGA_QEXT_BIG_ENDIAN 0xbebebebe +#define PCI_VGA_QEXT_REG_WIDTH (2 * 4) +#define PCI_VGA_QEXT_REG_HEIGHT (3 * 4) =20 enum vga_pci_flags { - PCI_VGA_FLAG_ENABLE_MMIO =3D 1, - PCI_VGA_FLAG_ENABLE_QEXT =3D 2, + PCI_VGA_FLAG_ENABLE_MMIO =3D 1, + PCI_VGA_FLAG_ENABLE_QEXT =3D 2, + PCI_VGA_FLAG_ENABLE_QEXT_V2 =3D 3, }; =20 typedef struct PCIVGAState { @@ -157,10 +162,14 @@ static uint64_t pci_vga_qext_read(void *ptr, hwaddr a= ddr, unsigned size) =20 switch (addr) { case PCI_VGA_QEXT_REG_SIZE: - return PCI_VGA_QEXT_SIZE; + return s->qext_size; case PCI_VGA_QEXT_REG_BYTEORDER: return s->big_endian_fb ? PCI_VGA_QEXT_BIG_ENDIAN : PCI_VGA_QEXT_LITTLE_ENDIAN; + case PCI_VGA_QEXT_REG_WIDTH: + return s->xres; + case PCI_VGA_QEXT_REG_HEIGHT: + return s->yres; default: return 0; } @@ -207,8 +216,7 @@ static const MemoryRegionOps pci_vga_qext_ops =3D { =20 void pci_std_vga_mmio_region_init(VGACommonState *s, MemoryRegion *parent, - MemoryRegion *subs, - bool qext) + MemoryRegion *subs) { memory_region_init_io(&subs[0], NULL, &pci_vga_ioport_ops, s, "vga ioports remapped", PCI_VGA_IOPORT_SIZE); @@ -220,9 +228,9 @@ void pci_std_vga_mmio_region_init(VGACommonState *s, memory_region_add_subregion(parent, PCI_VGA_BOCHS_OFFSET, &subs[1]); =20 - if (qext) { + if (s->qext_size) { memory_region_init_io(&subs[2], NULL, &pci_vga_qext_ops, s, - "qemu extended regs", PCI_VGA_QEXT_SIZE); + "qemu extended regs", s->qext_size); memory_region_add_subregion(parent, PCI_VGA_QEXT_OFFSET, &subs[2]); } @@ -232,7 +240,6 @@ static void pci_std_vga_realize(PCIDevice *dev, Error *= *errp) { PCIVGAState *d =3D PCI_VGA(dev); VGACommonState *s =3D &d->vga; - bool qext =3D false; =20 /* vga + console init */ vga_common_init(s, OBJECT(dev), true); @@ -249,10 +256,15 @@ static void pci_std_vga_realize(PCIDevice *dev, Error= **errp) memory_region_init(&d->mmio, NULL, "vga.mmio", 4096); =20 if (d->flags & (1 << PCI_VGA_FLAG_ENABLE_QEXT)) { - qext =3D true; - pci_set_byte(&d->dev.config[PCI_REVISION_ID], 2); + if (d->flags & (1 << PCI_VGA_FLAG_ENABLE_QEXT_V2)) { + s->qext_size =3D PCI_VGA_QEXT_SIZE_V2; + pci_set_byte(&d->dev.config[PCI_REVISION_ID], 3); + } else { + s->qext_size =3D PCI_VGA_QEXT_SIZE_V1; + pci_set_byte(&d->dev.config[PCI_REVISION_ID], 2); + } } - pci_std_vga_mmio_region_init(s, &d->mmio, d->mrs, qext); + pci_std_vga_mmio_region_init(s, &d->mmio, d->mrs); =20 pci_register_bar(&d->dev, 2, PCI_BASE_ADDRESS_SPACE_MEMORY, &d->mm= io); } @@ -274,7 +286,6 @@ static void pci_secondary_vga_realize(PCIDevice *dev, E= rror **errp) { PCIVGAState *d =3D PCI_VGA(dev); VGACommonState *s =3D &d->vga; - bool qext =3D false; =20 /* vga + console init */ vga_common_init(s, OBJECT(dev), false); @@ -284,10 +295,15 @@ static void pci_secondary_vga_realize(PCIDevice *dev,= Error **errp) memory_region_init(&d->mmio, OBJECT(dev), "vga.mmio", 4096); =20 if (d->flags & (1 << PCI_VGA_FLAG_ENABLE_QEXT)) { - qext =3D true; - pci_set_byte(&d->dev.config[PCI_REVISION_ID], 2); + if (d->flags & (1 << PCI_VGA_FLAG_ENABLE_QEXT_V2)) { + s->qext_size =3D PCI_VGA_QEXT_SIZE_V2; + pci_set_byte(&d->dev.config[PCI_REVISION_ID], 3); + } else { + s->qext_size =3D PCI_VGA_QEXT_SIZE_V1; + pci_set_byte(&d->dev.config[PCI_REVISION_ID], 2); + } } - pci_std_vga_mmio_region_init(s, &d->mmio, d->mrs, qext); + pci_std_vga_mmio_region_init(s, &d->mmio, d->mrs); =20 pci_register_bar(&d->dev, 0, PCI_BASE_ADDRESS_MEM_PREFETCH, &s->vram); pci_register_bar(&d->dev, 2, PCI_BASE_ADDRESS_SPACE_MEMORY, &d->mmio); @@ -315,6 +331,10 @@ static Property vga_pci_common_properties[] =3D { DEFINE_PROP_UINT32("vgamem_mb", PCIVGAState, vga.vram_size_mb, 16), DEFINE_PROP_BIT("qemu-extended-regs", PCIVGAState, flags, PCI_VGA_FLAG_ENABLE_QEXT, true), + DEFINE_PROP_BIT("qemu-display-size", + PCIVGAState, flags, PCI_VGA_FLAG_ENABLE_QEXT_V2, true), + DEFINE_PROP_UINT32("xres", PCIVGAState, vga.xres, 0), + DEFINE_PROP_UINT32("yres", PCIVGAState, vga.yres, 0), DEFINE_PROP_END_OF_LIST(), }; =20 diff --git a/hw/display/vga_int.h b/hw/display/vga_int.h index dd6c958..1e9b0ff 100644 --- a/hw/display/vga_int.h +++ b/hw/display/vga_int.h @@ -162,6 +162,9 @@ typedef struct VGACommonState { bool full_update_gfx; bool big_endian_fb; bool default_endian_fb; + uint32_t qext_size; + uint32_t xres; + uint32_t yres; /* hardware mouse cursor support */ uint32_t invalidated_y_table[VGA_MAX_HEIGHT / 32]; uint32_t hw_cursor_x; @@ -223,7 +226,6 @@ extern const MemoryRegionOps vga_mem_ops; /* vga-pci.c */ void pci_std_vga_mmio_region_init(VGACommonState *s, MemoryRegion *parent, - MemoryRegion *subs, - bool qext); + MemoryRegion *subs); =20 #endif diff --git a/hw/display/virtio-vga.c b/hw/display/virtio-vga.c index f9b017d..8684dc0 100644 --- a/hw/display/virtio-vga.c +++ b/hw/display/virtio-vga.c @@ -153,8 +153,9 @@ static void virtio_vga_realize(VirtIOPCIProxy *vpci_dev= , Error **errp) } =20 /* add stdvga mmio regions */ + vga->qext_size =3D 2 * 4; /* PCI_VGA_QEXT_SIZE_V1 */ pci_std_vga_mmio_region_init(vga, &vpci_dev->modern_bar, - vvga->vga_mrs, true); + vvga->vga_mrs); =20 vga->con =3D g->scanout[0].con; graphic_console_set_hwops(vga->con, &virtio_vga_ops, vvga); --=20 1.8.3.1