xf86-input-ws: Import xf86-input-ws-1.3.0.20151010 as wip/xf86-input-ws-dfbsd

Try to merge patches from NetBSD xsrc
This commit is contained in:
David Shao 2019-07-22 22:24:30 -07:00
parent d80c7280dd
commit 09d4ce258c
10 changed files with 511 additions and 0 deletions

View File

@ -5009,6 +5009,7 @@ SUBDIR+= xesam-glib
SUBDIR+= xf86-input-mouse-dfbsd
SUBDIR+= xf86-input-synaptics
SUBDIR+= xf86-input-vboxmouse
SUBDIR+= xf86-input-ws-dfbsd
SUBDIR+= xf86-video-ati-dfbsd
SUBDIR+= xf86-video-geode
SUBDIR+= xf86-video-intel-dfbsd

View File

@ -0,0 +1 @@
Matthieu Herrb's wscons pointing device driver for modular X.org.

View File

@ -0,0 +1,12 @@
===========================================================================
$NetBSD: MESSAGE,v 1.1 2015/10/10 20:02:52 tnn Exp $
To use this driver, your xorg.conf file should have an entry like this:
Identifier "Mouse0"
Driver "ws"
Option "Device" "/dev/wsmouse"
This should work with many wscons pointing devices, especially the zaurus.
Please see the ws(4) manual page for more information.
===========================================================================

View File

@ -0,0 +1,87 @@
# $NetBSD: Makefile,v 1.3 2018/03/07 11:57:42 wiz Exp $
DISTNAME= xf86-input-ws-1.3.0.20151010
PKGREVISION= 2
CATEGORIES= x11
MASTER_SITES= ${MASTER_SITE_LOCAL}
MAINTAINER= pkgsrc-users@NetBSD.org
HOMEPAGE= http://xenocara.org/
COMMENT= OpenBSDs wscons input driver for modular X.org
ONLY_FOR_PLATFORM= NetBSD-*-* OpenBSD-*-*
GNU_CONFIGURE= yes
USE_LIBTOOL= yes
USE_TOOLS+= pkg-config
.include "../../mk/bsd.prefs.mk"
PKG_OPTIONS_VAR= PKG_OPTIONS.xf86-input-ws
PKG_SUPPORTED_OPTIONS=
PKG_SUGGESTED_OPTIONS=
PKG_SUPPORTED_OPTIONS+= keyboard_button_xsrc_netbsd
# .if ${OPSYS} == "NetBSD"
# PKG_SUGGESTED_OPTIONS+= keyboard_button_xsrc_netbsd
# .endif
PKG_SUPPORTED_OPTIONS+= undef_tpanel_xsrc_netbsd
.if ${OPSYS} == "NetBSD"
PKG_SUGGESTED_OPTIONS+= undef_tpanel_xsrc_netbsd
.endif
PKG_SUPPORTED_OPTIONS+= calibration_kernel_xsrc_netbsd
.if ${OPSYS} == "NetBSD"
PKG_SUGGESTED_OPTIONS+= calibration_kernel_xsrc_netbsd
.endif
PKG_SUPPORTED_OPTIONS+= strict_xsrc_netbsd
.if ${OPSYS} == "NetBSD"
PKG_SUGGESTED_OPTIONS+= strict_xsrc_netbsd
.endif
PKG_SUPPORTED_OPTIONS+= read_eio_xenocara_openbsd
.if ${OPSYS} == "OpenBSD"
PKG_SUGGESTED_OPTIONS+= read_eio_xenocara_openbsd
.endif
PKG_SUPPORTED_OPTIONS+= strict_xenocara_openbsd
.if ${OPSYS} == "NetBSD" || ${OPSYS} == "OpenBSD"
PKG_SUGGESTED_OPTIONS+= strict_xenocara_openbsd
.endif
.include "../../mk/bsd.options.mk"
.if !empty(PKG_OPTIONS:Mkeyboard_button_xsrc_netbsd)
CPPFLAGS+= -DKEYBOARD_BUTTON_XSRC_NETBSD
.endif
.if !empty(PKG_OPTIONS:Mundef_tpanel_xsrc_netbsd)
CPPFLAGS+= -DUNDEF_TPANEL_XSRC_NETBSD
.endif
.if !empty(PKG_OPTIONS:Mcalibration_kernel_xsrc_netbsd)
CPPFLAGS+= -DCALIBRATION_KERNEL_XSRC_NETBSD
.endif
.if !empty(PKG_OPTIONS:Mstrict_xsrc_netbsd)
CPPFLAGS+= -DSTRICT_XSRC_NETBSD
.endif
.if !empty(PKG_OPTIONS:Mstrict_xenocara_openbsd)
CPPFLAGS+= -DSTRICT_XENOCARA_OPENBSD
.endif
.if !empty(PKG_OPTIONS:Mread_eio_xenocara_openbsd)
CPPFLAGS+= -DREAD_EIO_XENOCARA_OPENBSD
.endif
.if !empty(PKG_OPTIONS:Mstrict_xenocara_openbsd)
CPPFLAGS+= -DSTRICT_XENOCARA_OPENBSD
.endif
.include "../../x11/modular-xorg-server/buildlink3.mk"
.include "../../x11/xorgproto/buildlink3.mk"
.include "../../mk/bsd.pkg.mk"

