[RESEND PATCH] hw/i386/vmmouse:add relative packet flag for button status

Zongmin Zhou posted 1 patch 9 months ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20230801054334.1034300-1-zhouzongmin@kylinos.cn
Maintainers: Paolo Bonzini <pbonzini@redhat.com>, Richard Henderson <richard.henderson@linaro.org>, Eduardo Habkost <eduardo@habkost.net>, "Michael S. Tsirkin" <mst@redhat.com>, Marcel Apfelbaum <marcel.apfelbaum@gmail.com>
hw/i386/vmmouse.c | 15 ++++++++++++---
1 file changed, 12 insertions(+), 3 deletions(-)
[RESEND PATCH] hw/i386/vmmouse:add relative packet flag for button status
Posted by Zongmin Zhou 9 months ago
The buttons value use macros instead of direct numbers.

If request relative mode, have to add this for
guest vmmouse driver to judge this is a relative packet.
otherwise,vmmouse driver will not match
the condition 'status & VMMOUSE_RELATIVE_PACKET',
and can't report events on the correct(relative) input device,
result to relative mode unuseful.

Signed-off-by: Zongmin Zhou<zhouzongmin@kylinos.cn>
---
 hw/i386/vmmouse.c | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/hw/i386/vmmouse.c b/hw/i386/vmmouse.c
index a56c185f15..6cd624bd09 100644
--- a/hw/i386/vmmouse.c
+++ b/hw/i386/vmmouse.c
@@ -44,6 +44,12 @@
 
 #define VMMOUSE_VERSION		0x3442554a
 
+#define VMMOUSE_RELATIVE_PACKET    0x00010000
+
+#define VMMOUSE_LEFT_BUTTON        0x20
+#define VMMOUSE_RIGHT_BUTTON       0x10
+#define VMMOUSE_MIDDLE_BUTTON      0x08
+
 #ifdef DEBUG_VMMOUSE
 #define DPRINTF(fmt, ...) printf(fmt, ## __VA_ARGS__)
 #else
@@ -103,15 +109,18 @@ static void vmmouse_mouse_event(void *opaque, int x, int y, int dz, int buttons_
             x, y, dz, buttons_state);
 
     if ((buttons_state & MOUSE_EVENT_LBUTTON))
-        buttons |= 0x20;
+        buttons |= VMMOUSE_LEFT_BUTTON;
     if ((buttons_state & MOUSE_EVENT_RBUTTON))
-        buttons |= 0x10;
+        buttons |= VMMOUSE_RIGHT_BUTTON;
     if ((buttons_state & MOUSE_EVENT_MBUTTON))
-        buttons |= 0x08;
+        buttons |= VMMOUSE_MIDDLE_BUTTON;
 
     if (s->absolute) {
         x <<= 1;
         y <<= 1;
+    } else{
+        /* add for guest vmmouse driver to judge this is a relative packet. */
+        buttons |= VMMOUSE_RELATIVE_PACKET;
     }
 
     s->queue[s->nb_queue++] = buttons;
-- 
2.34.1
Re: [RESEND PATCH] hw/i386/vmmouse:add relative packet flag for button status
Posted by Marc-André Lureau 9 months ago
On Tue, Aug 1, 2023 at 9:45 AM Zongmin Zhou <zhouzongmin@kylinos.cn> wrote:
>
> The buttons value use macros instead of direct numbers.
>
> If request relative mode, have to add this for
> guest vmmouse driver to judge this is a relative packet.
> otherwise,vmmouse driver will not match
> the condition 'status & VMMOUSE_RELATIVE_PACKET',
> and can't report events on the correct(relative) input device,
> result to relative mode unuseful.
>
> Signed-off-by: Zongmin Zhou<zhouzongmin@kylinos.cn>
> ---
>  hw/i386/vmmouse.c | 15 ++++++++++++---
>  1 file changed, 12 insertions(+), 3 deletions(-)
>
> diff --git a/hw/i386/vmmouse.c b/hw/i386/vmmouse.c
> index a56c185f15..6cd624bd09 100644
> --- a/hw/i386/vmmouse.c
> +++ b/hw/i386/vmmouse.c
> @@ -44,6 +44,12 @@
>
>  #define VMMOUSE_VERSION                0x3442554a
>
> +#define VMMOUSE_RELATIVE_PACKET    0x00010000
> +
> +#define VMMOUSE_LEFT_BUTTON        0x20
> +#define VMMOUSE_RIGHT_BUTTON       0x10
> +#define VMMOUSE_MIDDLE_BUTTON      0x08
> +
>  #ifdef DEBUG_VMMOUSE
>  #define DPRINTF(fmt, ...) printf(fmt, ## __VA_ARGS__)
>  #else
> @@ -103,15 +109,18 @@ static void vmmouse_mouse_event(void *opaque, int x, int y, int dz, int buttons_
>              x, y, dz, buttons_state);
>
>      if ((buttons_state & MOUSE_EVENT_LBUTTON))
> -        buttons |= 0x20;
> +        buttons |= VMMOUSE_LEFT_BUTTON;
>      if ((buttons_state & MOUSE_EVENT_RBUTTON))
> -        buttons |= 0x10;
> +        buttons |= VMMOUSE_RIGHT_BUTTON;
>      if ((buttons_state & MOUSE_EVENT_MBUTTON))
> -        buttons |= 0x08;
> +        buttons |= VMMOUSE_MIDDLE_BUTTON;
>
>      if (s->absolute) {
>          x <<= 1;
>          y <<= 1;
> +    } else{
> +        /* add for guest vmmouse driver to judge this is a relative packet. */
> +        buttons |= VMMOUSE_RELATIVE_PACKET;
>      }

Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>

>
>      s->queue[s->nb_queue++] = buttons;
> --
> 2.34.1
>
>


-- 
Marc-André Lureau