aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQuentin Thébault <quentin.thebault@defenso.fr>2026-06-14 16:34:51 +0000
committerKyle Evans <kevans@FreeBSD.org>2026-06-14 16:34:51 +0000
commit746c374aa94b46712e6defb3ab56dd2d6ad8db64 (patch)
treefd92df6168dfc1ece1f785e4d5d3c93a1e1b17b8
parent2e1f5b78976ad09bee41e602e75e79a0c3892e59 (diff)
evdev: add devnum sysctl
Add a sysctl entry for the evdev device number (devnum) to allow libudev-devd to populate the corresponding device information fields (MAJOR and MINOR) when running in a jail with no input devices exposed through devfs. Signed-off-by: Quentin Thébault <quentin.thebault@defenso.fr> Reviewed by: wulf Sponsored by: Defenso MFC after: 3 days Differential Revision: https://reviews.freebsd.org/D56968
-rw-r--r--sys/dev/evdev/evdev.c6
-rw-r--r--sys/dev/evdev/evdev_private.h1
2 files changed, 7 insertions, 0 deletions
diff --git a/sys/dev/evdev/evdev.c b/sys/dev/evdev/evdev.c
index 4dcd6f23d338..b8628d570a3c 100644
--- a/sys/dev/evdev/evdev.c
+++ b/sys/dev/evdev/evdev.c
@@ -283,6 +283,11 @@ evdev_sysctl_create(struct evdev_dev *evdev)
SYSCTL_CHILDREN(ev_sysctl_tree), OID_AUTO, "sw_bits", CTLFLAG_RD,
evdev->ev_sw_flags, sizeof(evdev->ev_sw_flags), "",
"Input device supported switch events");
+
+ SYSCTL_ADD_U64(&evdev->ev_sysctl_ctx,
+ SYSCTL_CHILDREN(ev_sysctl_tree), OID_AUTO, "devnum", CTLFLAG_RD,
+ &evdev->ev_devnum, 0,
+ "Input device number");
}
static int
@@ -328,6 +333,7 @@ evdev_register_common(struct evdev_dev *evdev)
ret = evdev_cdev_create(evdev);
if (ret != 0)
goto bail_out;
+ evdev->ev_devnum = dev2udev(evdev->ev_cdev);
/* Create sysctls (for device enumeration without /dev/input access rights) */
evdev_sysctl_create(evdev);
diff --git a/sys/dev/evdev/evdev_private.h b/sys/dev/evdev/evdev_private.h
index 4c371e538598..65da48745dc9 100644
--- a/sys/dev/evdev/evdev_private.h
+++ b/sys/dev/evdev/evdev_private.h
@@ -114,6 +114,7 @@ struct evdev_dev
uid_t ev_cdev_uid;
gid_t ev_cdev_gid;
int ev_cdev_mode;
+ dev_t ev_devnum;
int ev_unit;
enum evdev_lock_type ev_lock_type;
struct mtx * ev_state_lock; /* State lock */