Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 7 Jan 2021 23:20:50 GMT
From:      Vladimir Kondratyev <wulf@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 9be6b22da9b2 - main - hidraw(4): Add HIDRAW_MAKE_UHID_ALIAS kernel option
Message-ID:  <202101072320.107NKokf063064@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by wulf:

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

commit 9be6b22da9b2df9903310a307f36f5297b1660b6
Author:     Vladimir Kondratyev <wulf@FreeBSD.org>
AuthorDate: 2020-12-13 09:37:55 +0000
Commit:     Vladimir Kondratyev <wulf@FreeBSD.org>
CommitDate: 2021-01-07 23:18:44 +0000

    hidraw(4): Add HIDRAW_MAKE_UHID_ALIAS kernel option
    
    which installs /dev/uhid# alias to hidraw character device for
    compatibility with some existing uhid(4) users like Firefox.
    As side effect it renames traditional uhid(4) driver to hidraw
    to make possible using of common unit number allocator.
    
    Requested by:   Greg V <greg_unrelenting.technology>
    Reviewed by:    hselasky (as part of D27992)
---
 sys/conf/options                |  1 +
 sys/dev/hid/hid.c               |  4 ++++
 sys/dev/hid/hid.h               |  3 +++
 sys/dev/hid/hidraw.c            |  9 ++++++++-
 sys/dev/usb/input/uhid.c        | 12 ++++++++++++
 sys/modules/hid/hidraw/Makefile |  2 +-
 sys/modules/usb/uhid/Makefile   |  4 ++--
 7 files changed, 31 insertions(+), 4 deletions(-)

diff --git a/sys/conf/options b/sys/conf/options
index 789def58cb48..e69ee92d1136 100644
--- a/sys/conf/options
+++ b/sys/conf/options
@@ -1020,3 +1020,4 @@ HID_DEBUG	opt_hid.h
 IICHID_DEBUG	opt_hid.h
 IICHID_SAMPLING	opt_hid.h
 HKBD_DFLT_KEYMAP	opt_hkbd.h
+HIDRAW_MAKE_UHID_ALIAS	opt_hid.h
diff --git a/sys/dev/hid/hid.c b/sys/dev/hid/hid.c
index 5a91692e1038..699bfa4a8bb3 100644
--- a/sys/dev/hid/hid.c
+++ b/sys/dev/hid/hid.c
@@ -58,6 +58,10 @@ SYSCTL_NODE(_hw, OID_AUTO, hid, CTLFLAG_RW, 0, "HID debugging");
 SYSCTL_INT(_hw_hid, OID_AUTO, debug, CTLFLAG_RWTUN,
     &hid_debug, 0, "Debug level");
 
+#ifdef HIDRAW_MAKE_UHID_ALIAS
+devclass_t hidraw_devclass;
+#endif
+
 static void hid_clear_local(struct hid_item *);
 static uint8_t hid_get_byte(struct hid_data *s, const uint16_t wSize);
 
diff --git a/sys/dev/hid/hid.h b/sys/dev/hid/hid.h
index cea33f7b4af8..e88cbba04d9a 100644
--- a/sys/dev/hid/hid.h
+++ b/sys/dev/hid/hid.h
@@ -193,6 +193,9 @@
 #define	HID_MAX_AUTO_QUIRK	8	/* maximum number of dynamic quirks */
 #define	HID_PNP_ID_SIZE		20	/* includes null terminator */
 
+/* Share unit number pool between uhid and hidraw */
+extern devclass_t hidraw_devclass;
+
 /* Declare global HID debug variable. */
 extern int hid_debug;
 
diff --git a/sys/dev/hid/hidraw.c b/sys/dev/hid/hidraw.c
index 1da8cb202bd9..6cc67ff14d23 100644
--- a/sys/dev/hid/hidraw.c
+++ b/sys/dev/hid/hidraw.c
@@ -38,6 +38,8 @@
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD$");
 
+#include "opt_hid.h"
+
 #include <sys/param.h>
 #include <sys/bus.h>
 #include <sys/conf.h>
@@ -207,6 +209,9 @@ hidraw_attach(device_t self)
 		hidraw_detach(self);
 		return (error);
 	}