View File

@ -0,0 +1,4 @@
@comment $NetBSD: PLIST,v 1.1 2015/10/10 20:02:52 tnn Exp $
include/xorg/ws-properties.h
lib/xorg/modules/input/ws_drv.la
man/man4/ws.4

View File

@ -0,0 +1,10 @@
$NetBSD: distinfo,v 1.3 2015/12/18 11:19:12 taca Exp $
SHA1 (xf86-input-ws-1.3.0.20151010.tar.gz) = c8951b6e2d0dd3f741948bb6e1ae28e0966bec90
RMD160 (xf86-input-ws-1.3.0.20151010.tar.gz) = a3e66b571f791f3d1ddac6d9e477cdc28faa5952
SHA512 (xf86-input-ws-1.3.0.20151010.tar.gz) = de347b98cb508c363ffb422ad1249ad069eae77222da03a875b15b0367ffee580f580a7f671adfb9e621c6b49f2d4772e85887ebbd851c2317630ea3780b497b
Size (xf86-input-ws-1.3.0.20151010.tar.gz) = 323648 bytes
SHA1 (patch-src_emumb.c) = dc1252e857ec221a0be3233de3c37e16838446da
SHA1 (patch-src_emuwheel.c) = ed10282dba2c13ef30674c96c32a5d1d170aca0c
SHA1 (patch-src_ws.c) = 7cc275723f673ddbca3af9c8af8fa51232216a57
SHA1 (patch-src_ws.h) = 381799f4159de5ec5dead114816ff2681e9a4874

View File

