qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Anthony Liguori <anthony@codemonkey.ws>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH] move kbd/mouse handling to input.c
Date: Wed, 13 Jan 2010 17:27:49 -0600	[thread overview]
Message-ID: <4B4E56F5.7010409@codemonkey.ws> (raw)
In-Reply-To: <1263387934-14394-1-git-send-email-pbonzini@redhat.com>

On 01/13/2010 07:05 AM, Paolo Bonzini wrote:
> Move 200 lines out of vl.c already into common code that only needs to
> be compiled once.
>
> Signed-off-by: Paolo Bonzini<pbonzini@redhat.com>
>    

Applied.  Thanks.

Regards,

Anthony Liguori
> ---
>   Makefile.objs |    2 +-
>   input.c       |  238 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>   vl.c          |  214 +--------------------------------------------------
>   3 files changed, 241 insertions(+), 213 deletions(-)
>   create mode 100644 input.c
>
> diff --git a/Makefile.objs b/Makefile.objs
> index e8a44d7..5802d39 100644
> --- a/Makefile.objs
> +++ b/Makefile.objs
> @@ -47,7 +47,7 @@ common-obj-y += $(qobject-obj-y)
>   common-obj-y += readline.o console.o
>
>   common-obj-y += tcg-runtime.o host-utils.o
> -common-obj-y += irq.o ioport.o
> +common-obj-y += irq.o ioport.o input.o
>   common-obj-$(CONFIG_PTIMER) += ptimer.o
>   common-obj-$(CONFIG_MAX7310) += max7310.o
>   common-obj-$(CONFIG_WM8750) += wm8750.o
> diff --git a/input.c b/input.c
> new file mode 100644
> index 0000000..955b9ab
> --- /dev/null
> +++ b/input.c
> @@ -0,0 +1,238 @@
> +/*
> + * QEMU System Emulator
> + *
> + * Copyright (c) 2003-2008 Fabrice Bellard
> + *
> + * Permission is hereby granted, free of charge, to any person obtaining a copy
> + * of this software and associated documentation files (the "Software"), to deal
> + * in the Software without restriction, including without limitation the rights
> + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
> + * copies of the Software, and to permit persons to whom the Software is
> + * furnished to do so, subject to the following conditions:
> + *
> + * The above copyright notice and this permission notice shall be included in
> + * all copies or substantial portions of the Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
> + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
> + * THE SOFTWARE.
> + */
> +
> +#include "sysemu.h"
> +#include "net.h"
> +#include "monitor.h"
> +#include "console.h"
> +#include "qjson.h"
> +
> +
> +static QEMUPutKBDEvent *qemu_put_kbd_event;
> +static void *qemu_put_kbd_event_opaque;
> +static QEMUPutMouseEntry *qemu_put_mouse_event_head;
> +static QEMUPutMouseEntry *qemu_put_mouse_event_current;
> +
> +void qemu_add_kbd_event_handler(QEMUPutKBDEvent *func, void *opaque)
> +{
> +    qemu_put_kbd_event_opaque = opaque;
> +    qemu_put_kbd_event = func;
> +}
> +
> +QEMUPutMouseEntry *qemu_add_mouse_event_handler(QEMUPutMouseEvent *func,
> +                                                void *opaque, int absolute,
> +                                                const char *name)
> +{
> +    QEMUPutMouseEntry *s, *cursor;
> +
> +    s = qemu_mallocz(sizeof(QEMUPutMouseEntry));
> +
> +    s->qemu_put_mouse_event = func;
> +    s->qemu_put_mouse_event_opaque = opaque;
> +    s->qemu_put_mouse_event_absolute = absolute;
> +    s->qemu_put_mouse_event_name = qemu_strdup(name);
> +    s->next = NULL;
> +
> +    if (!qemu_put_mouse_event_head) {
> +        qemu_put_mouse_event_head = qemu_put_mouse_event_current = s;
> +        return s;
> +    }
> +
> +    cursor = qemu_put_mouse_event_head;
> +    while (cursor->next != NULL)
> +        cursor = cursor->next;
> +
> +    cursor->next = s;
> +    qemu_put_mouse_event_current = s;
> +
> +    return s;
> +}
> +
> +void qemu_remove_mouse_event_handler(QEMUPutMouseEntry *entry)
> +{
> +    QEMUPutMouseEntry *prev = NULL, *cursor;
> +
> +    if (!qemu_put_mouse_event_head || entry == NULL)
> +        return;
> +
> +    cursor = qemu_put_mouse_event_head;
> +    while (cursor != NULL&&  cursor != entry) {
> +        prev = cursor;
> +        cursor = cursor->next;
> +    }
> +
> +    if (cursor == NULL) // does not exist or list empty
> +        return;
> +    else if (prev == NULL) { // entry is head
> +        qemu_put_mouse_event_head = cursor->next;
> +        if (qemu_put_mouse_event_current == entry)
> +            qemu_put_mouse_event_current = cursor->next;
> +        qemu_free(entry->qemu_put_mouse_event_name);
> +        qemu_free(entry);
> +        return;
> +    }
> +
> +    prev->next = entry->next;
> +
> +    if (qemu_put_mouse_event_current == entry)
> +        qemu_put_mouse_event_current = prev;
> +
> +    qemu_free(entry->qemu_put_mouse_event_name);
> +    qemu_free(entry);
> +}
> +
> +void kbd_put_keycode(int keycode)
> +{
> +    if (qemu_put_kbd_event) {
> +        qemu_put_kbd_event(qemu_put_kbd_event_opaque, keycode);
> +    }
> +}
> +
> +void kbd_mouse_event(int dx, int dy, int dz, int buttons_state)
> +{
> +    QEMUPutMouseEvent *mouse_event;
> +    void *mouse_event_opaque;
> +    int width;
> +
> +    if (!qemu_put_mouse_event_current) {
> +        return;
> +    }
> +
> +    mouse_event =
> +        qemu_put_mouse_event_current->qemu_put_mouse_event;
> +    mouse_event_opaque =
> +        qemu_put_mouse_event_current->qemu_put_mouse_event_opaque;
> +
> +    if (mouse_event) {
> +        if (graphic_rotate) {
> +            if (qemu_put_mouse_event_current->qemu_put_mouse_event_absolute)
> +                width = 0x7fff;
> +            else
> +                width = graphic_width - 1;
> +            mouse_event(mouse_event_opaque,
> +                                 width - dy, dx, dz, buttons_state);
> +        } else
> +            mouse_event(mouse_event_opaque,
> +                                 dx, dy, dz, buttons_state);
> +    }
> +}
> +
> +int kbd_mouse_is_absolute(void)
> +{
> +    if (!qemu_put_mouse_event_current)
> +        return 0;
> +
> +    return qemu_put_mouse_event_current->qemu_put_mouse_event_absolute;
> +}
> +
> +static void info_mice_iter(QObject *data, void *opaque)
> +{
> +    QDict *mouse;
> +    Monitor *mon = opaque;
> +
> +    mouse = qobject_to_qdict(data);
> +    monitor_printf(mon, "%c Mouse #%" PRId64 ": %s\n",
> +                  (qdict_get_bool(mouse, "current") ? '*' : ' '),
> +                  qdict_get_int(mouse, "index"), qdict_get_str(mouse, "name"));
> +}
> +
> +void do_info_mice_print(Monitor *mon, const QObject *data)
> +{
> +    QList *mice_list;
> +
> +    mice_list = qobject_to_qlist(data);
> +    if (qlist_empty(mice_list)) {
> +        monitor_printf(mon, "No mouse devices connected\n");
> +        return;
> +    }
> +
> +    qlist_iter(mice_list, info_mice_iter, mon);
> +}
> +
> +/**
> + * do_info_mice(): Show VM mice information
> + *
> + * Each mouse is represented by a QDict, the returned QObject is a QList of
> + * all mice.
> + *
> + * The mouse QDict contains the following:
> + *
> + * - "name": mouse's name
> + * - "index": mouse's index
> + * - "current": true if this mouse is receiving events, false otherwise
> + *
> + * Example:
> + *
> + * [ { "name": "QEMU Microsoft Mouse", "index": 0, "current": false },
> + *   { "name": "QEMU PS/2 Mouse", "index": 1, "current": true } ]
> + */
> +void do_info_mice(Monitor *mon, QObject **ret_data)
> +{
> +    QEMUPutMouseEntry *cursor;
> +    QList *mice_list;
> +    int index = 0;
> +
> +    mice_list = qlist_new();
> +
> +    if (!qemu_put_mouse_event_head) {
> +        goto out;
> +    }
> +
> +    cursor = qemu_put_mouse_event_head;
> +    while (cursor != NULL) {
> +        QObject *obj;
> +        obj = qobject_from_jsonf("{ 'name': %s, 'index': %d, 'current': %i }",
> +                                 cursor->qemu_put_mouse_event_name,
> +                                 index, cursor == qemu_put_mouse_event_current);
> +        qlist_append_obj(mice_list, obj);
> +        index++;
> +        cursor = cursor->next;
> +    }
> +
> +out:
> +    *ret_data = QOBJECT(mice_list);
> +}
> +
> +void do_mouse_set(Monitor *mon, const QDict *qdict)
> +{
> +    QEMUPutMouseEntry *cursor;
> +    int i = 0;
> +    int index = qdict_get_int(qdict, "index");
> +
> +    if (!qemu_put_mouse_event_head) {
> +        monitor_printf(mon, "No mouse devices connected\n");
> +        return;
> +    }
> +
> +    cursor = qemu_put_mouse_event_head;
> +    while (cursor != NULL&&  index != i) {
> +        i++;
> +        cursor = cursor->next;
> +    }
> +
> +    if (cursor != NULL)
> +        qemu_put_mouse_event_current = cursor;
> +    else
> +        monitor_printf(mon, "Mouse at given index not found\n");
> +}
> diff --git a/vl.c b/vl.c
> index b048e89..df2a278 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -375,216 +375,9 @@ ram_addr_t qemu_balloon_status(void)
>       return 0;
>   }
>
> -/***********************************************************/
> -/* keyboard/mouse */
> -
> -static QEMUPutKBDEvent *qemu_put_kbd_event;
> -static void *qemu_put_kbd_event_opaque;
> -static QEMUPutMouseEntry *qemu_put_mouse_event_head;
> -static QEMUPutMouseEntry *qemu_put_mouse_event_current;
> -
> -void qemu_add_kbd_event_handler(QEMUPutKBDEvent *func, void *opaque)
> -{
> -    qemu_put_kbd_event_opaque = opaque;
> -    qemu_put_kbd_event = func;
> -}
> -
> -QEMUPutMouseEntry *qemu_add_mouse_event_handler(QEMUPutMouseEvent *func,
> -                                                void *opaque, int absolute,
> -                                                const char *name)
> -{
> -    QEMUPutMouseEntry *s, *cursor;
> -
> -    s = qemu_mallocz(sizeof(QEMUPutMouseEntry));
> -
> -    s->qemu_put_mouse_event = func;
> -    s->qemu_put_mouse_event_opaque = opaque;
> -    s->qemu_put_mouse_event_absolute = absolute;
> -    s->qemu_put_mouse_event_name = qemu_strdup(name);
> -    s->next = NULL;
> -
> -    if (!qemu_put_mouse_event_head) {
> -        qemu_put_mouse_event_head = qemu_put_mouse_event_current = s;
> -        return s;
> -    }
> -
> -    cursor = qemu_put_mouse_event_head;
> -    while (cursor->next != NULL)
> -        cursor = cursor->next;
> -
> -    cursor->next = s;
> -    qemu_put_mouse_event_current = s;
> -
> -    return s;
> -}
> -
> -void qemu_remove_mouse_event_handler(QEMUPutMouseEntry *entry)
> -{
> -    QEMUPutMouseEntry *prev = NULL, *cursor;
> -
> -    if (!qemu_put_mouse_event_head || entry == NULL)
> -        return;
> -
> -    cursor = qemu_put_mouse_event_head;
> -    while (cursor != NULL&&  cursor != entry) {
> -        prev = cursor;
> -        cursor = cursor->next;
> -    }
> -
> -    if (cursor == NULL) // does not exist or list empty
> -        return;
> -    else if (prev == NULL) { // entry is head
> -        qemu_put_mouse_event_head = cursor->next;
> -        if (qemu_put_mouse_event_current == entry)
> -            qemu_put_mouse_event_current = cursor->next;
> -        qemu_free(entry->qemu_put_mouse_event_name);
> -        qemu_free(entry);
> -        return;
> -    }
> -
> -    prev->next = entry->next;
> -
> -    if (qemu_put_mouse_event_current == entry)
> -        qemu_put_mouse_event_current = prev;
> -
> -    qemu_free(entry->qemu_put_mouse_event_name);
> -    qemu_free(entry);
> -}
> -
> -void kbd_put_keycode(int keycode)
> -{
> -    if (qemu_put_kbd_event) {
> -        qemu_put_kbd_event(qemu_put_kbd_event_opaque, keycode);
> -    }
> -}
> -
> -void kbd_mouse_event(int dx, int dy, int dz, int buttons_state)
> -{
> -    QEMUPutMouseEvent *mouse_event;
> -    void *mouse_event_opaque;
> -    int width;
> -
> -    if (!qemu_put_mouse_event_current) {
> -        return;
> -    }
> -
> -    mouse_event =
> -        qemu_put_mouse_event_current->qemu_put_mouse_event;
> -    mouse_event_opaque =
> -        qemu_put_mouse_event_current->qemu_put_mouse_event_opaque;
> -
> -    if (mouse_event) {
> -        if (graphic_rotate) {
> -            if (qemu_put_mouse_event_current->qemu_put_mouse_event_absolute)
> -                width = 0x7fff;
> -            else
> -                width = graphic_width - 1;
> -            mouse_event(mouse_event_opaque,
> -                                 width - dy, dx, dz, buttons_state);
> -        } else
> -            mouse_event(mouse_event_opaque,
> -                                 dx, dy, dz, buttons_state);
> -    }
> -}
> -
> -int kbd_mouse_is_absolute(void)
> -{
> -    if (!qemu_put_mouse_event_current)
> -        return 0;
> -
> -    return qemu_put_mouse_event_current->qemu_put_mouse_event_absolute;
> -}
> -
> -static void info_mice_iter(QObject *data, void *opaque)
> -{
> -    QDict *mouse;
> -    Monitor *mon = opaque;
> -
> -    mouse = qobject_to_qdict(data);
> -    monitor_printf(mon, "%c Mouse #%" PRId64 ": %s\n",
> -                  (qdict_get_bool(mouse, "current") ? '*' : ' '),
> -                  qdict_get_int(mouse, "index"), qdict_get_str(mouse, "name"));
> -}
> -
> -void do_info_mice_print(Monitor *mon, const QObject *data)
> -{
> -    QList *mice_list;
> -
> -    mice_list = qobject_to_qlist(data);
> -    if (qlist_empty(mice_list)) {
> -        monitor_printf(mon, "No mouse devices connected\n");
> -        return;
> -    }
> -
> -    qlist_iter(mice_list, info_mice_iter, mon);
> -}
> -
> -/**
> - * do_info_mice(): Show VM mice information
> - *
> - * Each mouse is represented by a QDict, the returned QObject is a QList of
> - * all mice.
> - *
> - * The mouse QDict contains the following:
> - *
> - * - "name": mouse's name
> - * - "index": mouse's index
> - * - "current": true if this mouse is receiving events, false otherwise
> - *
> - * Example:
> - *
> - * [ { "name": "QEMU Microsoft Mouse", "index": 0, "current": false },
> - *   { "name": "QEMU PS/2 Mouse", "index": 1, "current": true } ]
> - */
> -void do_info_mice(Monitor *mon, QObject **ret_data)
> -{
> -    QEMUPutMouseEntry *cursor;
> -    QList *mice_list;
> -    int index = 0;
> -
> -    mice_list = qlist_new();
> -
> -    if (!qemu_put_mouse_event_head) {
> -        goto out;
> -    }
> -
> -    cursor = qemu_put_mouse_event_head;
> -    while (cursor != NULL) {
> -        QObject *obj;
> -        obj = qobject_from_jsonf("{ 'name': %s, 'index': %d, 'current': %i }",
> -                                 cursor->qemu_put_mouse_event_name,
> -                                 index, cursor == qemu_put_mouse_event_current);
> -        qlist_append_obj(mice_list, obj);
> -        index++;
> -        cursor = cursor->next;
> -    }
> -
> -out:
> -    *ret_data = QOBJECT(mice_list);
> -}
> -
> -void do_mouse_set(Monitor *mon, const QDict *qdict)
> -{
> -    QEMUPutMouseEntry *cursor;
> -    int i = 0;
> -    int index = qdict_get_int(qdict, "index");
> -
> -    if (!qemu_put_mouse_event_head) {
> -        monitor_printf(mon, "No mouse devices connected\n");
> -        return;
> -    }
> -
> -    cursor = qemu_put_mouse_event_head;
> -    while (cursor != NULL&&  index != i) {
> -        i++;
> -        cursor = cursor->next;
> -    }
>
> -    if (cursor != NULL)
> -        qemu_put_mouse_event_current = cursor;
> -    else
> -        monitor_printf(mon, "Mouse at given index not found\n");
> -}
> +/***********************************************************/
> +/* real time host monotonic timer */
>
>   /* compute with 96 bit intermediate result: (a*b)/c */
>   uint64_t muldiv64(uint64_t a, uint32_t b, uint32_t c)
> @@ -610,9 +403,6 @@ uint64_t muldiv64(uint64_t a, uint32_t b, uint32_t c)
>       return res.ll;
>   }
>
> -/***********************************************************/
> -/* real time host monotonic timer */
> -
>   static int64_t get_clock_realtime(void)
>   {
>       struct timeval tv;
>    

      reply	other threads:[~2010-01-13 23:27 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-01-13 13:05 [Qemu-devel] [PATCH] move kbd/mouse handling to input.c Paolo Bonzini
2010-01-13 23:27 ` Anthony Liguori [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4B4E56F5.7010409@codemonkey.ws \
    --to=anthony@codemonkey.ws \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).