[vfio-users] [PATCH v2 1/3] input: add qemu_input_qcode_to_linux + qemu_input_linux_to_qcode
Jonathan Scruggs
j.scruggs at gmail.com
Tue Dec 22 22:03:19 UTC 2015
Hi,
I tried these patches with qemu 2.5.0 on Gentoo and libvirt. I get the
following error:
Error starting domain: internal error: early end of file from monitor:
possible problem:
2015-12-22T21:51:20.659520Z qemu-system-x86_64: -input-linux
/dev/input/by-path/pci-0000:00:14.0-usb-0:12:1.0-event-kbd,grab-all=on:
Could not open '/dev/input/by-path/pci-0000:00:14.0-usb-0:12:1.0-event-kbd'
The way I pass it is with this:
<qemu:commandline>
<qemu:arg value='-input-linux'/>
<qemu:arg
value='/dev/input/by-path/pci-0000:00:14.0-usb-0:12:1.0-event-kbd,grab-all=on'/>
<qemu:arg value='-input-linux'/>
<qemu:arg
value='/dev/input/by-path/pci-0000:00:14.0-usb-0:12:1.1-event-mouse'/>
<qemu:arg value='-input-linux'/>
<qemu:arg
value='/dev/input/by-path/pci-0000:00:14.0-usb-0:12:1.2-event-joystick'/>
</qemu:commandline>
Is there a way around this error?
Thanks,
Jon
On 14 December 2015 at 14:18, Gerd Hoffmann <kraxel at redhat.com> wrote:
> Signed-off-by: Gerd Hoffmann <kraxel at redhat.com>
> ---
> include/ui/input.h | 3 ++
> ui/input-keymap.c | 145
> +++++++++++++++++++++++++++++++++++++++++++++++++++++
> 2 files changed, 148 insertions(+)
>
> diff --git a/include/ui/input.h b/include/ui/input.h
> index d06a12d..d7afd80 100644
> --- a/include/ui/input.h
> +++ b/include/ui/input.h
> @@ -48,6 +48,9 @@ int qemu_input_key_value_to_qcode(const KeyValue *value);
> int qemu_input_key_value_to_scancode(const KeyValue *value, bool down,
> int *codes);
>
> +int qemu_input_qcode_to_linux(unsigned int qcode);
> +int qemu_input_linux_to_qcode(unsigned int lnx);
> +
> InputEvent *qemu_input_event_new_btn(InputButton btn, bool down);
> void qemu_input_queue_btn(QemuConsole *src, InputButton btn, bool down);
> void qemu_input_update_buttons(QemuConsole *src, uint32_t *button_map,
> diff --git a/ui/input-keymap.c b/ui/input-keymap.c
> index d36be4b..31f4daa 100644
> --- a/ui/input-keymap.c
> +++ b/ui/input-keymap.c
> @@ -2,6 +2,126 @@
> #include "ui/keymaps.h"
> #include "ui/input.h"
>
> +#include "standard-headers/linux/input.h"
> +
> +/* FIXME: duplicate, see hw/input/virtio-input-hid.c */
> +static const unsigned int qcode_to_linux[Q_KEY_CODE_MAX] = {
> + [Q_KEY_CODE_ESC] = KEY_ESC,
> + [Q_KEY_CODE_1] = KEY_1,
> + [Q_KEY_CODE_2] = KEY_2,
> + [Q_KEY_CODE_3] = KEY_3,
> + [Q_KEY_CODE_4] = KEY_4,
> + [Q_KEY_CODE_5] = KEY_5,
> + [Q_KEY_CODE_6] = KEY_6,
> + [Q_KEY_CODE_7] = KEY_7,
> + [Q_KEY_CODE_8] = KEY_8,
> + [Q_KEY_CODE_9] = KEY_9,
> + [Q_KEY_CODE_0] = KEY_0,
> + [Q_KEY_CODE_MINUS] = KEY_MINUS,
> + [Q_KEY_CODE_EQUAL] = KEY_EQUAL,
> + [Q_KEY_CODE_BACKSPACE] = KEY_BACKSPACE,
> +
> + [Q_KEY_CODE_TAB] = KEY_TAB,
> + [Q_KEY_CODE_Q] = KEY_Q,
> + [Q_KEY_CODE_W] = KEY_W,
> + [Q_KEY_CODE_E] = KEY_E,
> + [Q_KEY_CODE_R] = KEY_R,
> + [Q_KEY_CODE_T] = KEY_T,
> + [Q_KEY_CODE_Y] = KEY_Y,
> + [Q_KEY_CODE_U] = KEY_U,
> + [Q_KEY_CODE_I] = KEY_I,
> + [Q_KEY_CODE_O] = KEY_O,
> + [Q_KEY_CODE_P] = KEY_P,
> + [Q_KEY_CODE_BRACKET_LEFT] = KEY_LEFTBRACE,
> + [Q_KEY_CODE_BRACKET_RIGHT] = KEY_RIGHTBRACE,
> + [Q_KEY_CODE_RET] = KEY_ENTER,
> +
> + [Q_KEY_CODE_CTRL] = KEY_LEFTCTRL,
> + [Q_KEY_CODE_A] = KEY_A,
> + [Q_KEY_CODE_S] = KEY_S,
> + [Q_KEY_CODE_D] = KEY_D,
> + [Q_KEY_CODE_F] = KEY_F,
> + [Q_KEY_CODE_G] = KEY_G,
> + [Q_KEY_CODE_H] = KEY_H,
> + [Q_KEY_CODE_J] = KEY_J,
> + [Q_KEY_CODE_K] = KEY_K,
> + [Q_KEY_CODE_L] = KEY_L,
> + [Q_KEY_CODE_SEMICOLON] = KEY_SEMICOLON,
> + [Q_KEY_CODE_APOSTROPHE] = KEY_APOSTROPHE,
> + [Q_KEY_CODE_GRAVE_ACCENT] = KEY_GRAVE,
> +
> + [Q_KEY_CODE_SHIFT] = KEY_LEFTSHIFT,
> + [Q_KEY_CODE_BACKSLASH] = KEY_BACKSLASH,
> + [Q_KEY_CODE_LESS] = KEY_102ND,
> + [Q_KEY_CODE_Z] = KEY_Z,
> + [Q_KEY_CODE_X] = KEY_X,
> + [Q_KEY_CODE_C] = KEY_C,
> + [Q_KEY_CODE_V] = KEY_V,
> + [Q_KEY_CODE_B] = KEY_B,
> + [Q_KEY_CODE_N] = KEY_N,
> + [Q_KEY_CODE_M] = KEY_M,
> + [Q_KEY_CODE_COMMA] = KEY_COMMA,
> + [Q_KEY_CODE_DOT] = KEY_DOT,
> + [Q_KEY_CODE_SLASH] = KEY_SLASH,
> + [Q_KEY_CODE_SHIFT_R] = KEY_RIGHTSHIFT,
> +
> + [Q_KEY_CODE_ALT] = KEY_LEFTALT,
> + [Q_KEY_CODE_SPC] = KEY_SPACE,
> + [Q_KEY_CODE_CAPS_LOCK] = KEY_CAPSLOCK,
> +
> + [Q_KEY_CODE_F1] = KEY_F1,
> + [Q_KEY_CODE_F2] = KEY_F2,
> + [Q_KEY_CODE_F3] = KEY_F3,
> + [Q_KEY_CODE_F4] = KEY_F4,
> + [Q_KEY_CODE_F5] = KEY_F5,
> + [Q_KEY_CODE_F6] = KEY_F6,
> + [Q_KEY_CODE_F7] = KEY_F7,
> + [Q_KEY_CODE_F8] = KEY_F8,
> + [Q_KEY_CODE_F9] = KEY_F9,
> + [Q_KEY_CODE_F10] = KEY_F10,
> + [Q_KEY_CODE_NUM_LOCK] = KEY_NUMLOCK,
> + [Q_KEY_CODE_SCROLL_LOCK] = KEY_SCROLLLOCK,
> +
> + [Q_KEY_CODE_KP_0] = KEY_KP0,
> + [Q_KEY_CODE_KP_1] = KEY_KP1,
> + [Q_KEY_CODE_KP_2] = KEY_KP2,
> + [Q_KEY_CODE_KP_3] = KEY_KP3,
> + [Q_KEY_CODE_KP_4] = KEY_KP4,
> + [Q_KEY_CODE_KP_5] = KEY_KP5,
> + [Q_KEY_CODE_KP_6] = KEY_KP6,
> + [Q_KEY_CODE_KP_7] = KEY_KP7,
> + [Q_KEY_CODE_KP_8] = KEY_KP8,
> + [Q_KEY_CODE_KP_9] = KEY_KP9,
> + [Q_KEY_CODE_KP_SUBTRACT] = KEY_KPMINUS,
> + [Q_KEY_CODE_KP_ADD] = KEY_KPPLUS,
> + [Q_KEY_CODE_KP_DECIMAL] = KEY_KPDOT,
> + [Q_KEY_CODE_KP_ENTER] = KEY_KPENTER,
> + [Q_KEY_CODE_KP_DIVIDE] = KEY_KPSLASH,
> + [Q_KEY_CODE_KP_MULTIPLY] = KEY_KPASTERISK,
> +
> + [Q_KEY_CODE_F11] = KEY_F11,
> + [Q_KEY_CODE_F12] = KEY_F12,
> +
> + [Q_KEY_CODE_CTRL_R] = KEY_RIGHTCTRL,
> + [Q_KEY_CODE_SYSRQ] = KEY_SYSRQ,
> + [Q_KEY_CODE_ALT_R] = KEY_RIGHTALT,
> +
> + [Q_KEY_CODE_HOME] = KEY_HOME,
> + [Q_KEY_CODE_UP] = KEY_UP,
> + [Q_KEY_CODE_PGUP] = KEY_PAGEUP,
> + [Q_KEY_CODE_LEFT] = KEY_LEFT,
> + [Q_KEY_CODE_RIGHT] = KEY_RIGHT,
> + [Q_KEY_CODE_END] = KEY_END,
> + [Q_KEY_CODE_DOWN] = KEY_DOWN,
> + [Q_KEY_CODE_PGDN] = KEY_PAGEDOWN,
> + [Q_KEY_CODE_INSERT] = KEY_INSERT,
> + [Q_KEY_CODE_DELETE] = KEY_DELETE,
> +
> + [Q_KEY_CODE_META_L] = KEY_LEFTMETA,
> + [Q_KEY_CODE_META_R] = KEY_RIGHTMETA,
> + [Q_KEY_CODE_MENU] = KEY_MENU,
> +};
> +
> static const int qcode_to_number[] = {
> [Q_KEY_CODE_SHIFT] = 0x2a,
> [Q_KEY_CODE_SHIFT_R] = 0x36,
> @@ -136,6 +256,7 @@ static const int qcode_to_number[] = {
> };
>
> static int number_to_qcode[0x100];
> +static int linux_to_qcode[KEY_CNT];
>
> int qemu_input_key_value_to_number(const KeyValue *value)
> {
> @@ -200,3 +321,27 @@ int qemu_input_key_value_to_scancode(const KeyValue
> *value, bool down,
>
> return count;
> }
> +
> +int qemu_input_qcode_to_linux(unsigned int qcode)
> +{
> + assert(qcode < Q_KEY_CODE_MAX);
> + return qcode_to_linux[qcode];
> +}
> +
> +int qemu_input_linux_to_qcode(unsigned int lnx)
> +{
> + static int first = true;
> +
> + if (first) {
> + int qcode, number;
> + first = false;
> + for (qcode = 0; qcode < Q_KEY_CODE_MAX; qcode++) {
> + number = qcode_to_linux[qcode];
> + assert(number < KEY_CNT);
> + linux_to_qcode[number] = qcode;
> + }
> + }
> +
> + assert(lnx < KEY_CNT);
> + return linux_to_qcode[lnx];
> +}
> --
> 1.8.3.1
>
> _______________________________________________
> vfio-users mailing list
> vfio-users at redhat.com
> https://www.redhat.com/mailman/listinfo/vfio-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/vfio-users/attachments/20151222/34ea1647/attachment.htm>
More information about the vfio-users
mailing list