From patchwork Tue Sep 6 19:47:52 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Arwed Meyer X-Patchwork-Id: 1675041 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=pass (1024-bit key; secure) header.d=gmx.net header.i=@gmx.net header.a=rsa-sha256 header.s=badeba3b8450 header.b=c1HiZcTN; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4MMfXH2yqJz1yns for ; Wed, 7 Sep 2022 08:03:11 +1000 (AEST) Received: from localhost ([::1]:56134 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oVgez-0007YF-1C for incoming@patchwork.ozlabs.org; Tue, 06 Sep 2022 18:03:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43254) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oVeYY-0004YL-SX; Tue, 06 Sep 2022 15:48:22 -0400 Received: from mout.gmx.net ([212.227.17.22]:50255) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oVeYW-00084X-T3; Tue, 06 Sep 2022 15:48:22 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1662493696; bh=AvUMOSQIPIUZRgD26pgYnEloTYd5BX9ObWpseeSEE/c=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To:References; b=c1HiZcTN5GCcYZq0dFoemFtizZuootibi18Tq1epLlSC7vTNb+mV/LY7N0cMhvGHs n+HLHD/ttVuQqZHeawM8IcxMzG9CiC6wnFMcEH3fgtAiSkDd/KjI3QPTJF+WqU/Wpa 8AUTTrzPTrH1eHSXPgpWawels/cGRETGLW/qnwnU= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from btm-mobil4.fritz.box ([88.72.97.126]) by mail.gmx.net (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MulmF-1pLYHk2cXz-00rrN4; Tue, 06 Sep 2022 21:48:15 +0200 From: Arwed Meyer To: qemu-devel@nongnu.org Cc: qemu-stable@nongnu.org, Arwed Meyer , =?utf-8?q?Marc?= =?utf-8?q?-Andr=C3=A9_Lureau?= , Paolo Bonzini Subject: [PATCH 1/4] msmouse: Handle mouse reset Date: Tue, 6 Sep 2022 21:47:52 +0200 Message-Id: <20220906194755.98090-2-arwed.meyer@gmx.de> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220906194755.98090-1-arwed.meyer@gmx.de> References: <20220906194755.98090-1-arwed.meyer@gmx.de> MIME-Version: 1.0 X-Provags-ID: V03:K1:BRFqusUK4VPAa1guIHCDqvv3fd9mp5Umyr8GgeulWjSE99DiWf3 HvBACxPt6+mcB5l/mqF7SQVMSAwgFOagPu+udPumeT/75yf781c2WFJ2iDFLf29v/tI0+nN nXnDdNSh2ppA10Y/kGBCKoovFo33e7jCpDUSpnA4TUHp9HKeVrWjyzRL0D9cXmNAxlK8vNv IjCK11WpVSgAqbure8FYA== X-UI-Out-Filterresults: notjunk:1;V03:K0:C9x85MI1MkQ=:XBr/vM4uWPzqbneuiyHD1v sHQDTtEkRzmtZnzY2HE3YWVsvgflR8wEyXo4+5eVlcKLi8nw5rByWmtCc55QaQy+wPUMR9AcP OuXrEeOUfulDeyCdsl9I4zcGT+wDgJcd3g7hEmEwjyHMSE8U1j9lFjwyobgXqnZdyW5+HhhPI mEKWTgW7Ni6om9xa9VvoG+WqE3hcQDzHDRuB6TqAJTPC7rvWn4x0slQzIu9X8Yp9AbjRpPJRR RIb33aoeYC2BexBi+L9TGqKpK++UwoQ9fEFclUu4BfanxeOQVGyVV42DIjMNngtVj1p2OhJi7 n5oLOB6xD1bf7p9xsQaxVU7a+9lhYxkuuPbjow6rpzA4qbWfGFW4oSunpTsjVQNhWzgJF4qgs 72GUg2cnB5EU1D0/vwl8fryosKbuITLCLZ1TxfEeWp5fcCnVyhxc+dnd+U52BwpqnphKnmLK+ 5E/ENvQpP6+WAHHvcvNY3/87JBps7XLbCjOlQN0kQF7M1e413ZeEm6HD6znetqg0a4f3otsVu IWsL3+g7GyK3lKpRM6JiGIeo0m+qhebOIv8eiaxuG2hVomI/rV8mTUYg86tSFa8M8VFM4JnOw pJK8OFPeVJQLNxQBKtY9TTUtJUYQTKCpn+VMg1DOGtn/WN9YTmjdcWfLlHBWSSYhK8RDThZ3B PsXdD9Oa9oPMlE7ctUkzv/BaV14xhUu0zu9aNvChLKgJRs7opqqBIrFznJ4qgKTz1Z18L0IOC x/4UJuBcAn05ICOqQKPi8bhXJ+9al6cuU/LmzIjd7YK6IPHjwjZx3wK9QIwI+CuG3uFD2oesV qUEmOKQMBwEIwnrdVdQhWUHfi7ngjalBD8YMYgPfEWxBG/fUV8lBYoAf18IwHvlsvftXOkTrW 3bQUg4f6MeofHm53O0QISoNiZh68IBn/uql4sn6+wFm2nbnVE6Pv95BRXzLuNB7Fn9p88Gt91 Mh0YB+/wh5ZM6/9iwiILzFOQwv78rnVJq58M/+zIPLzgO8kzcr4cvvznIeVqIx/RN+Zdejzqv 2DcNMSSJfV1z0NqmMYhOe8S5XMjmVZLFTPB0fSwqi/0V6jOHsfN6caZytod4Q5ffiXBsTsz/x RL29HWwHBcdzVFrEIhLDhaxSRt7viySwWFFkxVb2C9E7SMQ4BXL0wRjuO0z+LcvDxiKlGuw+0 Ii1beP4yvP6jWj/dXgMbgwpjKL Received-SPF: pass client-ip=212.227.17.22; envelope-from=arwed.meyer@gmx.de; helo=mout.gmx.net X-Spam_score_int: -25 X-Spam_score: -2.6 X-Spam_bar: -- X-Spam_report: (-2.6 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Tue, 06 Sep 2022 18:00:42 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Detect mouse reset via RTS or DTR line: Don't send or process anything while in reset. When coming out of reset, send ID sequence first thing. This allows msmouse to be detected by common mouse drivers. Resolves: https://gitlab.com/qemu-project/qemu/-/issues/77 Signed-off-by: Arwed Meyer Reviewed-by: Marc-André Lureau --- chardev/msmouse.c | 65 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 63 insertions(+), 2 deletions(-) -- 2.34.1 diff --git a/chardev/msmouse.c b/chardev/msmouse.c index eb9231dcdb..0ecf26a436 100644 --- a/chardev/msmouse.c +++ b/chardev/msmouse.c @@ -25,17 +25,20 @@ #include "qemu/osdep.h" #include "qemu/module.h" #include "chardev/char.h" +#include "chardev/char-serial.h" #include "ui/console.h" #include "ui/input.h" #include "qom/object.h" -#define MSMOUSE_LO6(n) ((n) & 0x3f) -#define MSMOUSE_HI2(n) (((n) & 0xc0) >> 6) +#define MSMOUSE_LO6(n) ((n) & 0x3f) +#define MSMOUSE_HI2(n) (((n) & 0xc0) >> 6) +#define MSMOUSE_PWR(cm) (cm & (CHR_TIOCM_RTS | CHR_TIOCM_DTR)) struct MouseChardev { Chardev parent; QemuInputHandlerState *hs; + int tiocm; int axis[INPUT_AXIS__MAX]; bool btns[INPUT_BUTTON__MAX]; bool btnc[INPUT_BUTTON__MAX]; @@ -109,6 +112,11 @@ static void msmouse_input_event(DeviceState *dev, QemuConsole *src, InputMoveEvent *move; InputBtnEvent *btn; + /* Ignore events if serial mouse powered down. */ + if (!MSMOUSE_PWR(mouse->tiocm)) { + return; + } + switch (evt->type) { case INPUT_EVENT_KIND_REL: move = evt->u.rel.data; @@ -132,6 +140,11 @@ static void msmouse_input_sync(DeviceState *dev) MouseChardev *mouse = MOUSE_CHARDEV(dev); Chardev *chr = CHARDEV(dev); + /* Ignore events if serial mouse powered down. */ + if (!MSMOUSE_PWR(mouse->tiocm)) { + return; + } + msmouse_queue_event(mouse); msmouse_chr_accept_input(chr); } @@ -142,6 +155,52 @@ static int msmouse_chr_write(struct Chardev *s, const uint8_t *buf, int len) return len; } +static int msmouse_ioctl(Chardev *chr, int cmd, void *arg) +{ + MouseChardev *mouse = MOUSE_CHARDEV(chr); + int c; + int *targ = (int *)arg; + + switch (cmd) { + case CHR_IOCTL_SERIAL_SET_TIOCM: + c = mouse->tiocm; + mouse->tiocm = *(int *)arg; + if (MSMOUSE_PWR(mouse->tiocm)) { + if (!MSMOUSE_PWR(c)) { + /* + * Power on after reset: send "M3" + * cause we behave like a 3 button logitech + * mouse. + */ + mouse->outbuf[0] = 'M'; + mouse->outbuf[1] = '3'; + mouse->outlen = 2; + /* Start sending data to serial. */ + msmouse_chr_accept_input(chr); + } + break; + } + /* + * Reset mouse buffers on power down. + * Mouse won't send anything without power. + */ + mouse->outlen = 0; + memset(mouse->axis, 0, sizeof(mouse->axis)); + for (c = INPUT_BUTTON__MAX - 1; c >= 0; c--) { + mouse->btns[c] = false; + mouse->btnc[c] = false; + } + break; + case CHR_IOCTL_SERIAL_GET_TIOCM: + /* Remember line control status. */ + *targ = mouse->tiocm; + break; + default: + return -ENOTSUP; + } + return 0; +} + static void char_msmouse_finalize(Object *obj) { MouseChardev *mouse = MOUSE_CHARDEV(obj); @@ -166,6 +225,7 @@ static void msmouse_chr_open(Chardev *chr, *be_opened = false; mouse->hs = qemu_input_handler_register((DeviceState *)mouse, &msmouse_handler); + mouse->tiocm = 0; } static void char_msmouse_class_init(ObjectClass *oc, void *data) @@ -175,6 +235,7 @@ static void char_msmouse_class_init(ObjectClass *oc, void *data) cc->open = msmouse_chr_open; cc->chr_write = msmouse_chr_write; cc->chr_accept_input = msmouse_chr_accept_input; + cc->chr_ioctl = msmouse_ioctl; } static const TypeInfo char_msmouse_type_info = { From patchwork Tue Sep 6 19:47:53 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Arwed Meyer X-Patchwork-Id: 1675043 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=pass (1024-bit key; secure) header.d=gmx.net header.i=@gmx.net header.a=rsa-sha256 header.s=badeba3b8450 header.b=B50pycN1; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4MMfbT5Y4Hz1yhP for ; Wed, 7 Sep 2022 08:05:57 +1000 (AEST) Received: from localhost ([::1]:35262 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oVghf-0003rh-Ln for incoming@patchwork.ozlabs.org; Tue, 06 Sep 2022 18:05:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43256) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oVeYa-0004Yy-C5; Tue, 06 Sep 2022 15:48:25 -0400 Received: from mout.gmx.net ([212.227.17.22]:34263) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oVeYY-00084l-C9; Tue, 06 Sep 2022 15:48:24 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1662493697; bh=uPyd7/rGq79X5CYUYadT3vXFghOORV+xlXGmB3n27+o=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To:References; b=B50pycN1AFRqGR7YVVEQ2rnTlJaK+HOF4j9LwCCE6/F31k+HRkNUDx0Syx25x4g+p K255TaZrXbwEpobgi7Guxq7oE+QKLZ8KxRyAThJT8NJdWR710MrZnMuQvMd5wFVqs1 iZfJLnXLR1Sw+W5xpPla6bf847c3yZuGdMst8y2Y= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from btm-mobil4.fritz.box ([88.72.97.126]) by mail.gmx.net (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MY68T-1osXAy18tJ-00YTXQ; Tue, 06 Sep 2022 21:48:17 +0200 From: Arwed Meyer To: qemu-devel@nongnu.org Cc: qemu-stable@nongnu.org, Arwed Meyer , =?utf-8?q?Marc?= =?utf-8?q?-Andr=C3=A9_Lureau?= , Paolo Bonzini , Pavel Dovgalyuk Subject: [PATCH 2/4] chardev: src buffer const for write functions Date: Tue, 6 Sep 2022 21:47:53 +0200 Message-Id: <20220906194755.98090-3-arwed.meyer@gmx.de> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220906194755.98090-1-arwed.meyer@gmx.de> References: <20220906194755.98090-1-arwed.meyer@gmx.de> MIME-Version: 1.0 X-Provags-ID: V03:K1:54+oAnN45h+k17x39v+J4s6svfxHqLuBPOo2gf0NX2Xx8hMhoRr 9tj/hN8SIWza9XlWr1kRrHFuEFoCBsbAHWi2ceuVvDg0jrUIu2qyVptutVLLhjDDAQXiE+Q gZTdavs8tF1q3lOR/ajUcYBvNco/9/Vx91UkCd6dxkcdcAv1CQwpshbfVxe8rPNzG8yV83f ZInP3Qvg2beNAL5AyDluQ== X-UI-Out-Filterresults: notjunk:1;V03:K0:vBJOEPruJkA=:liTGbIuLE1ZYfj/IKt8Yh/ pK28TBD/S6ojTbBeLthVT7V2/RDrWHbBL66hUniw6OENZ5EW5MLU22pSKrPDTRbnT/G2QQdbv 1TC7Wk54Mu0OT43CKXZw6w+S3fFHO3fisObM9Z/yvPiLEBFnZxeu5ZztwtuXzKu0HiPKn50dX ffXxiUjQVP4TCr/0WMFo1gz1HSSiHM3OKncip9fbWhnlyxSanNrz4wn0xbwr0ogna1XwveTp9 E2GDD0umVTRqymtptRmvGuU4MP1ksk9ziCPlp3ghPMRX8c4TbX4Umypa9EhY6v9sWoGDoKET5 Bv0Tff1bNx3THwbKLsUBh1c/UdjQkbAqhdbWpyu/w1voYkMUa94anHJmgGBR+eT05sf79rGN7 VZKpDzTCwimvyo1UZDPl0iM/Z8rUVnXgD3/xT6DKImkPeu+4X+9QMRA/Qo6gQQqm0nYLr7hBN tF9FEaMVtoSRSbE0XWdvGqheYXdm6c1VXJ2PFQ2pz4KfN7nfyJKhTiizjHwHsdyIQn6sF1LgT 5LxuZjZNK/A57+GzuIeqqKEMZbRoau4GTudgN5runwn35WfdNK80++52pynLuhQIqbeT2B7PH 4tkq66dhhonIiWDT4a0j34ocsADBscwsAKdFvN3JwqIFGYZeyHNk+b/qHpxIx9BpAUPchLeNt EWeR/HiceC2tfOID9d4AUBWcjx9vjXYbbwmRxQwoQFc4UC2b1RSPLfmBtmrSKQ3HdvsV/76yZ r4a4xGoenkKtT/g9+fvbMiHnTuWj256G5UM5fnCzV5TeVxxaQYt0JLyK/dZpLmjKCQpgAzxDi NRke3SimtrRD5BDXi1JruxS0vBabgASlJLXIFezIWJvEPZeOb0HfDVwEQZ3thFKa+tX0R8RPf 1MLuQJimM4PekAaCUYkbBGL1hye8UBogUHX+mqu0S9wdcogqgF9UjCtukg6jwtt3li5dvVBlG EASglrpWlCu6XoUnMENf/SFbExpbcO0vgAHZ4CM99s6ssy4a0dNayWZSrlcqTovRw88CbjRNy um4PKhkMzROtQU1AdooqLPYCFP7kxzkBisYJP2DAPVEbTbqUbworgZF+F0afj5jPpgsyxXA5C H4Uoehw25USQ7qd+y7IINllq9xr4P6NbyuJbEzI5MPsa5Vg9sh5en0vIO+BPefuK82o3JFOm9 R/r8S86KpaTBwvQuo/q/DooyrO Received-SPF: pass client-ip=212.227.17.22; envelope-from=arwed.meyer@gmx.de; helo=mout.gmx.net X-Spam_score_int: -25 X-Spam_score: -2.6 X-Spam_bar: -- X-Spam_report: (-2.6 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Tue, 06 Sep 2022 18:00:42 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Make source buffers const for char be write functions. This allows using buffers returned by fifo as buf parameter and source buffer should not be changed by write functions anyway. Signed-off-by: Arwed Meyer Reviewed-by: Marc-André Lureau --- chardev/char.c | 4 ++-- include/chardev/char.h | 4 ++-- include/sysemu/replay.h | 2 +- replay/replay-char.c | 2 +- stubs/replay-tools.c | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) -- 2.34.1 diff --git a/chardev/char.c b/chardev/char.c index 0169d8dde4..b005df3ccf 100644 --- a/chardev/char.c +++ b/chardev/char.c @@ -193,7 +193,7 @@ int qemu_chr_be_can_write(Chardev *s) return be->chr_can_read(be->opaque); } -void qemu_chr_be_write_impl(Chardev *s, uint8_t *buf, int len) +void qemu_chr_be_write_impl(Chardev *s, const uint8_t *buf, int len) { CharBackend *be = s->be; @@ -202,7 +202,7 @@ void qemu_chr_be_write_impl(Chardev *s, uint8_t *buf, int len) } } -void qemu_chr_be_write(Chardev *s, uint8_t *buf, int len) +void qemu_chr_be_write(Chardev *s, const uint8_t *buf, int len) { if (qemu_chr_replay(s)) { if (replay_mode == REPLAY_MODE_PLAY) { diff --git a/include/chardev/char.h b/include/chardev/char.h index a319b5fdff..44cd82e405 100644 --- a/include/chardev/char.h +++ b/include/chardev/char.h @@ -186,7 +186,7 @@ int qemu_chr_be_can_write(Chardev *s); * the caller should call @qemu_chr_be_can_write to determine how much data * the front end can currently accept. */ -void qemu_chr_be_write(Chardev *s, uint8_t *buf, int len); +void qemu_chr_be_write(Chardev *s, const uint8_t *buf, int len); /** * qemu_chr_be_write_impl: @@ -195,7 +195,7 @@ void qemu_chr_be_write(Chardev *s, uint8_t *buf, int len); * * Implementation of back end writing. Used by replay module. */ -void qemu_chr_be_write_impl(Chardev *s, uint8_t *buf, int len); +void qemu_chr_be_write_impl(Chardev *s, const uint8_t *buf, int len); /** * qemu_chr_be_update_read_handlers: diff --git a/include/sysemu/replay.h b/include/sysemu/replay.h index 73dee9ccdf..7ec0882b50 100644 --- a/include/sysemu/replay.h +++ b/include/sysemu/replay.h @@ -198,7 +198,7 @@ uint64_t blkreplay_next_id(void); /*! Registers char driver to save it's events */ void replay_register_char_driver(struct Chardev *chr); /*! Saves write to char device event to the log */ -void replay_chr_be_write(struct Chardev *s, uint8_t *buf, int len); +void replay_chr_be_write(struct Chardev *s, const uint8_t *buf, int len); /*! Writes char write return value to the replay log. */ void replay_char_write_event_save(int res, int offset); /*! Reads char write return value from the replay log. */ diff --git a/replay/replay-char.c b/replay/replay-char.c index d2025948cf..a31aded032 100644 --- a/replay/replay-char.c +++ b/replay/replay-char.c @@ -48,7 +48,7 @@ void replay_register_char_driver(Chardev *chr) char_drivers[drivers_count++] = chr; } -void replay_chr_be_write(Chardev *s, uint8_t *buf, int len) +void replay_chr_be_write(Chardev *s, const uint8_t *buf, int len) { CharEvent *event = g_new0(CharEvent, 1); diff --git a/stubs/replay-tools.c b/stubs/replay-tools.c index f2e72bb225..3e8ca3212d 100644 --- a/stubs/replay-tools.c +++ b/stubs/replay-tools.c @@ -53,7 +53,7 @@ void replay_register_char_driver(struct Chardev *chr) { } -void replay_chr_be_write(struct Chardev *s, uint8_t *buf, int len) +void replay_chr_be_write(struct Chardev *s, const uint8_t *buf, int len) { abort(); } From patchwork Tue Sep 6 19:47:54 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arwed Meyer X-Patchwork-Id: 1675042 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=pass (1024-bit key; secure) header.d=gmx.net header.i=@gmx.net header.a=rsa-sha256 header.s=badeba3b8450 header.b=fhaGYTql; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4MMfbP69Ytz1yhP for ; Wed, 7 Sep 2022 08:05:53 +1000 (AEST) Received: from localhost ([::1]:58254 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oVghb-0003ct-Iq for incoming@patchwork.ozlabs.org; Tue, 06 Sep 2022 18:05:51 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43258) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oVeYb-0004Z3-B6; Tue, 06 Sep 2022 15:48:25 -0400 Received: from mout.gmx.net ([212.227.17.20]:49283) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oVeYZ-000856-CI; Tue, 06 Sep 2022 15:48:25 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1662493699; bh=+YoYIKdyFLKunPxdaBIY/1hDHzwPMqOoiBiMjWntGtM=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To:References; b=fhaGYTqlgaXe5FJMNjuVK4+tcOmxOo4vDlpqYLXMnYGddXm0iNp7LnB8U8znOF3Eq 2DhcqkO3TOfx0zIV0/nDacSKdsKIcsCV+K3RbgvEBcqrVosGcyBTNv3mi/pKoom79W C9jVMankfg3QiV8x5UqBQMbOxv/kFs4fwop8C3nk= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from btm-mobil4.fritz.box ([88.72.97.126]) by mail.gmx.net (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1N79yG-1pRrva3BzY-017XNF; Tue, 06 Sep 2022 21:48:19 +0200 From: Arwed Meyer To: qemu-devel@nongnu.org Cc: qemu-stable@nongnu.org, Arwed Meyer , =?utf-8?q?Marc?= =?utf-8?q?-Andr=C3=A9_Lureau?= , Paolo Bonzini Subject: [PATCH 3/4] msmouse: Add pnp data Date: Tue, 6 Sep 2022 21:47:54 +0200 Message-Id: <20220906194755.98090-4-arwed.meyer@gmx.de> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220906194755.98090-1-arwed.meyer@gmx.de> References: <20220906194755.98090-1-arwed.meyer@gmx.de> MIME-Version: 1.0 X-Provags-ID: V03:K1:5EJlky3Cq8Ied6qsW9+DPF9tHLy7z+axD3/FRDlpnea9F3Muujy Qqop2c2IUX+KYuywit75Bqf1aJ4s70SW+cn4Ol4tSFcHJx3XKN3xkAoKnuKHhsaWTgZNvlG +pOmeUmyECvnWV26zFMg3Bo9i6jZG13+5XUwRyCxpf4X4bRmo4ucLgabB3XCOocC7uv+q7/ hFDUx+fD/P6jFKnZSBmEQ== X-UI-Out-Filterresults: notjunk:1;V03:K0:1pR2JFxSwLE=:0XNCTL/2wajoVmv8KY/Yh1 WjNyvCd2WEGOPX2dz40gcC7nfS2WF3GThQGPdIJy+Wij1AuK5rXIv58MluA1f4CALiGw0LN4O Wc6ynP8a96xcIHYCSXJ8xr931TGhzR9eR27B47Mq5Eq6UdNn4VzI4asT/O9R/0Ap1sWUXvVV2 tEyKP0JCE/oMmdAtFDcgQcGxxTWrEg1nBZYfrDFRgAd1KGi+bJzE0KcdK3RIVK8V3UqmRnMzK 8hR3WHpGHAQ/vxFM4fae+sKrAikpnAUguKyHosjW/gYbkRsmyuui/b1SrWAhnW1jS26b2t7l3 v7E9osTiOvvUtS6nEDc98Byo3lqvFJ+AlPLMyspNZmiany196FNLHQfFKesFoopYBriwy7pFp PfJomrdBvBockT/BHi1LEli0KNnSnT8hBvXUgkJ35dmeZVCoExeIVTC/Vsa6q8WthFFuB2zOs dspJfJRF4OAHIrLHMYl795bVdDBEv3BhocaLWGgvfCTvDs8dogw7Z2yCXdtbtMAThW2/HepSm aDXN+UyxGoMveZJcoBkiHn/Qb+KqxWz6WEu6iRL86QVHv/mX/adAZUny8IZ8Q/ZdYLrD5Y3ZX Di1HSbxZZsY9qQdoOLU0NbWJ9dRrE9ql1Ad/n4h6usXnJGEYzN20t5ziOpwpDViYY798VtFVl fYWtU2HljHl2tAM47VliBrlBVM4/0F7OnaaZ4dVTMNGHWHGrPBpcTbw8mp6nj/0rP2vNrsLbx 9vSmTcLaolN7apWP4SDIuDBktHTP2K8T8FCNcaW1p+UOKBMlvVvrnyeCxqOlHrCAN1ESCQQQe 5vhdnL35z6HqMCJ69ukMlD1NAx+sdFpi2xjGqNc8dpa/gKmYunTuvDUYQ0W18cZBbRi5bpc/1 mL2X6FxT2QAxJsP2QmR8zqoLMO3m/DE/QvNG31gs8dnijcq8aOgpyGWdsscILhSzpyc8I/L5+ kKXhtlsXW66HPJsR7Dxshhsw0iFG6yaMSc6o1EOWI0mn/uLK/Rhh2zT+9OzeiAsaFJXjvkjLC aXwEa1i2NEJWOEI4JvUnQwlPBdd13BvbQhcEsBUERiHcv0hAMVBn7T4+dDp8kxXg4a42b5oUZ e6Ht0shhh9AmDo7yXzMpO25yTOJRgqZwz3AmoaKysoD3d9pFX2Tdtacq01BGGpZCWAluD11J0 IZH8lAygclPkbxQ9yAbTdfb4oA Received-SPF: pass client-ip=212.227.17.20; envelope-from=arwed.meyer@gmx.de; helo=mout.gmx.net X-Spam_score_int: -25 X-Spam_score: -2.6 X-Spam_bar: -- X-Spam_report: (-2.6 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Tue, 06 Sep 2022 18:00:42 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Make msmouse send serial pnp data. Enables you to see nice qemu device name in Win9x. Signed-off-by: Arwed Meyer --- chardev/msmouse.c | 101 +++++++++++++++++++++++++++++++--------------- 1 file changed, 68 insertions(+), 33 deletions(-) -- 2.34.1 diff --git a/chardev/msmouse.c b/chardev/msmouse.c index 0ecf26a436..b4ddaee778 100644 --- a/chardev/msmouse.c +++ b/chardev/msmouse.c @@ -24,6 +24,7 @@ #include "qemu/osdep.h" #include "qemu/module.h" +#include "qemu/fifo8.h" #include "chardev/char.h" #include "chardev/char-serial.h" #include "ui/console.h" @@ -34,6 +35,25 @@ #define MSMOUSE_HI2(n) (((n) & 0xc0) >> 6) #define MSMOUSE_PWR(cm) (cm & (CHR_TIOCM_RTS | CHR_TIOCM_DTR)) +/* Serial PnP for 6 bit devices/mice sends all ASCII chars - 0x20 */ +#define M(c) (c - 0x20) +/* Serial fifo size. */ +#define MSMOUSE_BUF_SZ 64 + +/* Mouse ID: Send "M3" cause we behave like a 3 button logitech mouse. */ +const uint8_t mouse_id[] = {'M', '3'}; +/* + * PnP start "(", PnP version (1.0), vendor ID, product ID, '\\', + * serial ID (omitted), '\\', MS class name, '\\', driver ID (omitted), '\\', + * product description, checksum, ")" + * Missing parts are inserted later. + */ +const uint8_t pnp_data[] = {M('('), 1, '$', M('Q'), M('M'), M('U'), + M('0'), M('0'), M('0'), M('1'), + M('\\'), M('\\'), + M('M'), M('O'), M('U'), M('S'), M('E'), + M('\\'), M('\\')}; + struct MouseChardev { Chardev parent; @@ -42,8 +62,7 @@ struct MouseChardev { int axis[INPUT_AXIS__MAX]; bool btns[INPUT_BUTTON__MAX]; bool btnc[INPUT_BUTTON__MAX]; - uint8_t outbuf[32]; - int outlen; + Fifo8 outbuf; }; typedef struct MouseChardev MouseChardev; @@ -54,21 +73,15 @@ DECLARE_INSTANCE_CHECKER(MouseChardev, MOUSE_CHARDEV, static void msmouse_chr_accept_input(Chardev *chr) { MouseChardev *mouse = MOUSE_CHARDEV(chr); - int len; + uint32_t len_out, len; - len = qemu_chr_be_can_write(chr); - if (len > mouse->outlen) { - len = mouse->outlen; - } - if (!len) { + len_out = qemu_chr_be_can_write(chr); + if (!len_out || fifo8_is_empty(&mouse->outbuf)) { return; } - - qemu_chr_be_write(chr, mouse->outbuf, len); - mouse->outlen -= len; - if (mouse->outlen) { - memmove(mouse->outbuf, mouse->outbuf + len, mouse->outlen); - } + len = MIN(fifo8_num_used(&mouse->outbuf), len_out); + qemu_chr_be_write(chr, fifo8_pop_buf(&mouse->outbuf, len, &len_out), + len_out); } static void msmouse_queue_event(MouseChardev *mouse) @@ -94,12 +107,11 @@ static void msmouse_queue_event(MouseChardev *mouse) mouse->btnc[INPUT_BUTTON_MIDDLE]) { bytes[3] |= (mouse->btns[INPUT_BUTTON_MIDDLE] ? 0x20 : 0x00); mouse->btnc[INPUT_BUTTON_MIDDLE] = false; - count = 4; + count++; } - if (mouse->outlen <= sizeof(mouse->outbuf) - count) { - memcpy(mouse->outbuf + mouse->outlen, bytes, count); - mouse->outlen += count; + if (fifo8_num_free(&mouse->outbuf) >= count) { + fifo8_push_all(&mouse->outbuf, bytes, count); } else { /* queue full -> drop event */ } @@ -155,11 +167,22 @@ static int msmouse_chr_write(struct Chardev *s, const uint8_t *buf, int len) return len; } +static QemuInputHandler msmouse_handler = { + .name = "QEMU Microsoft Mouse", + .mask = INPUT_EVENT_MASK_BTN | INPUT_EVENT_MASK_REL, + .event = msmouse_input_event, + .sync = msmouse_input_sync, +}; + static int msmouse_ioctl(Chardev *chr, int cmd, void *arg) { MouseChardev *mouse = MOUSE_CHARDEV(chr); - int c; + int c, i, j; + uint8_t bytes[MSMOUSE_BUF_SZ / 2]; int *targ = (int *)arg; + const uint8_t hexchr[16] = {M('0'), M('1'), M('2'), M('3'), M('4'), M('5'), + M('6'), M('7'), M('8'), M('9'), M('A'), M('B'), + M('C'), M('D'), M('E'), M('F')}; switch (cmd) { case CHR_IOCTL_SERIAL_SET_TIOCM: @@ -168,13 +191,30 @@ static int msmouse_ioctl(Chardev *chr, int cmd, void *arg) if (MSMOUSE_PWR(mouse->tiocm)) { if (!MSMOUSE_PWR(c)) { /* - * Power on after reset: send "M3" - * cause we behave like a 3 button logitech - * mouse. + * Power on after reset: Send ID and PnP data + * No need to check fifo space as it is empty at this point. + */ + fifo8_push_all(&mouse->outbuf, mouse_id, sizeof(mouse_id)); + /* Add PnP data: */ + fifo8_push_all(&mouse->outbuf, pnp_data, sizeof(pnp_data)); + /* + * Add device description from qemu handler name. + * Make sure this all fits into the queue beforehand! */ - mouse->outbuf[0] = 'M'; - mouse->outbuf[1] = '3'; - mouse->outlen = 2; + c = M(')'); + for (i = 0; msmouse_handler.name[i]; i++) { + bytes[i] = M(msmouse_handler.name[i]); + c += bytes[i]; + } + /* Calc more of checksum */ + for (j = 0; j < sizeof(pnp_data); j++) { + c += pnp_data[j]; + } + c &= 0xff; + bytes[i++] = hexchr[c >> 4]; + bytes[i++] = hexchr[c & 0x0f]; + bytes[i++] = M(')'); + fifo8_push_all(&mouse->outbuf, bytes, i); /* Start sending data to serial. */ msmouse_chr_accept_input(chr); } @@ -184,7 +224,7 @@ static int msmouse_ioctl(Chardev *chr, int cmd, void *arg) * Reset mouse buffers on power down. * Mouse won't send anything without power. */ - mouse->outlen = 0; + fifo8_reset(&mouse->outbuf); memset(mouse->axis, 0, sizeof(mouse->axis)); for (c = INPUT_BUTTON__MAX - 1; c >= 0; c--) { mouse->btns[c] = false; @@ -206,15 +246,9 @@ static void char_msmouse_finalize(Object *obj) MouseChardev *mouse = MOUSE_CHARDEV(obj); qemu_input_handler_unregister(mouse->hs); + fifo8_destroy(&mouse->outbuf); } -static QemuInputHandler msmouse_handler = { - .name = "QEMU Microsoft Mouse", - .mask = INPUT_EVENT_MASK_BTN | INPUT_EVENT_MASK_REL, - .event = msmouse_input_event, - .sync = msmouse_input_sync, -}; - static void msmouse_chr_open(Chardev *chr, ChardevBackend *backend, bool *be_opened, @@ -226,6 +260,7 @@ static void msmouse_chr_open(Chardev *chr, mouse->hs = qemu_input_handler_register((DeviceState *)mouse, &msmouse_handler); mouse->tiocm = 0; + fifo8_create(&mouse->outbuf, MSMOUSE_BUF_SZ); } static void char_msmouse_class_init(ObjectClass *oc, void *data) From patchwork Tue Sep 6 19:47:55 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arwed Meyer X-Patchwork-Id: 1675040 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=pass (1024-bit key; secure) header.d=gmx.net header.i=@gmx.net header.a=rsa-sha256 header.s=badeba3b8450 header.b=TeFsH9zh; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4MMfXF0yHyz1yns for ; Wed, 7 Sep 2022 08:03:07 +1000 (AEST) Received: from localhost ([::1]:36092 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oVget-0007GC-C2 for incoming@patchwork.ozlabs.org; Tue, 06 Sep 2022 18:03:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43260) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oVeYb-0004Z6-Nt; Tue, 06 Sep 2022 15:48:25 -0400 Received: from mout.gmx.net ([212.227.17.22]:45077) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oVeYZ-00085K-Q0; Tue, 06 Sep 2022 15:48:25 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1662493700; bh=6tNsnvyALQCekAEnGgE4v3vfbs9lSzguI1+wfNRfGJU=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To:References; b=TeFsH9zhZLMiVvcpx6gbmaR3jCP1tE0d5jg0QsIG2GgJF0QfUY5R1Vv+od3355xZL kb2dB93CACWuA2ihEVKWAaLaXOL0epAeoFJz4CXFU/J/tLuIQI0XehfbmbsTmkJ27A qXjPr0dlaghed7BM+4zlYCI2UNnhY2ROlDpcWWEk= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from btm-mobil4.fritz.box ([88.72.97.126]) by mail.gmx.net (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MIx3C-1ooyvR2imA-00KRQp; Tue, 06 Sep 2022 21:48:19 +0200 From: Arwed Meyer To: qemu-devel@nongnu.org Cc: qemu-stable@nongnu.org, Arwed Meyer , "Michael S. Tsirkin" , Paolo Bonzini , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Subject: [PATCH 4/4] serial: Allow unaligned i/o access Date: Tue, 6 Sep 2022 21:47:55 +0200 Message-Id: <20220906194755.98090-5-arwed.meyer@gmx.de> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220906194755.98090-1-arwed.meyer@gmx.de> References: <20220906194755.98090-1-arwed.meyer@gmx.de> MIME-Version: 1.0 X-Provags-ID: V03:K1:bhf11o5juHcWQpPFVfbhgOQ2JaWDQIXkcJsU+LqdpO0kz2f+xAr RbdzozikyQwu4Ax+HNsyvWTrohWQqsZOVw5q/PjHisNCm07uJUda+2DDacsvBxKDePGULhJ 11s68ZpKvBYfL1mTTLlRWXH3jsx8fRNXrdporIoQi9nqYEW6F099HTKhGg166ZZW4X9Ezte DItlCMecSIfClC86253MA== X-UI-Out-Filterresults: notjunk:1;V03:K0:yqGueSSEACE=:7/egKm+A/ZNwCgDv4Q19mz Aj7dnflVj/NtTUK4Y6vVPBp/MmPN3Pzf32RtYaqDhWt84VvIezhImsN9dRmlvZLD/9du66ktW y0tvDJ8xPLmT9Bow65bYCjEWv7+s+3Rnl9+rrNOS5Qcea9lKg/L+Tpf9pR5FbtcDYFYb5NoHY WsJSAHSKtvcsqcyqFv+0qPjrA62XOupK78k3TpeOUpSIfoJqU67VJv7AvTZ24gJTPhxqDQG6t S8E7OtQvGzR2Q2hzY0SNDSmLq25O6uAqx6ED9H2UYetEAQGR5HVjOcqvh3qkCfecHxVVHX9aI Zv/T74ChHz3lnyVC/l74fumPlpDuT89lcx+jIMw0ba1DPr00Nph5lXPSZMllybsO1I8YvjcWw hHVMcxZKisjsM22GQ14c7qTwnfHg8U2+k/ipZzrakBQysZL4E61MjqUt4jHLYlx8WA05yIWkP mKlEljHCN0UsoZTaVD4ji/DpkMk+G0+nkiQ0H/1jENYNoXStyCQiF+rb7C3EEeXAFf6hxnAit asV2SoMpnn1TCsScjHH3Iv+XY81tknvrDXSmBk+qYvLAd2MTEKYl8/wcxKSTBfuTcrCXlJvox EUCYNcZAlB+qQxQBuuMUC013bEWb+Pz6ZChbxYPU66a6hj6VfKCv7Zihiam9RI27IwJ3fwisy GmwHM+eeR485q3pS+oZEN1L7Q5D75bJuTaezTB+1+NLhj7C5rgOktjOr1oMMkUm1hoxyMJJUi lbXfgLEtMwJA3UOD9VwDAsnf6nZj84brWMwOjUpcG9dB1NxSJU8HcHuYERZcaAPqayeis+9Mm kNjbEXWPh5JH++Bbqba320QHE5XxuEG3H77b7dLYpqe8rai1LIksxjMz4+WDQGJ6XEPSpLxkH 2BITL8aoD7lx2CKfA/iK2eqKlJ2S5dHv19pkMC3Cxn09WAge8t74kVJR0ZpVJLxZoM/6B41Qa 9vqsLJnEXgwWQyshIkA1vuOTpLhyqMaO4KO5MSH8Uw90AjQpvu68hSXDkQP0bwSJwUro0ix1k wlN7J4gIJdxY84o4W5nx94Dq30h3hgBfWOwDq0QolvHqqKAf1Mnk+p26Tx/wZNtR21iWH670i CI7qvTMd47ONgMWa4d8b1sktmKZ99NqUCc4s1Ivma6tuyOKgaTrmkk82QXNf2SWPaqalvi/1L Raea5FWYqX/pGAF1Z35pX3uGoD Received-SPF: pass client-ip=212.227.17.22; envelope-from=arwed.meyer@gmx.de; helo=mout.gmx.net X-Spam_score_int: -25 X-Spam_score: -2.6 X-Spam_bar: -- X-Spam_report: (-2.6 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Tue, 06 Sep 2022 18:00:42 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Unaligned i/o access on serial UART works on real PCs. This is used for example by FreeDOS CTMouse driver. Without this it can't reset and detect serial mice. Resolves: https://gitlab.com/qemu-project/qemu/-/issues/77 Signed-off-by: Arwed Meyer --- hw/char/serial.c | 3 +++ 1 file changed, 3 insertions(+) -- 2.34.1 diff --git a/hw/char/serial.c b/hw/char/serial.c index 7061aacbce..41b5e61977 100644 --- a/hw/char/serial.c +++ b/hw/char/serial.c @@ -961,6 +961,9 @@ void serial_set_frequency(SerialState *s, uint32_t frequency) const MemoryRegionOps serial_io_ops = { .read = serial_ioport_read, .write = serial_ioport_write, + .valid = { + .unaligned = 1, + }, .impl = { .min_access_size = 1, .max_access_size = 1,