mirror of
https://github.com/Mathewnd/Astral.git
synced 2026-10-27 12:48:22 +00:00
886 lines
29 KiB
Diff
886 lines
29 KiB
Diff
diff --git xorg-server-clean/Xext/shm.c xorg-server-workdir/Xext/shm.c
|
|
index 071bd1a..68b2e26 100644
|
|
--- xorg-server-clean/Xext/shm.c
|
|
+++ xorg-server-workdir/Xext/shm.c
|
|
@@ -1207,6 +1207,7 @@ static int
|
|
shm_tmpfile(void)
|
|
{
|
|
const char *shmdirs[] = {
|
|
+ "/dev/shm",
|
|
"/run/shm",
|
|
"/var/tmp",
|
|
"/tmp",
|
|
diff --git xorg-server-clean/config/Makefile.am xorg-server-workdir/config/Makefile.am
|
|
index 51aae47..926ab98 100644
|
|
--- xorg-server-clean/config/Makefile.am
|
|
+++ xorg-server-workdir/config/Makefile.am
|
|
@@ -30,10 +30,16 @@ libconfig_la_LIBADD += $(HAL_LIBS)
|
|
|
|
else
|
|
|
|
+if CONFIG_EVDEV
|
|
+libconfig_la_SOURCES += evdev.c
|
|
+else
|
|
+
|
|
if CONFIG_WSCONS
|
|
libconfig_la_SOURCES += wscons.c
|
|
endif # CONFIG_WSCONS
|
|
|
|
+endif # !CONFIG_EVDEV
|
|
+
|
|
endif # !CONFIG_HAL
|
|
|
|
endif # !CONFIG_UDEV
|
|
diff --git xorg-server-clean/config/config-backends.h xorg-server-workdir/config/config-backends.h
|
|
index 5f07557..69a10a5 100644
|
|
--- xorg-server-clean/config/config-backends.h
|
|
+++ xorg-server-workdir/config/config-backends.h
|
|
@@ -37,6 +37,9 @@ int config_udev_pre_init(void);
|
|
int config_udev_init(void);
|
|
void config_udev_fini(void);
|
|
void config_udev_odev_probe(config_odev_probe_proc_ptr probe_callback);
|
|
+#elif defined(CONFIG_EVDEV)
|
|
+int config_evdev_init(void);
|
|
+void config_evdev_fini(void);
|
|
#elif defined(CONFIG_HAL)
|
|
int config_hal_init(void);
|
|
void config_hal_fini(void);
|
|
diff --git xorg-server-clean/config/config.c xorg-server-workdir/config/config.c
|
|
index fb60295..dda8c7d 100644
|
|
--- xorg-server-clean/config/config.c
|
|
+++ xorg-server-workdir/config/config.c
|
|
@@ -49,6 +49,9 @@ config_init(void)
|
|
#ifdef CONFIG_UDEV
|
|
if (!config_udev_init())
|
|
ErrorF("[config] failed to initialise udev\n");
|
|
+#elif defined(CONFIG_EVDEV)
|
|
+ if (!config_evdev_init())
|
|
+ ErrorF("[config] failed to initialise evdev\n");
|
|
#elif defined(CONFIG_HAL)
|
|
if (!config_hal_init())
|
|
ErrorF("[config] failed to initialise HAL\n");
|
|
@@ -63,6 +66,8 @@ config_fini(void)
|
|
{
|
|
#if defined(CONFIG_UDEV)
|
|
config_udev_fini();
|
|
+#elif defined(CONFIG_EVDEV)
|
|
+ config_evdev_fini();
|
|
#elif defined(CONFIG_HAL)
|
|
config_hal_fini();
|
|
#elif defined(CONFIG_WSCONS)
|
|
diff --git xorg-server-workdir/config/evdev.c xorg-server-workdir/config/evdev.c
|
|
new file mode 100644
|
|
index 0000000..6e18738
|
|
--- /dev/null
|
|
+++ xorg-server-workdir/config/evdev.c
|
|
@@ -0,0 +1,303 @@
|
|
+/*
|
|
+ * Copyright © 2026 The Astral contributors
|
|
+ *
|
|
+ * 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 (including the next
|
|
+ * paragraph) 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.
|
|
+ */
|
|
+
|
|
+#ifdef HAVE_DIX_CONFIG_H
|
|
+#include <dix-config.h>
|
|
+#endif
|
|
+
|
|
+#include <dirent.h>
|
|
+#include <errno.h>
|
|
+#include <fcntl.h>
|
|
+#include <limits.h>
|
|
+#include <stdint.h>
|
|
+#include <stdio.h>
|
|
+#include <string.h>
|
|
+#include <sys/ioctl.h>
|
|
+#include <unistd.h>
|
|
+#include <linux/input.h>
|
|
+
|
|
+#include "input.h"
|
|
+#include "inputstr.h"
|
|
+#include "os.h"
|
|
+#include "Xprintf.h"
|
|
+#include "config-backends.h"
|
|
+
|
|
+#ifndef PATH_MAX
|
|
+#define PATH_MAX 4096
|
|
+#endif
|
|
+
|
|
+#define EVDEV_INPUT_DIR "/dev/input"
|
|
+#define EVDEV_EVENT_PREFIX "event"
|
|
+
|
|
+#define BITS_PER_LONG (sizeof(unsigned long) * 8)
|
|
+#define NBITS(x) ((((x) - 1) / BITS_PER_LONG) + 1)
|
|
+
|
|
+static Bool
|
|
+test_bit(const unsigned long *bits, int bit)
|
|
+{
|
|
+ return !!(bits[bit / BITS_PER_LONG] & (1UL << (bit % BITS_PER_LONG)));
|
|
+}
|
|
+
|
|
+static Bool
|
|
+is_event_node(const char *name)
|
|
+{
|
|
+ const char *p;
|
|
+
|
|
+ if (strncmp(name, EVDEV_EVENT_PREFIX, strlen(EVDEV_EVENT_PREFIX)) != 0)
|
|
+ return FALSE;
|
|
+
|
|
+ p = name + strlen(EVDEV_EVENT_PREFIX);
|
|
+ if (*p == '\0')
|
|
+ return FALSE;
|
|
+
|
|
+ while (*p) {
|
|
+ if (*p < '0' || *p > '9')
|
|
+ return FALSE;
|
|
+ p++;
|
|
+ }
|
|
+
|
|
+ return TRUE;
|
|
+}
|
|
+
|
|
+static Bool
|
|
+get_bits(int fd, int ev, unsigned long *bits, size_t size)
|
|
+{
|
|
+ memset(bits, 0, size);
|
|
+ return ioctl(fd, EVIOCGBIT(ev, size), bits) >= 0;
|
|
+}
|
|
+
|
|
+static Bool
|
|
+get_props(int fd, unsigned long *props, size_t size)
|
|
+{
|
|
+ memset(props, 0, size);
|
|
+ return ioctl(fd, EVIOCGPROP(size), props) >= 0;
|
|
+}
|
|
+
|
|
+static Bool
|
|
+has_keyboard_keys(const unsigned long *key_bits)
|
|
+{
|
|
+ int code;
|
|
+
|
|
+ for (code = KEY_ESC; code <= KEY_F24; code++) {
|
|
+ if (test_bit(key_bits, code))
|
|
+ return TRUE;
|
|
+ }
|
|
+
|
|
+ return FALSE;
|
|
+}
|
|
+
|
|
+static char *
|
|
+get_device_name(int fd, const char *path)
|
|
+{
|
|
+ char name[256];
|
|
+
|
|
+ memset(name, 0, sizeof(name));
|
|
+ if (ioctl(fd, EVIOCGNAME(sizeof(name) - 1), name) >= 0 && name[0])
|
|
+ return strdup(name);
|
|
+
|
|
+ return strdup(path);
|
|
+}
|
|
+
|
|
+static void
|
|
+evdev_add_device(const char *path)
|
|
+{
|
|
+ unsigned long ev_bits[NBITS(EV_MAX + 1)];
|
|
+ unsigned long key_bits[NBITS(KEY_CNT)];
|
|
+ unsigned long rel_bits[NBITS(REL_MAX + 1)];
|
|
+ unsigned long abs_bits[NBITS(ABS_MAX + 1)];
|
|
+ unsigned long prop_bits[NBITS(INPUT_PROP_MAX + 1)];
|
|
+ struct input_id id;
|
|
+ Bool have_id;
|
|
+ InputAttributes attrs = { };
|
|
+ DeviceIntPtr dev = NULL;
|
|
+ InputOption *input_options = NULL;
|
|
+ char *config_info = NULL;
|
|
+ char *name = NULL;
|
|
+ int fd, rc;
|
|
+ int flags = O_RDONLY | O_NONBLOCK;
|
|
+
|
|
+#ifdef O_CLOEXEC
|
|
+ flags |= O_CLOEXEC;
|
|
+#endif
|
|
+
|
|
+ fd = open(path, flags);
|
|
+ if (fd == -1) {
|
|
+ LogMessageVerb(X_WARNING, 10, "config/evdev: open %s: %s\n",
|
|
+ path, strerror(errno));
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ if (!get_bits(fd, 0, ev_bits, sizeof(ev_bits))) {
|
|
+ LogMessageVerb(X_WARNING, 10,
|
|
+ "config/evdev: EVIOCGBIT failed for %s: %s\n",
|
|
+ path, strerror(errno));
|
|
+ close(fd);
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ memset(key_bits, 0, sizeof(key_bits));
|
|
+ memset(rel_bits, 0, sizeof(rel_bits));
|
|
+ memset(abs_bits, 0, sizeof(abs_bits));
|
|
+ memset(prop_bits, 0, sizeof(prop_bits));
|
|
+
|
|
+ if (test_bit(ev_bits, EV_KEY))
|
|
+ get_bits(fd, EV_KEY, key_bits, sizeof(key_bits));
|
|
+ if (test_bit(ev_bits, EV_REL))
|
|
+ get_bits(fd, EV_REL, rel_bits, sizeof(rel_bits));
|
|
+ if (test_bit(ev_bits, EV_ABS))
|
|
+ get_bits(fd, EV_ABS, abs_bits, sizeof(abs_bits));
|
|
+ get_props(fd, prop_bits, sizeof(prop_bits));
|
|
+
|
|
+ if (test_bit(ev_bits, EV_KEY)) {
|
|
+ attrs.flags |= ATTR_KEY;
|
|
+
|
|
+ if (has_keyboard_keys(key_bits))
|
|
+ attrs.flags |= ATTR_KEYBOARD;
|
|
+ }
|
|
+
|
|
+ if (test_bit(ev_bits, EV_REL) &&
|
|
+ test_bit(rel_bits, REL_X) && test_bit(rel_bits, REL_Y))
|
|
+ attrs.flags |= ATTR_POINTER;
|
|
+
|
|
+ if (test_bit(ev_bits, EV_ABS) &&
|
|
+ test_bit(abs_bits, ABS_X) && test_bit(abs_bits, ABS_Y)) {
|
|
+ if (test_bit(prop_bits, INPUT_PROP_DIRECT))
|
|
+ attrs.flags |= ATTR_TOUCHSCREEN;
|
|
+ else if (test_bit(prop_bits, INPUT_PROP_POINTER) ||
|
|
+ test_bit(key_bits, BTN_TOOL_FINGER))
|
|
+ attrs.flags |= ATTR_TOUCHPAD;
|
|
+ else if (test_bit(key_bits, BTN_TOOL_PEN) ||
|
|
+ test_bit(key_bits, BTN_STYLUS) ||
|
|
+ test_bit(key_bits, BTN_STYLUS2) ||
|
|
+ test_bit(abs_bits, ABS_PRESSURE))
|
|
+ attrs.flags |= ATTR_TABLET;
|
|
+ else
|
|
+ attrs.flags |= ATTR_POINTER;
|
|
+ }
|
|
+
|
|
+ if (test_bit(key_bits, BTN_JOYSTICK) || test_bit(key_bits, BTN_GAMEPAD))
|
|
+ attrs.flags |= ATTR_JOYSTICK;
|
|
+
|
|
+ if (attrs.flags == 0) {
|
|
+ LogMessageVerb(X_INFO, 10,
|
|
+ "config/evdev: ignoring input device %s without "
|
|
+ "usable event capabilities\n", path);
|
|
+ close(fd);
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ memset(&id, 0, sizeof(id));
|
|
+ have_id = ioctl(fd, EVIOCGID, &id) >= 0;
|
|
+ name = get_device_name(fd, path);
|
|
+ close(fd);
|
|
+ if (!name)
|
|
+ return;
|
|
+
|
|
+ if (Xasprintf(&config_info, "evdev:%s", path) == -1) {
|
|
+ config_info = NULL;
|
|
+ goto unwind;
|
|
+ }
|
|
+
|
|
+ if (device_is_duplicate(config_info)) {
|
|
+ LogMessage(X_WARNING, "config/evdev: device %s already added. "
|
|
+ "Ignoring.\n", name);
|
|
+ goto unwind;
|
|
+ }
|
|
+
|
|
+ input_options = input_option_new(NULL, "_source", "server/evdev");
|
|
+ if (!input_options)
|
|
+ goto unwind;
|
|
+
|
|
+ input_options = input_option_new(input_options, "name", name);
|
|
+ input_options = input_option_new(input_options, "path", path);
|
|
+ input_options = input_option_new(input_options, "device", path);
|
|
+ input_options = input_option_new(input_options, "driver", "evdev");
|
|
+ if (attrs.flags & ATTR_KEYBOARD)
|
|
+ input_options = input_option_new(input_options, "xkb_rules", "evdev");
|
|
+ input_options = input_option_new(input_options, "config_info", config_info);
|
|
+
|
|
+ attrs.product = strdup(name);
|
|
+ attrs.device = strdup(path);
|
|
+
|
|
+ if (have_id && id.vendor && id.product &&
|
|
+ Xasprintf(&attrs.usb_id, "%04x:%04x", id.vendor, id.product) == -1)
|
|
+ attrs.usb_id = NULL;
|
|
+
|
|
+ LogMessage(X_INFO, "config/evdev: Adding input device %s (%s)\n",
|
|
+ name, path);
|
|
+ rc = NewInputDeviceRequest(input_options, &attrs, &dev);
|
|
+ if (rc != Success)
|
|
+ LogMessage(X_WARNING, "config/evdev: failed to add %s\n", path);
|
|
+
|
|
+ unwind:
|
|
+ input_option_free_list(&input_options);
|
|
+ free(config_info);
|
|
+ free(name);
|
|
+ free(attrs.product);
|
|
+ free(attrs.device);
|
|
+ free(attrs.usb_id);
|
|
+}
|
|
+
|
|
+static void
|
|
+evdev_add_devices(void)
|
|
+{
|
|
+ DIR *dir;
|
|
+ struct dirent *ent;
|
|
+
|
|
+ dir = opendir(EVDEV_INPUT_DIR);
|
|
+ if (!dir) {
|
|
+ LogMessage(X_WARNING, "config/evdev: opendir %s: %s\n",
|
|
+ EVDEV_INPUT_DIR, strerror(errno));
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ while ((ent = readdir(dir)) != NULL) {
|
|
+ char path[PATH_MAX];
|
|
+
|
|
+ if (!is_event_node(ent->d_name))
|
|
+ continue;
|
|
+
|
|
+ if (snprintf(path, sizeof(path), "%s/%s", EVDEV_INPUT_DIR,
|
|
+ ent->d_name) >= (int) sizeof(path)) {
|
|
+ LogMessage(X_WARNING, "config/evdev: path too long: %s/%s\n",
|
|
+ EVDEV_INPUT_DIR, ent->d_name);
|
|
+ continue;
|
|
+ }
|
|
+
|
|
+ evdev_add_device(path);
|
|
+ }
|
|
+
|
|
+ closedir(dir);
|
|
+}
|
|
+
|
|
+int
|
|
+config_evdev_init(void)
|
|
+{
|
|
+ evdev_add_devices();
|
|
+ return 1;
|
|
+}
|
|
+
|
|
+void
|
|
+config_evdev_fini(void)
|
|
+{
|
|
+}
|
|
diff --git xorg-server-clean/config/meson.build xorg-server-workdir/config/meson.build
|
|
index 2b5ab18..021c363 100644
|
|
--- xorg-server-clean/config/meson.build
|
|
+++ xorg-server-workdir/config/meson.build
|
|
@@ -19,6 +19,10 @@ if build_udev
|
|
config_dep += udev_dep
|
|
endif
|
|
|
|
+if build_evdev
|
|
+ srcs_config += 'evdev.c'
|
|
+endif
|
|
+
|
|
if host_machine.system() == 'openbsd'
|
|
srcs_config += 'wscons.c'
|
|
endif
|
|
diff --git xorg-server-clean/configure.ac xorg-server-workdir/configure.ac
|
|
index 7ef8581..4f97781 100644
|
|
--- xorg-server-clean/configure.ac
|
|
+++ xorg-server-workdir/configure.ac
|
|
@@ -554,6 +554,7 @@ AC_ARG_ENABLE(xf86bigfont, AS_HELP_STRING([--enable-xf86bigfont], [Build XF86
|
|
AC_ARG_ENABLE(dpms, AS_HELP_STRING([--disable-dpms], [Build DPMS extension (default: enabled)]), [DPMSExtension=$enableval], [DPMSExtension=yes])
|
|
AC_ARG_ENABLE(config-udev, AS_HELP_STRING([--enable-config-udev], [Build udev support (default: auto)]), [CONFIG_UDEV=$enableval], [CONFIG_UDEV=auto])
|
|
AC_ARG_ENABLE(config-udev-kms, AS_HELP_STRING([--enable-config-udev-kms], [Build udev kms support (default: auto)]), [CONFIG_UDEV_KMS=$enableval], [CONFIG_UDEV_KMS=auto])
|
|
+AC_ARG_ENABLE(config-evdev, AS_HELP_STRING([--enable-config-evdev], [Build /dev/input evdev support (default: auto)]), [CONFIG_EVDEV=$enableval], [CONFIG_EVDEV=auto])
|
|
AC_ARG_ENABLE(config-hal, AS_HELP_STRING([--disable-config-hal], [Build HAL support (default: auto)]), [CONFIG_HAL=$enableval], [CONFIG_HAL=auto])
|
|
AC_ARG_ENABLE(config-wscons, AS_HELP_STRING([--enable-config-wscons], [Build wscons config support (default: auto)]), [CONFIG_WSCONS=$enableval], [CONFIG_WSCONS=auto])
|
|
AC_ARG_ENABLE(xfree86-utils, AS_HELP_STRING([--enable-xfree86-utils], [Build xfree86 DDX utilities (default: enabled)]), [XF86UTILS=$enableval], [XF86UTILS=yes])
|
|
@@ -639,6 +640,7 @@ case $host_os in
|
|
CONFIG_HAL=no
|
|
CONFIG_UDEV=no
|
|
CONFIG_UDEV_KMS=no
|
|
+ CONFIG_EVDEV=no
|
|
DGA=no
|
|
DRM=no
|
|
DRI2=no
|
|
@@ -835,6 +837,10 @@ if test "x$CONFIG_UDEV" = xyes && test "x$CONFIG_HAL" = xyes; then
|
|
AC_MSG_ERROR([Hotplugging through both libudev and hal not allowed])
|
|
fi
|
|
|
|
+if test "x$CONFIG_UDEV" = xyes && test "x$CONFIG_EVDEV" = xyes; then
|
|
+ AC_MSG_ERROR([Hotplugging through both libudev and evdev not allowed])
|
|
+fi
|
|
+
|
|
PKG_CHECK_MODULES(UDEV, $LIBUDEV, [HAVE_LIBUDEV=yes], [HAVE_LIBUDEV=no])
|
|
if test "x$CONFIG_UDEV" = xauto; then
|
|
CONFIG_UDEV="$HAVE_LIBUDEV"
|
|
@@ -883,6 +889,28 @@ if test "x$CONFIG_HAL" = xyes; then
|
|
fi
|
|
AM_CONDITIONAL(CONFIG_HAL, [test "x$CONFIG_HAL" = xyes])
|
|
|
|
+if test "x$CONFIG_EVDEV" = xauto; then
|
|
+ if test "x$CONFIG_UDEV" = xyes -o "x$CONFIG_HAL" = xyes; then
|
|
+ CONFIG_EVDEV=no
|
|
+ else
|
|
+ case $host_os in
|
|
+ *astral*)
|
|
+ CONFIG_EVDEV=yes;
|
|
+ ;;
|
|
+ *)
|
|
+ CONFIG_EVDEV=no;
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+fi
|
|
+AM_CONDITIONAL(CONFIG_EVDEV, [test "x$CONFIG_EVDEV" = xyes])
|
|
+if test "x$CONFIG_EVDEV" = xyes; then
|
|
+ if test "x$CONFIG_UDEV" = xyes -o "x$CONFIG_HAL" = xyes; then
|
|
+ AC_MSG_ERROR([Hotplugging through evdev cannot be combined with libudev or hal])
|
|
+ fi
|
|
+ AC_DEFINE(CONFIG_EVDEV, 1, [Use /dev/input evdev nodes for input auto configuration])
|
|
+fi
|
|
+
|
|
if test "x$SYSTEMD_LOGIND" = xauto; then
|
|
if test "x$HAVE_DBUS" = xyes -a "x$CONFIG_UDEV" = xyes ; then
|
|
SYSTEMD_LOGIND=yes
|
|
@@ -1368,7 +1396,7 @@ AC_SUBST(XKB_COMPILED_DIR)
|
|
|
|
if test "x$XKB_DFLT_RULES" = x; then
|
|
case $host_os in
|
|
- linux*)
|
|
+ linux*|astral*)
|
|
dnl doesn't take AutoAddDevices into account, but whatever.
|
|
XKB_DFLT_RULES="evdev"
|
|
;;
|
|
@@ -1435,7 +1463,7 @@ AM_CONDITIONAL([XF86VIDMODE], [test "x$XF86VIDMODE" = xyes])
|
|
AC_DEFINE_DIR(COMPILEDDEFAULTFONTPATH, FONTPATH, [Default font path])
|
|
AC_DEFINE_DIR(SERVER_MISC_CONFIG_PATH, SERVERCONFIG, [Server miscellaneous config path])
|
|
AC_DEFINE_DIR(BASE_FONT_PATH, FONTROOTDIR, [Default base font path])
|
|
-dridriverdir=`$PKG_CONFIG --variable=dridriverdir dri`
|
|
+dridriverdir=`PKG_CONFIG_SYSROOT_DIR="" $PKG_CONFIG --variable=dridriverdir dri`
|
|
AC_DEFINE_DIR(DRI_DRIVER_PATH, dridriverdir, [Default DRI driver path])
|
|
AC_DEFINE_UNQUOTED(XVENDORNAME, ["$VENDOR_NAME"], [Vendor name])
|
|
AC_DEFINE_UNQUOTED(XVENDORNAMESHORT, ["$VENDOR_NAME_SHORT"], [Short vendor name])
|
|
@@ -2257,10 +2285,10 @@ AC_SUBST([prefix])
|
|
|
|
AC_CONFIG_COMMANDS([sdksyms], [touch hw/xfree86/sdksyms.dep])
|
|
|
|
-if test "x$CONFIG_HAL" = xno && test "x$CONFIG_UDEV" = xno; then
|
|
+if test "x$CONFIG_HAL" = xno && test "x$CONFIG_UDEV" = xno && test "x$CONFIG_EVDEV" = xno; then
|
|
AC_MSG_WARN([
|
|
***********************************************
|
|
- Neither HAL nor udev backend will be enabled.
|
|
+ No HAL, udev, or evdev backend will be enabled.
|
|
Input device hotplugging will not be available!
|
|
***********************************************])
|
|
fi
|
|
diff --git xorg-server-clean/hw/xfree86/common/xf86Bus.c xorg-server-workdir/hw/xfree86/common/xf86Bus.c
|
|
index fd144db..b232e27 100644
|
|
--- xorg-server-clean/hw/xfree86/common/xf86Bus.c
|
|
+++ xorg-server-workdir/hw/xfree86/common/xf86Bus.c
|
|
@@ -556,6 +556,7 @@ xf86GetDevFromEntity(int entityIndex, int instance)
|
|
void
|
|
xf86PostProbe(void)
|
|
{
|
|
+#if 0
|
|
if (fbSlotClaimed && (
|
|
#if (defined(__sparc__) || defined(__sparc)) && !defined(__OpenBSD__)
|
|
sbusSlotClaimed ||
|
|
@@ -571,6 +572,7 @@ xf86PostProbe(void)
|
|
))
|
|
FatalError("Cannot run in framebuffer mode. Please specify busIDs "
|
|
" for all framebuffer devices\n");
|
|
+#endif
|
|
}
|
|
|
|
Bool
|
|
diff --git xorg-server-clean/hw/xfree86/common/xf86Config.c xorg-server-workdir/hw/xfree86/common/xf86Config.c
|
|
index 5d814c1..cd88cee 100644
|
|
--- xorg-server-clean/hw/xfree86/common/xf86Config.c
|
|
+++ xorg-server-workdir/hw/xfree86/common/xf86Config.c
|
|
@@ -49,6 +49,8 @@
|
|
#include <sys/types.h>
|
|
#include <grp.h>
|
|
|
|
+#include <sys/stat.h>
|
|
+
|
|
#include "xf86.h"
|
|
#include "xf86Modes.h"
|
|
#include "xf86Parser.h"
|
|
@@ -876,7 +878,7 @@ configServerFlags(XF86ConfFlagsPtr flagsconf, XF86OptionPtr layoutopts)
|
|
|
|
/* when forcing input devices, we use kbd. otherwise evdev, so use the
|
|
* evdev rules set. */
|
|
-#if defined(__linux__)
|
|
+#if defined(__linux__) || defined(__astral__) || defined(CONFIG_EVDEV)
|
|
if (!xf86Info.forceInputDevices)
|
|
rules = "evdev";
|
|
else
|
|
diff --git xorg-server-clean/hw/xfree86/common/xf86Configure.c xorg-server-workdir/hw/xfree86/common/xf86Configure.c
|
|
index 4347f6d..dc929f9 100644
|
|
--- xorg-server-clean/hw/xfree86/common/xf86Configure.c
|
|
+++ xorg-server-workdir/hw/xfree86/common/xf86Configure.c
|
|
@@ -42,6 +42,8 @@
|
|
#include "misc.h"
|
|
#include "loaderProcs.h"
|
|
|
|
+#include <errno.h>
|
|
+
|
|
typedef struct _DevToConfig {
|
|
GDevRec GDev;
|
|
struct pci_device *pVideo;
|
|
diff --git xorg-server-clean/hw/xfree86/common/xf86Events.c xorg-server-workdir/hw/xfree86/common/xf86Events.c
|
|
index 395bbc7..4bf86cb 100644
|
|
--- xorg-server-clean/hw/xfree86/common/xf86Events.c
|
|
+++ xorg-server-workdir/hw/xfree86/common/xf86Events.c
|
|
@@ -53,6 +53,8 @@
|
|
#include <xorg-config.h>
|
|
#endif
|
|
|
|
+#include <errno.h>
|
|
+
|
|
#include <X11/X.h>
|
|
#include <X11/Xproto.h>
|
|
#include <X11/Xatom.h>
|
|
diff --git xorg-server-clean/hw/xfree86/common/xf86Globals.c xorg-server-workdir/hw/xfree86/common/xf86Globals.c
|
|
index 65a3192..554c69b 100644
|
|
--- xorg-server-clean/hw/xfree86/common/xf86Globals.c
|
|
+++ xorg-server-workdir/hw/xfree86/common/xf86Globals.c
|
|
@@ -118,7 +118,7 @@ xf86InfoRec xf86Info = {
|
|
.miscModInDevEnabled = TRUE,
|
|
.miscModInDevAllowNonLocal = FALSE,
|
|
.pmFlag = TRUE,
|
|
-#if defined(CONFIG_HAL) || defined(CONFIG_UDEV) || defined(CONFIG_WSCONS)
|
|
+#if defined(CONFIG_HAL) || defined(CONFIG_UDEV) || defined(CONFIG_WSCONS) || defined(CONFIG_EVDEV)
|
|
.forceInputDevices = FALSE,
|
|
.autoAddDevices = TRUE,
|
|
.autoEnableDevices = TRUE,
|
|
diff --git xorg-server-clean/hw/xfree86/common/xf86Helper.c xorg-server-workdir/hw/xfree86/common/xf86Helper.c
|
|
index 0389945..286f271 100644
|
|
--- xorg-server-clean/hw/xfree86/common/xf86Helper.c
|
|
+++ xorg-server-workdir/hw/xfree86/common/xf86Helper.c
|
|
@@ -34,6 +34,8 @@
|
|
* different drivers.
|
|
*/
|
|
|
|
+#include <sys/stat.h>
|
|
+
|
|
#ifdef HAVE_XORG_CONFIG_H
|
|
#include <xorg-config.h>
|
|
#endif
|
|
diff --git xorg-server-clean/hw/xfree86/common/xf86Init.c xorg-server-workdir/hw/xfree86/common/xf86Init.c
|
|
index 5695e71..c9230aa 100644
|
|
--- xorg-server-clean/hw/xfree86/common/xf86Init.c
|
|
+++ xorg-server-workdir/hw/xfree86/common/xf86Init.c
|
|
@@ -34,6 +34,7 @@
|
|
#include <xorg-config.h>
|
|
#endif
|
|
|
|
+#include <sys/stat.h>
|
|
#include <stdlib.h>
|
|
#include <errno.h>
|
|
|
|
diff --git xorg-server-clean/hw/xfree86/drivers/Makefile.am xorg-server-workdir/hw/xfree86/drivers/Makefile.am
|
|
index 954c9f1..b916149 100644
|
|
--- xorg-server-clean/hw/xfree86/drivers/Makefile.am
|
|
+++ xorg-server-workdir/hw/xfree86/drivers/Makefile.am
|
|
@@ -1,8 +1,5 @@
|
|
SUBDIRS =
|
|
|
|
-if XORG_DRIVER_MODESETTING
|
|
-SUBDIRS += modesetting
|
|
-endif
|
|
if XORG_DRIVER_INPUT_INPUTTEST
|
|
SUBDIRS += inputtest
|
|
endif
|
|
diff --git xorg-server-clean/hw/xfree86/fbdevhw/fbdevhw.c xorg-server-workdir/hw/xfree86/fbdevhw/fbdevhw.c
|
|
index 3d8b92e..31a0430 100644
|
|
--- xorg-server-clean/hw/xfree86/fbdevhw/fbdevhw.c
|
|
+++ xorg-server-workdir/hw/xfree86/fbdevhw/fbdevhw.c
|
|
@@ -9,13 +9,10 @@
|
|
#include "xf86Modes.h"
|
|
#include "xf86_OSproc.h"
|
|
|
|
-/* pci stuff */
|
|
-#include "xf86Pci.h"
|
|
-
|
|
#include "xf86cmap.h"
|
|
|
|
#include "fbdevhw.h"
|
|
-#include "fbpriv.h"
|
|
+#include <linux/fb.h>
|
|
#include "globals.h"
|
|
#include <X11/extensions/dpmsconst.h>
|
|
|
|
@@ -259,6 +256,7 @@ fbdev2xfree_timing(struct fb_var_screeninfo *var, DisplayModePtr mode)
|
|
/**
|
|
* Try to find the framebuffer device for a given PCI device
|
|
*/
|
|
+#if 0
|
|
static int
|
|
fbdev_open_pci(struct pci_device *pPci, char **namep)
|
|
{
|
|
@@ -303,6 +301,7 @@ fbdev_open_pci(struct pci_device *pPci, char **namep)
|
|
xf86DrvMsg(-1, X_ERROR, "Unable to find a valid framebuffer device\n");
|
|
return -1;
|
|
}
|
|
+#endif
|
|
|
|
static int
|
|
fbdev_open(int scrnIndex, const char *dev, char **namep)
|
|
@@ -328,7 +327,7 @@ fbdev_open(int scrnIndex, const char *dev, char **namep)
|
|
xf86DrvMsg(scrnIndex, X_ERROR, "open %s: %s\n", dev, strerror(errno));
|
|
return -1;
|
|
}
|
|
-
|
|
+#if 0
|
|
/* only touch non-PCI devices on this path */
|
|
{
|
|
char buf[PATH_MAX] = {0};
|
|
@@ -344,7 +343,7 @@ fbdev_open(int scrnIndex, const char *dev, char **namep)
|
|
}
|
|
free(sysfs_path);
|
|
}
|
|
-
|
|
+#endif
|
|
if (namep) {
|
|
if (-1 == ioctl(fd, FBIOGET_FSCREENINFO, (void *) (&fix))) {
|
|
*namep = NULL;
|
|
@@ -363,14 +362,10 @@ fbdev_open(int scrnIndex, const char *dev, char **namep)
|
|
/* -------------------------------------------------------------------- */
|
|
|
|
Bool
|
|
-fbdevHWProbe(struct pci_device *pPci, char *device, char **namep)
|
|
+fbdevHWProbe(void* pPci, char *device, char **namep)
|
|
{
|
|
- int fd;
|
|
-
|
|
- if (pPci)
|
|
- fd = fbdev_open_pci(pPci, namep);
|
|
- else
|
|
- fd = fbdev_open(-1, device, namep);
|
|
+
|
|
+ int fd = fbdev_open(-1, device, namep);
|
|
|
|
if (-1 == fd)
|
|
return FALSE;
|
|
@@ -379,7 +374,7 @@ fbdevHWProbe(struct pci_device *pPci, char *device, char **namep)
|
|
}
|
|
|
|
Bool
|
|
-fbdevHWInit(ScrnInfoPtr pScrn, struct pci_device *pPci, char *device)
|
|
+fbdevHWInit(ScrnInfoPtr pScrn, void *pPci, char *device)
|
|
{
|
|
fbdevHWPtr fPtr;
|
|
|
|
@@ -387,10 +382,9 @@ fbdevHWInit(ScrnInfoPtr pScrn, struct pci_device *pPci, char *device)
|
|
fPtr = FBDEVHWPTR(pScrn);
|
|
|
|
/* open device */
|
|
- if (pPci)
|
|
- fPtr->fd = fbdev_open_pci(pPci, NULL);
|
|
- else
|
|
- fPtr->fd = fbdev_open(pScrn->scrnIndex, device, NULL);
|
|
+
|
|
+ fPtr->fd = fbdev_open(pScrn->scrnIndex, device, NULL);
|
|
+
|
|
if (-1 == fPtr->fd) {
|
|
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
|
|
"Failed to open framebuffer device, consult warnings"
|
|
diff --git xorg-server-clean/hw/xfree86/fbdevhw/fbdevhw.h xorg-server-workdir/hw/xfree86/fbdevhw/fbdevhw.h
|
|
index 4984ccf..bb3e2f8 100644
|
|
--- xorg-server-clean/hw/xfree86/fbdevhw/fbdevhw.h
|
|
+++ xorg-server-workdir/hw/xfree86/fbdevhw/fbdevhw.h
|
|
@@ -16,9 +16,9 @@ extern _X_EXPORT void fbdevHWFreeRec(ScrnInfoPtr pScrn);
|
|
|
|
extern _X_EXPORT int fbdevHWGetFD(ScrnInfoPtr pScrn);
|
|
|
|
-extern _X_EXPORT Bool fbdevHWProbe(struct pci_device *pPci, char *device,
|
|
+extern _X_EXPORT Bool fbdevHWProbe(void *pPci, char *device,
|
|
char **namep);
|
|
-extern _X_EXPORT Bool fbdevHWInit(ScrnInfoPtr pScrn, struct pci_device *pPci,
|
|
+extern _X_EXPORT Bool fbdevHWInit(ScrnInfoPtr pScrn, void *pPci,
|
|
char *device);
|
|
|
|
extern _X_EXPORT char *fbdevHWGetName(ScrnInfoPtr pScrn);
|
|
diff --git xorg-server-clean/hw/xfree86/os-support/bus/xf86Pci.h xorg-server-workdir/hw/xfree86/os-support/bus/xf86Pci.h
|
|
index 4dbe08b..ff713aa 100644
|
|
--- xorg-server-clean/hw/xfree86/os-support/bus/xf86Pci.h
|
|
+++ xorg-server-workdir/hw/xfree86/os-support/bus/xf86Pci.h
|
|
@@ -105,7 +105,10 @@
|
|
#include <X11/Xarch.h>
|
|
#include <X11/Xfuncproto.h>
|
|
#include "misc.h"
|
|
+
|
|
+#ifndef __astral__
|
|
#include <pciaccess.h>
|
|
+#endif
|
|
|
|
/*
|
|
* PCI cfg space definitions (e.g. stuff right out of the PCI spec)
|
|
diff --git xorg-server-clean/hw/xfree86/os-support/shared/posix_tty.c xorg-server-workdir/hw/xfree86/os-support/shared/posix_tty.c
|
|
index 0cb9788..d6df170 100644
|
|
--- xorg-server-clean/hw/xfree86/os-support/shared/posix_tty.c
|
|
+++ xorg-server-workdir/hw/xfree86/os-support/shared/posix_tty.c
|
|
@@ -56,6 +56,8 @@
|
|
#include <xorg-config.h>
|
|
#endif
|
|
|
|
+#include <termios.h>
|
|
+#include <errno.h>
|
|
#include <X11/X.h>
|
|
#include <xserver_poll.h>
|
|
#include "xf86.h"
|
|
diff --git xorg-server-clean/hw/xfree86/os-support/shared/sigio.c xorg-server-workdir/hw/xfree86/os-support/shared/sigio.c
|
|
index ad8af60..88eb52f 100644
|
|
--- xorg-server-clean/hw/xfree86/os-support/shared/sigio.c
|
|
+++ xorg-server-workdir/hw/xfree86/os-support/shared/sigio.c
|
|
@@ -56,6 +56,8 @@
|
|
#include <xorg-config.h>
|
|
#endif
|
|
|
|
+#include <sys/stat.h>
|
|
+#include <errno.h>
|
|
#include <X11/X.h>
|
|
#include <xserver_poll.h>
|
|
#include "xf86.h"
|
|
diff --git xorg-server-clean/include/dix-config.h.in xorg-server-workdir/include/dix-config.h.in
|
|
index 382d706..f296741 100644
|
|
--- xorg-server-clean/include/dix-config.h.in
|
|
+++ xorg-server-workdir/include/dix-config.h.in
|
|
@@ -403,6 +403,9 @@
|
|
/* Use libudev for kms enumeration */
|
|
#undef CONFIG_UDEV_KMS
|
|
|
|
+/* Use /dev/input evdev nodes for input auto configuration */
|
|
+#undef CONFIG_EVDEV
|
|
+
|
|
/* Use udev_monitor_filter_add_match_tag() */
|
|
#undef HAVE_UDEV_MONITOR_FILTER_ADD_MATCH_TAG
|
|
|
|
diff --git xorg-server-clean/include/do-not-use-config.h.in xorg-server-workdir/include/do-not-use-config.h.in
|
|
index 341c0da..8f54a44 100644
|
|
--- xorg-server-clean/include/do-not-use-config.h.in
|
|
+++ xorg-server-workdir/include/do-not-use-config.h.in
|
|
@@ -42,6 +42,9 @@
|
|
/* Use libudev for kms enumeration */
|
|
#undef CONFIG_UDEV_KMS
|
|
|
|
+/* Use /dev/input evdev nodes for input auto configuration */
|
|
+#undef CONFIG_EVDEV
|
|
+
|
|
/* Use wscons for input auto configuration */
|
|
#undef CONFIG_WSCONS
|
|
|
|
diff --git xorg-server-clean/include/meson.build xorg-server-workdir/include/meson.build
|
|
index 3521fa3..1d6c1e7 100644
|
|
--- xorg-server-clean/include/meson.build
|
|
+++ xorg-server-workdir/include/meson.build
|
|
@@ -94,6 +94,7 @@ conf_data.set('HAVE_LIBBSD', libbsd_dep.found() ? '1' : false)
|
|
conf_data.set('HAVE_SYSTEMD_DAEMON', libsystemd_daemon_dep.found() ? '1' : false)
|
|
conf_data.set('CONFIG_UDEV', build_udev ? '1' : false)
|
|
conf_data.set('CONFIG_UDEV_KMS', build_udev_kms ? '1' : false)
|
|
+conf_data.set('CONFIG_EVDEV', build_evdev ? '1' : false)
|
|
conf_data.set('HAVE_DBUS', build_dbus ? '1' : false)
|
|
conf_data.set('CONFIG_HAL', build_hal ? '1' : false)
|
|
conf_data.set('SYSTEMD_LOGIND', build_systemd_logind ? '1' : false)
|
|
diff --git xorg-server-clean/include/os.h xorg-server-workdir/include/os.h
|
|
index bb3348b..aac6cce 100644
|
|
--- xorg-server-clean/include/os.h
|
|
+++ xorg-server-workdir/include/os.h
|
|
@@ -51,6 +51,9 @@ SOFTWARE.
|
|
#include <stdarg.h>
|
|
#include <stdint.h>
|
|
#include <string.h>
|
|
+#ifdef __astral__
|
|
+#include <strings.h>
|
|
+#endif
|
|
#ifdef MONOTONIC_CLOCK
|
|
#include <time.h>
|
|
#endif
|
|
diff --git xorg-server-clean/meson.build xorg-server-workdir/meson.build
|
|
index a6afd55..43f918e 100644
|
|
--- xorg-server-clean/meson.build
|
|
+++ xorg-server-workdir/meson.build
|
|
@@ -166,9 +166,11 @@ glamor_option = get_option('glamor')
|
|
|
|
build_udev = get_option('udev')
|
|
build_udev_kms = get_option('udev_kms')
|
|
+evdev_option = get_option('evdev')
|
|
if ['windows', 'darwin', 'cygwin'].contains(host_machine.system())
|
|
build_udev = false
|
|
build_udev_kms = false
|
|
+ evdev_option = 'false'
|
|
hal_option = 'false'
|
|
endif
|
|
|
|
@@ -276,6 +278,16 @@ if build_udev and build_hal
|
|
error('Hotplugging through both libudev and hal not allowed')
|
|
endif
|
|
|
|
+if evdev_option == 'auto'
|
|
+ build_evdev = not build_udev and not build_hal and host_machine.system() == 'astral'
|
|
+else
|
|
+ build_evdev = evdev_option == 'true'
|
|
+endif
|
|
+
|
|
+if build_evdev and (build_udev or build_hal)
|
|
+ error('Hotplugging through evdev cannot be combined with libudev or hal')
|
|
+endif
|
|
+
|
|
build_dbus = build_hal or build_systemd_logind
|
|
|
|
udev_dep = dependency('', required:false)
|
|
diff --git xorg-server-clean/meson_options.txt xorg-server-workdir/meson_options.txt
|
|
index b12d521..bbd91c4 100644
|
|
--- xorg-server-clean/meson_options.txt
|
|
+++ xorg-server-workdir/meson_options.txt
|
|
@@ -63,6 +63,8 @@ option('pciaccess', type: 'boolean', value: 'true',
|
|
description: 'Xorg pciaccess support')
|
|
option('udev', type: 'boolean', value: 'true')
|
|
option('udev_kms', type: 'boolean', value: 'true')
|
|
+option('evdev', type: 'combo', choices: ['true', 'false', 'auto'], value: 'auto',
|
|
+ description: 'Use /dev/input evdev nodes for input auto configuration')
|
|
option('hal', type: 'combo', choices: ['true', 'false', 'auto'], value: 'auto',
|
|
description: 'Enable HAL integration')
|
|
option('systemd_logind', type: 'combo', choices: ['true', 'false', 'auto'], value: 'auto',
|
|
diff --git xorg-server-clean/os/access.c xorg-server-workdir/os/access.c
|
|
index b170304..53b90c5 100644
|
|
--- xorg-server-clean/os/access.c
|
|
+++ xorg-server-workdir/os/access.c
|
|
@@ -116,7 +116,7 @@ SOFTWARE.
|
|
#endif
|
|
#endif
|
|
|
|
-#if defined(SVR4) || (defined(SYSV) && defined(__i386__)) || defined(__GNU__)
|
|
+#if defined(SVR4) || (defined(SYSV) && defined(__i386__)) || defined(__GNU__) || defined(__astral__)
|
|
#include <sys/utsname.h>
|
|
#endif
|
|
#if defined(SYSV) && defined(__i386__)
|
|
diff --git xorg-server-clean/os/ospoll.c xorg-server-workdir/os/ospoll.c
|
|
index c68aabc..e74fdbe 100644
|
|
--- xorg-server-clean/os/ospoll.c
|
|
+++ xorg-server-workdir/os/ospoll.c
|
|
@@ -45,12 +45,6 @@
|
|
#define HAVE_OSPOLL 1
|
|
#endif
|
|
|
|
-#if !HAVE_OSPOLL && defined(HAVE_EPOLL_CREATE1)
|
|
-#include <sys/epoll.h>
|
|
-#define EPOLL 1
|
|
-#define HAVE_OSPOLL 1
|
|
-#endif
|
|
-
|
|
#if !HAVE_OSPOLL
|
|
#include "xserver_poll.h"
|
|
#define POLL 1
|