Message ID | 20230218162216.46944-2-slp@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Implement virtio-multitouch and enable GTK3 to use it | expand |
On Sat, Feb 18, 2023 at 8:23 PM Sergio Lopez <slp@redhat.com> wrote: > > As there are other bitmap-based config properties that need to be dealt in a > similar fashion as VIRTIO_INPUT_CFG_EV_BITS, generalize the function to > receive select and subsel as arguments, and rename it to > virtio_input_extend_config() > > Signed-off-by: Sergio Lopez <slp@redhat.com> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> > --- > hw/input/virtio-input-hid.c | 38 ++++++++++++++++++++----------------- > 1 file changed, 21 insertions(+), 17 deletions(-) > > diff --git a/hw/input/virtio-input-hid.c b/hw/input/virtio-input-hid.c > index a7a244a95d..d28dab69ba 100644 > --- a/hw/input/virtio-input-hid.c > +++ b/hw/input/virtio-input-hid.c > @@ -44,30 +44,31 @@ static const unsigned short axismap_abs[INPUT_AXIS__MAX] = { > > /* ----------------------------------------------------------------- */ > > -static void virtio_input_key_config(VirtIOInput *vinput, > - const unsigned short *keymap, > - size_t mapsize) > +static void virtio_input_extend_config(VirtIOInput *vinput, > + const unsigned short *map, > + size_t mapsize, > + uint8_t select, uint8_t subsel) > { > - virtio_input_config keys; > + virtio_input_config ext; > int i, bit, byte, bmax = 0; > > - memset(&keys, 0, sizeof(keys)); > + memset(&ext, 0, sizeof(ext)); > for (i = 0; i < mapsize; i++) { > - bit = keymap[i]; > + bit = map[i]; > if (!bit) { > continue; > } > byte = bit / 8; > bit = bit % 8; > - keys.u.bitmap[byte] |= (1 << bit); > + ext.u.bitmap[byte] |= (1 << bit); > if (bmax < byte+1) { > bmax = byte+1; > } > } > - keys.select = VIRTIO_INPUT_CFG_EV_BITS; > - keys.subsel = EV_KEY; > - keys.size = bmax; > - virtio_input_add_config(vinput, &keys); > + ext.select = select; > + ext.subsel = subsel; > + ext.size = bmax; > + virtio_input_add_config(vinput, &ext); > } > > static void virtio_input_handle_event(DeviceState *dev, QemuConsole *src, > @@ -281,8 +282,9 @@ static void virtio_keyboard_init(Object *obj) > > vhid->handler = &virtio_keyboard_handler; > virtio_input_init_config(vinput, virtio_keyboard_config); > - virtio_input_key_config(vinput, qemu_input_map_qcode_to_linux, > - qemu_input_map_qcode_to_linux_len); > + virtio_input_extend_config(vinput, qemu_input_map_qcode_to_linux, > + qemu_input_map_qcode_to_linux_len, > + VIRTIO_INPUT_CFG_EV_BITS, EV_KEY); > } > > static const TypeInfo virtio_keyboard_info = { > @@ -373,8 +375,9 @@ static void virtio_mouse_init(Object *obj) > virtio_input_init_config(vinput, vhid->wheel_axis > ? virtio_mouse_config_v2 > : virtio_mouse_config_v1); > - virtio_input_key_config(vinput, keymap_button, > - ARRAY_SIZE(keymap_button)); > + virtio_input_extend_config(vinput, keymap_button, > + ARRAY_SIZE(keymap_button), > + VIRTIO_INPUT_CFG_EV_BITS, EV_KEY); > } > > static const TypeInfo virtio_mouse_info = { > @@ -497,8 +500,9 @@ static void virtio_tablet_init(Object *obj) > virtio_input_init_config(vinput, vhid->wheel_axis > ? virtio_tablet_config_v2 > : virtio_tablet_config_v1); > - virtio_input_key_config(vinput, keymap_button, > - ARRAY_SIZE(keymap_button)); > + virtio_input_extend_config(vinput, keymap_button, > + ARRAY_SIZE(keymap_button), > + VIRTIO_INPUT_CFG_EV_BITS, EV_KEY); > } > > static const TypeInfo virtio_tablet_info = { > -- > 2.38.1 > > -- Marc-André Lureau
diff --git a/hw/input/virtio-input-hid.c b/hw/input/virtio-input-hid.c index a7a244a95d..d28dab69ba 100644 --- a/hw/input/virtio-input-hid.c +++ b/hw/input/virtio-input-hid.c @@ -44,30 +44,31 @@ static const unsigned short axismap_abs[INPUT_AXIS__MAX] = { /* ----------------------------------------------------------------- */ -static void virtio_input_key_config(VirtIOInput *vinput, - const unsigned short *keymap, - size_t mapsize) +static void virtio_input_extend_config(VirtIOInput *vinput, + const unsigned short *map, + size_t mapsize, + uint8_t select, uint8_t subsel) { - virtio_input_config keys; + virtio_input_config ext; int i, bit, byte, bmax = 0; - memset(&keys, 0, sizeof(keys)); + memset(&ext, 0, sizeof(ext)); for (i = 0; i < mapsize; i++) { - bit = keymap[i]; + bit = map[i]; if (!bit) { continue; } byte = bit / 8; bit = bit % 8; - keys.u.bitmap[byte] |= (1 << bit); + ext.u.bitmap[byte] |= (1 << bit); if (bmax < byte+1) { bmax = byte+1; } } - keys.select = VIRTIO_INPUT_CFG_EV_BITS; - keys.subsel = EV_KEY; - keys.size = bmax; - virtio_input_add_config(vinput, &keys); + ext.select = select; + ext.subsel = subsel; + ext.size = bmax; + virtio_input_add_config(vinput, &ext); } static void virtio_input_handle_event(DeviceState *dev, QemuConsole *src, @@ -281,8 +282,9 @@ static void virtio_keyboard_init(Object *obj) vhid->handler = &virtio_keyboard_handler; virtio_input_init_config(vinput, virtio_keyboard_config); - virtio_input_key_config(vinput, qemu_input_map_qcode_to_linux, - qemu_input_map_qcode_to_linux_len); + virtio_input_extend_config(vinput, qemu_input_map_qcode_to_linux, + qemu_input_map_qcode_to_linux_len, + VIRTIO_INPUT_CFG_EV_BITS, EV_KEY); } static const TypeInfo virtio_keyboard_info = { @@ -373,8 +375,9 @@ static void virtio_mouse_init(Object *obj) virtio_input_init_config(vinput, vhid->wheel_axis ? virtio_mouse_config_v2 : virtio_mouse_config_v1); - virtio_input_key_config(vinput, keymap_button, - ARRAY_SIZE(keymap_button)); + virtio_input_extend_config(vinput, keymap_button, + ARRAY_SIZE(keymap_button), + VIRTIO_INPUT_CFG_EV_BITS, EV_KEY); } static const TypeInfo virtio_mouse_info = { @@ -497,8 +500,9 @@ static void virtio_tablet_init(Object *obj) virtio_input_init_config(vinput, vhid->wheel_axis ? virtio_tablet_config_v2 : virtio_tablet_config_v1); - virtio_input_key_config(vinput, keymap_button, - ARRAY_SIZE(keymap_button)); + virtio_input_extend_config(vinput, keymap_button, + ARRAY_SIZE(keymap_button), + VIRTIO_INPUT_CFG_EV_BITS, EV_KEY); } static const TypeInfo virtio_tablet_info = {
As there are other bitmap-based config properties that need to be dealt in a similar fashion as VIRTIO_INPUT_CFG_EV_BITS, generalize the function to receive select and subsel as arguments, and rename it to virtio_input_extend_config() Signed-off-by: Sergio Lopez <slp@redhat.com> --- hw/input/virtio-input-hid.c | 38 ++++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 17 deletions(-)