[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
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |