WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] [PATCH] fbfront: advertise either absolute or relative coord

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] [PATCH] fbfront: advertise either absolute or relative coordinates
From: Olaf Hering <olaf@xxxxxxxxx>
Date: Thu, 10 Mar 2011 18:58:22 +0100
Delivery-date: Thu, 10 Mar 2011 10:00:38 -0800
Dkim-signature: v=1; a=rsa-sha1; c=relaxed/relaxed; t=1299779909; l=3265; s=domk; d=aepfle.de; h=Content-Type:MIME-Version:Subject:To:From:Date:X-RZG-CLASS-ID: X-RZG-AUTH; bh=rQBmHb/g12xAVxH/3zO5ISjuPE8=; b=Qrqzs2ki+gsUKSv0j6WeeH5c+nIpLMosK4n2junMApCtV25YNS8ZEQRtLMqpfFEFIJ5 1W1Ia6HuHNCZ9eUd410BwIF72mTeOI67pPpUfGobcMqWo3NZpcZl7dok/WEWMBafxUzvf g812NgITjXVFAlOSOsSxKsWfLFC+KHq5aEk=
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Mutt/1.5.21 (2010-09-15)
A virtualized display device is usually viewed with the vncviewer
application, either by 'xm vnc domU' or with vncviewer localhost:port.
vncviewer and the RFB protocol provides absolute coordinates to the
virtual display. These coordinates are either passed through to a PV
guest or converted to relative coordinates for a HVM guest.

A PV guest receives these coordinates and passes them to the kernels
evdev driver. There it can be picked up by applications such as the
xorg-input drivers. Using absolute coordinates avoids issues such as
guest mouse pointer not tracking host mouse pointer due to wrong mouse
acceleration settings in the guests X display.

Advertise either absolute or relative coordinates to the input system
and the evdev driver, depending on what dom0 provides. The xorg-input
driver prefers relative coordinates even if a devices provides both.

Signed-off-by: Olaf Hering <olaf@xxxxxxxxx>

---
 drivers/xen/fbfront/xenkbd.c |   28 ++++++++++++++--------------
 1 file changed, 14 insertions(+), 14 deletions(-)

Index: linux-2.6.18-xen.hg/drivers/xen/fbfront/xenkbd.c
===================================================================
--- linux-2.6.18-xen.hg.orig/drivers/xen/fbfront/xenkbd.c
+++ linux-2.6.18-xen.hg/drivers/xen/fbfront/xenkbd.c
@@ -104,7 +104,7 @@ static irqreturn_t input_handler(int rq,
 int __devinit xenkbd_probe(struct xenbus_device *dev,
                           const struct xenbus_device_id *id)
 {
-       int ret, i;
+       int ret, i, abs;
        struct xenkbd_info *info;
        struct input_dev *kbd, *ptr;
 
@@ -123,6 +123,11 @@ int __devinit xenkbd_probe(struct xenbus
        info->page->in_cons = info->page->in_prod = 0;
        info->page->out_cons = info->page->out_prod = 0;
 
+       if (xenbus_scanf(XBT_NIL, dev->otherend, "feature-abs-pointer", "%d", 
&abs) < 0)
+               abs = 0;
+       if (abs)
+               xenbus_printf(XBT_NIL, dev->nodename, "request-abs-pointer", 
"1");
+
        /* keyboard */
        kbd = input_allocate_device();
        if (!kbd)
@@ -155,10 +160,15 @@ int __devinit xenkbd_probe(struct xenbus
        ptr->id.bustype = BUS_PCI;
        ptr->id.vendor = 0x5853;
        ptr->id.product = 0xfffe;
-       ptr->evbit[0] = BIT(EV_KEY) | BIT(EV_REL) | BIT(EV_ABS);
+       ptr->evbit[0] = BIT(EV_KEY);
+       if (abs)
+               ptr->evbit[0] |= BIT(EV_ABS);
+       else {
+               ptr->evbit[0] |= BIT(EV_REL);
+               ptr->relbit[0] = BIT(REL_X) | BIT(REL_Y) | BIT(REL_WHEEL);
+       }
        for (i = BTN_LEFT; i <= BTN_TASK; i++)
                set_bit(i, ptr->keybit);
-       ptr->relbit[0] = BIT(REL_X) | BIT(REL_Y) | BIT(REL_WHEEL);
        input_set_abs_params(ptr, ABS_X, 0, XENFB_WIDTH, 0, 0);
        input_set_abs_params(ptr, ABS_Y, 0, XENFB_HEIGHT, 0, 0);
 
@@ -263,7 +273,7 @@ static void xenkbd_backend_changed(struc
                                   enum xenbus_state backend_state)
 {
        struct xenkbd_info *info = dev->dev.driver_data;
-       int ret, val;
+       int val;
 
        switch (backend_state) {
        case XenbusStateInitialising:
@@ -276,16 +286,6 @@ static void xenkbd_backend_changed(struc
 
        case XenbusStateInitWait:
        InitWait:
-               ret = xenbus_scanf(XBT_NIL, info->xbdev->otherend,
-                                  "feature-abs-pointer", "%d", &val);
-               if (ret < 0)
-                       val = 0;
-               if (val) {
-                       ret = xenbus_printf(XBT_NIL, info->xbdev->nodename,
-                                           "request-abs-pointer", "1");
-                       if (ret)
-                               ; /* FIXME */
-               }
                xenbus_switch_state(dev, XenbusStateConnected);
                break;
 

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