@ -0,0 +1,81 @@
$NetBSD: patch-src_emumb.c,v 1.1 2015/12/18 11:19:12 taca Exp $
* Fix build problem NetBSD 7.0_STABLE.
* fix various errors and warnings with xorg-server 1.20:
Option to skip property if keyboard
--- src/emumb.c.orig 2012-07-08 14:22:03.000000000 +0000
+++ src/emumb.c
@@ -36,6 +36,11 @@
#include "config.h"
#endif
+#if defined(STRICT_XSRC_NETBSD)
+#include <sys/types.h>
+#endif
+#include <sys/time.h>
+
#include <xorg-server.h>
#include <X11/Xatom.h>
#include <xf86.h>
@@ -273,7 +278,17 @@ wsmbEmuFilterEvent(InputInfoPtr pInfo, i
}
void
+#if defined(STRICT_XSRC_NETBSD)
+wsmbEmuWakeupHandler(pointer data,
+/* XXX compat-api.h */
+ int i
+#if ABI_VIDEODRV_VERSION < SET_ABI_VERSION(23, 0)
+ , pointer LastSelectMask
+#endif
+ )
+#else /* !STRICT_XSRC_NETBSD */
wsmbEmuWakeupHandler(pointer data, int i, pointer LastSelectMask)
+#endif /* STRICT_XSRC_NETBSD */
{
InputInfoPtr pInfo = (InputInfoPtr)data;
WSDevicePtr priv = (WSDevicePtr)pInfo->private;
@@ -287,8 +302,16 @@ wsmbEmuWakeupHandler(pointer data, int i
}
void
+#if defined(STRICT_XSRC_NETBSD)
+wsmbEmuBlockHandler(pointer data,
+#if ABI_VIDEODRV_VERSION < SET_ABI_VERSION(23, 0)
+ struct timeval **waitTime,
+#endif
+ pointer LastSelectMask)
+#else /* !STRICT_XSRC_NETBSD */
wsmbEmuBlockHandler(pointer data, struct timeval **waitTime,
pointer LastSelectMask)
+#endif /* STRICT_XSRC_NETBSD */
{
InputInfoPtr pInfo = (InputInfoPtr)data;
WSDevicePtr priv = (WSDevicePtr)pInfo->private;
@@ -298,7 +321,11 @@ wsmbEmuBlockHandler(pointer data, struct
ms = priv->emulateMB.expires - GetTimeInMillis();
if (ms <= 0)
ms = 0;
+#if defined(STRICT_XSRC_NETBSD)
+#if ABI_VIDEODRV_VERSION < SET_ABI_VERSION(23, 0)
AdjustWaitForDelay(waitTime, ms);
+#endif
+#endif
}
}
@@ -391,6 +418,11 @@ wsmbEmuInitProperty(DeviceIntPtr dev)
DBG(1, ErrorF("wsmbEmuInitProperty\n"));
+#if defined(KEYBOARD_BUTTON_XSRC_NETBSD)
+ if (!dev->button) /* don't init prop for keyboards */
+ return;
+#endif
+
prop_mbemu = MakeAtom(WS_PROP_MIDBUTTON,
strlen(WS_PROP_MIDBUTTON), TRUE);
rc = XIChangeDeviceProperty(dev, prop_mbemu, XA_INTEGER, 8,

View File

@ -0,0 +1,33 @@
$NetBSD: patch-src_emuwheel.c,v 1.1 2015/12/18 11:19:12 taca Exp $
* Fix build problem NetBSD 7.0_STABLE.
OpenBSD xenocara:
Jun 18 20:07:30 2018 UTC
* Improve the wheel emulation logic. Make the axis filtering symmetrical,
and less restrictive for vertical scrolling.
--- src/emuwheel.c.orig 2012-07-08 13:51:11.000000000 +0000
+++ src/emuwheel.c
@@ -36,6 +36,8 @@
#include "config.h"
#endif
+#include <sys/time.h>
+
#include <xorg-server.h>
#include <X11/Xatom.h>
#include <xf86.h>
@@ -113,7 +115,11 @@ wsWheelEmuFilterMotion(InputInfoPtr pInf
return TRUE;
}
+#if defined(STRICT_XENOCARA_OPENBSD)
+ if (abs(dx) > abs(dy)) {
+#else
if (dx) {
+#endif
pAxis = &(priv->emulateWheel.X);
pOtherAxis = &(priv->emulateWheel.Y);
value = dx;

View File

@ -0,0 +1,240 @@
$NetBSD: patch-src_ws.c,v 1.1 2015/10/10 20:02:52 tnn Exp $
OpenBSD xenocara option:
Dec 31 23:31:41 2017 UTC
If read() returns EIO, then the wsmouse device has gone away and our fd
to it is useless, so detach the xserver driver and close it.
Modeled on similar code in xf86-input-{keyboard,mouse}
NetBSD xsrc option
Apr 14 19:19:43 2017 UTC
be somewhat smarter with mux devices:
- don't trust the device type, if we're on a mux that may not be the whole
story
- always call ioctl(WSMOUSEIO_GCALIBCOORDS)
- check .samplelen to see if we're in raw mode
With this touchscreens on mux devices should Just Work(tm) even if they're
not the first device on the mux.
Apr 6 20:55:03 2017 UTC
we can get calibration data from the kernel now
Sep 26 14:47:53 2011 UTC
Restore #ifndef __NetBSD__ portitions (disabling OpenBSD specific TPANEL stuff?)
which were accidentally removed in rev 1.4:
this fixes WSMOUSEIO_SCALIBCOORDS ioctl errors
and coredumps after the driver is loaded on hpcarm W-ZERO3.
--- src/ws.c.orig 2015-08-29 08:48:29.000000000 +0000
+++ src/ws.c
@@ -213,6 +213,49 @@ wsPreInit(InputDriverPtr drv, InputInfoP
goto fail;
if (ioctl(pInfo->fd, WSMOUSEIO_GTYPE, &priv->type) != 0)
goto fail;
+
+#if defined(CALIBRATION_KERNEL_XSRC_NETBSD)
+
+ /* assume screen coordinate space until proven wrong */
+ priv->min_x = 0;
+ priv->max_x = screenInfo.screens[priv->screen_no]->width - 1;
+ priv->min_y = 0;
+ priv->max_y = screenInfo.screens[priv->screen_no]->height - 1;
+ priv->raw = 0;
+
+ /* don't rely on the device type - we may be listening to a mux */
+ if (ioctl(pInfo->fd, WSMOUSEIO_GCALIBCOORDS,
+ &priv->coords) != 0) {
+ /* can't get absolute coordinate space - assume mouse */
+ pInfo->type_name = XI_MOUSE;
+ } else if (priv->coords.samplelen == WSMOUSE_CALIBCOORDS_RESET) {
+ /*
+ * we're getting raw coordinates - update accordingly and hope
+ * that there is no other absolute positioning device on the
+ * same mux
+ */
+ priv->min_x = priv->coords.minx;
+ priv->max_x = priv->coords.maxx;
+ priv->min_y = priv->coords.miny;
+ priv->max_y = priv->coords.maxy;
+ priv->raw = 1;
+ pInfo->type_name = XI_TOUCHSCREEN;
+ } else {
+ /*
+ * touchscreen not in raw mode, should send us screen
+ * coordinates
+ */
+ pInfo->type_name = XI_TOUCHSCREEN;
+ }
+
+ if (priv->raw) {
+ xf86Msg(X_CONFIG,
+ "%s device will work in raw mode\n",
+ pInfo->name);
+ }
+
+#else /* !CALIBRATION_KERNEL_XSRC_NETBSD */
+
if (priv->type == WSMOUSE_TYPE_TPANEL) {
pInfo->type_name = XI_TOUCHSCREEN;
priv->raw = xf86SetBoolOption(pInfo->options, "Raw", 1);
@@ -245,6 +288,9 @@ wsPreInit(InputDriverPtr drv, InputInfoP
priv->min_y = 0;
priv->max_y = screenInfo.screens[priv->screen_no]->height - 1;
}
+
+#endif /* CALIBRATION_KERNEL_XSRC_NETBSD */
+
/* Allow options to override this */
priv->min_x = xf86SetIntOption(pInfo->options, "MinX", priv->min_x);
xf86IDrvMsg(pInfo, X_INFO, "minimum x position: %d\n", priv->min_x);
@@ -399,7 +445,9 @@ wsDeviceOn(DeviceIntPtr pWS)
{
InputInfoPtr pInfo = (InputInfoPtr)pWS->public.devicePrivate;
WSDevicePtr priv = (WSDevicePtr)pInfo->private;
+#if !defined(UNDEF_TPANEL_XSRC_NETBSD)
struct wsmouse_calibcoords coords;
+#endif
DBG(1, ErrorF("WS DEVICE ON\n"));
if ((pInfo->fd < 0) && (wsOpen(pInfo) != Success)) {
@@ -408,6 +456,7 @@ wsDeviceOn(DeviceIntPtr pWS)
return !Success;
}
+#if !defined(UNDEF_TPANEL_XSRC_NETBSD)
if (priv->type == WSMOUSE_TYPE_TPANEL) {
/* get calibration values */
if (ioctl(pInfo->fd, WSMOUSEIO_GCALIBCOORDS, &coords) != 0) {
@@ -427,6 +476,15 @@ wsDeviceOn(DeviceIntPtr pWS)
}
}
}
+#endif
+
+#if defined(READ_EIO_XENOCARA_OPENBSD)
+ if (priv->remove_timer == NULL) {
+ /* allocate here where it's safe */
+ priv->remove_timer = TimerSet(priv->remove_timer,
+ 0, 0, NULL, NULL);
+ }
+#endif
xf86AddEnabledDevice(pInfo);
wsmbEmuOn(pInfo);
pWS->public.on = TRUE;
@@ -438,10 +496,13 @@ wsDeviceOff(DeviceIntPtr pWS)
{
InputInfoPtr pInfo = (InputInfoPtr)pWS->public.devicePrivate;
WSDevicePtr priv = (WSDevicePtr)pInfo->private;
+#if !defined(UNDEF_TPANEL_XSRC_NETBSD)
struct wsmouse_calibcoords coords;
+#endif
DBG(1, ErrorF("WS DEVICE OFF\n"));
wsmbEmuFinalize(pInfo);
+#if !defined(UNDEF_TPANEL_XSRC_NETBSD)
if (priv->type == WSMOUSE_TYPE_TPANEL) {
/* Restore calibration data */
memcpy(&coords, &priv->coords, sizeof coords);
@@ -450,6 +511,7 @@ wsDeviceOff(DeviceIntPtr pWS)
strerror(errno));
}
}
+#endif
if (pInfo->fd >= 0) {
xf86RemoveEnabledDevice(pInfo);
wsClose(pInfo);
@@ -457,6 +519,22 @@ wsDeviceOff(DeviceIntPtr pWS)
pWS->public.on = FALSE;
}
+#if defined(READ_EIO_XENOCARA_OPENBSD)
+/*
+ * Called as an OsTimer() callback to remove the device while xf86Wakeup()
+ * isn't playing with the list.
+ */
+static CARD32
+wsRemoveMouse(OsTimerPtr timer, CARD32 now, pointer arg)
+{
+ InputInfoPtr pInfo = (InputInfoPtr) arg;
+
+ xf86DisableDevice(pInfo->dev, TRUE);
+
+ return 0; /* don't set to run again */
+}
+#endif
+
static size_t
wsReadEvents(InputInfoPtr pInfo)
{
@@ -466,7 +544,18 @@ wsReadEvents(InputInfoPtr pInfo)
priv->events_count = priv->events_pos = 0;
len = read(pInfo->fd, priv->events, sizeof(priv->events));
if (len < 0) {
+#if defined(READ_EIO_XENOCARA_OPENBSD)
+ if (errno == EIO) {
+ xf86IDrvMsg(pInfo, X_ERROR,
+ "device no longer present - removing: %s\n",
+ strerror(errno));
+ xf86RemoveEnabledDevice(pInfo);
+ priv->remove_timer = TimerSet(priv->remove_timer, 0, 1,
+ wsRemoveMouse, pInfo);
+ } else if (errno != EAGAIN)
+#else
if (errno != EAGAIN)
+#endif
xf86IDrvMsg(pInfo, X_ERROR, "read error %s\n",
strerror(errno));
} else if (len % sizeof(struct wscons_event)) {
@@ -550,9 +639,11 @@ wsReadHwState(InputInfoPtr pInfo, wsHwSt
case WSCONS_EVENT_MOUSE_ABSOLUTE_W:
/* ignore those */
continue;
+#ifdef WSCONS_EVENT_SYNC
case WSCONS_EVENT_SYNC:
DBG(4, ErrorF("Sync\n"));
return TRUE;
+#endif
default:
xf86IDrvMsg(pInfo, X_WARNING,
"bad wsmouse event type=%d\n", event->type);
@@ -680,6 +771,14 @@ wsOpen(InputInfoPtr pInfo)
static void
wsClose(InputInfoPtr pInfo)
{
+#if defined(READ_EIO_XENOCARA_OPENBSD)
+ WSDevicePtr priv = (WSDevicePtr)pInfo->private;
+
+ if (priv->remove_timer != NULL) {
+ TimerFree(priv->remove_timer);
+ priv->remove_timer = NULL;
+ }
+#endif
xf86CloseSerial(pInfo->fd);
pInfo->fd = -1;
}
@@ -793,17 +892,23 @@ wsSetCalibProperty(DeviceIntPtr device,
priv->coords.maxx = priv->max_x;
priv->coords.miny = priv->min_y;
priv->coords.maxy = priv->max_y;
+#ifdef __OpenBSD__
priv->coords.swapxy = priv->swap_axes;
+#endif
/* Update the kernel calibration table */
coords.minx = priv->min_x;
coords.maxx = priv->max_x;
coords.miny = priv->min_y;
coords.maxy = priv->max_y;
+#ifdef __OpenBSD__
coords.swapxy = priv->swap_axes;
+#endif
coords.samplelen = priv->raw;
+#ifdef __OpenBSD__
coords.resx = priv->coords.resx;
coords.resy = priv->coords.resy;
+#endif
if (ioctl(pInfo->fd, WSMOUSEIO_SCALIBCOORDS, &coords) != 0) {
xf86IDrvMsg(pInfo, X_ERROR, "SCALIBCOORDS failed %s\n",
strerror(errno));

View File

@ -0,0 +1,42 @@
$NetBSD$
OpenBSD xenocara option:
Dec 31 23:31:41 2017 UTC
If read() returns EIO, then the wsmouse device has gone away and our fd
to it is useless, so detach the xserver driver and close it.
Modeled on similar code in xf86-input-{keyboard,mouse}
--- src/ws.h.orig 2015-08-29 08:48:29.000000000 +0000
+++ src/ws.h
@@ -87,6 +87,10 @@ typedef struct WSDevice {
Time timeout;
} emulateWheel;
+#if defined(READ_EIO_XENOCARA_OPENBSD)
+ OsTimerPtr remove_timer; /* Callback for removal on EIO */
+#endif
+
struct wscons_event events[NWSEVENTS];
size_t events_count;
size_t events_pos;
@@ -95,8 +99,19 @@ typedef struct WSDevice {
/* Middle mouse button emulation */
extern int wsmbEmuTimer(InputInfoPtr);
extern BOOL wsmbEmuFilterEvent(InputInfoPtr, int, BOOL);
+#if defined(STRICT_XSRC_NETBSD)
+/* XXX compat-api.h */
+#if ABI_VIDEODRV_VERSION < SET_ABI_VERSION(23, 0)
+extern void wsmbEmuWakeupHandler(pointer, int, pointer);
+extern void wsmbEmuBlockHandler(pointer, struct timeval **, pointer);
+#else
+extern void wsmbEmuWakeupHandler(pointer, int);
+extern void wsmbEmuBlockHandler(pointer, pointer);
+#endif
+#else /* !STRICT_XSRC_NETBSD */
extern void wsmbEmuWakeupHandler(pointer, int, pointer);
extern void wsmbEmuBlockHandler(pointer, struct timeval **, pointer);
+#endif /* STRICT_XSRC_NETBSD */
extern void wsmbEmuPreInit(InputInfoPtr);
extern void wsmbEmuOn(InputInfoPtr);
extern void wsmbEmuFinalize(InputInfoPtr);