From nobody Mon Feb 9 02:51:15 2026 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.zohomail.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 1502715131291573.4651138719646; Mon, 14 Aug 2017 05:52:11 -0700 (PDT) Received: from localhost ([::1]:44587 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dhEqo-0008G1-3P for importer@patchew.org; Mon, 14 Aug 2017 08:52:10 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47999) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dhEoZ-0006T0-Ka for qemu-devel@nongnu.org; Mon, 14 Aug 2017 08:49:57 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dhEoW-0003rn-Cr for qemu-devel@nongnu.org; Mon, 14 Aug 2017 08:49:51 -0400 Received: from mx1.redhat.com ([209.132.183.28]:39368) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dhEoW-0003rL-0O for qemu-devel@nongnu.org; Mon, 14 Aug 2017 08:49:48 -0400 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id E3599C047B8C for ; Mon, 14 Aug 2017 12:49:46 +0000 (UTC) Received: from localhost.localdomain.com (unknown [10.42.22.189]) by smtp.corp.redhat.com (Postfix) with ESMTP id F3B0760841; Mon, 14 Aug 2017 12:49:45 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com E3599C047B8C Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=berrange@redhat.com From: "Daniel P. Berrange" To: qemu-devel@nongnu.org Date: Mon, 14 Aug 2017 13:49:20 +0100 Message-Id: <20170814124927.30134-6-berrange@redhat.com> In-Reply-To: <20170814124927.30134-1-berrange@redhat.com> References: <20170814124927.30134-1-berrange@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Mon, 14 Aug 2017 12:49:47 +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 v3 05/12] input: convert virtio-input-hid device to keycodemapdb 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" Replace the keymap_qcode table with automatically generated tables. Missing entries in keymap_qcode now fixed: Q_KEY_CODE_ASTERISK -> KEY_KPASTERISK Q_KEY_CODE_KP_MULTIPLY -> KEY_KPASTERISK Q_KEY_CODE_STOP -> KEY_STOP Q_KEY_CODE_AGAIN -> KEY_AGAIN Q_KEY_CODE_PROPS -> KEY_PROPS Q_KEY_CODE_UNDO -> KEY_UNDO Q_KEY_CODE_FRONT -> KEY_FRONT Q_KEY_CODE_COPY -> KEY_COPY Q_KEY_CODE_OPEN -> KEY_OPEN Q_KEY_CODE_PASTE -> KEY_PASTE Q_KEY_CODE_FIND -> KEY_FIND Q_KEY_CODE_CUT -> KEY_CUT Q_KEY_CODE_LF -> KEY_LINEFEED Q_KEY_CODE_HELP -> KEY_HELP Q_KEY_CODE_COMPOSE -> KEY_COMPOSE Q_KEY_CODE_RO -> KEY_RO Q_KEY_CODE_HIRAGANA -> KEY_HIRAGANA Q_KEY_CODE_HENKAN -> KEY_HENKAN Q_KEY_CODE_YEN -> KEY_YEN Q_KEY_CODE_KP_COMMA -> KEY_KPCOMMA Q_KEY_CODE_KP_EQUALS -> KEY_KPEQUAL Q_KEY_CODE_POWER -> KEY_POWER Q_KEY_CODE_SLEEP -> KEY_SLEEP Q_KEY_CODE_WAKE -> KEY_WAKEUP Q_KEY_CODE_AUDIONEXT -> KEY_NEXTSONG Q_KEY_CODE_AUDIOPREV -> KEY_PREVIOUSSONG Q_KEY_CODE_AUDIOSTOP -> KEY_STOPCD Q_KEY_CODE_AUDIOPLAY -> KEY_PLAYPAUSE Q_KEY_CODE_AUDIOMUTE -> KEY_MUTE Q_KEY_CODE_VOLUMEUP -> KEY_VOLUMEUP Q_KEY_CODE_VOLUMEDOWN -> KEY_VOLUMEDOWN Q_KEY_CODE_MEDIASELECT -> KEY_MEDIA Q_KEY_CODE_MAIL -> KEY_MAIL Q_KEY_CODE_CALCULATOR -> KEY_CALC Q_KEY_CODE_COMPUTER -> KEY_COMPUTER Q_KEY_CODE_AC_HOME -> KEY_HOMEPAGE Q_KEY_CODE_AC_BACK -> KEY_BACK Q_KEY_CODE_AC_FORWARD -> KEY_FORWARD Q_KEY_CODE_AC_REFRESH -> KEY_REFRESH Q_KEY_CODE_AC_BOOKMARKS -> KEY_BOOKMARKS Signed-off-by: Daniel P. Berrange --- hw/input/virtio-input-hid.c | 136 +++-------------------------------------= ---- include/ui/input.h | 3 + ui/Makefile.objs | 1 + ui/input-keymap.c | 1 + 4 files changed, 14 insertions(+), 127 deletions(-) diff --git a/hw/input/virtio-input-hid.c b/hw/input/virtio-input-hid.c index 46c038110c..3e5a2051ed 100644 --- a/hw/input/virtio-input-hid.c +++ b/hw/input/virtio-input-hid.c @@ -22,126 +22,7 @@ =20 /* ----------------------------------------------------------------- */ =20 -static const unsigned int keymap_qcode[Q_KEY_CODE__MAX] =3D { - [Q_KEY_CODE_ESC] =3D KEY_ESC, - [Q_KEY_CODE_1] =3D KEY_1, - [Q_KEY_CODE_2] =3D KEY_2, - [Q_KEY_CODE_3] =3D KEY_3, - [Q_KEY_CODE_4] =3D KEY_4, - [Q_KEY_CODE_5] =3D KEY_5, - [Q_KEY_CODE_6] =3D KEY_6, - [Q_KEY_CODE_7] =3D KEY_7, - [Q_KEY_CODE_8] =3D KEY_8, - [Q_KEY_CODE_9] =3D KEY_9, - [Q_KEY_CODE_0] =3D KEY_0, - [Q_KEY_CODE_MINUS] =3D KEY_MINUS, - [Q_KEY_CODE_EQUAL] =3D KEY_EQUAL, - [Q_KEY_CODE_BACKSPACE] =3D KEY_BACKSPACE, - - [Q_KEY_CODE_TAB] =3D KEY_TAB, - [Q_KEY_CODE_Q] =3D KEY_Q, - [Q_KEY_CODE_W] =3D KEY_W, - [Q_KEY_CODE_E] =3D KEY_E, - [Q_KEY_CODE_R] =3D KEY_R, - [Q_KEY_CODE_T] =3D KEY_T, - [Q_KEY_CODE_Y] =3D KEY_Y, - [Q_KEY_CODE_U] =3D KEY_U, - [Q_KEY_CODE_I] =3D KEY_I, - [Q_KEY_CODE_O] =3D KEY_O, - [Q_KEY_CODE_P] =3D KEY_P, - [Q_KEY_CODE_BRACKET_LEFT] =3D KEY_LEFTBRACE, - [Q_KEY_CODE_BRACKET_RIGHT] =3D KEY_RIGHTBRACE, - [Q_KEY_CODE_RET] =3D KEY_ENTER, - - [Q_KEY_CODE_CTRL] =3D KEY_LEFTCTRL, - [Q_KEY_CODE_A] =3D KEY_A, - [Q_KEY_CODE_S] =3D KEY_S, - [Q_KEY_CODE_D] =3D KEY_D, - [Q_KEY_CODE_F] =3D KEY_F, - [Q_KEY_CODE_G] =3D KEY_G, - [Q_KEY_CODE_H] =3D KEY_H, - [Q_KEY_CODE_J] =3D KEY_J, - [Q_KEY_CODE_K] =3D KEY_K, - [Q_KEY_CODE_L] =3D KEY_L, - [Q_KEY_CODE_SEMICOLON] =3D KEY_SEMICOLON, - [Q_KEY_CODE_APOSTROPHE] =3D KEY_APOSTROPHE, - [Q_KEY_CODE_GRAVE_ACCENT] =3D KEY_GRAVE, - - [Q_KEY_CODE_SHIFT] =3D KEY_LEFTSHIFT, - [Q_KEY_CODE_BACKSLASH] =3D KEY_BACKSLASH, - [Q_KEY_CODE_LESS] =3D KEY_102ND, - [Q_KEY_CODE_Z] =3D KEY_Z, - [Q_KEY_CODE_X] =3D KEY_X, - [Q_KEY_CODE_C] =3D KEY_C, - [Q_KEY_CODE_V] =3D KEY_V, - [Q_KEY_CODE_B] =3D KEY_B, - [Q_KEY_CODE_N] =3D KEY_N, - [Q_KEY_CODE_M] =3D KEY_M, - [Q_KEY_CODE_COMMA] =3D KEY_COMMA, - [Q_KEY_CODE_DOT] =3D KEY_DOT, - [Q_KEY_CODE_SLASH] =3D KEY_SLASH, - [Q_KEY_CODE_SHIFT_R] =3D KEY_RIGHTSHIFT, - - [Q_KEY_CODE_ALT] =3D KEY_LEFTALT, - [Q_KEY_CODE_SPC] =3D KEY_SPACE, - [Q_KEY_CODE_CAPS_LOCK] =3D KEY_CAPSLOCK, - - [Q_KEY_CODE_F1] =3D KEY_F1, - [Q_KEY_CODE_F2] =3D KEY_F2, - [Q_KEY_CODE_F3] =3D KEY_F3, - [Q_KEY_CODE_F4] =3D KEY_F4, - [Q_KEY_CODE_F5] =3D KEY_F5, - [Q_KEY_CODE_F6] =3D KEY_F6, - [Q_KEY_CODE_F7] =3D KEY_F7, - [Q_KEY_CODE_F8] =3D KEY_F8, - [Q_KEY_CODE_F9] =3D KEY_F9, - [Q_KEY_CODE_F10] =3D KEY_F10, - [Q_KEY_CODE_NUM_LOCK] =3D KEY_NUMLOCK, - [Q_KEY_CODE_SCROLL_LOCK] =3D KEY_SCROLLLOCK, - - [Q_KEY_CODE_KP_0] =3D KEY_KP0, - [Q_KEY_CODE_KP_1] =3D KEY_KP1, - [Q_KEY_CODE_KP_2] =3D KEY_KP2, - [Q_KEY_CODE_KP_3] =3D KEY_KP3, - [Q_KEY_CODE_KP_4] =3D KEY_KP4, - [Q_KEY_CODE_KP_5] =3D KEY_KP5, - [Q_KEY_CODE_KP_6] =3D KEY_KP6, - [Q_KEY_CODE_KP_7] =3D KEY_KP7, - [Q_KEY_CODE_KP_8] =3D KEY_KP8, - [Q_KEY_CODE_KP_9] =3D KEY_KP9, - [Q_KEY_CODE_KP_SUBTRACT] =3D KEY_KPMINUS, - [Q_KEY_CODE_KP_ADD] =3D KEY_KPPLUS, - [Q_KEY_CODE_KP_DECIMAL] =3D KEY_KPDOT, - [Q_KEY_CODE_KP_ENTER] =3D KEY_KPENTER, - [Q_KEY_CODE_KP_DIVIDE] =3D KEY_KPSLASH, - [Q_KEY_CODE_KP_MULTIPLY] =3D KEY_KPASTERISK, - - [Q_KEY_CODE_F11] =3D KEY_F11, - [Q_KEY_CODE_F12] =3D KEY_F12, - - [Q_KEY_CODE_CTRL_R] =3D KEY_RIGHTCTRL, - [Q_KEY_CODE_SYSRQ] =3D KEY_SYSRQ, - [Q_KEY_CODE_PRINT] =3D KEY_SYSRQ, - [Q_KEY_CODE_PAUSE] =3D KEY_PAUSE, - [Q_KEY_CODE_ALT_R] =3D KEY_RIGHTALT, - - [Q_KEY_CODE_HOME] =3D KEY_HOME, - [Q_KEY_CODE_UP] =3D KEY_UP, - [Q_KEY_CODE_PGUP] =3D KEY_PAGEUP, - [Q_KEY_CODE_LEFT] =3D KEY_LEFT, - [Q_KEY_CODE_RIGHT] =3D KEY_RIGHT, - [Q_KEY_CODE_END] =3D KEY_END, - [Q_KEY_CODE_DOWN] =3D KEY_DOWN, - [Q_KEY_CODE_PGDN] =3D KEY_PAGEDOWN, - [Q_KEY_CODE_INSERT] =3D KEY_INSERT, - [Q_KEY_CODE_DELETE] =3D KEY_DELETE, - - [Q_KEY_CODE_META_L] =3D KEY_LEFTMETA, - [Q_KEY_CODE_META_R] =3D KEY_RIGHTMETA, - [Q_KEY_CODE_MENU] =3D KEY_MENU, -}; - -static const unsigned int keymap_button[INPUT_BUTTON__MAX] =3D { +static const unsigned short keymap_button[INPUT_BUTTON__MAX] =3D { [INPUT_BUTTON_LEFT] =3D BTN_LEFT, [INPUT_BUTTON_RIGHT] =3D BTN_RIGHT, [INPUT_BUTTON_MIDDLE] =3D BTN_MIDDLE, @@ -149,12 +30,12 @@ static const unsigned int keymap_button[INPUT_BUTTON__= MAX] =3D { [INPUT_BUTTON_WHEEL_DOWN] =3D BTN_GEAR_DOWN, }; =20 -static const unsigned int axismap_rel[INPUT_AXIS__MAX] =3D { +static const unsigned short axismap_rel[INPUT_AXIS__MAX] =3D { [INPUT_AXIS_X] =3D REL_X, [INPUT_AXIS_Y] =3D REL_Y, }; =20 -static const unsigned int axismap_abs[INPUT_AXIS__MAX] =3D { +static const unsigned short axismap_abs[INPUT_AXIS__MAX] =3D { [INPUT_AXIS_X] =3D ABS_X, [INPUT_AXIS_Y] =3D ABS_Y, }; @@ -162,7 +43,7 @@ static const unsigned int axismap_abs[INPUT_AXIS__MAX] = =3D { /* ----------------------------------------------------------------- */ =20 static void virtio_input_key_config(VirtIOInput *vinput, - const unsigned int *keymap, + const unsigned short *keymap, size_t mapsize) { virtio_input_config keys; @@ -201,9 +82,10 @@ static void virtio_input_handle_event(DeviceState *dev,= QemuConsole *src, case INPUT_EVENT_KIND_KEY: key =3D evt->u.key.data; qcode =3D qemu_input_key_value_to_qcode(key->key); - if (qcode && keymap_qcode[qcode]) { + if (qcode < qemu_input_map_qcode_to_linux_len && + qemu_input_map_qcode_to_linux[qcode]) { event.type =3D cpu_to_le16(EV_KEY); - event.code =3D cpu_to_le16(keymap_qcode[qcode]); + event.code =3D cpu_to_le16(qemu_input_map_qcode_to_linux[qcod= e]); event.value =3D cpu_to_le32(key->down ? 1 : 0); virtio_input_send(vinput, &event); } else { @@ -387,8 +269,8 @@ static void virtio_keyboard_init(Object *obj) =20 vhid->handler =3D &virtio_keyboard_handler; virtio_input_init_config(vinput, virtio_keyboard_config); - virtio_input_key_config(vinput, keymap_qcode, - ARRAY_SIZE(keymap_qcode)); + virtio_input_key_config(vinput, qemu_input_map_qcode_to_linux, + qemu_input_map_qcode_to_linux_len); } =20 static const TypeInfo virtio_keyboard_info =3D { diff --git a/include/ui/input.h b/include/ui/input.h index f8cee43f65..6f56d868c7 100644 --- a/include/ui/input.h +++ b/include/ui/input.h @@ -71,6 +71,9 @@ void qemu_remove_mouse_mode_change_notifier(Notifier *not= ify); extern const guint qemu_input_map_linux_to_qcode_len; extern const guint16 qemu_input_map_linux_to_qcode[]; =20 +extern const guint qemu_input_map_qcode_to_linux_len; +extern const guint16 qemu_input_map_qcode_to_linux[]; + extern const guint qemu_input_map_qcode_to_qnum_len; extern const guint16 qemu_input_map_qcode_to_qnum[]; =20 diff --git a/ui/Makefile.objs b/ui/Makefile.objs index 8c357b488f..11915a9bb4 100644 --- a/ui/Makefile.objs +++ b/ui/Makefile.objs @@ -55,6 +55,7 @@ KEYCODEMAP_CSV =3D $(SRC_PATH)/ui/keycodemapdb/data/keyma= ps.csv =20 KEYCODEMAP_FILES =3D \ ui/input-keymap-linux-to-qcode.c \ + ui/input-keymap-qcode-to-linux.c \ ui/input-keymap-qcode-to-qnum.c \ ui/input-keymap-qnum-to-qcode.c \ $(NULL) diff --git a/ui/input-keymap.c b/ui/input-keymap.c index 3a19a169f5..6e543d651f 100644 --- a/ui/input-keymap.c +++ b/ui/input-keymap.c @@ -6,6 +6,7 @@ #include "standard-headers/linux/input.h" =20 #include "ui/input-keymap-linux-to-qcode.c" +#include "ui/input-keymap-qcode-to-linux.c" #include "ui/input-keymap-qcode-to-qnum.c" #include "ui/input-keymap-qnum-to-qcode.c" =20 --=20 2.13.3