get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/812826/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 812826,
    "url": "http://patchwork.ozlabs.org/api/patches/812826/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20170912123744.14730-7-berrange@redhat.com/",
    "project": {
        "id": 14,
        "url": "http://patchwork.ozlabs.org/api/projects/14/?format=api",
        "name": "QEMU Development",
        "link_name": "qemu-devel",
        "list_id": "qemu-devel.nongnu.org",
        "list_email": "qemu-devel@nongnu.org",
        "web_url": "",
        "scm_url": "",
        "webscm_url": "",
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<20170912123744.14730-7-berrange@redhat.com>",
    "list_archive_url": null,
    "date": "2017-09-12T12:37:38",
    "name": "[v5,06/12] input: convert ps2 device to keycodemapdb",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "cdac65584da3374b66f42042015e82d93460531c",
    "submitter": {
        "id": 2694,
        "url": "http://patchwork.ozlabs.org/api/people/2694/?format=api",
        "name": "Daniel P. Berrangé",
        "email": "berrange@redhat.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20170912123744.14730-7-berrange@redhat.com/mbox/",
    "series": [
        {
            "id": 2692,
            "url": "http://patchwork.ozlabs.org/api/series/2692/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=2692",
            "date": "2017-09-12T12:37:33",
            "name": "Convert over to use keycodemapdb",
            "version": 5,
            "mbox": "http://patchwork.ozlabs.org/series/2692/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/812826/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/812826/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>",
        "X-Original-To": "incoming@patchwork.ozlabs.org",
        "Delivered-To": "patchwork-incoming@bilbo.ozlabs.org",
        "Authentication-Results": [
            "ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=nongnu.org\n\t(client-ip=2001:4830:134:3::11; helo=lists.gnu.org;\n\tenvelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n\treceiver=<UNKNOWN>)",
            "ext-mx02.extmail.prod.ext.phx2.redhat.com;\n\tdmarc=none (p=none dis=none) header.from=redhat.com",
            "ext-mx02.extmail.prod.ext.phx2.redhat.com;\n\tspf=fail smtp.mailfrom=berrange@redhat.com"
        ],
        "Received": [
            "from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11])\n\t(using TLSv1 with cipher AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xs4Qg6ybWz9t7w\n\tfor <incoming@patchwork.ozlabs.org>;\n\tTue, 12 Sep 2017 22:49:52 +1000 (AEST)",
            "from localhost ([::1]:35621 helo=lists.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.71) (envelope-from\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>)\n\tid 1drkcL-0001A0-5Q\n\tfor incoming@patchwork.ozlabs.org; Tue, 12 Sep 2017 08:48:41 -0400",
            "from eggs.gnu.org ([2001:4830:134:3::10]:48677)\n\tby lists.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <berrange@redhat.com>) id 1drkSC-0000qJ-Mb\n\tfor qemu-devel@nongnu.org; Tue, 12 Sep 2017 08:38:22 -0400",
            "from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <berrange@redhat.com>) id 1drkS1-0003S6-VD\n\tfor qemu-devel@nongnu.org; Tue, 12 Sep 2017 08:38:12 -0400",
            "from mx1.redhat.com ([209.132.183.28]:45938)\n\tby eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32)\n\t(Exim 4.71) (envelope-from <berrange@redhat.com>) id 1drkS1-0003Rl-HA\n\tfor qemu-devel@nongnu.org; Tue, 12 Sep 2017 08:38:01 -0400",
            "from smtp.corp.redhat.com\n\t(int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12])\n\t(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby mx1.redhat.com (Postfix) with ESMTPS id 94D24883B0\n\tfor <qemu-devel@nongnu.org>; Tue, 12 Sep 2017 12:38:00 +0000 (UTC)",
            "from localhost.localdomain.com (unknown [10.42.22.189])\n\tby smtp.corp.redhat.com (Postfix) with ESMTP id C273B77DCA;\n\tTue, 12 Sep 2017 12:37:59 +0000 (UTC)"
        ],
        "DMARC-Filter": "OpenDMARC Filter v1.3.2 mx1.redhat.com 94D24883B0",
        "From": "\"Daniel P. Berrange\" <berrange@redhat.com>",
        "To": "qemu-devel@nongnu.org",
        "Date": "Tue, 12 Sep 2017 13:37:38 +0100",
        "Message-Id": "<20170912123744.14730-7-berrange@redhat.com>",
        "In-Reply-To": "<20170912123744.14730-1-berrange@redhat.com>",
        "References": "<20170912123744.14730-1-berrange@redhat.com>",
        "X-Scanned-By": "MIMEDefang 2.79 on 10.5.11.12",
        "X-Greylist": "Sender IP whitelisted, not delayed by milter-greylist-4.5.16\n\t(mx1.redhat.com [10.5.110.26]);\n\tTue, 12 Sep 2017 12:38:00 +0000 (UTC)",
        "X-detected-operating-system": "by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic]\n\t[fuzzy]",
        "X-Received-From": "209.132.183.28",
        "Subject": "[Qemu-devel] [PATCH v5 06/12] input: convert ps2 device to\n\tkeycodemapdb",
        "X-BeenThere": "qemu-devel@nongnu.org",
        "X-Mailman-Version": "2.1.21",
        "Precedence": "list",
        "List-Id": "<qemu-devel.nongnu.org>",
        "List-Unsubscribe": "<https://lists.nongnu.org/mailman/options/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>",
        "List-Archive": "<http://lists.nongnu.org/archive/html/qemu-devel/>",
        "List-Post": "<mailto:qemu-devel@nongnu.org>",
        "List-Help": "<mailto:qemu-devel-request@nongnu.org?subject=help>",
        "List-Subscribe": "<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=subscribe>",
        "Cc": "Gerd Hoffmann <kraxel@redhat.com>",
        "Errors-To": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org",
        "Sender": "\"Qemu-devel\"\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>"
    },
    "content": "Replace the qcode_to_keycode_set1, qcode_to_keycode_set2,\nand qcode_to_keycode_set3 tables with automatically\ngenerated tables.\n\nMissing entries in qcode_to_keycode_set1 now fixed:\n\n - Q_KEY_CODE_SYSRQ -> 0x54\n - Q_KEY_CODE_PRINT -> 0x54 (NB ignored due to special case)\n - Q_KEY_CODE_AGAIN -> 0xe005\n - Q_KEY_CODE_PROPS -> 0xe006\n - Q_KEY_CODE_UNDO -> 0xe007\n - Q_KEY_CODE_FRONT -> 0xe00c\n - Q_KEY_CODE_COPY -> 0xe078\n - Q_KEY_CODE_OPEN -> 0x64\n - Q_KEY_CODE_PASTE -> 0x65\n - Q_KEY_CODE_CUT -> 0xe03c\n - Q_KEY_CODE_LF -> 0x5b\n - Q_KEY_CODE_HELP -> 0xe075\n - Q_KEY_CODE_COMPOSE -> 0xe05d\n - Q_KEY_CODE_PAUSE -> 0xe046\n - Q_KEY_CODE_KP_EQUALS -> 0x59\n\nAnd some mistakes corrected:\n\n - Q_KEY_CODE_HIRAGANA was mapped to 0x70 (Katakanahiragana)\n   instead of of 0x77 (Hirigana)\n - Q_KEY_CODE_MENU was incorrectly mapped to the compose\n   scancode (0xe05d) and is now mapped to 0xe01e\n - Q_KEY_CODE_FIND was mapped to 0xe065 (Search) instead\n   of to 0xe041 (Find)\n - Q_KEY_CODE_POWER, SLEEP & WAKE had 0x0e instead of 0xe0\n   as the prefix\n\nMissing entries in qcode_to_keycode_set2 now fixed:\n\n - Q_KEY_CODE_PRINT -> 0x7f (NB ignored due to special case)\n - Q_KEY_CODE_COMPOSE -> 0xe02f\n - Q_KEY_CODE_PAUSE -> 0xe077\n - Q_KEY_CODE_KP_EQUALS -> 0x0f\n\nAnd some mistakes corrected:\n\n - Q_KEY_CODE_HIRAGANA was mapped to 0x13 (Katakanahiragana)\n   instead of of 0x62 (Hirigana)\n - Q_KEY_CODE_MENU was incorrectly mapped to the compose\n   scancode (0xe02f) and is now not mapped\n - Q_KEY_CODE_FIND was mapped to 0xe010 (Search) and is now\n   not mapped.\n - Q_KEY_CODE_POWER, SLEEP & WAKE had 0x0e instead of 0xe0\n   as the prefix\n\nMissing entries in qcode_to_keycode_set3 now fixed:\n\n - Q_KEY_CODE_ASTERISK -> 0x7e\n - Q_KEY_CODE_SYSRQ -> 0x57\n - Q_KEY_CODE_LESS -> 0x13\n - Q_KEY_CODE_STOP -> 0x0a\n - Q_KEY_CODE_AGAIN -> 0x0b\n - Q_KEY_CODE_PROPS -> 0x0c\n - Q_KEY_CODE_UNDO -> 0x10\n - Q_KEY_CODE_COPY -> 0x18\n - Q_KEY_CODE_OPEN -> 0x20\n - Q_KEY_CODE_PASTE -> 0x28\n - Q_KEY_CODE_FIND -> 0x30\n - Q_KEY_CODE_CUT -> 0x38\n - Q_KEY_CODE_HELP -> 0x09\n - Q_KEY_CODE_COMPOSE -> 0x8d\n - Q_KEY_CODE_AUDIONEXT -> 0x93\n - Q_KEY_CODE_AUDIOPREV -> 0x94\n - Q_KEY_CODE_AUDIOSTOP -> 0x98\n - Q_KEY_CODE_AUDIOMUTE -> 0x9c\n - Q_KEY_CODE_VOLUMEUP -> 0x95\n - Q_KEY_CODE_VOLUMEDOWN -> 0x9d\n - Q_KEY_CODE_CALCULATOR -> 0xa3\n - Q_KEY_CODE_AC_HOME -> 0x97\n\nAnd some mistakes corrected:\n\n - Q_KEY_CODE_MENU was incorrectly mapped to the compose\n   scancode (0x8d) and is now 0x91\n\nSigned-off-by: Daniel P. Berrange <berrange@redhat.com>\n---\n hw/input/ps2.c                    | 406 +-------------------------------------\n include/ui/input.h                |   9 +\n ui/Makefile.objs                  |   3 +\n ui/input-keymap-qcode-to-atset1.c | 154 +++++++++++++++\n ui/input-keymap-qcode-to-atset2.c | 142 +++++++++++++\n ui/input-keymap-qcode-to-atset3.c | 138 +++++++++++++\n ui/input-keymap.c                 |   3 +\n 7 files changed, 456 insertions(+), 399 deletions(-)\n create mode 100644 ui/input-keymap-qcode-to-atset1.c\n create mode 100644 ui/input-keymap-qcode-to-atset2.c\n create mode 100644 ui/input-keymap-qcode-to-atset3.c",
    "diff": "diff --git a/hw/input/ps2.c b/hw/input/ps2.c\nindex 77906d5f46..7eeadc144d 100644\n--- a/hw/input/ps2.c\n+++ b/hw/input/ps2.c\n@@ -115,401 +115,6 @@ typedef struct {\n     uint8_t mouse_buttons;\n } PS2MouseState;\n \n-/* Table to convert from QEMU codes to scancodes.  */\n-static const uint16_t qcode_to_keycode_set1[Q_KEY_CODE__MAX] = {\n-    [0 ... Q_KEY_CODE__MAX - 1] = 0,\n-\n-    [Q_KEY_CODE_A] = 0x1e,\n-    [Q_KEY_CODE_B] = 0x30,\n-    [Q_KEY_CODE_C] = 0x2e,\n-    [Q_KEY_CODE_D] = 0x20,\n-    [Q_KEY_CODE_E] = 0x12,\n-    [Q_KEY_CODE_F] = 0x21,\n-    [Q_KEY_CODE_G] = 0x22,\n-    [Q_KEY_CODE_H] = 0x23,\n-    [Q_KEY_CODE_I] = 0x17,\n-    [Q_KEY_CODE_J] = 0x24,\n-    [Q_KEY_CODE_K] = 0x25,\n-    [Q_KEY_CODE_L] = 0x26,\n-    [Q_KEY_CODE_M] = 0x32,\n-    [Q_KEY_CODE_N] = 0x31,\n-    [Q_KEY_CODE_O] = 0x18,\n-    [Q_KEY_CODE_P] = 0x19,\n-    [Q_KEY_CODE_Q] = 0x10,\n-    [Q_KEY_CODE_R] = 0x13,\n-    [Q_KEY_CODE_S] = 0x1f,\n-    [Q_KEY_CODE_T] = 0x14,\n-    [Q_KEY_CODE_U] = 0x16,\n-    [Q_KEY_CODE_V] = 0x2f,\n-    [Q_KEY_CODE_W] = 0x11,\n-    [Q_KEY_CODE_X] = 0x2d,\n-    [Q_KEY_CODE_Y] = 0x15,\n-    [Q_KEY_CODE_Z] = 0x2c,\n-    [Q_KEY_CODE_0] = 0x0b,\n-    [Q_KEY_CODE_1] = 0x02,\n-    [Q_KEY_CODE_2] = 0x03,\n-    [Q_KEY_CODE_3] = 0x04,\n-    [Q_KEY_CODE_4] = 0x05,\n-    [Q_KEY_CODE_5] = 0x06,\n-    [Q_KEY_CODE_6] = 0x07,\n-    [Q_KEY_CODE_7] = 0x08,\n-    [Q_KEY_CODE_8] = 0x09,\n-    [Q_KEY_CODE_9] = 0x0a,\n-    [Q_KEY_CODE_GRAVE_ACCENT] = 0x29,\n-    [Q_KEY_CODE_MINUS] = 0x0c,\n-    [Q_KEY_CODE_EQUAL] = 0x0d,\n-    [Q_KEY_CODE_BACKSLASH] = 0x2b,\n-    [Q_KEY_CODE_BACKSPACE] = 0x0e,\n-    [Q_KEY_CODE_SPC] = 0x39,\n-    [Q_KEY_CODE_TAB] = 0x0f,\n-    [Q_KEY_CODE_CAPS_LOCK] = 0x3a,\n-    [Q_KEY_CODE_SHIFT] = 0x2a,\n-    [Q_KEY_CODE_CTRL] = 0x1d,\n-    [Q_KEY_CODE_META_L] = 0xe05b,\n-    [Q_KEY_CODE_ALT] = 0x38,\n-    [Q_KEY_CODE_SHIFT_R] = 0x36,\n-    [Q_KEY_CODE_CTRL_R] = 0xe01d,\n-    [Q_KEY_CODE_META_R] = 0xe05c,\n-    [Q_KEY_CODE_ALT_R] = 0xe038,\n-    [Q_KEY_CODE_MENU] = 0xe05d,\n-    [Q_KEY_CODE_RET] = 0x1c,\n-    [Q_KEY_CODE_ESC] = 0x01,\n-    [Q_KEY_CODE_F1] = 0x3b,\n-    [Q_KEY_CODE_F2] = 0x3c,\n-    [Q_KEY_CODE_F3] = 0x3d,\n-    [Q_KEY_CODE_F4] = 0x3e,\n-    [Q_KEY_CODE_F5] = 0x3f,\n-    [Q_KEY_CODE_F6] = 0x40,\n-    [Q_KEY_CODE_F7] = 0x41,\n-    [Q_KEY_CODE_F8] = 0x42,\n-    [Q_KEY_CODE_F9] = 0x43,\n-    [Q_KEY_CODE_F10] = 0x44,\n-    [Q_KEY_CODE_F11] = 0x57,\n-    [Q_KEY_CODE_F12] = 0x58,\n-    /* special handling for Q_KEY_CODE_PRINT */\n-    [Q_KEY_CODE_SCROLL_LOCK] = 0x46,\n-    /* special handling for Q_KEY_CODE_PAUSE */\n-    [Q_KEY_CODE_BRACKET_LEFT] = 0x1a,\n-    [Q_KEY_CODE_INSERT] = 0xe052,\n-    [Q_KEY_CODE_HOME] = 0xe047,\n-    [Q_KEY_CODE_PGUP] = 0xe049,\n-    [Q_KEY_CODE_DELETE] = 0xe053,\n-    [Q_KEY_CODE_END] = 0xe04f,\n-    [Q_KEY_CODE_PGDN] = 0xe051,\n-    [Q_KEY_CODE_UP] = 0xe048,\n-    [Q_KEY_CODE_LEFT] = 0xe04b,\n-    [Q_KEY_CODE_DOWN] = 0xe050,\n-    [Q_KEY_CODE_RIGHT] = 0xe04d,\n-    [Q_KEY_CODE_NUM_LOCK] = 0x45,\n-    [Q_KEY_CODE_KP_DIVIDE] = 0xe035,\n-    [Q_KEY_CODE_KP_MULTIPLY] = 0x37,\n-    [Q_KEY_CODE_KP_SUBTRACT] = 0x4a,\n-    [Q_KEY_CODE_KP_ADD] = 0x4e,\n-    [Q_KEY_CODE_KP_ENTER] = 0xe01c,\n-    [Q_KEY_CODE_KP_DECIMAL] = 0x53,\n-    [Q_KEY_CODE_KP_0] = 0x52,\n-    [Q_KEY_CODE_KP_1] = 0x4f,\n-    [Q_KEY_CODE_KP_2] = 0x50,\n-    [Q_KEY_CODE_KP_3] = 0x51,\n-    [Q_KEY_CODE_KP_4] = 0x4b,\n-    [Q_KEY_CODE_KP_5] = 0x4c,\n-    [Q_KEY_CODE_KP_6] = 0x4d,\n-    [Q_KEY_CODE_KP_7] = 0x47,\n-    [Q_KEY_CODE_KP_8] = 0x48,\n-    [Q_KEY_CODE_KP_9] = 0x49,\n-    [Q_KEY_CODE_BRACKET_RIGHT] = 0x1b,\n-    [Q_KEY_CODE_SEMICOLON] = 0x27,\n-    [Q_KEY_CODE_APOSTROPHE] = 0x28,\n-    [Q_KEY_CODE_COMMA] = 0x33,\n-    [Q_KEY_CODE_DOT] = 0x34,\n-    [Q_KEY_CODE_SLASH] = 0x35,\n-\n-    [Q_KEY_CODE_POWER] = 0x0e5e,\n-    [Q_KEY_CODE_SLEEP] = 0x0e5f,\n-    [Q_KEY_CODE_WAKE] = 0x0e63,\n-\n-    [Q_KEY_CODE_AUDIONEXT] = 0xe019,\n-    [Q_KEY_CODE_AUDIOPREV] = 0xe010,\n-    [Q_KEY_CODE_AUDIOSTOP] = 0xe024,\n-    [Q_KEY_CODE_AUDIOPLAY] = 0xe022,\n-    [Q_KEY_CODE_AUDIOMUTE] = 0xe020,\n-    [Q_KEY_CODE_VOLUMEUP] = 0xe030,\n-    [Q_KEY_CODE_VOLUMEDOWN] = 0xe02e,\n-    [Q_KEY_CODE_MEDIASELECT] = 0xe06d,\n-    [Q_KEY_CODE_MAIL] = 0xe06c,\n-    [Q_KEY_CODE_CALCULATOR] = 0xe021,\n-    [Q_KEY_CODE_COMPUTER] = 0xe06b,\n-    [Q_KEY_CODE_FIND] = 0xe065,\n-    [Q_KEY_CODE_AC_HOME] = 0xe032,\n-    [Q_KEY_CODE_AC_BACK] = 0xe06a,\n-    [Q_KEY_CODE_AC_FORWARD] = 0xe069,\n-    [Q_KEY_CODE_STOP] = 0xe068,\n-    [Q_KEY_CODE_AC_REFRESH] = 0xe067,\n-    [Q_KEY_CODE_AC_BOOKMARKS] = 0xe066,\n-\n-    [Q_KEY_CODE_ASTERISK] = 0x37,\n-    [Q_KEY_CODE_LESS] = 0x56,\n-    [Q_KEY_CODE_RO] = 0x73,\n-    [Q_KEY_CODE_HIRAGANA] = 0x70,\n-    [Q_KEY_CODE_HENKAN] = 0x79,\n-    [Q_KEY_CODE_YEN] = 0x7d,\n-    [Q_KEY_CODE_KP_COMMA] = 0x7e,\n-};\n-\n-static const uint16_t qcode_to_keycode_set2[Q_KEY_CODE__MAX] = {\n-    [0 ... Q_KEY_CODE__MAX - 1] = 0,\n-\n-    [Q_KEY_CODE_A] = 0x1c,\n-    [Q_KEY_CODE_B] = 0x32,\n-    [Q_KEY_CODE_C] = 0x21,\n-    [Q_KEY_CODE_D] = 0x23,\n-    [Q_KEY_CODE_E] = 0x24,\n-    [Q_KEY_CODE_F] = 0x2b,\n-    [Q_KEY_CODE_G] = 0x34,\n-    [Q_KEY_CODE_H] = 0x33,\n-    [Q_KEY_CODE_I] = 0x43,\n-    [Q_KEY_CODE_J] = 0x3b,\n-    [Q_KEY_CODE_K] = 0x42,\n-    [Q_KEY_CODE_L] = 0x4b,\n-    [Q_KEY_CODE_M] = 0x3a,\n-    [Q_KEY_CODE_N] = 0x31,\n-    [Q_KEY_CODE_O] = 0x44,\n-    [Q_KEY_CODE_P] = 0x4d,\n-    [Q_KEY_CODE_Q] = 0x15,\n-    [Q_KEY_CODE_R] = 0x2d,\n-    [Q_KEY_CODE_S] = 0x1b,\n-    [Q_KEY_CODE_T] = 0x2c,\n-    [Q_KEY_CODE_U] = 0x3c,\n-    [Q_KEY_CODE_V] = 0x2a,\n-    [Q_KEY_CODE_W] = 0x1d,\n-    [Q_KEY_CODE_X] = 0x22,\n-    [Q_KEY_CODE_Y] = 0x35,\n-    [Q_KEY_CODE_Z] = 0x1a,\n-    [Q_KEY_CODE_0] = 0x45,\n-    [Q_KEY_CODE_1] = 0x16,\n-    [Q_KEY_CODE_2] = 0x1e,\n-    [Q_KEY_CODE_3] = 0x26,\n-    [Q_KEY_CODE_4] = 0x25,\n-    [Q_KEY_CODE_5] = 0x2e,\n-    [Q_KEY_CODE_6] = 0x36,\n-    [Q_KEY_CODE_7] = 0x3d,\n-    [Q_KEY_CODE_8] = 0x3e,\n-    [Q_KEY_CODE_9] = 0x46,\n-    [Q_KEY_CODE_GRAVE_ACCENT] = 0x0e,\n-    [Q_KEY_CODE_MINUS] = 0x4e,\n-    [Q_KEY_CODE_EQUAL] = 0x55,\n-    [Q_KEY_CODE_BACKSLASH] = 0x5d,\n-    [Q_KEY_CODE_BACKSPACE] = 0x66,\n-    [Q_KEY_CODE_SPC] = 0x29,\n-    [Q_KEY_CODE_TAB] = 0x0d,\n-    [Q_KEY_CODE_CAPS_LOCK] = 0x58,\n-    [Q_KEY_CODE_SHIFT] = 0x12,\n-    [Q_KEY_CODE_CTRL] = 0x14,\n-    [Q_KEY_CODE_META_L] = 0xe01f,\n-    [Q_KEY_CODE_ALT] = 0x11,\n-    [Q_KEY_CODE_SHIFT_R] = 0x59,\n-    [Q_KEY_CODE_CTRL_R] = 0xe014,\n-    [Q_KEY_CODE_META_R] = 0xe027,\n-    [Q_KEY_CODE_ALT_R] = 0xe011,\n-    [Q_KEY_CODE_MENU] = 0xe02f,\n-    [Q_KEY_CODE_RET] = 0x5a,\n-    [Q_KEY_CODE_ESC] = 0x76,\n-    [Q_KEY_CODE_F1] = 0x05,\n-    [Q_KEY_CODE_F2] = 0x06,\n-    [Q_KEY_CODE_F3] = 0x04,\n-    [Q_KEY_CODE_F4] = 0x0c,\n-    [Q_KEY_CODE_F5] = 0x03,\n-    [Q_KEY_CODE_F6] = 0x0b,\n-    [Q_KEY_CODE_F7] = 0x83,\n-    [Q_KEY_CODE_F8] = 0x0a,\n-    [Q_KEY_CODE_F9] = 0x01,\n-    [Q_KEY_CODE_F10] = 0x09,\n-    [Q_KEY_CODE_F11] = 0x78,\n-    [Q_KEY_CODE_F12] = 0x07,\n-    /* special handling for Q_KEY_CODE_PRINT */\n-    [Q_KEY_CODE_SCROLL_LOCK] = 0x7e,\n-    /* special handling for Q_KEY_CODE_PAUSE */\n-    [Q_KEY_CODE_BRACKET_LEFT] = 0x54,\n-    [Q_KEY_CODE_INSERT] = 0xe070,\n-    [Q_KEY_CODE_HOME] = 0xe06c,\n-    [Q_KEY_CODE_PGUP] = 0xe07d,\n-    [Q_KEY_CODE_DELETE] = 0xe071,\n-    [Q_KEY_CODE_END] = 0xe069,\n-    [Q_KEY_CODE_PGDN] = 0xe07a,\n-    [Q_KEY_CODE_UP] = 0xe075,\n-    [Q_KEY_CODE_LEFT] = 0xe06b,\n-    [Q_KEY_CODE_DOWN] = 0xe072,\n-    [Q_KEY_CODE_RIGHT] = 0xe074,\n-    [Q_KEY_CODE_NUM_LOCK] = 0x77,\n-    [Q_KEY_CODE_KP_DIVIDE] = 0xe04a,\n-    [Q_KEY_CODE_KP_MULTIPLY] = 0x7c,\n-    [Q_KEY_CODE_KP_SUBTRACT] = 0x7b,\n-    [Q_KEY_CODE_KP_ADD] = 0x79,\n-    [Q_KEY_CODE_KP_ENTER] = 0xe05a,\n-    [Q_KEY_CODE_KP_DECIMAL] = 0x71,\n-    [Q_KEY_CODE_KP_0] = 0x70,\n-    [Q_KEY_CODE_KP_1] = 0x69,\n-    [Q_KEY_CODE_KP_2] = 0x72,\n-    [Q_KEY_CODE_KP_3] = 0x7a,\n-    [Q_KEY_CODE_KP_4] = 0x6b,\n-    [Q_KEY_CODE_KP_5] = 0x73,\n-    [Q_KEY_CODE_KP_6] = 0x74,\n-    [Q_KEY_CODE_KP_7] = 0x6c,\n-    [Q_KEY_CODE_KP_8] = 0x75,\n-    [Q_KEY_CODE_KP_9] = 0x7d,\n-    [Q_KEY_CODE_BRACKET_RIGHT] = 0x5b,\n-    [Q_KEY_CODE_SEMICOLON] = 0x4c,\n-    [Q_KEY_CODE_APOSTROPHE] = 0x52,\n-    [Q_KEY_CODE_COMMA] = 0x41,\n-    [Q_KEY_CODE_DOT] = 0x49,\n-    [Q_KEY_CODE_SLASH] = 0x4a,\n-\n-    [Q_KEY_CODE_POWER] = 0x0e37,\n-    [Q_KEY_CODE_SLEEP] = 0x0e3f,\n-    [Q_KEY_CODE_WAKE] = 0x0e5e,\n-\n-    [Q_KEY_CODE_AUDIONEXT] = 0xe04d,\n-    [Q_KEY_CODE_AUDIOPREV] = 0xe015,\n-    [Q_KEY_CODE_AUDIOSTOP] = 0xe03b,\n-    [Q_KEY_CODE_AUDIOPLAY] = 0xe034,\n-    [Q_KEY_CODE_AUDIOMUTE] = 0xe023,\n-    [Q_KEY_CODE_VOLUMEUP] = 0xe032,\n-    [Q_KEY_CODE_VOLUMEDOWN] = 0xe021,\n-    [Q_KEY_CODE_MEDIASELECT] = 0xe050,\n-    [Q_KEY_CODE_MAIL] = 0xe048,\n-    [Q_KEY_CODE_CALCULATOR] = 0xe02b,\n-    [Q_KEY_CODE_COMPUTER] = 0xe040,\n-    [Q_KEY_CODE_FIND] = 0xe010,\n-    [Q_KEY_CODE_AC_HOME] = 0xe03a,\n-    [Q_KEY_CODE_AC_BACK] = 0xe038,\n-    [Q_KEY_CODE_AC_FORWARD] = 0xe030,\n-    [Q_KEY_CODE_STOP] = 0xe028,\n-    [Q_KEY_CODE_AC_REFRESH] = 0xe020,\n-    [Q_KEY_CODE_AC_BOOKMARKS] = 0xe018,\n-\n-    [Q_KEY_CODE_ASTERISK] = 0x7c,\n-    [Q_KEY_CODE_LESS] = 0x61,\n-    [Q_KEY_CODE_SYSRQ] = 0x7f,\n-    [Q_KEY_CODE_RO] = 0x51,\n-    [Q_KEY_CODE_HIRAGANA] = 0x13,\n-    [Q_KEY_CODE_HENKAN] = 0x64,\n-    [Q_KEY_CODE_YEN] = 0x6a,\n-    [Q_KEY_CODE_KP_COMMA] = 0x6d,\n-};\n-\n-static const uint16_t qcode_to_keycode_set3[Q_KEY_CODE__MAX] = {\n-    [0 ... Q_KEY_CODE__MAX - 1] = 0,\n-\n-    [Q_KEY_CODE_A] = 0x1c,\n-    [Q_KEY_CODE_B] = 0x32,\n-    [Q_KEY_CODE_C] = 0x21,\n-    [Q_KEY_CODE_D] = 0x23,\n-    [Q_KEY_CODE_E] = 0x24,\n-    [Q_KEY_CODE_F] = 0x2b,\n-    [Q_KEY_CODE_G] = 0x34,\n-    [Q_KEY_CODE_H] = 0x33,\n-    [Q_KEY_CODE_I] = 0x43,\n-    [Q_KEY_CODE_J] = 0x3b,\n-    [Q_KEY_CODE_K] = 0x42,\n-    [Q_KEY_CODE_L] = 0x4b,\n-    [Q_KEY_CODE_M] = 0x3a,\n-    [Q_KEY_CODE_N] = 0x31,\n-    [Q_KEY_CODE_O] = 0x44,\n-    [Q_KEY_CODE_P] = 0x4d,\n-    [Q_KEY_CODE_Q] = 0x15,\n-    [Q_KEY_CODE_R] = 0x2d,\n-    [Q_KEY_CODE_S] = 0x1b,\n-    [Q_KEY_CODE_T] = 0x2c,\n-    [Q_KEY_CODE_U] = 0x3c,\n-    [Q_KEY_CODE_V] = 0x2a,\n-    [Q_KEY_CODE_W] = 0x1d,\n-    [Q_KEY_CODE_X] = 0x22,\n-    [Q_KEY_CODE_Y] = 0x35,\n-    [Q_KEY_CODE_Z] = 0x1a,\n-    [Q_KEY_CODE_0] = 0x45,\n-    [Q_KEY_CODE_1] = 0x16,\n-    [Q_KEY_CODE_2] = 0x1e,\n-    [Q_KEY_CODE_3] = 0x26,\n-    [Q_KEY_CODE_4] = 0x25,\n-    [Q_KEY_CODE_5] = 0x2e,\n-    [Q_KEY_CODE_6] = 0x36,\n-    [Q_KEY_CODE_7] = 0x3d,\n-    [Q_KEY_CODE_8] = 0x3e,\n-    [Q_KEY_CODE_9] = 0x46,\n-    [Q_KEY_CODE_GRAVE_ACCENT] = 0x0e,\n-    [Q_KEY_CODE_MINUS] = 0x4e,\n-    [Q_KEY_CODE_EQUAL] = 0x55,\n-    [Q_KEY_CODE_BACKSLASH] = 0x5c,\n-    [Q_KEY_CODE_BACKSPACE] = 0x66,\n-    [Q_KEY_CODE_SPC] = 0x29,\n-    [Q_KEY_CODE_TAB] = 0x0d,\n-    [Q_KEY_CODE_CAPS_LOCK] = 0x14,\n-    [Q_KEY_CODE_SHIFT] = 0x12,\n-    [Q_KEY_CODE_CTRL] = 0x11,\n-    [Q_KEY_CODE_META_L] = 0x8b,\n-    [Q_KEY_CODE_ALT] = 0x19,\n-    [Q_KEY_CODE_SHIFT_R] = 0x59,\n-    [Q_KEY_CODE_CTRL_R] = 0x58,\n-    [Q_KEY_CODE_META_R] = 0x8c,\n-    [Q_KEY_CODE_ALT_R] = 0x39,\n-    [Q_KEY_CODE_MENU] = 0x8d,\n-    [Q_KEY_CODE_RET] = 0x5a,\n-    [Q_KEY_CODE_ESC] = 0x08,\n-    [Q_KEY_CODE_F1] = 0x07,\n-    [Q_KEY_CODE_F2] = 0x0f,\n-    [Q_KEY_CODE_F3] = 0x17,\n-    [Q_KEY_CODE_F4] = 0x1f,\n-    [Q_KEY_CODE_F5] = 0x27,\n-    [Q_KEY_CODE_F6] = 0x2f,\n-    [Q_KEY_CODE_F7] = 0x37,\n-    [Q_KEY_CODE_F8] = 0x3f,\n-    [Q_KEY_CODE_F9] = 0x47,\n-    [Q_KEY_CODE_F10] = 0x4f,\n-    [Q_KEY_CODE_F11] = 0x56,\n-    [Q_KEY_CODE_F12] = 0x5e,\n-    [Q_KEY_CODE_PRINT] = 0x57,\n-    [Q_KEY_CODE_SCROLL_LOCK] = 0x5f,\n-    [Q_KEY_CODE_PAUSE] = 0x62,\n-    [Q_KEY_CODE_BRACKET_LEFT] = 0x54,\n-    [Q_KEY_CODE_INSERT] = 0x67,\n-    [Q_KEY_CODE_HOME] = 0x6e,\n-    [Q_KEY_CODE_PGUP] = 0x6f,\n-    [Q_KEY_CODE_DELETE] = 0x64,\n-    [Q_KEY_CODE_END] = 0x65,\n-    [Q_KEY_CODE_PGDN] = 0x6d,\n-    [Q_KEY_CODE_UP] = 0x63,\n-    [Q_KEY_CODE_LEFT] = 0x61,\n-    [Q_KEY_CODE_DOWN] = 0x60,\n-    [Q_KEY_CODE_RIGHT] = 0x6a,\n-    [Q_KEY_CODE_NUM_LOCK] = 0x76,\n-    [Q_KEY_CODE_KP_DIVIDE] = 0x4a,\n-    [Q_KEY_CODE_KP_MULTIPLY] = 0x7e,\n-    [Q_KEY_CODE_KP_SUBTRACT] = 0x4e,\n-    [Q_KEY_CODE_KP_ADD] = 0x7c,\n-    [Q_KEY_CODE_KP_ENTER] = 0x79,\n-    [Q_KEY_CODE_KP_DECIMAL] = 0x71,\n-    [Q_KEY_CODE_KP_0] = 0x70,\n-    [Q_KEY_CODE_KP_1] = 0x69,\n-    [Q_KEY_CODE_KP_2] = 0x72,\n-    [Q_KEY_CODE_KP_3] = 0x7a,\n-    [Q_KEY_CODE_KP_4] = 0x6b,\n-    [Q_KEY_CODE_KP_5] = 0x73,\n-    [Q_KEY_CODE_KP_6] = 0x74,\n-    [Q_KEY_CODE_KP_7] = 0x6c,\n-    [Q_KEY_CODE_KP_8] = 0x75,\n-    [Q_KEY_CODE_KP_9] = 0x7d,\n-    [Q_KEY_CODE_BRACKET_RIGHT] = 0x5b,\n-    [Q_KEY_CODE_SEMICOLON] = 0x4c,\n-    [Q_KEY_CODE_APOSTROPHE] = 0x52,\n-    [Q_KEY_CODE_COMMA] = 0x41,\n-    [Q_KEY_CODE_DOT] = 0x49,\n-    [Q_KEY_CODE_SLASH] = 0x4a,\n-\n-    [Q_KEY_CODE_HIRAGANA] = 0x87,\n-    [Q_KEY_CODE_HENKAN] = 0x86,\n-    [Q_KEY_CODE_YEN] = 0x5d,\n-};\n-\n static uint8_t translate_table[256] = {\n     0xff, 0x43, 0x41, 0x3f, 0x3d, 0x3b, 0x3c, 0x58,\n     0x64, 0x44, 0x42, 0x40, 0x3e, 0x0f, 0x29, 0x59,\n@@ -595,7 +200,7 @@ static void ps2_keyboard_event(DeviceState *dev, QemuConsole *src,\n     PS2KbdState *s = (PS2KbdState *)dev;\n     InputKeyEvent *key = evt->u.key.data;\n     int qcode;\n-    uint16_t keycode;\n+    uint16_t keycode = 0;\n \n     qemu_system_wakeup_request(QEMU_WAKEUP_REASON_OTHER);\n     assert(evt->type == INPUT_EVENT_KIND_KEY);\n@@ -624,7 +229,8 @@ static void ps2_keyboard_event(DeviceState *dev, QemuConsole *src,\n                 ps2_put_keycode(s, 0xaa);\n             }\n         } else {\n-            keycode = qcode_to_keycode_set1[qcode];\n+            if (qcode < qemu_input_map_qcode_to_atset1_len)\n+                keycode = qemu_input_map_qcode_to_atset1[qcode];\n             if (keycode) {\n                 if (keycode & 0xff00) {\n                     ps2_put_keycode(s, keycode >> 8);\n@@ -665,7 +271,8 @@ static void ps2_keyboard_event(DeviceState *dev, QemuConsole *src,\n                 ps2_put_keycode(s, 0x12);\n             }\n         } else {\n-            keycode = qcode_to_keycode_set2[qcode];\n+            if (qcode < qemu_input_map_qcode_to_atset2_len)\n+                keycode = qemu_input_map_qcode_to_atset2[qcode];\n             if (keycode) {\n                 if (keycode & 0xff00) {\n                     ps2_put_keycode(s, keycode >> 8);\n@@ -680,7 +287,8 @@ static void ps2_keyboard_event(DeviceState *dev, QemuConsole *src,\n             }\n         }\n     } else if (s->scancode_set == 3) {\n-        keycode = qcode_to_keycode_set3[qcode];\n+        if (qcode < qemu_input_map_qcode_to_atset3_len)\n+            keycode = qemu_input_map_qcode_to_atset3[qcode];\n         if (keycode) {\n             /* FIXME: break code should be configured on a key by key basis */\n             if (!key->down) {\ndiff --git a/include/ui/input.h b/include/ui/input.h\nindex 6f56d868c7..76235ba97a 100644\n--- a/include/ui/input.h\n+++ b/include/ui/input.h\n@@ -71,6 +71,15 @@ void qemu_remove_mouse_mode_change_notifier(Notifier *notify);\n extern const guint qemu_input_map_linux_to_qcode_len;\n extern const guint16 qemu_input_map_linux_to_qcode[];\n \n+extern const guint qemu_input_map_qcode_to_atset1_len;\n+extern const guint16 qemu_input_map_qcode_to_atset1[];\n+\n+extern const guint qemu_input_map_qcode_to_atset2_len;\n+extern const guint16 qemu_input_map_qcode_to_atset2[];\n+\n+extern const guint qemu_input_map_qcode_to_atset3_len;\n+extern const guint16 qemu_input_map_qcode_to_atset3[];\n+\n extern const guint qemu_input_map_qcode_to_linux_len;\n extern const guint16 qemu_input_map_qcode_to_linux[];\n \ndiff --git a/ui/Makefile.objs b/ui/Makefile.objs\nindex baf6f4e56f..8ba843c0c9 100644\n--- a/ui/Makefile.objs\n+++ b/ui/Makefile.objs\n@@ -55,6 +55,9 @@ KEYCODEMAP_CSV = $(SRC_PATH)/ui/keycodemapdb/data/keymaps.csv\n \n KEYCODEMAP_FILES = \\\n \t\t ui/input-keymap-linux-to-qcode.c \\\n+\t\t ui/input-keymap-qcode-to-atset1.c \\\n+\t\t ui/input-keymap-qcode-to-atset2.c \\\n+\t\t ui/input-keymap-qcode-to-atset3.c \\\n \t\t ui/input-keymap-qcode-to-linux.c \\\n \t\t ui/input-keymap-qcode-to-qnum.c \\\n \t\t ui/input-keymap-qnum-to-qcode.c \\\ndiff --git a/ui/input-keymap-qcode-to-atset1.c b/ui/input-keymap-qcode-to-atset1.c\nnew file mode 100644\nindex 0000000000..3793e38cd4\n--- /dev/null\n+++ b/ui/input-keymap-qcode-to-atset1.c\n@@ -0,0 +1,154 @@\n+/*\n+ * This file is auto-generated from keymaps.csv on 2017-08-31 11:06\n+ * Database checksum sha256(f8aeff0c3430077a350e3d7ba2b335b381bd929ac4b193413730a402ff3f0097)\n+ * To re-generate, run:\n+ *   keymap-gen --lang=glib2 --varname=qemu_input_map_qcode_to_atset1 code-map keymaps.csv qcode atset1\n+*/\n+const guint16 qemu_input_map_qcode_to_atset1[Q_KEY_CODE__MAX] = {\n+  [Q_KEY_CODE_0] = 0xb, /* qcode:Q_KEY_CODE_0 (0) -> linux:11 (KEY_0) -> atset1:11 */\n+  [Q_KEY_CODE_1] = 0x2, /* qcode:Q_KEY_CODE_1 (1) -> linux:2 (KEY_1) -> atset1:2 */\n+  [Q_KEY_CODE_2] = 0x3, /* qcode:Q_KEY_CODE_2 (2) -> linux:3 (KEY_2) -> atset1:3 */\n+  [Q_KEY_CODE_3] = 0x4, /* qcode:Q_KEY_CODE_3 (3) -> linux:4 (KEY_3) -> atset1:4 */\n+  [Q_KEY_CODE_4] = 0x5, /* qcode:Q_KEY_CODE_4 (4) -> linux:5 (KEY_4) -> atset1:5 */\n+  [Q_KEY_CODE_5] = 0x6, /* qcode:Q_KEY_CODE_5 (5) -> linux:6 (KEY_5) -> atset1:6 */\n+  [Q_KEY_CODE_6] = 0x7, /* qcode:Q_KEY_CODE_6 (6) -> linux:7 (KEY_6) -> atset1:7 */\n+  [Q_KEY_CODE_7] = 0x8, /* qcode:Q_KEY_CODE_7 (7) -> linux:8 (KEY_7) -> atset1:8 */\n+  [Q_KEY_CODE_8] = 0x9, /* qcode:Q_KEY_CODE_8 (8) -> linux:9 (KEY_8) -> atset1:9 */\n+  [Q_KEY_CODE_9] = 0xa, /* qcode:Q_KEY_CODE_9 (9) -> linux:10 (KEY_9) -> atset1:10 */\n+  [Q_KEY_CODE_A] = 0x1e, /* qcode:Q_KEY_CODE_A (a) -> linux:30 (KEY_A) -> atset1:30 */\n+  [Q_KEY_CODE_AC_BACK] = 0xe06a, /* qcode:Q_KEY_CODE_AC_BACK (ac_back) -> linux:158 (KEY_BACK) -> atset1:57450 */\n+  [Q_KEY_CODE_AC_BOOKMARKS] = 0xe066, /* qcode:Q_KEY_CODE_AC_BOOKMARKS (ac_bookmarks) -> linux:156 (KEY_BOOKMARKS) -> atset1:57446 */\n+  [Q_KEY_CODE_AC_FORWARD] = 0xe069, /* qcode:Q_KEY_CODE_AC_FORWARD (ac_forward) -> linux:159 (KEY_FORWARD) -> atset1:57449 */\n+  [Q_KEY_CODE_AC_HOME] = 0xe032, /* qcode:Q_KEY_CODE_AC_HOME (ac_home) -> linux:172 (KEY_HOMEPAGE) -> atset1:57394 */\n+  [Q_KEY_CODE_AC_REFRESH] = 0xe067, /* qcode:Q_KEY_CODE_AC_REFRESH (ac_refresh) -> linux:173 (KEY_REFRESH) -> atset1:57447 */\n+  [Q_KEY_CODE_AGAIN] = 0xe005, /* qcode:Q_KEY_CODE_AGAIN (again) -> linux:129 (KEY_AGAIN) -> atset1:57349 */\n+  [Q_KEY_CODE_ALT] = 0x38, /* qcode:Q_KEY_CODE_ALT (alt) -> linux:56 (KEY_LEFTALT) -> atset1:56 */\n+  [Q_KEY_CODE_ALT_R] = 0xe038, /* qcode:Q_KEY_CODE_ALT_R (alt_r) -> linux:100 (KEY_RIGHTALT) -> atset1:57400 */\n+  [Q_KEY_CODE_APOSTROPHE] = 0x28, /* qcode:Q_KEY_CODE_APOSTROPHE (apostrophe) -> linux:40 (KEY_APOSTROPHE) -> atset1:40 */\n+  [Q_KEY_CODE_ASTERISK] = 0x37, /* qcode:Q_KEY_CODE_ASTERISK (kp_multiply) -> linux:55 (KEY_KPASTERISK) -> atset1:55 */\n+  [Q_KEY_CODE_AUDIOMUTE] = 0xe020, /* qcode:Q_KEY_CODE_AUDIOMUTE (audiomute) -> linux:113 (KEY_MUTE) -> atset1:57376 */\n+  [Q_KEY_CODE_AUDIONEXT] = 0xe019, /* qcode:Q_KEY_CODE_AUDIONEXT (audionext) -> linux:163 (KEY_NEXTSONG) -> atset1:57369 */\n+  [Q_KEY_CODE_AUDIOPLAY] = 0xe022, /* qcode:Q_KEY_CODE_AUDIOPLAY (audioplay) -> linux:164 (KEY_PLAYPAUSE) -> atset1:57378 */\n+  [Q_KEY_CODE_AUDIOPREV] = 0xe010, /* qcode:Q_KEY_CODE_AUDIOPREV (audioprev) -> linux:165 (KEY_PREVIOUSSONG) -> atset1:57360 */\n+  [Q_KEY_CODE_AUDIOSTOP] = 0xe024, /* qcode:Q_KEY_CODE_AUDIOSTOP (audiostop) -> linux:166 (KEY_STOPCD) -> atset1:57380 */\n+  [Q_KEY_CODE_B] = 0x30, /* qcode:Q_KEY_CODE_B (b) -> linux:48 (KEY_B) -> atset1:48 */\n+  [Q_KEY_CODE_BACKSLASH] = 0x2b, /* qcode:Q_KEY_CODE_BACKSLASH (backslash) -> linux:43 (KEY_BACKSLASH) -> atset1:43 */\n+  [Q_KEY_CODE_BACKSPACE] = 0xe, /* qcode:Q_KEY_CODE_BACKSPACE (backspace) -> linux:14 (KEY_BACKSPACE) -> atset1:14 */\n+  [Q_KEY_CODE_BRACKET_LEFT] = 0x1a, /* qcode:Q_KEY_CODE_BRACKET_LEFT (bracket_left) -> linux:26 (KEY_LEFTBRACE) -> atset1:26 */\n+  [Q_KEY_CODE_BRACKET_RIGHT] = 0x1b, /* qcode:Q_KEY_CODE_BRACKET_RIGHT (bracket_right) -> linux:27 (KEY_RIGHTBRACE) -> atset1:27 */\n+  [Q_KEY_CODE_C] = 0x2e, /* qcode:Q_KEY_CODE_C (c) -> linux:46 (KEY_C) -> atset1:46 */\n+  [Q_KEY_CODE_CALCULATOR] = 0xe021, /* qcode:Q_KEY_CODE_CALCULATOR (calculator) -> linux:140 (KEY_CALC) -> atset1:57377 */\n+  [Q_KEY_CODE_CAPS_LOCK] = 0x3a, /* qcode:Q_KEY_CODE_CAPS_LOCK (caps_lock) -> linux:58 (KEY_CAPSLOCK) -> atset1:58 */\n+  [Q_KEY_CODE_COMMA] = 0x33, /* qcode:Q_KEY_CODE_COMMA (comma) -> linux:51 (KEY_COMMA) -> atset1:51 */\n+  [Q_KEY_CODE_COMPOSE] = 0xe05d, /* qcode:Q_KEY_CODE_COMPOSE (compose) -> linux:127 (KEY_COMPOSE) -> atset1:57437 */\n+  [Q_KEY_CODE_COMPUTER] = 0xe06b, /* qcode:Q_KEY_CODE_COMPUTER (computer) -> linux:157 (KEY_COMPUTER) -> atset1:57451 */\n+  [Q_KEY_CODE_COPY] = 0xe078, /* qcode:Q_KEY_CODE_COPY (copy) -> linux:133 (KEY_COPY) -> atset1:57464 */\n+  [Q_KEY_CODE_CTRL] = 0x1d, /* qcode:Q_KEY_CODE_CTRL (ctrl) -> linux:29 (KEY_LEFTCTRL) -> atset1:29 */\n+  [Q_KEY_CODE_CTRL_R] = 0xe01d, /* qcode:Q_KEY_CODE_CTRL_R (ctrl_r) -> linux:97 (KEY_RIGHTCTRL) -> atset1:57373 */\n+  [Q_KEY_CODE_CUT] = 0xe03c, /* qcode:Q_KEY_CODE_CUT (cut) -> linux:137 (KEY_CUT) -> atset1:57404 */\n+  [Q_KEY_CODE_D] = 0x20, /* qcode:Q_KEY_CODE_D (d) -> linux:32 (KEY_D) -> atset1:32 */\n+  [Q_KEY_CODE_DELETE] = 0xe053, /* qcode:Q_KEY_CODE_DELETE (delete) -> linux:111 (KEY_DELETE) -> atset1:57427 */\n+  [Q_KEY_CODE_DOT] = 0x34, /* qcode:Q_KEY_CODE_DOT (dot) -> linux:52 (KEY_DOT) -> atset1:52 */\n+  [Q_KEY_CODE_DOWN] = 0xe050, /* qcode:Q_KEY_CODE_DOWN (down) -> linux:108 (KEY_DOWN) -> atset1:57424 */\n+  [Q_KEY_CODE_E] = 0x12, /* qcode:Q_KEY_CODE_E (e) -> linux:18 (KEY_E) -> atset1:18 */\n+  [Q_KEY_CODE_END] = 0xe04f, /* qcode:Q_KEY_CODE_END (end) -> linux:107 (KEY_END) -> atset1:57423 */\n+  [Q_KEY_CODE_EQUAL] = 0xd, /* qcode:Q_KEY_CODE_EQUAL (equal) -> linux:13 (KEY_EQUAL) -> atset1:13 */\n+  [Q_KEY_CODE_ESC] = 0x1, /* qcode:Q_KEY_CODE_ESC (esc) -> linux:1 (KEY_ESC) -> atset1:1 */\n+  [Q_KEY_CODE_F] = 0x21, /* qcode:Q_KEY_CODE_F (f) -> linux:33 (KEY_F) -> atset1:33 */\n+  [Q_KEY_CODE_F1] = 0x3b, /* qcode:Q_KEY_CODE_F1 (f1) -> linux:59 (KEY_F1) -> atset1:59 */\n+  [Q_KEY_CODE_F10] = 0x44, /* qcode:Q_KEY_CODE_F10 (f10) -> linux:68 (KEY_F10) -> atset1:68 */\n+  [Q_KEY_CODE_F11] = 0x57, /* qcode:Q_KEY_CODE_F11 (f11) -> linux:87 (KEY_F11) -> atset1:87 */\n+  [Q_KEY_CODE_F12] = 0x58, /* qcode:Q_KEY_CODE_F12 (f12) -> linux:88 (KEY_F12) -> atset1:88 */\n+  [Q_KEY_CODE_F2] = 0x3c, /* qcode:Q_KEY_CODE_F2 (f2) -> linux:60 (KEY_F2) -> atset1:60 */\n+  [Q_KEY_CODE_F3] = 0x3d, /* qcode:Q_KEY_CODE_F3 (f3) -> linux:61 (KEY_F3) -> atset1:61 */\n+  [Q_KEY_CODE_F4] = 0x3e, /* qcode:Q_KEY_CODE_F4 (f4) -> linux:62 (KEY_F4) -> atset1:62 */\n+  [Q_KEY_CODE_F5] = 0x3f, /* qcode:Q_KEY_CODE_F5 (f5) -> linux:63 (KEY_F5) -> atset1:63 */\n+  [Q_KEY_CODE_F6] = 0x40, /* qcode:Q_KEY_CODE_F6 (f6) -> linux:64 (KEY_F6) -> atset1:64 */\n+  [Q_KEY_CODE_F7] = 0x41, /* qcode:Q_KEY_CODE_F7 (f7) -> linux:65 (KEY_F7) -> atset1:65 */\n+  [Q_KEY_CODE_F8] = 0x42, /* qcode:Q_KEY_CODE_F8 (f8) -> linux:66 (KEY_F8) -> atset1:66 */\n+  [Q_KEY_CODE_F9] = 0x43, /* qcode:Q_KEY_CODE_F9 (f9) -> linux:67 (KEY_F9) -> atset1:67 */\n+  [Q_KEY_CODE_FIND] = 0xe041, /* qcode:Q_KEY_CODE_FIND (find) -> linux:136 (KEY_FIND) -> atset1:57409 */\n+  [Q_KEY_CODE_FRONT] = 0xe00c, /* qcode:Q_KEY_CODE_FRONT (front) -> linux:132 (KEY_FRONT) -> atset1:57356 */\n+  [Q_KEY_CODE_G] = 0x22, /* qcode:Q_KEY_CODE_G (g) -> linux:34 (KEY_G) -> atset1:34 */\n+  [Q_KEY_CODE_GRAVE_ACCENT] = 0x29, /* qcode:Q_KEY_CODE_GRAVE_ACCENT (grave_accent) -> linux:41 (KEY_GRAVE) -> atset1:41 */\n+  [Q_KEY_CODE_H] = 0x23, /* qcode:Q_KEY_CODE_H (h) -> linux:35 (KEY_H) -> atset1:35 */\n+  [Q_KEY_CODE_HELP] = 0xe075, /* qcode:Q_KEY_CODE_HELP (help) -> linux:138 (KEY_HELP) -> atset1:57461 */\n+  [Q_KEY_CODE_HENKAN] = 0x79, /* qcode:Q_KEY_CODE_HENKAN (henkan) -> linux:92 (KEY_HENKAN) -> atset1:121 */\n+  [Q_KEY_CODE_HIRAGANA] = 0x77, /* qcode:Q_KEY_CODE_HIRAGANA (hiragana) -> linux:91 (KEY_HIRAGANA) -> atset1:119 */\n+  [Q_KEY_CODE_HOME] = 0xe047, /* qcode:Q_KEY_CODE_HOME (home) -> linux:102 (KEY_HOME) -> atset1:57415 */\n+  [Q_KEY_CODE_I] = 0x17, /* qcode:Q_KEY_CODE_I (i) -> linux:23 (KEY_I) -> atset1:23 */\n+  [Q_KEY_CODE_INSERT] = 0xe052, /* qcode:Q_KEY_CODE_INSERT (insert) -> linux:110 (KEY_INSERT) -> atset1:57426 */\n+  [Q_KEY_CODE_J] = 0x24, /* qcode:Q_KEY_CODE_J (j) -> linux:36 (KEY_J) -> atset1:36 */\n+  [Q_KEY_CODE_K] = 0x25, /* qcode:Q_KEY_CODE_K (k) -> linux:37 (KEY_K) -> atset1:37 */\n+  [Q_KEY_CODE_KP_0] = 0x52, /* qcode:Q_KEY_CODE_KP_0 (kp_0) -> linux:82 (KEY_KP0) -> atset1:82 */\n+  [Q_KEY_CODE_KP_1] = 0x4f, /* qcode:Q_KEY_CODE_KP_1 (kp_1) -> linux:79 (KEY_KP1) -> atset1:79 */\n+  [Q_KEY_CODE_KP_2] = 0x50, /* qcode:Q_KEY_CODE_KP_2 (kp_2) -> linux:80 (KEY_KP2) -> atset1:80 */\n+  [Q_KEY_CODE_KP_3] = 0x51, /* qcode:Q_KEY_CODE_KP_3 (kp_3) -> linux:81 (KEY_KP3) -> atset1:81 */\n+  [Q_KEY_CODE_KP_4] = 0x4b, /* qcode:Q_KEY_CODE_KP_4 (kp_4) -> linux:75 (KEY_KP4) -> atset1:75 */\n+  [Q_KEY_CODE_KP_5] = 0x4c, /* qcode:Q_KEY_CODE_KP_5 (kp_5) -> linux:76 (KEY_KP5) -> atset1:76 */\n+  [Q_KEY_CODE_KP_6] = 0x4d, /* qcode:Q_KEY_CODE_KP_6 (kp_6) -> linux:77 (KEY_KP6) -> atset1:77 */\n+  [Q_KEY_CODE_KP_7] = 0x47, /* qcode:Q_KEY_CODE_KP_7 (kp_7) -> linux:71 (KEY_KP7) -> atset1:71 */\n+  [Q_KEY_CODE_KP_8] = 0x48, /* qcode:Q_KEY_CODE_KP_8 (kp_8) -> linux:72 (KEY_KP8) -> atset1:72 */\n+  [Q_KEY_CODE_KP_9] = 0x49, /* qcode:Q_KEY_CODE_KP_9 (kp_9) -> linux:73 (KEY_KP9) -> atset1:73 */\n+  [Q_KEY_CODE_KP_ADD] = 0x4e, /* qcode:Q_KEY_CODE_KP_ADD (kp_add) -> linux:78 (KEY_KPPLUS) -> atset1:78 */\n+  [Q_KEY_CODE_KP_COMMA] = 0x7e, /* qcode:Q_KEY_CODE_KP_COMMA (kp_comma) -> linux:121 (KEY_KPCOMMA) -> atset1:126 */\n+  [Q_KEY_CODE_KP_DECIMAL] = 0x53, /* qcode:Q_KEY_CODE_KP_DECIMAL (kp_decimal) -> linux:83 (KEY_KPDOT) -> atset1:83 */\n+  [Q_KEY_CODE_KP_DIVIDE] = 0xe035, /* qcode:Q_KEY_CODE_KP_DIVIDE (kp_divide) -> linux:98 (KEY_KPSLASH) -> atset1:57397 */\n+  [Q_KEY_CODE_KP_ENTER] = 0xe01c, /* qcode:Q_KEY_CODE_KP_ENTER (kp_enter) -> linux:96 (KEY_KPENTER) -> atset1:57372 */\n+  [Q_KEY_CODE_KP_EQUALS] = 0x59, /* qcode:Q_KEY_CODE_KP_EQUALS (kp_equals) -> linux:117 (KEY_KPEQUAL) -> atset1:89 */\n+  [Q_KEY_CODE_KP_MULTIPLY] = 0x37, /* qcode:Q_KEY_CODE_KP_MULTIPLY (kp_multiply) -> linux:55 (KEY_KPASTERISK) -> atset1:55 */\n+  [Q_KEY_CODE_KP_SUBTRACT] = 0x4a, /* qcode:Q_KEY_CODE_KP_SUBTRACT (kp_subtract) -> linux:74 (KEY_KPMINUS) -> atset1:74 */\n+  [Q_KEY_CODE_L] = 0x26, /* qcode:Q_KEY_CODE_L (l) -> linux:38 (KEY_L) -> atset1:38 */\n+  [Q_KEY_CODE_LEFT] = 0xe04b, /* qcode:Q_KEY_CODE_LEFT (left) -> linux:105 (KEY_LEFT) -> atset1:57419 */\n+  [Q_KEY_CODE_LESS] = 0x56, /* qcode:Q_KEY_CODE_LESS (less) -> linux:86 (KEY_102ND) -> atset1:86 */\n+  [Q_KEY_CODE_LF] = 0x5b, /* qcode:Q_KEY_CODE_LF (lf) -> linux:101 (KEY_LINEFEED) -> atset1:91 */\n+  [Q_KEY_CODE_M] = 0x32, /* qcode:Q_KEY_CODE_M (m) -> linux:50 (KEY_M) -> atset1:50 */\n+  [Q_KEY_CODE_MAIL] = 0xe06c, /* qcode:Q_KEY_CODE_MAIL (mail) -> linux:155 (KEY_MAIL) -> atset1:57452 */\n+  [Q_KEY_CODE_MEDIASELECT] = 0xe06d, /* qcode:Q_KEY_CODE_MEDIASELECT (mediaselect) -> linux:226 (KEY_MEDIA) -> atset1:57453 */\n+  [Q_KEY_CODE_MENU] = 0xe01e, /* qcode:Q_KEY_CODE_MENU (menu) -> linux:139 (KEY_MENU) -> atset1:57374 */\n+  [Q_KEY_CODE_META_L] = 0xe05b, /* qcode:Q_KEY_CODE_META_L (meta_l) -> linux:125 (KEY_LEFTMETA) -> atset1:57435 */\n+  [Q_KEY_CODE_META_R] = 0xe05c, /* qcode:Q_KEY_CODE_META_R (meta_r) -> linux:126 (KEY_RIGHTMETA) -> atset1:57436 */\n+  [Q_KEY_CODE_MINUS] = 0xc, /* qcode:Q_KEY_CODE_MINUS (minus) -> linux:12 (KEY_MINUS) -> atset1:12 */\n+  [Q_KEY_CODE_N] = 0x31, /* qcode:Q_KEY_CODE_N (n) -> linux:49 (KEY_N) -> atset1:49 */\n+  [Q_KEY_CODE_NUM_LOCK] = 0x45, /* qcode:Q_KEY_CODE_NUM_LOCK (num_lock) -> linux:69 (KEY_NUMLOCK) -> atset1:69 */\n+  [Q_KEY_CODE_O] = 0x18, /* qcode:Q_KEY_CODE_O (o) -> linux:24 (KEY_O) -> atset1:24 */\n+  [Q_KEY_CODE_OPEN] = 0x64, /* qcode:Q_KEY_CODE_OPEN (open) -> linux:134 (KEY_OPEN) -> atset1:100 */\n+  [Q_KEY_CODE_P] = 0x19, /* qcode:Q_KEY_CODE_P (p) -> linux:25 (KEY_P) -> atset1:25 */\n+  [Q_KEY_CODE_PASTE] = 0x65, /* qcode:Q_KEY_CODE_PASTE (paste) -> linux:135 (KEY_PASTE) -> atset1:101 */\n+  [Q_KEY_CODE_PAUSE] = 0xe046, /* qcode:Q_KEY_CODE_PAUSE (pause) -> linux:119 (KEY_PAUSE) -> atset1:57414 */\n+  [Q_KEY_CODE_PGDN] = 0xe051, /* qcode:Q_KEY_CODE_PGDN (pgdn) -> linux:109 (KEY_PAGEDOWN) -> atset1:57425 */\n+  [Q_KEY_CODE_PGUP] = 0xe049, /* qcode:Q_KEY_CODE_PGUP (pgup) -> linux:104 (KEY_PAGEUP) -> atset1:57417 */\n+  [Q_KEY_CODE_POWER] = 0xe05e, /* qcode:Q_KEY_CODE_POWER (power) -> linux:116 (KEY_POWER) -> atset1:57438 */\n+  [Q_KEY_CODE_PRINT] = 0x54, /* qcode:Q_KEY_CODE_PRINT (sysrq) -> linux:99 (KEY_SYSRQ) -> atset1:84 */\n+  [Q_KEY_CODE_PROPS] = 0xe006, /* qcode:Q_KEY_CODE_PROPS (props) -> linux:130 (KEY_PROPS) -> atset1:57350 */\n+  [Q_KEY_CODE_Q] = 0x10, /* qcode:Q_KEY_CODE_Q (q) -> linux:16 (KEY_Q) -> atset1:16 */\n+  [Q_KEY_CODE_R] = 0x13, /* qcode:Q_KEY_CODE_R (r) -> linux:19 (KEY_R) -> atset1:19 */\n+  [Q_KEY_CODE_RET] = 0x1c, /* qcode:Q_KEY_CODE_RET (ret) -> linux:28 (KEY_ENTER) -> atset1:28 */\n+  [Q_KEY_CODE_RIGHT] = 0xe04d, /* qcode:Q_KEY_CODE_RIGHT (right) -> linux:106 (KEY_RIGHT) -> atset1:57421 */\n+  [Q_KEY_CODE_RO] = 0x73, /* qcode:Q_KEY_CODE_RO (ro) -> linux:89 (KEY_RO) -> atset1:115 */\n+  [Q_KEY_CODE_S] = 0x1f, /* qcode:Q_KEY_CODE_S (s) -> linux:31 (KEY_S) -> atset1:31 */\n+  [Q_KEY_CODE_SCROLL_LOCK] = 0x46, /* qcode:Q_KEY_CODE_SCROLL_LOCK (scroll_lock) -> linux:70 (KEY_SCROLLLOCK) -> atset1:70 */\n+  [Q_KEY_CODE_SEMICOLON] = 0x27, /* qcode:Q_KEY_CODE_SEMICOLON (semicolon) -> linux:39 (KEY_SEMICOLON) -> atset1:39 */\n+  [Q_KEY_CODE_SHIFT] = 0x2a, /* qcode:Q_KEY_CODE_SHIFT (shift) -> linux:42 (KEY_LEFTSHIFT) -> atset1:42 */\n+  [Q_KEY_CODE_SHIFT_R] = 0x36, /* qcode:Q_KEY_CODE_SHIFT_R (shift_r) -> linux:54 (KEY_RIGHTSHIFT) -> atset1:54 */\n+  [Q_KEY_CODE_SLASH] = 0x35, /* qcode:Q_KEY_CODE_SLASH (slash) -> linux:53 (KEY_SLASH) -> atset1:53 */\n+  [Q_KEY_CODE_SLEEP] = 0xe05f, /* qcode:Q_KEY_CODE_SLEEP (sleep) -> linux:142 (KEY_SLEEP) -> atset1:57439 */\n+  [Q_KEY_CODE_SPC] = 0x39, /* qcode:Q_KEY_CODE_SPC (spc) -> linux:57 (KEY_SPACE) -> atset1:57 */\n+  [Q_KEY_CODE_STOP] = 0xe068, /* qcode:Q_KEY_CODE_STOP (stop) -> linux:128 (KEY_STOP) -> atset1:57448 */\n+  [Q_KEY_CODE_SYSRQ] = 0x54, /* qcode:Q_KEY_CODE_SYSRQ (sysrq) -> linux:99 (KEY_SYSRQ) -> atset1:84 */\n+  [Q_KEY_CODE_T] = 0x14, /* qcode:Q_KEY_CODE_T (t) -> linux:20 (KEY_T) -> atset1:20 */\n+  [Q_KEY_CODE_TAB] = 0xf, /* qcode:Q_KEY_CODE_TAB (tab) -> linux:15 (KEY_TAB) -> atset1:15 */\n+  [Q_KEY_CODE_U] = 0x16, /* qcode:Q_KEY_CODE_U (u) -> linux:22 (KEY_U) -> atset1:22 */\n+  [Q_KEY_CODE_UNDO] = 0xe007, /* qcode:Q_KEY_CODE_UNDO (undo) -> linux:131 (KEY_UNDO) -> atset1:57351 */\n+  [Q_KEY_CODE_UP] = 0xe048, /* qcode:Q_KEY_CODE_UP (up) -> linux:103 (KEY_UP) -> atset1:57416 */\n+  [Q_KEY_CODE_V] = 0x2f, /* qcode:Q_KEY_CODE_V (v) -> linux:47 (KEY_V) -> atset1:47 */\n+  [Q_KEY_CODE_VOLUMEDOWN] = 0xe02e, /* qcode:Q_KEY_CODE_VOLUMEDOWN (volumedown) -> linux:114 (KEY_VOLUMEDOWN) -> atset1:57390 */\n+  [Q_KEY_CODE_VOLUMEUP] = 0xe030, /* qcode:Q_KEY_CODE_VOLUMEUP (volumeup) -> linux:115 (KEY_VOLUMEUP) -> atset1:57392 */\n+  [Q_KEY_CODE_W] = 0x11, /* qcode:Q_KEY_CODE_W (w) -> linux:17 (KEY_W) -> atset1:17 */\n+  [Q_KEY_CODE_WAKE] = 0xe063, /* qcode:Q_KEY_CODE_WAKE (wake) -> linux:143 (KEY_WAKEUP) -> atset1:57443 */\n+  [Q_KEY_CODE_X] = 0x2d, /* qcode:Q_KEY_CODE_X (x) -> linux:45 (KEY_X) -> atset1:45 */\n+  [Q_KEY_CODE_Y] = 0x15, /* qcode:Q_KEY_CODE_Y (y) -> linux:21 (KEY_Y) -> atset1:21 */\n+  [Q_KEY_CODE_YEN] = 0x7d, /* qcode:Q_KEY_CODE_YEN (yen) -> linux:124 (KEY_YEN) -> atset1:125 */\n+  [Q_KEY_CODE_Z] = 0x2c, /* qcode:Q_KEY_CODE_Z (z) -> linux:44 (KEY_Z) -> atset1:44 */\n+};\n+const guint qemu_input_map_qcode_to_atset1_len = sizeof(qemu_input_map_qcode_to_atset1)/sizeof(qemu_input_map_qcode_to_atset1[0]);\ndiff --git a/ui/input-keymap-qcode-to-atset2.c b/ui/input-keymap-qcode-to-atset2.c\nnew file mode 100644\nindex 0000000000..ba168db5f7\n--- /dev/null\n+++ b/ui/input-keymap-qcode-to-atset2.c\n@@ -0,0 +1,142 @@\n+/*\n+ * This file is auto-generated from keymaps.csv on 2017-08-31 11:06\n+ * Database checksum sha256(f8aeff0c3430077a350e3d7ba2b335b381bd929ac4b193413730a402ff3f0097)\n+ * To re-generate, run:\n+ *   keymap-gen --lang=glib2 --varname=qemu_input_map_qcode_to_atset2 code-map keymaps.csv qcode atset2\n+*/\n+const guint16 qemu_input_map_qcode_to_atset2[Q_KEY_CODE__MAX] = {\n+  [Q_KEY_CODE_0] = 0x45, /* qcode:Q_KEY_CODE_0 (0) -> linux:11 (KEY_0) -> atset2:69 */\n+  [Q_KEY_CODE_1] = 0x16, /* qcode:Q_KEY_CODE_1 (1) -> linux:2 (KEY_1) -> atset2:22 */\n+  [Q_KEY_CODE_2] = 0x1e, /* qcode:Q_KEY_CODE_2 (2) -> linux:3 (KEY_2) -> atset2:30 */\n+  [Q_KEY_CODE_3] = 0x26, /* qcode:Q_KEY_CODE_3 (3) -> linux:4 (KEY_3) -> atset2:38 */\n+  [Q_KEY_CODE_4] = 0x25, /* qcode:Q_KEY_CODE_4 (4) -> linux:5 (KEY_4) -> atset2:37 */\n+  [Q_KEY_CODE_5] = 0x2e, /* qcode:Q_KEY_CODE_5 (5) -> linux:6 (KEY_5) -> atset2:46 */\n+  [Q_KEY_CODE_6] = 0x36, /* qcode:Q_KEY_CODE_6 (6) -> linux:7 (KEY_6) -> atset2:54 */\n+  [Q_KEY_CODE_7] = 0x3d, /* qcode:Q_KEY_CODE_7 (7) -> linux:8 (KEY_7) -> atset2:61 */\n+  [Q_KEY_CODE_8] = 0x3e, /* qcode:Q_KEY_CODE_8 (8) -> linux:9 (KEY_8) -> atset2:62 */\n+  [Q_KEY_CODE_9] = 0x46, /* qcode:Q_KEY_CODE_9 (9) -> linux:10 (KEY_9) -> atset2:70 */\n+  [Q_KEY_CODE_A] = 0x1c, /* qcode:Q_KEY_CODE_A (a) -> linux:30 (KEY_A) -> atset2:28 */\n+  [Q_KEY_CODE_AC_BACK] = 0xe038, /* qcode:Q_KEY_CODE_AC_BACK (ac_back) -> linux:158 (KEY_BACK) -> atset2:57400 */\n+  [Q_KEY_CODE_AC_BOOKMARKS] = 0xe018, /* qcode:Q_KEY_CODE_AC_BOOKMARKS (ac_bookmarks) -> linux:156 (KEY_BOOKMARKS) -> atset2:57368 */\n+  [Q_KEY_CODE_AC_FORWARD] = 0xe030, /* qcode:Q_KEY_CODE_AC_FORWARD (ac_forward) -> linux:159 (KEY_FORWARD) -> atset2:57392 */\n+  [Q_KEY_CODE_AC_HOME] = 0xe03a, /* qcode:Q_KEY_CODE_AC_HOME (ac_home) -> linux:172 (KEY_HOMEPAGE) -> atset2:57402 */\n+  [Q_KEY_CODE_AC_REFRESH] = 0xe020, /* qcode:Q_KEY_CODE_AC_REFRESH (ac_refresh) -> linux:173 (KEY_REFRESH) -> atset2:57376 */\n+  [Q_KEY_CODE_ALT] = 0x11, /* qcode:Q_KEY_CODE_ALT (alt) -> linux:56 (KEY_LEFTALT) -> atset2:17 */\n+  [Q_KEY_CODE_ALT_R] = 0xe011, /* qcode:Q_KEY_CODE_ALT_R (alt_r) -> linux:100 (KEY_RIGHTALT) -> atset2:57361 */\n+  [Q_KEY_CODE_APOSTROPHE] = 0x52, /* qcode:Q_KEY_CODE_APOSTROPHE (apostrophe) -> linux:40 (KEY_APOSTROPHE) -> atset2:82 */\n+  [Q_KEY_CODE_ASTERISK] = 0x7c, /* qcode:Q_KEY_CODE_ASTERISK (kp_multiply) -> linux:55 (KEY_KPASTERISK) -> atset2:124 */\n+  [Q_KEY_CODE_AUDIOMUTE] = 0xe023, /* qcode:Q_KEY_CODE_AUDIOMUTE (audiomute) -> linux:113 (KEY_MUTE) -> atset2:57379 */\n+  [Q_KEY_CODE_AUDIONEXT] = 0xe04d, /* qcode:Q_KEY_CODE_AUDIONEXT (audionext) -> linux:163 (KEY_NEXTSONG) -> atset2:57421 */\n+  [Q_KEY_CODE_AUDIOPLAY] = 0xe034, /* qcode:Q_KEY_CODE_AUDIOPLAY (audioplay) -> linux:164 (KEY_PLAYPAUSE) -> atset2:57396 */\n+  [Q_KEY_CODE_AUDIOPREV] = 0xe015, /* qcode:Q_KEY_CODE_AUDIOPREV (audioprev) -> linux:165 (KEY_PREVIOUSSONG) -> atset2:57365 */\n+  [Q_KEY_CODE_AUDIOSTOP] = 0xe03b, /* qcode:Q_KEY_CODE_AUDIOSTOP (audiostop) -> linux:166 (KEY_STOPCD) -> atset2:57403 */\n+  [Q_KEY_CODE_B] = 0x32, /* qcode:Q_KEY_CODE_B (b) -> linux:48 (KEY_B) -> atset2:50 */\n+  [Q_KEY_CODE_BACKSLASH] = 0x5d, /* qcode:Q_KEY_CODE_BACKSLASH (backslash) -> linux:43 (KEY_BACKSLASH) -> atset2:93 */\n+  [Q_KEY_CODE_BACKSPACE] = 0x66, /* qcode:Q_KEY_CODE_BACKSPACE (backspace) -> linux:14 (KEY_BACKSPACE) -> atset2:102 */\n+  [Q_KEY_CODE_BRACKET_LEFT] = 0x54, /* qcode:Q_KEY_CODE_BRACKET_LEFT (bracket_left) -> linux:26 (KEY_LEFTBRACE) -> atset2:84 */\n+  [Q_KEY_CODE_BRACKET_RIGHT] = 0x5b, /* qcode:Q_KEY_CODE_BRACKET_RIGHT (bracket_right) -> linux:27 (KEY_RIGHTBRACE) -> atset2:91 */\n+  [Q_KEY_CODE_C] = 0x21, /* qcode:Q_KEY_CODE_C (c) -> linux:46 (KEY_C) -> atset2:33 */\n+  [Q_KEY_CODE_CALCULATOR] = 0xe02b, /* qcode:Q_KEY_CODE_CALCULATOR (calculator) -> linux:140 (KEY_CALC) -> atset2:57387 */\n+  [Q_KEY_CODE_CAPS_LOCK] = 0x58, /* qcode:Q_KEY_CODE_CAPS_LOCK (caps_lock) -> linux:58 (KEY_CAPSLOCK) -> atset2:88 */\n+  [Q_KEY_CODE_COMMA] = 0x41, /* qcode:Q_KEY_CODE_COMMA (comma) -> linux:51 (KEY_COMMA) -> atset2:65 */\n+  [Q_KEY_CODE_COMPOSE] = 0xe02f, /* qcode:Q_KEY_CODE_COMPOSE (compose) -> linux:127 (KEY_COMPOSE) -> atset2:57391 */\n+  [Q_KEY_CODE_COMPUTER] = 0xe040, /* qcode:Q_KEY_CODE_COMPUTER (computer) -> linux:157 (KEY_COMPUTER) -> atset2:57408 */\n+  [Q_KEY_CODE_CTRL] = 0x14, /* qcode:Q_KEY_CODE_CTRL (ctrl) -> linux:29 (KEY_LEFTCTRL) -> atset2:20 */\n+  [Q_KEY_CODE_CTRL_R] = 0xe014, /* qcode:Q_KEY_CODE_CTRL_R (ctrl_r) -> linux:97 (KEY_RIGHTCTRL) -> atset2:57364 */\n+  [Q_KEY_CODE_D] = 0x23, /* qcode:Q_KEY_CODE_D (d) -> linux:32 (KEY_D) -> atset2:35 */\n+  [Q_KEY_CODE_DELETE] = 0xe071, /* qcode:Q_KEY_CODE_DELETE (delete) -> linux:111 (KEY_DELETE) -> atset2:57457 */\n+  [Q_KEY_CODE_DOT] = 0x49, /* qcode:Q_KEY_CODE_DOT (dot) -> linux:52 (KEY_DOT) -> atset2:73 */\n+  [Q_KEY_CODE_DOWN] = 0xe072, /* qcode:Q_KEY_CODE_DOWN (down) -> linux:108 (KEY_DOWN) -> atset2:57458 */\n+  [Q_KEY_CODE_E] = 0x24, /* qcode:Q_KEY_CODE_E (e) -> linux:18 (KEY_E) -> atset2:36 */\n+  [Q_KEY_CODE_END] = 0xe069, /* qcode:Q_KEY_CODE_END (end) -> linux:107 (KEY_END) -> atset2:57449 */\n+  [Q_KEY_CODE_EQUAL] = 0x55, /* qcode:Q_KEY_CODE_EQUAL (equal) -> linux:13 (KEY_EQUAL) -> atset2:85 */\n+  [Q_KEY_CODE_ESC] = 0x76, /* qcode:Q_KEY_CODE_ESC (esc) -> linux:1 (KEY_ESC) -> atset2:118 */\n+  [Q_KEY_CODE_F] = 0x2b, /* qcode:Q_KEY_CODE_F (f) -> linux:33 (KEY_F) -> atset2:43 */\n+  [Q_KEY_CODE_F1] = 0x5, /* qcode:Q_KEY_CODE_F1 (f1) -> linux:59 (KEY_F1) -> atset2:5 */\n+  [Q_KEY_CODE_F10] = 0x9, /* qcode:Q_KEY_CODE_F10 (f10) -> linux:68 (KEY_F10) -> atset2:9 */\n+  [Q_KEY_CODE_F11] = 0x78, /* qcode:Q_KEY_CODE_F11 (f11) -> linux:87 (KEY_F11) -> atset2:120 */\n+  [Q_KEY_CODE_F12] = 0x7, /* qcode:Q_KEY_CODE_F12 (f12) -> linux:88 (KEY_F12) -> atset2:7 */\n+  [Q_KEY_CODE_F2] = 0x6, /* qcode:Q_KEY_CODE_F2 (f2) -> linux:60 (KEY_F2) -> atset2:6 */\n+  [Q_KEY_CODE_F3] = 0x4, /* qcode:Q_KEY_CODE_F3 (f3) -> linux:61 (KEY_F3) -> atset2:4 */\n+  [Q_KEY_CODE_F4] = 0xc, /* qcode:Q_KEY_CODE_F4 (f4) -> linux:62 (KEY_F4) -> atset2:12 */\n+  [Q_KEY_CODE_F5] = 0x3, /* qcode:Q_KEY_CODE_F5 (f5) -> linux:63 (KEY_F5) -> atset2:3 */\n+  [Q_KEY_CODE_F6] = 0xb, /* qcode:Q_KEY_CODE_F6 (f6) -> linux:64 (KEY_F6) -> atset2:11 */\n+  [Q_KEY_CODE_F7] = 0x83, /* qcode:Q_KEY_CODE_F7 (f7) -> linux:65 (KEY_F7) -> atset2:131 */\n+  [Q_KEY_CODE_F8] = 0xa, /* qcode:Q_KEY_CODE_F8 (f8) -> linux:66 (KEY_F8) -> atset2:10 */\n+  [Q_KEY_CODE_F9] = 0x1, /* qcode:Q_KEY_CODE_F9 (f9) -> linux:67 (KEY_F9) -> atset2:1 */\n+  [Q_KEY_CODE_G] = 0x34, /* qcode:Q_KEY_CODE_G (g) -> linux:34 (KEY_G) -> atset2:52 */\n+  [Q_KEY_CODE_GRAVE_ACCENT] = 0xe, /* qcode:Q_KEY_CODE_GRAVE_ACCENT (grave_accent) -> linux:41 (KEY_GRAVE) -> atset2:14 */\n+  [Q_KEY_CODE_H] = 0x33, /* qcode:Q_KEY_CODE_H (h) -> linux:35 (KEY_H) -> atset2:51 */\n+  [Q_KEY_CODE_HENKAN] = 0x64, /* qcode:Q_KEY_CODE_HENKAN (henkan) -> linux:92 (KEY_HENKAN) -> atset2:100 */\n+  [Q_KEY_CODE_HIRAGANA] = 0x62, /* qcode:Q_KEY_CODE_HIRAGANA (hiragana) -> linux:91 (KEY_HIRAGANA) -> atset2:98 */\n+  [Q_KEY_CODE_HOME] = 0xe06c, /* qcode:Q_KEY_CODE_HOME (home) -> linux:102 (KEY_HOME) -> atset2:57452 */\n+  [Q_KEY_CODE_I] = 0x43, /* qcode:Q_KEY_CODE_I (i) -> linux:23 (KEY_I) -> atset2:67 */\n+  [Q_KEY_CODE_INSERT] = 0xe070, /* qcode:Q_KEY_CODE_INSERT (insert) -> linux:110 (KEY_INSERT) -> atset2:57456 */\n+  [Q_KEY_CODE_J] = 0x3b, /* qcode:Q_KEY_CODE_J (j) -> linux:36 (KEY_J) -> atset2:59 */\n+  [Q_KEY_CODE_K] = 0x42, /* qcode:Q_KEY_CODE_K (k) -> linux:37 (KEY_K) -> atset2:66 */\n+  [Q_KEY_CODE_KP_0] = 0x70, /* qcode:Q_KEY_CODE_KP_0 (kp_0) -> linux:82 (KEY_KP0) -> atset2:112 */\n+  [Q_KEY_CODE_KP_1] = 0x69, /* qcode:Q_KEY_CODE_KP_1 (kp_1) -> linux:79 (KEY_KP1) -> atset2:105 */\n+  [Q_KEY_CODE_KP_2] = 0x72, /* qcode:Q_KEY_CODE_KP_2 (kp_2) -> linux:80 (KEY_KP2) -> atset2:114 */\n+  [Q_KEY_CODE_KP_3] = 0x7a, /* qcode:Q_KEY_CODE_KP_3 (kp_3) -> linux:81 (KEY_KP3) -> atset2:122 */\n+  [Q_KEY_CODE_KP_4] = 0x6b, /* qcode:Q_KEY_CODE_KP_4 (kp_4) -> linux:75 (KEY_KP4) -> atset2:107 */\n+  [Q_KEY_CODE_KP_5] = 0x73, /* qcode:Q_KEY_CODE_KP_5 (kp_5) -> linux:76 (KEY_KP5) -> atset2:115 */\n+  [Q_KEY_CODE_KP_6] = 0x74, /* qcode:Q_KEY_CODE_KP_6 (kp_6) -> linux:77 (KEY_KP6) -> atset2:116 */\n+  [Q_KEY_CODE_KP_7] = 0x6c, /* qcode:Q_KEY_CODE_KP_7 (kp_7) -> linux:71 (KEY_KP7) -> atset2:108 */\n+  [Q_KEY_CODE_KP_8] = 0x75, /* qcode:Q_KEY_CODE_KP_8 (kp_8) -> linux:72 (KEY_KP8) -> atset2:117 */\n+  [Q_KEY_CODE_KP_9] = 0x7d, /* qcode:Q_KEY_CODE_KP_9 (kp_9) -> linux:73 (KEY_KP9) -> atset2:125 */\n+  [Q_KEY_CODE_KP_ADD] = 0x79, /* qcode:Q_KEY_CODE_KP_ADD (kp_add) -> linux:78 (KEY_KPPLUS) -> atset2:121 */\n+  [Q_KEY_CODE_KP_COMMA] = 0x6d, /* qcode:Q_KEY_CODE_KP_COMMA (kp_comma) -> linux:121 (KEY_KPCOMMA) -> atset2:109 */\n+  [Q_KEY_CODE_KP_DECIMAL] = 0x71, /* qcode:Q_KEY_CODE_KP_DECIMAL (kp_decimal) -> linux:83 (KEY_KPDOT) -> atset2:113 */\n+  [Q_KEY_CODE_KP_DIVIDE] = 0xe04a, /* qcode:Q_KEY_CODE_KP_DIVIDE (kp_divide) -> linux:98 (KEY_KPSLASH) -> atset2:57418 */\n+  [Q_KEY_CODE_KP_ENTER] = 0xe05a, /* qcode:Q_KEY_CODE_KP_ENTER (kp_enter) -> linux:96 (KEY_KPENTER) -> atset2:57434 */\n+  [Q_KEY_CODE_KP_EQUALS] = 0xf, /* qcode:Q_KEY_CODE_KP_EQUALS (kp_equals) -> linux:117 (KEY_KPEQUAL) -> atset2:15 */\n+  [Q_KEY_CODE_KP_MULTIPLY] = 0x7c, /* qcode:Q_KEY_CODE_KP_MULTIPLY (kp_multiply) -> linux:55 (KEY_KPASTERISK) -> atset2:124 */\n+  [Q_KEY_CODE_KP_SUBTRACT] = 0x7b, /* qcode:Q_KEY_CODE_KP_SUBTRACT (kp_subtract) -> linux:74 (KEY_KPMINUS) -> atset2:123 */\n+  [Q_KEY_CODE_L] = 0x4b, /* qcode:Q_KEY_CODE_L (l) -> linux:38 (KEY_L) -> atset2:75 */\n+  [Q_KEY_CODE_LEFT] = 0xe06b, /* qcode:Q_KEY_CODE_LEFT (left) -> linux:105 (KEY_LEFT) -> atset2:57451 */\n+  [Q_KEY_CODE_LESS] = 0x61, /* qcode:Q_KEY_CODE_LESS (less) -> linux:86 (KEY_102ND) -> atset2:97 */\n+  [Q_KEY_CODE_M] = 0x3a, /* qcode:Q_KEY_CODE_M (m) -> linux:50 (KEY_M) -> atset2:58 */\n+  [Q_KEY_CODE_MAIL] = 0xe048, /* qcode:Q_KEY_CODE_MAIL (mail) -> linux:155 (KEY_MAIL) -> atset2:57416 */\n+  [Q_KEY_CODE_MEDIASELECT] = 0xe050, /* qcode:Q_KEY_CODE_MEDIASELECT (mediaselect) -> linux:226 (KEY_MEDIA) -> atset2:57424 */\n+  [Q_KEY_CODE_META_L] = 0xe01f, /* qcode:Q_KEY_CODE_META_L (meta_l) -> linux:125 (KEY_LEFTMETA) -> atset2:57375 */\n+  [Q_KEY_CODE_META_R] = 0xe027, /* qcode:Q_KEY_CODE_META_R (meta_r) -> linux:126 (KEY_RIGHTMETA) -> atset2:57383 */\n+  [Q_KEY_CODE_MINUS] = 0x4e, /* qcode:Q_KEY_CODE_MINUS (minus) -> linux:12 (KEY_MINUS) -> atset2:78 */\n+  [Q_KEY_CODE_N] = 0x31, /* qcode:Q_KEY_CODE_N (n) -> linux:49 (KEY_N) -> atset2:49 */\n+  [Q_KEY_CODE_NUM_LOCK] = 0x77, /* qcode:Q_KEY_CODE_NUM_LOCK (num_lock) -> linux:69 (KEY_NUMLOCK) -> atset2:119 */\n+  [Q_KEY_CODE_O] = 0x44, /* qcode:Q_KEY_CODE_O (o) -> linux:24 (KEY_O) -> atset2:68 */\n+  [Q_KEY_CODE_P] = 0x4d, /* qcode:Q_KEY_CODE_P (p) -> linux:25 (KEY_P) -> atset2:77 */\n+  [Q_KEY_CODE_PAUSE] = 0xe077, /* qcode:Q_KEY_CODE_PAUSE (pause) -> linux:119 (KEY_PAUSE) -> atset2:57463 */\n+  [Q_KEY_CODE_PGDN] = 0xe07a, /* qcode:Q_KEY_CODE_PGDN (pgdn) -> linux:109 (KEY_PAGEDOWN) -> atset2:57466 */\n+  [Q_KEY_CODE_PGUP] = 0xe07d, /* qcode:Q_KEY_CODE_PGUP (pgup) -> linux:104 (KEY_PAGEUP) -> atset2:57469 */\n+  [Q_KEY_CODE_POWER] = 0xe037, /* qcode:Q_KEY_CODE_POWER (power) -> linux:116 (KEY_POWER) -> atset2:57399 */\n+  [Q_KEY_CODE_PRINT] = 0x7f, /* qcode:Q_KEY_CODE_PRINT (sysrq) -> linux:99 (KEY_SYSRQ) -> atset2:127 */\n+  [Q_KEY_CODE_Q] = 0x15, /* qcode:Q_KEY_CODE_Q (q) -> linux:16 (KEY_Q) -> atset2:21 */\n+  [Q_KEY_CODE_R] = 0x2d, /* qcode:Q_KEY_CODE_R (r) -> linux:19 (KEY_R) -> atset2:45 */\n+  [Q_KEY_CODE_RET] = 0x5a, /* qcode:Q_KEY_CODE_RET (ret) -> linux:28 (KEY_ENTER) -> atset2:90 */\n+  [Q_KEY_CODE_RIGHT] = 0xe074, /* qcode:Q_KEY_CODE_RIGHT (right) -> linux:106 (KEY_RIGHT) -> atset2:57460 */\n+  [Q_KEY_CODE_RO] = 0x51, /* qcode:Q_KEY_CODE_RO (ro) -> linux:89 (KEY_RO) -> atset2:81 */\n+  [Q_KEY_CODE_S] = 0x1b, /* qcode:Q_KEY_CODE_S (s) -> linux:31 (KEY_S) -> atset2:27 */\n+  [Q_KEY_CODE_SCROLL_LOCK] = 0x7e, /* qcode:Q_KEY_CODE_SCROLL_LOCK (scroll_lock) -> linux:70 (KEY_SCROLLLOCK) -> atset2:126 */\n+  [Q_KEY_CODE_SEMICOLON] = 0x4c, /* qcode:Q_KEY_CODE_SEMICOLON (semicolon) -> linux:39 (KEY_SEMICOLON) -> atset2:76 */\n+  [Q_KEY_CODE_SHIFT] = 0x12, /* qcode:Q_KEY_CODE_SHIFT (shift) -> linux:42 (KEY_LEFTSHIFT) -> atset2:18 */\n+  [Q_KEY_CODE_SHIFT_R] = 0x59, /* qcode:Q_KEY_CODE_SHIFT_R (shift_r) -> linux:54 (KEY_RIGHTSHIFT) -> atset2:89 */\n+  [Q_KEY_CODE_SLASH] = 0x4a, /* qcode:Q_KEY_CODE_SLASH (slash) -> linux:53 (KEY_SLASH) -> atset2:74 */\n+  [Q_KEY_CODE_SLEEP] = 0xe03f, /* qcode:Q_KEY_CODE_SLEEP (sleep) -> linux:142 (KEY_SLEEP) -> atset2:57407 */\n+  [Q_KEY_CODE_SPC] = 0x29, /* qcode:Q_KEY_CODE_SPC (spc) -> linux:57 (KEY_SPACE) -> atset2:41 */\n+  [Q_KEY_CODE_STOP] = 0xe028, /* qcode:Q_KEY_CODE_STOP (stop) -> linux:128 (KEY_STOP) -> atset2:57384 */\n+  [Q_KEY_CODE_SYSRQ] = 0x7f, /* qcode:Q_KEY_CODE_SYSRQ (sysrq) -> linux:99 (KEY_SYSRQ) -> atset2:127 */\n+  [Q_KEY_CODE_T] = 0x2c, /* qcode:Q_KEY_CODE_T (t) -> linux:20 (KEY_T) -> atset2:44 */\n+  [Q_KEY_CODE_TAB] = 0xd, /* qcode:Q_KEY_CODE_TAB (tab) -> linux:15 (KEY_TAB) -> atset2:13 */\n+  [Q_KEY_CODE_U] = 0x3c, /* qcode:Q_KEY_CODE_U (u) -> linux:22 (KEY_U) -> atset2:60 */\n+  [Q_KEY_CODE_UP] = 0xe075, /* qcode:Q_KEY_CODE_UP (up) -> linux:103 (KEY_UP) -> atset2:57461 */\n+  [Q_KEY_CODE_V] = 0x2a, /* qcode:Q_KEY_CODE_V (v) -> linux:47 (KEY_V) -> atset2:42 */\n+  [Q_KEY_CODE_VOLUMEDOWN] = 0xe021, /* qcode:Q_KEY_CODE_VOLUMEDOWN (volumedown) -> linux:114 (KEY_VOLUMEDOWN) -> atset2:57377 */\n+  [Q_KEY_CODE_VOLUMEUP] = 0xe032, /* qcode:Q_KEY_CODE_VOLUMEUP (volumeup) -> linux:115 (KEY_VOLUMEUP) -> atset2:57394 */\n+  [Q_KEY_CODE_W] = 0x1d, /* qcode:Q_KEY_CODE_W (w) -> linux:17 (KEY_W) -> atset2:29 */\n+  [Q_KEY_CODE_WAKE] = 0xe05e, /* qcode:Q_KEY_CODE_WAKE (wake) -> linux:143 (KEY_WAKEUP) -> atset2:57438 */\n+  [Q_KEY_CODE_X] = 0x22, /* qcode:Q_KEY_CODE_X (x) -> linux:45 (KEY_X) -> atset2:34 */\n+  [Q_KEY_CODE_Y] = 0x35, /* qcode:Q_KEY_CODE_Y (y) -> linux:21 (KEY_Y) -> atset2:53 */\n+  [Q_KEY_CODE_YEN] = 0x6a, /* qcode:Q_KEY_CODE_YEN (yen) -> linux:124 (KEY_YEN) -> atset2:106 */\n+  [Q_KEY_CODE_Z] = 0x1a, /* qcode:Q_KEY_CODE_Z (z) -> linux:44 (KEY_Z) -> atset2:26 */\n+};\n+const guint qemu_input_map_qcode_to_atset2_len = sizeof(qemu_input_map_qcode_to_atset2)/sizeof(qemu_input_map_qcode_to_atset2[0]);\ndiff --git a/ui/input-keymap-qcode-to-atset3.c b/ui/input-keymap-qcode-to-atset3.c\nnew file mode 100644\nindex 0000000000..58aaed63a1\n--- /dev/null\n+++ b/ui/input-keymap-qcode-to-atset3.c\n@@ -0,0 +1,138 @@\n+/*\n+ * This file is auto-generated from keymaps.csv on 2017-08-31 11:06\n+ * Database checksum sha256(f8aeff0c3430077a350e3d7ba2b335b381bd929ac4b193413730a402ff3f0097)\n+ * To re-generate, run:\n+ *   keymap-gen --lang=glib2 --varname=qemu_input_map_qcode_to_atset3 code-map keymaps.csv qcode atset3\n+*/\n+const guint16 qemu_input_map_qcode_to_atset3[Q_KEY_CODE__MAX] = {\n+  [Q_KEY_CODE_0] = 0x45, /* qcode:Q_KEY_CODE_0 (0) -> linux:11 (KEY_0) -> atset3:69 */\n+  [Q_KEY_CODE_1] = 0x16, /* qcode:Q_KEY_CODE_1 (1) -> linux:2 (KEY_1) -> atset3:22 */\n+  [Q_KEY_CODE_2] = 0x1e, /* qcode:Q_KEY_CODE_2 (2) -> linux:3 (KEY_2) -> atset3:30 */\n+  [Q_KEY_CODE_3] = 0x26, /* qcode:Q_KEY_CODE_3 (3) -> linux:4 (KEY_3) -> atset3:38 */\n+  [Q_KEY_CODE_4] = 0x25, /* qcode:Q_KEY_CODE_4 (4) -> linux:5 (KEY_4) -> atset3:37 */\n+  [Q_KEY_CODE_5] = 0x2e, /* qcode:Q_KEY_CODE_5 (5) -> linux:6 (KEY_5) -> atset3:46 */\n+  [Q_KEY_CODE_6] = 0x36, /* qcode:Q_KEY_CODE_6 (6) -> linux:7 (KEY_6) -> atset3:54 */\n+  [Q_KEY_CODE_7] = 0x3d, /* qcode:Q_KEY_CODE_7 (7) -> linux:8 (KEY_7) -> atset3:61 */\n+  [Q_KEY_CODE_8] = 0x3e, /* qcode:Q_KEY_CODE_8 (8) -> linux:9 (KEY_8) -> atset3:62 */\n+  [Q_KEY_CODE_9] = 0x46, /* qcode:Q_KEY_CODE_9 (9) -> linux:10 (KEY_9) -> atset3:70 */\n+  [Q_KEY_CODE_A] = 0x1c, /* qcode:Q_KEY_CODE_A (a) -> linux:30 (KEY_A) -> atset3:28 */\n+  [Q_KEY_CODE_AC_HOME] = 0x97, /* qcode:Q_KEY_CODE_AC_HOME (ac_home) -> linux:172 (KEY_HOMEPAGE) -> atset3:151 */\n+  [Q_KEY_CODE_AGAIN] = 0xb, /* qcode:Q_KEY_CODE_AGAIN (again) -> linux:129 (KEY_AGAIN) -> atset3:11 */\n+  [Q_KEY_CODE_ALT] = 0x19, /* qcode:Q_KEY_CODE_ALT (alt) -> linux:56 (KEY_LEFTALT) -> atset3:25 */\n+  [Q_KEY_CODE_ALT_R] = 0x39, /* qcode:Q_KEY_CODE_ALT_R (alt_r) -> linux:100 (KEY_RIGHTALT) -> atset3:57 */\n+  [Q_KEY_CODE_APOSTROPHE] = 0x52, /* qcode:Q_KEY_CODE_APOSTROPHE (apostrophe) -> linux:40 (KEY_APOSTROPHE) -> atset3:82 */\n+  [Q_KEY_CODE_ASTERISK] = 0x7e, /* qcode:Q_KEY_CODE_ASTERISK (kp_multiply) -> linux:55 (KEY_KPASTERISK) -> atset3:126 */\n+  [Q_KEY_CODE_AUDIOMUTE] = 0x9c, /* qcode:Q_KEY_CODE_AUDIOMUTE (audiomute) -> linux:113 (KEY_MUTE) -> atset3:156 */\n+  [Q_KEY_CODE_AUDIONEXT] = 0x93, /* qcode:Q_KEY_CODE_AUDIONEXT (audionext) -> linux:163 (KEY_NEXTSONG) -> atset3:147 */\n+  [Q_KEY_CODE_AUDIOPREV] = 0x94, /* qcode:Q_KEY_CODE_AUDIOPREV (audioprev) -> linux:165 (KEY_PREVIOUSSONG) -> atset3:148 */\n+  [Q_KEY_CODE_AUDIOSTOP] = 0x98, /* qcode:Q_KEY_CODE_AUDIOSTOP (audiostop) -> linux:166 (KEY_STOPCD) -> atset3:152 */\n+  [Q_KEY_CODE_B] = 0x32, /* qcode:Q_KEY_CODE_B (b) -> linux:48 (KEY_B) -> atset3:50 */\n+  [Q_KEY_CODE_BACKSLASH] = 0x5c, /* qcode:Q_KEY_CODE_BACKSLASH (backslash) -> linux:43 (KEY_BACKSLASH) -> atset3:92 */\n+  [Q_KEY_CODE_BACKSPACE] = 0x66, /* qcode:Q_KEY_CODE_BACKSPACE (backspace) -> linux:14 (KEY_BACKSPACE) -> atset3:102 */\n+  [Q_KEY_CODE_BRACKET_LEFT] = 0x54, /* qcode:Q_KEY_CODE_BRACKET_LEFT (bracket_left) -> linux:26 (KEY_LEFTBRACE) -> atset3:84 */\n+  [Q_KEY_CODE_BRACKET_RIGHT] = 0x5b, /* qcode:Q_KEY_CODE_BRACKET_RIGHT (bracket_right) -> linux:27 (KEY_RIGHTBRACE) -> atset3:91 */\n+  [Q_KEY_CODE_C] = 0x21, /* qcode:Q_KEY_CODE_C (c) -> linux:46 (KEY_C) -> atset3:33 */\n+  [Q_KEY_CODE_CALCULATOR] = 0xa3, /* qcode:Q_KEY_CODE_CALCULATOR (calculator) -> linux:140 (KEY_CALC) -> atset3:163 */\n+  [Q_KEY_CODE_CAPS_LOCK] = 0x14, /* qcode:Q_KEY_CODE_CAPS_LOCK (caps_lock) -> linux:58 (KEY_CAPSLOCK) -> atset3:20 */\n+  [Q_KEY_CODE_COMMA] = 0x41, /* qcode:Q_KEY_CODE_COMMA (comma) -> linux:51 (KEY_COMMA) -> atset3:65 */\n+  [Q_KEY_CODE_COMPOSE] = 0x8d, /* qcode:Q_KEY_CODE_COMPOSE (compose) -> linux:127 (KEY_COMPOSE) -> atset3:141 */\n+  [Q_KEY_CODE_COPY] = 0x18, /* qcode:Q_KEY_CODE_COPY (copy) -> linux:133 (KEY_COPY) -> atset3:24 */\n+  [Q_KEY_CODE_CTRL] = 0x11, /* qcode:Q_KEY_CODE_CTRL (ctrl) -> linux:29 (KEY_LEFTCTRL) -> atset3:17 */\n+  [Q_KEY_CODE_CTRL_R] = 0x58, /* qcode:Q_KEY_CODE_CTRL_R (ctrl_r) -> linux:97 (KEY_RIGHTCTRL) -> atset3:88 */\n+  [Q_KEY_CODE_CUT] = 0x38, /* qcode:Q_KEY_CODE_CUT (cut) -> linux:137 (KEY_CUT) -> atset3:56 */\n+  [Q_KEY_CODE_D] = 0x23, /* qcode:Q_KEY_CODE_D (d) -> linux:32 (KEY_D) -> atset3:35 */\n+  [Q_KEY_CODE_DELETE] = 0x64, /* qcode:Q_KEY_CODE_DELETE (delete) -> linux:111 (KEY_DELETE) -> atset3:100 */\n+  [Q_KEY_CODE_DOT] = 0x49, /* qcode:Q_KEY_CODE_DOT (dot) -> linux:52 (KEY_DOT) -> atset3:73 */\n+  [Q_KEY_CODE_DOWN] = 0x60, /* qcode:Q_KEY_CODE_DOWN (down) -> linux:108 (KEY_DOWN) -> atset3:96 */\n+  [Q_KEY_CODE_E] = 0x24, /* qcode:Q_KEY_CODE_E (e) -> linux:18 (KEY_E) -> atset3:36 */\n+  [Q_KEY_CODE_END] = 0x65, /* qcode:Q_KEY_CODE_END (end) -> linux:107 (KEY_END) -> atset3:101 */\n+  [Q_KEY_CODE_EQUAL] = 0x55, /* qcode:Q_KEY_CODE_EQUAL (equal) -> linux:13 (KEY_EQUAL) -> atset3:85 */\n+  [Q_KEY_CODE_ESC] = 0x8, /* qcode:Q_KEY_CODE_ESC (esc) -> linux:1 (KEY_ESC) -> atset3:8 */\n+  [Q_KEY_CODE_F] = 0x2b, /* qcode:Q_KEY_CODE_F (f) -> linux:33 (KEY_F) -> atset3:43 */\n+  [Q_KEY_CODE_F1] = 0x7, /* qcode:Q_KEY_CODE_F1 (f1) -> linux:59 (KEY_F1) -> atset3:7 */\n+  [Q_KEY_CODE_F10] = 0x4f, /* qcode:Q_KEY_CODE_F10 (f10) -> linux:68 (KEY_F10) -> atset3:79 */\n+  [Q_KEY_CODE_F11] = 0x56, /* qcode:Q_KEY_CODE_F11 (f11) -> linux:87 (KEY_F11) -> atset3:86 */\n+  [Q_KEY_CODE_F12] = 0x5e, /* qcode:Q_KEY_CODE_F12 (f12) -> linux:88 (KEY_F12) -> atset3:94 */\n+  [Q_KEY_CODE_F2] = 0xf, /* qcode:Q_KEY_CODE_F2 (f2) -> linux:60 (KEY_F2) -> atset3:15 */\n+  [Q_KEY_CODE_F3] = 0x17, /* qcode:Q_KEY_CODE_F3 (f3) -> linux:61 (KEY_F3) -> atset3:23 */\n+  [Q_KEY_CODE_F4] = 0x1f, /* qcode:Q_KEY_CODE_F4 (f4) -> linux:62 (KEY_F4) -> atset3:31 */\n+  [Q_KEY_CODE_F5] = 0x27, /* qcode:Q_KEY_CODE_F5 (f5) -> linux:63 (KEY_F5) -> atset3:39 */\n+  [Q_KEY_CODE_F6] = 0x2f, /* qcode:Q_KEY_CODE_F6 (f6) -> linux:64 (KEY_F6) -> atset3:47 */\n+  [Q_KEY_CODE_F7] = 0x37, /* qcode:Q_KEY_CODE_F7 (f7) -> linux:65 (KEY_F7) -> atset3:55 */\n+  [Q_KEY_CODE_F8] = 0x3f, /* qcode:Q_KEY_CODE_F8 (f8) -> linux:66 (KEY_F8) -> atset3:63 */\n+  [Q_KEY_CODE_F9] = 0x47, /* qcode:Q_KEY_CODE_F9 (f9) -> linux:67 (KEY_F9) -> atset3:71 */\n+  [Q_KEY_CODE_FIND] = 0x30, /* qcode:Q_KEY_CODE_FIND (find) -> linux:136 (KEY_FIND) -> atset3:48 */\n+  [Q_KEY_CODE_G] = 0x34, /* qcode:Q_KEY_CODE_G (g) -> linux:34 (KEY_G) -> atset3:52 */\n+  [Q_KEY_CODE_GRAVE_ACCENT] = 0xe, /* qcode:Q_KEY_CODE_GRAVE_ACCENT (grave_accent) -> linux:41 (KEY_GRAVE) -> atset3:14 */\n+  [Q_KEY_CODE_H] = 0x33, /* qcode:Q_KEY_CODE_H (h) -> linux:35 (KEY_H) -> atset3:51 */\n+  [Q_KEY_CODE_HELP] = 0x9, /* qcode:Q_KEY_CODE_HELP (help) -> linux:138 (KEY_HELP) -> atset3:9 */\n+  [Q_KEY_CODE_HENKAN] = 0x86, /* qcode:Q_KEY_CODE_HENKAN (henkan) -> linux:92 (KEY_HENKAN) -> atset3:134 */\n+  [Q_KEY_CODE_HIRAGANA] = 0x87, /* qcode:Q_KEY_CODE_HIRAGANA (hiragana) -> linux:91 (KEY_HIRAGANA) -> atset3:135 */\n+  [Q_KEY_CODE_HOME] = 0x6e, /* qcode:Q_KEY_CODE_HOME (home) -> linux:102 (KEY_HOME) -> atset3:110 */\n+  [Q_KEY_CODE_I] = 0x43, /* qcode:Q_KEY_CODE_I (i) -> linux:23 (KEY_I) -> atset3:67 */\n+  [Q_KEY_CODE_INSERT] = 0x67, /* qcode:Q_KEY_CODE_INSERT (insert) -> linux:110 (KEY_INSERT) -> atset3:103 */\n+  [Q_KEY_CODE_J] = 0x3b, /* qcode:Q_KEY_CODE_J (j) -> linux:36 (KEY_J) -> atset3:59 */\n+  [Q_KEY_CODE_K] = 0x42, /* qcode:Q_KEY_CODE_K (k) -> linux:37 (KEY_K) -> atset3:66 */\n+  [Q_KEY_CODE_KP_0] = 0x70, /* qcode:Q_KEY_CODE_KP_0 (kp_0) -> linux:82 (KEY_KP0) -> atset3:112 */\n+  [Q_KEY_CODE_KP_1] = 0x69, /* qcode:Q_KEY_CODE_KP_1 (kp_1) -> linux:79 (KEY_KP1) -> atset3:105 */\n+  [Q_KEY_CODE_KP_2] = 0x72, /* qcode:Q_KEY_CODE_KP_2 (kp_2) -> linux:80 (KEY_KP2) -> atset3:114 */\n+  [Q_KEY_CODE_KP_3] = 0x7a, /* qcode:Q_KEY_CODE_KP_3 (kp_3) -> linux:81 (KEY_KP3) -> atset3:122 */\n+  [Q_KEY_CODE_KP_4] = 0x6b, /* qcode:Q_KEY_CODE_KP_4 (kp_4) -> linux:75 (KEY_KP4) -> atset3:107 */\n+  [Q_KEY_CODE_KP_5] = 0x73, /* qcode:Q_KEY_CODE_KP_5 (kp_5) -> linux:76 (KEY_KP5) -> atset3:115 */\n+  [Q_KEY_CODE_KP_6] = 0x74, /* qcode:Q_KEY_CODE_KP_6 (kp_6) -> linux:77 (KEY_KP6) -> atset3:116 */\n+  [Q_KEY_CODE_KP_7] = 0x6c, /* qcode:Q_KEY_CODE_KP_7 (kp_7) -> linux:71 (KEY_KP7) -> atset3:108 */\n+  [Q_KEY_CODE_KP_8] = 0x75, /* qcode:Q_KEY_CODE_KP_8 (kp_8) -> linux:72 (KEY_KP8) -> atset3:117 */\n+  [Q_KEY_CODE_KP_9] = 0x7d, /* qcode:Q_KEY_CODE_KP_9 (kp_9) -> linux:73 (KEY_KP9) -> atset3:125 */\n+  [Q_KEY_CODE_KP_ADD] = 0x7c, /* qcode:Q_KEY_CODE_KP_ADD (kp_add) -> linux:78 (KEY_KPPLUS) -> atset3:124 */\n+  [Q_KEY_CODE_KP_DECIMAL] = 0x71, /* qcode:Q_KEY_CODE_KP_DECIMAL (kp_decimal) -> linux:83 (KEY_KPDOT) -> atset3:113 */\n+  [Q_KEY_CODE_KP_DIVIDE] = 0x4a, /* qcode:Q_KEY_CODE_KP_DIVIDE (kp_divide) -> linux:98 (KEY_KPSLASH) -> atset3:74 */\n+  [Q_KEY_CODE_KP_ENTER] = 0x79, /* qcode:Q_KEY_CODE_KP_ENTER (kp_enter) -> linux:96 (KEY_KPENTER) -> atset3:121 */\n+  [Q_KEY_CODE_KP_MULTIPLY] = 0x7e, /* qcode:Q_KEY_CODE_KP_MULTIPLY (kp_multiply) -> linux:55 (KEY_KPASTERISK) -> atset3:126 */\n+  [Q_KEY_CODE_KP_SUBTRACT] = 0x4e, /* qcode:Q_KEY_CODE_KP_SUBTRACT (kp_subtract) -> linux:74 (KEY_KPMINUS) -> atset3:78 */\n+  [Q_KEY_CODE_L] = 0x4b, /* qcode:Q_KEY_CODE_L (l) -> linux:38 (KEY_L) -> atset3:75 */\n+  [Q_KEY_CODE_LEFT] = 0x61, /* qcode:Q_KEY_CODE_LEFT (left) -> linux:105 (KEY_LEFT) -> atset3:97 */\n+  [Q_KEY_CODE_LESS] = 0x13, /* qcode:Q_KEY_CODE_LESS (less) -> linux:86 (KEY_102ND) -> atset3:19 */\n+  [Q_KEY_CODE_M] = 0x3a, /* qcode:Q_KEY_CODE_M (m) -> linux:50 (KEY_M) -> atset3:58 */\n+  [Q_KEY_CODE_MENU] = 0x91, /* qcode:Q_KEY_CODE_MENU (menu) -> linux:139 (KEY_MENU) -> atset3:145 */\n+  [Q_KEY_CODE_META_L] = 0x8b, /* qcode:Q_KEY_CODE_META_L (meta_l) -> linux:125 (KEY_LEFTMETA) -> atset3:139 */\n+  [Q_KEY_CODE_META_R] = 0x8c, /* qcode:Q_KEY_CODE_META_R (meta_r) -> linux:126 (KEY_RIGHTMETA) -> atset3:140 */\n+  [Q_KEY_CODE_MINUS] = 0x4e, /* qcode:Q_KEY_CODE_MINUS (minus) -> linux:12 (KEY_MINUS) -> atset3:78 */\n+  [Q_KEY_CODE_N] = 0x31, /* qcode:Q_KEY_CODE_N (n) -> linux:49 (KEY_N) -> atset3:49 */\n+  [Q_KEY_CODE_NUM_LOCK] = 0x76, /* qcode:Q_KEY_CODE_NUM_LOCK (num_lock) -> linux:69 (KEY_NUMLOCK) -> atset3:118 */\n+  [Q_KEY_CODE_O] = 0x44, /* qcode:Q_KEY_CODE_O (o) -> linux:24 (KEY_O) -> atset3:68 */\n+  [Q_KEY_CODE_OPEN] = 0x20, /* qcode:Q_KEY_CODE_OPEN (open) -> linux:134 (KEY_OPEN) -> atset3:32 */\n+  [Q_KEY_CODE_P] = 0x4d, /* qcode:Q_KEY_CODE_P (p) -> linux:25 (KEY_P) -> atset3:77 */\n+  [Q_KEY_CODE_PASTE] = 0x28, /* qcode:Q_KEY_CODE_PASTE (paste) -> linux:135 (KEY_PASTE) -> atset3:40 */\n+  [Q_KEY_CODE_PAUSE] = 0x62, /* qcode:Q_KEY_CODE_PAUSE (pause) -> linux:119 (KEY_PAUSE) -> atset3:98 */\n+  [Q_KEY_CODE_PGDN] = 0x6d, /* qcode:Q_KEY_CODE_PGDN (pgdn) -> linux:109 (KEY_PAGEDOWN) -> atset3:109 */\n+  [Q_KEY_CODE_PGUP] = 0x6f, /* qcode:Q_KEY_CODE_PGUP (pgup) -> linux:104 (KEY_PAGEUP) -> atset3:111 */\n+  [Q_KEY_CODE_PRINT] = 0x57, /* qcode:Q_KEY_CODE_PRINT (sysrq) -> linux:99 (KEY_SYSRQ) -> atset3:87 */\n+  [Q_KEY_CODE_PROPS] = 0xc, /* qcode:Q_KEY_CODE_PROPS (props) -> linux:130 (KEY_PROPS) -> atset3:12 */\n+  [Q_KEY_CODE_Q] = 0x15, /* qcode:Q_KEY_CODE_Q (q) -> linux:16 (KEY_Q) -> atset3:21 */\n+  [Q_KEY_CODE_R] = 0x2d, /* qcode:Q_KEY_CODE_R (r) -> linux:19 (KEY_R) -> atset3:45 */\n+  [Q_KEY_CODE_RET] = 0x5a, /* qcode:Q_KEY_CODE_RET (ret) -> linux:28 (KEY_ENTER) -> atset3:90 */\n+  [Q_KEY_CODE_RIGHT] = 0x6a, /* qcode:Q_KEY_CODE_RIGHT (right) -> linux:106 (KEY_RIGHT) -> atset3:106 */\n+  [Q_KEY_CODE_S] = 0x1b, /* qcode:Q_KEY_CODE_S (s) -> linux:31 (KEY_S) -> atset3:27 */\n+  [Q_KEY_CODE_SCROLL_LOCK] = 0x5f, /* qcode:Q_KEY_CODE_SCROLL_LOCK (scroll_lock) -> linux:70 (KEY_SCROLLLOCK) -> atset3:95 */\n+  [Q_KEY_CODE_SEMICOLON] = 0x4c, /* qcode:Q_KEY_CODE_SEMICOLON (semicolon) -> linux:39 (KEY_SEMICOLON) -> atset3:76 */\n+  [Q_KEY_CODE_SHIFT] = 0x12, /* qcode:Q_KEY_CODE_SHIFT (shift) -> linux:42 (KEY_LEFTSHIFT) -> atset3:18 */\n+  [Q_KEY_CODE_SHIFT_R] = 0x59, /* qcode:Q_KEY_CODE_SHIFT_R (shift_r) -> linux:54 (KEY_RIGHTSHIFT) -> atset3:89 */\n+  [Q_KEY_CODE_SLASH] = 0x4a, /* qcode:Q_KEY_CODE_SLASH (slash) -> linux:53 (KEY_SLASH) -> atset3:74 */\n+  [Q_KEY_CODE_SPC] = 0x29, /* qcode:Q_KEY_CODE_SPC (spc) -> linux:57 (KEY_SPACE) -> atset3:41 */\n+  [Q_KEY_CODE_STOP] = 0xa, /* qcode:Q_KEY_CODE_STOP (stop) -> linux:128 (KEY_STOP) -> atset3:10 */\n+  [Q_KEY_CODE_SYSRQ] = 0x57, /* qcode:Q_KEY_CODE_SYSRQ (sysrq) -> linux:99 (KEY_SYSRQ) -> atset3:87 */\n+  [Q_KEY_CODE_T] = 0x2c, /* qcode:Q_KEY_CODE_T (t) -> linux:20 (KEY_T) -> atset3:44 */\n+  [Q_KEY_CODE_TAB] = 0xd, /* qcode:Q_KEY_CODE_TAB (tab) -> linux:15 (KEY_TAB) -> atset3:13 */\n+  [Q_KEY_CODE_U] = 0x3c, /* qcode:Q_KEY_CODE_U (u) -> linux:22 (KEY_U) -> atset3:60 */\n+  [Q_KEY_CODE_UNDO] = 0x10, /* qcode:Q_KEY_CODE_UNDO (undo) -> linux:131 (KEY_UNDO) -> atset3:16 */\n+  [Q_KEY_CODE_UP] = 0x63, /* qcode:Q_KEY_CODE_UP (up) -> linux:103 (KEY_UP) -> atset3:99 */\n+  [Q_KEY_CODE_V] = 0x2a, /* qcode:Q_KEY_CODE_V (v) -> linux:47 (KEY_V) -> atset3:42 */\n+  [Q_KEY_CODE_VOLUMEDOWN] = 0x9d, /* qcode:Q_KEY_CODE_VOLUMEDOWN (volumedown) -> linux:114 (KEY_VOLUMEDOWN) -> atset3:157 */\n+  [Q_KEY_CODE_VOLUMEUP] = 0x95, /* qcode:Q_KEY_CODE_VOLUMEUP (volumeup) -> linux:115 (KEY_VOLUMEUP) -> atset3:149 */\n+  [Q_KEY_CODE_W] = 0x1d, /* qcode:Q_KEY_CODE_W (w) -> linux:17 (KEY_W) -> atset3:29 */\n+  [Q_KEY_CODE_X] = 0x22, /* qcode:Q_KEY_CODE_X (x) -> linux:45 (KEY_X) -> atset3:34 */\n+  [Q_KEY_CODE_Y] = 0x35, /* qcode:Q_KEY_CODE_Y (y) -> linux:21 (KEY_Y) -> atset3:53 */\n+  [Q_KEY_CODE_YEN] = 0x5d, /* qcode:Q_KEY_CODE_YEN (yen) -> linux:124 (KEY_YEN) -> atset3:93 */\n+  [Q_KEY_CODE_Z] = 0x1a, /* qcode:Q_KEY_CODE_Z (z) -> linux:44 (KEY_Z) -> atset3:26 */\n+};\n+const guint qemu_input_map_qcode_to_atset3_len = sizeof(qemu_input_map_qcode_to_atset3)/sizeof(qemu_input_map_qcode_to_atset3[0]);\ndiff --git a/ui/input-keymap.c b/ui/input-keymap.c\nindex 6e543d651f..d90f6a16f7 100644\n--- a/ui/input-keymap.c\n+++ b/ui/input-keymap.c\n@@ -6,6 +6,9 @@\n #include \"standard-headers/linux/input.h\"\n \n #include \"ui/input-keymap-linux-to-qcode.c\"\n+#include \"ui/input-keymap-qcode-to-atset1.c\"\n+#include \"ui/input-keymap-qcode-to-atset2.c\"\n+#include \"ui/input-keymap-qcode-to-atset3.c\"\n #include \"ui/input-keymap-qcode-to-linux.c\"\n #include \"ui/input-keymap-qcode-to-qnum.c\"\n #include \"ui/input-keymap-qnum-to-qcode.c\"\n",
    "prefixes": [
        "v5",
        "06/12"
    ]
}