+#ifdef HIDRAW_MAKE_UHID_ALIAS
+	(void)make_dev_alias(sc->dev, "uhid%d", device_get_unit(self));
+#endif
 
 	hidbus_set_lock(self, &sc->sc_mtx);
 	hidbus_set_intr(self, hidraw_intr, sc);
@@ -893,7 +898,9 @@ static driver_t hidraw_driver = {
 	sizeof(struct hidraw_softc)
 };
 
-static devclass_t hidraw_devclass;
+#ifndef HIDRAW_MAKE_UHID_ALIAS
+devclass_t hidraw_devclass;
+#endif
 
 DRIVER_MODULE(hidraw, hidbus, hidraw_driver, hidraw_devclass, NULL, 0);
 MODULE_DEPEND(hidraw, hidbus, 1, 1, 1);
diff --git a/sys/dev/usb/input/uhid.c b/sys/dev/usb/input/uhid.c
index dd463dd7de8c..e5eae534a6d0 100644
--- a/sys/dev/usb/input/uhid.c
+++ b/sys/dev/usb/input/uhid.c
@@ -43,6 +43,8 @@ __FBSDID("$FreeBSD$");
  * HID spec: http://www.usb.org/developers/devclass_docs/HID1_11.pdf
  */
 
+#include "opt_hid.h"
+
 #include <sys/stdint.h>
 #include <sys/stddef.h>
 #include <sys/param.h>
@@ -891,7 +893,9 @@ uhid_detach(device_t dev)
 	return (0);
 }
 
+#ifndef HIDRAW_MAKE_UHID_ALIAS
 static devclass_t uhid_devclass;
+#endif
 
 static device_method_t uhid_methods[] = {
 	DEVMETHOD(device_probe, uhid_probe),
@@ -902,12 +906,20 @@ static device_method_t uhid_methods[] = {
 };
 
 static driver_t uhid_driver = {
+#ifdef HIDRAW_MAKE_UHID_ALIAS
+	.name = "hidraw",
+#else
 	.name = "uhid",
+#endif
 	.methods = uhid_methods,
 	.size = sizeof(struct uhid_softc),
 };
 
+#ifdef HIDRAW_MAKE_UHID_ALIAS
+DRIVER_MODULE(uhid, uhub, uhid_driver, hidraw_devclass, NULL, 0);
+#else
 DRIVER_MODULE(uhid, uhub, uhid_driver, uhid_devclass, NULL, 0);
+#endif
 MODULE_DEPEND(uhid, usb, 1, 1, 1);
 MODULE_DEPEND(uhid, hid, 1, 1, 1);
 MODULE_VERSION(uhid, 1);
diff --git a/sys/modules/hid/hidraw/Makefile b/sys/modules/hid/hidraw/Makefile
index e6305bc5bdb6..fdf9c31c9f3a 100644
--- a/sys/modules/hid/hidraw/Makefile
+++ b/sys/modules/hid/hidraw/Makefile
@@ -4,6 +4,6 @@
 
 KMOD=	hidraw
 SRCS=	hidraw.c
-SRCS+=	bus_if.h device_if.h
+SRCS+=	opt_hid.h bus_if.h device_if.h
 
 .include <bsd.kmod.mk>
diff --git a/sys/modules/usb/uhid/Makefile b/sys/modules/usb/uhid/Makefile
index f1fa4f660b36..1ae7b012903f 100644
--- a/sys/modules/usb/uhid/Makefile
+++ b/sys/modules/usb/uhid/Makefile
@@ -30,7 +30,7 @@ S=     ${SRCTOP}/sys
 .PATH: $S/dev/usb/input
 
 KMOD=	uhid
-SRCS=	opt_bus.h opt_usb.h device_if.h bus_if.h usb_if.h vnode_if.h usbdevs.h \
-	uhid.c
+SRCS=	opt_bus.h opt_hid.h opt_usb.h device_if.h bus_if.h usb_if.h \
+	vnode_if.h usbdevs.h uhid.c
 
 .include <bsd.kmod.mk>



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202101072320.107NKokf063064>