[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] Re: [patch] pvfb: Split mouse and keyboard into separate devices.



Gerd Hoffmann <kraxel@xxxxxxx> writes:

>   Hi,
>
> This patch creates two separate input devices for keyboard and mouse
> events.  Also includes some key bitmap fixes (allow all keyboard keys,
> allow eight mouse buttons).
>
> I hope everyone is happy with that now after the lengthy discussion ;)
>
> please apply,
>   Gerd
>
> -- 
> Gerd Hoffmann <kraxel@xxxxxxx>
> pvfb: Split mouse and keyboard into separate devices.
>
> This patch creates two separate input devices for keyboard and mouse
> events.  The reason for this is to separate them in the linux input
> layer and allow them being routed different ways.
>
> Use case:  Configure the X-Server like this to get the mouse
> events directly from the linux input layer, which has the major
> advantage that absolute coordinates work correctly:
>
> Section "InputDevice"
>   Driver       "evdev"
>   Identifier   "Mouse"
>   Option       "Device" "/dev/input/event<nr>"
> EndSection
>
> This makes the keyboard stop working though in case mouse and
> keyboard events are coming through the same input device, at least
> with older Xorg (6.9) versions.
>
> Signed-off-by: Gerd Hoffmann <kraxel@xxxxxxx>

New, not mentioned in the changelog:

* Initialization of struct input_dev members phys, id.bustype,
  id.vendor, id.product.

* Take care of the FIXME regarding initialization struct input_dev
  member keybit (thanks!).

* Take care of the TODO to enable all pointer buttons.  Perhaps should
  better go in together with the fix to tools/xenfb/vncfb.c posted by
  Daniel.

No objections to any of these.  They ought to be documented in the
changelog, though.  You might prefer separate changesets for some of
them.

> ---
>  linux-2.6-xen-sparse/drivers/xen/fbfront/xenkbd.c |   93 
> +++++++++++++++-------
>  1 file changed, 65 insertions(+), 28 deletions(-)
>
> Index: 
> build-32-unstable-13816/linux-2.6-xen-sparse/drivers/xen/fbfront/xenkbd.c
> ===================================================================
> --- 
> build-32-unstable-13816.orig/linux-2.6-xen-sparse/drivers/xen/fbfront/xenkbd.c
> +++
> build-32-unstable-13816/linux-2.6-xen-sparse/drivers/xen/fbfront/xenkbd.c
[...]
> @@ -56,23 +58,36 @@ static irqreturn_t input_handler(int rq,
>       rmb();                  /* ensure we see ring contents up to prod */
>       for (cons = page->in_cons; cons != prod; cons++) {
>               union xenkbd_in_event *event;
> +             struct input_dev *dev;
>               event = &XENKBD_IN_RING_REF(page, cons);
>  
> +             dev = info->ptr;
>               switch (event->type) {
>               case XENKBD_TYPE_MOTION:
> -                     input_report_rel(info->dev, REL_X, event->motion.rel_x);
> -                     input_report_rel(info->dev, REL_Y, event->motion.rel_y);
> +                     input_report_rel(dev, REL_X, event->motion.rel_x);
> +                     input_report_rel(dev, REL_Y, event->motion.rel_y);
>                       break;
>               case XENKBD_TYPE_KEY:
> -                     input_report_key(info->dev, event->key.keycode, 
> event->key.pressed);
> +                     dev = NULL;
> +                     if (test_bit(event->key.keycode, info->kbd->keybit))
> +                             dev = info->kbd;
> +                     if (test_bit(event->key.keycode, info->ptr->keybit))
> +                             dev = info->ptr;
> +                     if (dev)
> +                             input_report_key(dev, event->key.keycode,
> +                                              event->key.pressed);
> +                     else
> +                             printk("xenkbd: unhandled keycode 0x%x\n",
> +                                    event->key.keycode);
>                       break;
>               case XENKBD_TYPE_POS:
> -                     input_report_abs(info->dev, ABS_X, event->pos.abs_x);
> -                     input_report_abs(info->dev, ABS_Y, event->pos.abs_y);
> +                     input_report_abs(dev, ABS_X, event->pos.abs_x);
> +                     input_report_abs(dev, ABS_Y, event->pos.abs_y);
>                       break;
>               }
> +             if (dev)
> +                     input_sync(dev);

Can !dev happen?

>       }
> -     input_sync(info->dev);
>       mb();                   /* ensure we got ring contents */
>       page->in_cons = cons;
>       notify_remote_via_irq(info->irq);
[...]

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.