Files
Astral/patches/xorg-server/jinx-working-patch.patch
T

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