Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 09 Jan 2026 21:25:43 +0000
From:      Warner Losh <imp@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Cc:        Alex S <iwtcex@gmail.com>
Subject:   git: d5e5fed1edfc - main - linux: add hidraw ioctl handler
Message-ID:  <69617257.ea0b.156c9f4a@gitrepo.freebsd.org>

index | next in thread | raw e-mail

The branch main has been updated by imp:

URL: https://cgit.FreeBSD.org/src/commit/?id=d5e5fed1edfc3828f594fa8727d1c62c36b54e16

commit d5e5fed1edfc3828f594fa8727d1c62c36b54e16
Author:     Alex S <iwtcex@gmail.com>
AuthorDate: 2025-12-31 09:11:53 +0000
Commit:     Warner Losh <imp@FreeBSD.org>
CommitDate: 2026-01-09 21:18:16 +0000

    linux: add hidraw ioctl handler
    
    First step towards getting the Linux version of SDL with HIDAPI gamepad
    drivers to work. Not quite complte as SDL expects to find some
    information in sysfs as well.
    
    Signed-off-by: Alex S <iwtcex@gmail.com>
    Reviewed by: imp
    Pull Request: https://github.com/freebsd/freebsd-src/pull/1938
---
 sys/compat/linux/linux_ioctl.c | 51 ++++++++++++++++++++++++++++++++++++++++++
 sys/compat/linux/linux_ioctl.h | 19 ++++++++++++++++
 2 files changed, 70 insertions(+)

diff --git a/sys/compat/linux/linux_ioctl.c b/sys/compat/linux/linux_ioctl.c
index f6c239b08ac2..d2fa0331026b 100644
--- a/sys/compat/linux/linux_ioctl.c
+++ b/sys/compat/linux/linux_ioctl.c
@@ -58,6 +58,7 @@
 #include <net/if_types.h>
 
 #include <dev/evdev/input.h>
+#include <dev/hid/hidraw.h>
 #include <dev/usb/usb_ioctl.h>
 
 #ifdef COMPAT_LINUX32
@@ -113,6 +114,7 @@ DEFINE_LINUX_IOCTL_SET(kcov, KCOV);
 #ifndef COMPAT_LINUX32
 DEFINE_LINUX_IOCTL_SET(nvme, NVME);
 #endif
+DEFINE_LINUX_IOCTL_SET(hidraw, HIDRAW);
 
 #undef DEFINE_LINUX_IOCTL_SET
 
@@ -3637,6 +3639,55 @@ linux_ioctl_nvme(struct thread *td, struct linux_ioctl_args *args)
 }
 #endif
 
+static int
+linux_ioctl_hidraw(struct thread *td, struct linux_ioctl_args *args)
+{
+	int len = (args->cmd & 0x3fff0000) >> 16;
+	if (len > 8192)
+		return (EINVAL);
+
+	switch (args->cmd & 0xffff) {
+	case LINUX_HIDIOCGRDESCSIZE:
+		args->cmd = HIDIOCGRDESCSIZE;
+		break;
+	case LINUX_HIDIOCGRDESC:
+		args->cmd = HIDIOCGRDESC;
+		break;
+	case LINUX_HIDIOCGRAWINFO:
+		args->cmd = HIDIOCGRAWINFO;
+		break;
+	case LINUX_HIDIOCGRAWNAME:
+		args->cmd = HIDIOCGRAWNAME(len);
+		break;
+	case LINUX_HIDIOCGRAWPHYS:
+		args->cmd = HIDIOCGRAWPHYS(len);
+		break;
+	case LINUX_HIDIOCSFEATURE:
+		args->cmd = HIDIOCSFEATURE(len);
+		break;
+	case LINUX_HIDIOCGFEATURE:
+		args->cmd = HIDIOCGFEATURE(len);
+		break;
+	case LINUX_HIDIOCGRAWUNIQ:
+		args->cmd = HIDIOCGRAWUNIQ(len);
+		break;
+	case LINUX_HIDIOCSINPUT:
+		args->cmd = HIDIOCSINPUT(len);
+		break;
+	case LINUX_HIDIOCGINPUT:
+		args->cmd = HIDIOCGINPUT(len);
+		break;
+	case LINUX_HIDIOCSOUTPUT:
+		args->cmd = HIDIOCSOUTPUT(len);
+		break;
+	case LINUX_HIDIOCGOUTPUT:
+		args->cmd = HIDIOCGOUTPUT(len);
+		break;
+	}
+
+	return (sys_ioctl(td, (struct ioctl_args *)args));
+}
+
 /*
  * main ioctl syscall function
  */
diff --git a/sys/compat/linux/linux_ioctl.h b/sys/compat/linux/linux_ioctl.h
index d01a30538981..116a4e676228 100644
--- a/sys/compat/linux/linux_ioctl.h
+++ b/sys/compat/linux/linux_ioctl.h
@@ -806,6 +806,25 @@
 #define LINUX_IOCTL_NVME_MIN	LINUX_NVME_IOCTL_ID
 #define LINUX_IOCTL_NVME_MAX	LINUX_NVME_IOCTL_RESCAN
 
+/*
+ * hidraw
+ */
+#define LINUX_HIDIOCGRDESCSIZE	0x4801
+#define LINUX_HIDIOCGRDESC	0x4802
+#define LINUX_HIDIOCGRAWINFO	0x4803
+#define LINUX_HIDIOCGRAWNAME	0x4804
+#define LINUX_HIDIOCGRAWPHYS	0x4805
+#define LINUX_HIDIOCSFEATURE	0x4806
+#define LINUX_HIDIOCGFEATURE	0x4807
+#define LINUX_HIDIOCGRAWUNIQ	0x4808
+#define LINUX_HIDIOCSINPUT	0x4809
+#define LINUX_HIDIOCGINPUT	0x480A
+#define LINUX_HIDIOCSOUTPUT	0x480B
+#define LINUX_HIDIOCGOUTPUT	0x480C
+
+#define LINUX_IOCTL_HIDRAW_MIN	LINUX_HIDIOCGRDESCSIZE
+#define LINUX_IOCTL_HIDRAW_MAX	LINUX_HIDIOCGOUTPUT
+
 /*
  * Pluggable ioctl handlers
  */


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?69617257.ea0b.156c9f4a>