On Mon, Dec 28, 2020 at 05:03:14PM -0700, Thomas Frohwein wrote: > Hi, > > This is a diff to propose a new device type for USB gamecontrollers, > 'ujoy'. > > Rationale > --------- > > Since the tightening of security around USB devices, USB > gamecontrollers that generally attach to the kitchen-sink uhid device > don't work out of the box anymore since read permissions are absent. As > a consequence, USB gamecontrollers don't work out of the box anymore; > requiring a root user to find what uhid device the controller is > attached to and chmod +r that one. This poses a barrier to using those > devices, as well as in my opinion a security risk by enticing users to > indiscriminately do '# chmod +r /dev/uhid*' in order to not have to > re-apply permissions on different uhid devices multiple times. > > The proposed solution is inspired by the implementation of fido(4) [1]; > a similarly narrow use case for a certain type of USB devices. It > creates a device for gamecontrollers that has the minimum required > permissions, but won't require chmod(1)'ing device files to get the > controller working. > > Implementation in this Diff > --------------------------- > > This diff is largely based on reyk's commit for the fido(4) device from > December 2019 [1]. It creates a ujoy device and attaches USB devices > identified as HUG_JOYSTICK or HUG_GAME_PAD. > > ujoyopen() is set up such that it only allows read-only access. If it is > opened with write permissions, it should error with EPERM. Only a > subset of ioctls is allowed in ujoyioctl(), based on what I could find > that is used in devel/sdl2 (USB_GET_DEVICEINFO,USB_GET_REPORT, > USB_GET_REPORT_DESC,USB_GET_REPORT_ID), as well as FIONBIO and > FIOASYNC. > > This contains conf.c and MAKEDEV.md bits for the same architectures as > fido(4). A small man page, as well as updates to other pertinent man > pages (usb(4), uhidev(4)) are included, again following the example of > the commits for the fido(4) device. > > Credit to brynet@ who helped me extensively with this diff. > > Testing > ------- > > A simple way to test this without needing to do a full release is > building a kernel with the diff and booting into it, then creating the > updated MAKEDEV script with: > > $ cd /usr/src/etc/etc.amd64/ > $ make # this will create MAKEDEV in etc.amd64 > $ cd /dev > # sh /usr/src/etc/etc.amd64/MAKEDEV ujoy > > This creates 2 device ujoy/0 and ujoy/1 by default. The device is > read-only by default (444). > > Plug in your USB gamecontroller and check in dmesg that it attaches as > ujoy, not uhid. > > The simplest way to test is with usbhidctl(1): > > $ usbhidctl -f /dev/ujoy/0 -l > > This will loop through printing the state of buttons, sticks etc. until > exited with Crtl-C. > > Another way to test is with games/sdl-jstest. As the SDL backends use > /dev/uhid* to find gamecontrollers, the way I tested this is by > repurposing /dev/uhid0 with mknod(8) (note major 100 is for amd64): > > $ cd /dev > # rm uhid0 > # mknod -m 444 uhid0 c 100 0 > > I put the diff through a release(8) without xenocara on amd64, and it > built base without problems and /dev/MAKEDEV and the /dev/ujoy directory > all look correct. > > I have tested usbhidctl and sdl-jstest with an XBox 360 gamepad and the > Logitech F310 gamepad, the latter both in DInput and XInput mode. All > of those work as expected. > > Issues/Follow-up Tasks > ---------------------- > > As ujoy devices don't attach to /dev/uhid* anymore, ports that use > gamecontrollers will need to be patched. This seems to be mostly (if > not exclusively) sdl/sdl2-based ports, so I anticipate that patching > these 2 ports will take care of the bulk of the use cases. > > On other OS's, writing to gamecontrollers is used at times for the > "rumble" functionality of the controller, or setting LEDs (like the > circle LED on XBox 360 controllers that can reflect what player number > the gamepad is for). Those have to my knowledge never worked on OpenBSD > and are not of any immediate interest as far as I can tell. > > ok? comments? > > [1] https://marc.info/?l=openbsd-cvs&m=157658815523208&q=mbox
Nice work! I think this makes a lot of sense (slightly biased), I agree that it felt very wrong advising users to change permissions for uhid* when they plugged in a gamepad, exposing a bunch of kernel functionality to games that don't need it. Having them Just-Work (tm) by default, while doing so in a clean and safe way will help the experience a lot for gamers (and slacking developers) alike! :-) Some ports patches are still required if this goes in, as mentioned devel/sdl2 at the very least, but the current situation as it stands controllers already don't work out of the box. thfr@ already has my ok and some general "good idea" from others, but feedback is appreciated, as well as any tips for getting this ready to go in. -Bryan. > Index: etc/MAKEDEV.common > =================================================================== > RCS file: /cvs/src/etc/MAKEDEV.common,v > retrieving revision 1.111 > diff -u -p -r1.111 MAKEDEV.common > --- etc/MAKEDEV.common 6 Jul 2020 06:11:26 -0000 1.111 > +++ etc/MAKEDEV.common 28 Dec 2020 03:25:04 -0000 > @@ -181,6 +181,7 @@ dnl > target(usb, usb, 0, 1, 2, 3, 4, 5, 6, 7)dnl > target(usb, uhid, 0, 1, 2, 3, 4, 5, 6, 7)dnl > twrget(usb, fido, fido)dnl > +twrget(usb, ujoy, ujoy)dnl > target(usb, ulpt, 0, 1)dnl > target(usb, ugen, 0, 1, 2, 3, 4, 5, 6, 7)dnl > target(usb, ttyU, 0, 1, 2, 3)dnl > @@ -365,6 +366,10 @@ __devitem(fido, fido, fido/* nodes, fido > _mkdev(fido, fido, {-RMlist[${#RMlist[*]}]=";mkdir -p fido;rm -f" n=0 > while [ $n -lt 4 ];do M fido/$n c major_fido_c $n 666;n=Add($n, 1);done > MKlist[${#MKlist[*]}]=";chmod 555 fido"-})dnl > +__devitem(ujoy, ujoy, ujoy/* nodes, ujoy)dnl > +_mkdev(ujoy, ujoy, {-RMlist[${#RMlist[*]}]=";mkdir -p ujoy;rm -f" n=0 > + while [ $n -lt 2 ];do M ujoy/$n c major_ujoy_c $n 444;n=Add($n, 1);done > + MKlist[${#MKlist[*]}]=";chmod 555 ujoy"-})dnl > __devitem(ulpt, ulpt*, Printer devices)dnl > _mcdev({-ulpt-}, ulpt*, {-ulpt-}, {-major_ulpt_c-}, 600)dnl > __devitem(ttyU, ttyU*, USB serial ports,ucom)dnl > Index: etc/etc.alpha/MAKEDEV.md > =================================================================== > RCS file: /cvs/src/etc/etc.alpha/MAKEDEV.md,v > retrieving revision 1.76 > diff -u -p -r1.76 MAKEDEV.md > --- etc/etc.alpha/MAKEDEV.md 6 Jul 2020 06:11:26 -0000 1.76 > +++ etc/etc.alpha/MAKEDEV.md 28 Dec 2020 03:25:04 -0000 > @@ -56,6 +56,7 @@ _DEV(uall) > _DEV(ugen, 48) > _DEV(uhid, 46) > _DEV(fido, 70) > +_DEV(ujoy, 72) > _DEV(ulpt, 47) > _DEV(usb, 45) > _TITLE(spec) > Index: etc/etc.amd64/MAKEDEV.md > =================================================================== > RCS file: /cvs/src/etc/etc.amd64/MAKEDEV.md,v > retrieving revision 1.76 > diff -u -p -r1.76 MAKEDEV.md > --- etc/etc.amd64/MAKEDEV.md 6 Jul 2020 06:11:26 -0000 1.76 > +++ etc/etc.amd64/MAKEDEV.md 28 Dec 2020 03:25:04 -0000 > @@ -60,6 +60,7 @@ _DEV(uall) > _DEV(ugen, 63) > _DEV(uhid, 62) > _DEV(fido, 98) > +_DEV(ujoy, 100) > _DEV(ulpt, 64) > _DEV(usb, 61) > _TITLE(spec) > Index: etc/etc.arm64/MAKEDEV.md > =================================================================== > RCS file: /cvs/src/etc/etc.arm64/MAKEDEV.md,v > retrieving revision 1.10 > diff -u -p -r1.10 MAKEDEV.md > --- etc/etc.arm64/MAKEDEV.md 6 Jul 2020 06:11:26 -0000 1.10 > +++ etc/etc.arm64/MAKEDEV.md 28 Dec 2020 03:25:04 -0000 > @@ -52,6 +52,7 @@ _DEV(uall) > _DEV(ugen, 63) > _DEV(uhid, 62) > _DEV(fido, 98) > +_DEV(ujoy, 100) > _DEV(ulpt, 64) > _DEV(usb, 61) > _TITLE(spec) > Index: etc/etc.armv7/MAKEDEV.md > =================================================================== > RCS file: /cvs/src/etc/etc.armv7/MAKEDEV.md,v > retrieving revision 1.18 > diff -u -p -r1.18 MAKEDEV.md > --- etc/etc.armv7/MAKEDEV.md 6 Jul 2020 06:11:26 -0000 1.18 > +++ etc/etc.armv7/MAKEDEV.md 28 Dec 2020 03:25:04 -0000 > @@ -61,6 +61,7 @@ _DEV(uall) > _DEV(ugen, 70) > _DEV(uhid, 65) > _DEV(fido, 106) > +_DEV(ujoy, 108) > _DEV(ulpt, 66) > _DEV(usb, 64) > _TITLE(spec) > Index: etc/etc.hppa/MAKEDEV.md > =================================================================== > RCS file: /cvs/src/etc/etc.hppa/MAKEDEV.md,v > retrieving revision 1.65 > diff -u -p -r1.65 MAKEDEV.md > --- etc/etc.hppa/MAKEDEV.md 6 Jul 2020 06:11:26 -0000 1.65 > +++ etc/etc.hppa/MAKEDEV.md 28 Dec 2020 03:25:04 -0000 > @@ -54,6 +54,7 @@ _DEV(uall) > _DEV(usb, 40) > _DEV(uhid, 41) > _DEV(fido, 61) > +_DEV(ujoy, 63) > _DEV(ugen, 42) > _DEV(ulpt, 43) > _DEV(ttyU, 45) > Index: etc/etc.i386/MAKEDEV.md > =================================================================== > RCS file: /cvs/src/etc/etc.i386/MAKEDEV.md,v > retrieving revision 1.91 > diff -u -p -r1.91 MAKEDEV.md > --- etc/etc.i386/MAKEDEV.md 6 Jul 2020 06:11:27 -0000 1.91 > +++ etc/etc.i386/MAKEDEV.md 28 Dec 2020 03:25:05 -0000 > @@ -61,6 +61,7 @@ _DEV(uall) > _DEV(ugen, 63) > _DEV(uhid, 62) > _DEV(fido, 98) > +_DEV(ujoy, 100) > _DEV(ulpt, 64) > _DEV(usb, 61) > _TITLE(spec) > Index: etc/etc.landisk/MAKEDEV.md > =================================================================== > RCS file: /cvs/src/etc/etc.landisk/MAKEDEV.md,v > retrieving revision 1.48 > diff -u -p -r1.48 MAKEDEV.md > --- etc/etc.landisk/MAKEDEV.md 6 Jul 2020 06:11:27 -0000 1.48 > +++ etc/etc.landisk/MAKEDEV.md 28 Dec 2020 03:25:05 -0000 > @@ -65,6 +65,7 @@ _DEV(uall) > _DEV(ugen, 70) > _DEV(uhid, 65) > _DEV(fido, 106) > +_DEV(ujoy, 108) > _DEV(ulpt, 66) > _DEV(usb, 64) > _TITLE(spec) > Index: etc/etc.loongson/MAKEDEV.md > =================================================================== > RCS file: /cvs/src/etc/etc.loongson/MAKEDEV.md,v > retrieving revision 1.32 > diff -u -p -r1.32 MAKEDEV.md > --- etc/etc.loongson/MAKEDEV.md 6 Jul 2020 06:11:27 -0000 1.32 > +++ etc/etc.loongson/MAKEDEV.md 28 Dec 2020 03:25:05 -0000 > @@ -60,6 +60,7 @@ _DEV(uall) > _DEV(ugen, 63) > _DEV(uhid, 62) > _DEV(fido, 88) > +_DEV(ujoy, 90) > _DEV(ulpt, 64) > _DEV(usb, 61) > _TITLE(spec) > Index: etc/etc.macppc/MAKEDEV.md > =================================================================== > RCS file: /cvs/src/etc/etc.macppc/MAKEDEV.md,v > retrieving revision 1.75 > diff -u -p -r1.75 MAKEDEV.md > --- etc/etc.macppc/MAKEDEV.md 6 Jul 2020 06:11:27 -0000 1.75 > +++ etc/etc.macppc/MAKEDEV.md 28 Dec 2020 03:25:05 -0000 > @@ -70,6 +70,7 @@ _DEV(ttyU, 66) > _DEV(ugen, 63) > _DEV(uhid, 62) > _DEV(fido, 90) > +_DEV(ujoy, 92) > _DEV(ulpt, 64) > _DEV(usb, 61) > _TITLE(spec) > Index: etc/etc.octeon/MAKEDEV.md > =================================================================== > RCS file: /cvs/src/etc/etc.octeon/MAKEDEV.md,v > retrieving revision 1.19 > diff -u -p -r1.19 MAKEDEV.md > --- etc/etc.octeon/MAKEDEV.md 6 Jul 2020 06:11:27 -0000 1.19 > +++ etc/etc.octeon/MAKEDEV.md 28 Dec 2020 03:25:05 -0000 > @@ -67,6 +67,7 @@ _DEV(uall) > _DEV(usb, 61) > _DEV(uhid, 62) > _DEV(fido, 76) > +_DEV(ujoy, 78) > _TITLE(spec) > _DEV(au, 44) > _DEV(bio, 49) > Index: etc/etc.powerpc64/MAKEDEV.md > =================================================================== > RCS file: /cvs/src/etc/etc.powerpc64/MAKEDEV.md,v > retrieving revision 1.6 > diff -u -p -r1.6 MAKEDEV.md > --- etc/etc.powerpc64/MAKEDEV.md 24 Oct 2020 21:10:41 -0000 1.6 > +++ etc/etc.powerpc64/MAKEDEV.md 28 Dec 2020 03:25:05 -0000 > @@ -52,6 +52,7 @@ _DEV(uall) > _DEV(ugen, 49) > _DEV(uhid, 50) > _DEV(fido, 51) > +_DEV(ujoy, 94) > _DEV(ulpt, 65) > _DEV(usb, 48) > _TITLE(spec) > Index: etc/etc.sgi/MAKEDEV.md > =================================================================== > RCS file: /cvs/src/etc/etc.sgi/MAKEDEV.md,v > retrieving revision 1.54 > diff -u -p -r1.54 MAKEDEV.md > --- etc/etc.sgi/MAKEDEV.md 6 Jul 2020 06:11:27 -0000 1.54 > +++ etc/etc.sgi/MAKEDEV.md 28 Dec 2020 03:25:05 -0000 > @@ -69,6 +69,7 @@ _DEV(uall) > _DEV(ugen, 63) > _DEV(uhid, 62) > _DEV(fido, 76) > +_DEV(ujoy, 78) > _DEV(ulpt, 64) > _DEV(usb, 61) > _TITLE(spec) > Index: etc/etc.sparc64/MAKEDEV.md > =================================================================== > RCS file: /cvs/src/etc/etc.sparc64/MAKEDEV.md,v > retrieving revision 1.95 > diff -u -p -r1.95 MAKEDEV.md > --- etc/etc.sparc64/MAKEDEV.md 22 Jul 2020 14:04:37 -0000 1.95 > +++ etc/etc.sparc64/MAKEDEV.md 28 Dec 2020 03:25:05 -0000 > @@ -104,6 +104,7 @@ _DEV(uall) > _DEV(ugen, 92) > _DEV(uhid, 91) > _DEV(fido, 137) > +_DEV(ujoy, 139) > _DEV(ulpt, 93) > _DEV(usb, 90) > _TITLE(spec) > Index: share/man/man4/Makefile > =================================================================== > RCS file: /cvs/src/share/man/man4/Makefile,v > retrieving revision 1.790 > diff -u -p -r1.790 Makefile > --- share/man/man4/Makefile 6 Dec 2020 20:48:12 -0000 1.790 > +++ share/man/man4/Makefile 28 Dec 2020 03:25:31 -0000 > @@ -84,7 +84,7 @@ MAN= aac.4 abcrtc.4 abl.4 ac97.4 acphy.4 > ubsec.4 ucom.4 uchcom.4 ucrcom.4 ucycom.4 ukspan.4 uslhcom.4 \ > udav.4 udcf.4 udl.4 udp.4 udsbr.4 \ > uftdi.4 ugen.4 ugl.4 ugold.4 uguru.4 uhci.4 uhid.4 uhidev.4 uipaq.4 \ > - uk.4 ukbd.4 \ > + ujoy.4 uk.4 ukbd.4 \ > ukphy.4 ulpt.4 umass.4 umb.4 umbg.4 umcs.4 umct.4 umidi.4 umodem.4 \ > ums.4 umsm.4 umstc.4 umt.4 unix.4 uonerng.4 uow.4 uoaklux.4 uoakrh.4 \ > uoakv.4 upd.4 upgt.4 upl.4 uplcom.4 ural.4 ure.4 url.4 urlphy.4 \ > Index: share/man/man4/uhidev.4 > =================================================================== > RCS file: /cvs/src/share/man/man4/uhidev.4,v > retrieving revision 1.12 > diff -u -p -r1.12 uhidev.4 > --- share/man/man4/uhidev.4 21 Aug 2020 19:02:46 -0000 1.12 > +++ share/man/man4/uhidev.4 28 Dec 2020 03:25:31 -0000 > @@ -40,6 +40,7 @@ > .Cd "ucycom* at uhidev?" > .Cd "ugold* at uhidev?" > .Cd "uhid* at uhidev?" > +.Cd "ujoy* at uhidev?" > .Cd "ukbd* at uhidev?" > .Cd "ums* at uhidev?" > .Cd "umstc* at uhidev?" > @@ -73,6 +74,7 @@ only dispatches data to them based on th > .Xr ucycom 4 , > .Xr ugold 4 , > .Xr uhid 4 , > +.Xr ujoy 4 , > .Xr ukbd 4 , > .Xr ums 4 , > .Xr umstc 4 , > Index: share/man/man4/ujoy.4 > =================================================================== > RCS file: share/man/man4/ujoy.4 > diff -N share/man/man4/ujoy.4 > --- /dev/null 1 Jan 1970 00:00:00 -0000 > +++ share/man/man4/ujoy.4 28 Dec 2020 03:25:31 -0000 > @@ -0,0 +1,53 @@ > +.\" $OpenBSD: ujoy.4,v 1.4 2020/08/21 19:02:46 mglocker Exp $ > +.\" > +.\" Copyright (c) 2020 Thomas Frohwein <t...@openbsd.org> > +.\" Copyright (c) 2020 Bryan Steele <bry...@openbsd.org> > +.\" > +.\" Permission to use, copy, modify, and distribute this software for any > +.\" purpose with or without fee is hereby granted, provided that the above > +.\" copyright notice and this permission notice appear in all copies. > +.\" > +.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES > +.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF > +.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR > +.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES > +.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN > +.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF > +.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. > +.\" > +.Dd $Mdocdate: December 27 2020 $ > +.Dt UJOY 4 > +.Os > +.Sh NAME > +.Nm ujoy > +.Nd USB joystick/gamecontroller > +.Sh SYNOPSIS > +.Cd "ujoy* at uhidev?" > +.Sh DESCRIPTION > +The > +.Nm > +driver provides support for USB joysticks and other gamecontrollers. > +They are Human Interface Devices (HID) which can be accessed via the > +.Pa /dev/ujoy/N > +interface. > +.Pp > +The driver is compatible with the > +.Xr read 2 , > +and a subset of > +.Xr ioctl 2 > +operations of the generic > +.Xr uhid 4 > +device. > +.Sh FILES > +.Bl -tag -width /dev/ujoy/* -compact > +.It Pa /dev/ujoy/* > +.El > +.Sh SEE ALSO > +.Xr uhid 4 , > +.Xr uhidev 4 , > +.Xr usb 4 > +.Sh HISTORY > +The > +.Nm > +driver first appeared in > +.Ox 6.9 . > Index: share/man/man4/usb.4 > =================================================================== > RCS file: /cvs/src/share/man/man4/usb.4,v > retrieving revision 1.203 > diff -u -p -r1.203 usb.4 > --- share/man/man4/usb.4 21 Aug 2020 20:38:56 -0000 1.203 > +++ share/man/man4/usb.4 28 Dec 2020 03:25:31 -0000 > @@ -255,6 +255,8 @@ TEMPer gold HID thermometer and hygromet > Generic driver for Human Interface Devices > .It Xr uhidev 4 > Base driver for all Human Interface Devices > +.It Xr ujoy 4 > +USB joysticks/gamecontrollers > .It Xr ukbd 4 > USB keyboards that follow the boot protocol > .It Xr ums 4 > Index: sys/arch/alpha/alpha/conf.c > =================================================================== > RCS file: /cvs/src/sys/arch/alpha/alpha/conf.c,v > retrieving revision 1.88 > diff -u -p -r1.88 conf.c > --- sys/arch/alpha/alpha/conf.c 6 Jul 2020 04:32:25 -0000 1.88 > +++ sys/arch/alpha/alpha/conf.c 28 Dec 2020 03:25:31 -0000 > @@ -113,6 +113,7 @@ cdev_decl(cy); > #include "usb.h" > #include "uhid.h" > #include "fido.h" > +#include "ujoy.h" > #include "ugen.h" > #include "ulpt.h" > #include "ucom.h" > @@ -207,6 +208,7 @@ struct cdevsw cdevsw[] = > cdev_switch_init(NSWITCH,switch), /* 69: switch(4) control interface */ > cdev_fido_init(NFIDO,fido), /* 70: FIDO/U2F security key */ > cdev_pppx_init(NPPPX,pppac), /* 71: PPP Access Concentrator */ > + cdev_ujoy_init(NUJOY,ujoy), /* 72: USB joystick/gamecontroller */ > }; > int nchrdev = nitems(cdevsw); > > Index: sys/arch/alpha/conf/GENERIC > =================================================================== > RCS file: /cvs/src/sys/arch/alpha/conf/GENERIC,v > retrieving revision 1.266 > diff -u -p -r1.266 GENERIC > --- sys/arch/alpha/conf/GENERIC 23 May 2020 06:28:29 -0000 1.266 > +++ sys/arch/alpha/conf/GENERIC 28 Dec 2020 03:25:31 -0000 > @@ -107,6 +107,7 @@ uslhcom* at uhidev? # Silicon Labs > CP2 > ucom* at uslhcom? > uhid* at uhidev? # USB generic HID support > fido* at uhidev? # FIDO/U2F security key support > +ujoy* at uhidev? # USB joystick/gamecontroller > support > upd* at uhidev? # USB Power Devices sensors > aue* at uhub? # ADMtek AN986 Pegasus Ethernet > #atu* at uhub? # Atmel AT76c50x based 802.11b > Index: sys/arch/amd64/amd64/conf.c > =================================================================== > RCS file: /cvs/src/sys/arch/amd64/amd64/conf.c,v > retrieving revision 1.72 > diff -u -p -r1.72 conf.c > --- sys/arch/amd64/amd64/conf.c 7 Oct 2020 13:37:33 -0000 1.72 > +++ sys/arch/amd64/amd64/conf.c 28 Dec 2020 03:25:31 -0000 > @@ -139,6 +139,7 @@ cdev_decl(cy); > #include "usb.h" > #include "uhid.h" > #include "fido.h" > +#include "ujoy.h" > #include "ugen.h" > #include "ulpt.h" > #include "ucom.h" > @@ -288,6 +289,7 @@ struct cdevsw cdevsw[] = > cdev_switch_init(NSWITCH,switch), /* 97: switch(4) control interface */ > cdev_fido_init(NFIDO,fido), /* 98: FIDO/U2F security keys */ > cdev_pppx_init(NPPPX,pppac), /* 99: PPP Access Concentrator */ > + cdev_ujoy_init(NUJOY,ujoy), /* 100: USB joystick/gamecontroller */ > }; > int nchrdev = nitems(cdevsw); > > Index: sys/arch/amd64/conf/GENERIC > =================================================================== > RCS file: /cvs/src/sys/arch/amd64/conf/GENERIC,v > retrieving revision 1.495 > diff -u -p -r1.495 GENERIC > --- sys/arch/amd64/conf/GENERIC 15 Nov 2020 16:47:12 -0000 1.495 > +++ sys/arch/amd64/conf/GENERIC 28 Dec 2020 03:25:31 -0000 > @@ -286,6 +286,7 @@ uslhcom* at uhidev? # Silicon Labs CP21 > ucom* at uslhcom? > uhid* at uhidev? # USB generic HID support > fido* at uhidev? # FIDO/U2F security key support > +ujoy* at uhidev? # USB joystick/gamecontroller support > upd* at uhidev? # USB Power Devices sensors > umstc* at uhidev? # Microsoft Surface Type Cover > aue* at uhub? # ADMtek AN986 Pegasus Ethernet > Index: sys/arch/arm/arm/conf.c > =================================================================== > RCS file: /cvs/src/sys/arch/arm/arm/conf.c,v > retrieving revision 1.55 > diff -u -p -r1.55 conf.c > --- sys/arch/arm/arm/conf.c 6 Jul 2020 04:32:25 -0000 1.55 > +++ sys/arch/arm/arm/conf.c 28 Dec 2020 03:25:31 -0000 > @@ -126,6 +126,7 @@ cdev_decl(pci); > #include "ugen.h" > #include "uhid.h" > #include "fido.h" > +#include "ujoy.h" > #include "ulpt.h" > > /* > @@ -383,6 +384,7 @@ struct cdevsw cdevsw[] = { > cdev_switch_init(NSWITCH,switch), /* 105: switch(4) control > interface */ > cdev_fido_init(NFIDO,fido), /* 106: FIDO/U2F security key */ > cdev_pppx_init(NPPPX,pppac), /* 107: PPP Access Concentrator > */ > + cdev_ujoy_init(NUJOY,ujoy), /* 108: USB > joystick/gamecontroller */ > }; > > int nblkdev = nitems(bdevsw); > Index: sys/arch/arm64/arm64/conf.c > =================================================================== > RCS file: /cvs/src/sys/arch/arm64/arm64/conf.c,v > retrieving revision 1.16 > diff -u -p -r1.16 conf.c > --- sys/arch/arm64/arm64/conf.c 7 Oct 2020 13:37:32 -0000 1.16 > +++ sys/arch/arm64/arm64/conf.c 28 Dec 2020 03:25:31 -0000 > @@ -110,6 +110,7 @@ cdev_decl(spkr); > #include "usb.h" > #include "uhid.h" > #include "fido.h" > +#include "ujoy.h" > #include "ugen.h" > #include "ulpt.h" > #include "ucom.h" > @@ -248,6 +249,7 @@ struct cdevsw cdevsw[] = > cdev_switch_init(NSWITCH,switch), /* 97: switch(4) control interface */ > cdev_fido_init(NFIDO,fido), /* 98: FIDO/U2F security key */ > cdev_pppx_init(NPPPX,pppac), /* 99: PPP Access Concentrator */ > + cdev_ujoy_init(NUJOY,ujoy), /* 100: USB joystick/gamecontroller */ > }; > int nchrdev = nitems(cdevsw); > > Index: sys/arch/arm64/conf/GENERIC > =================================================================== > RCS file: /cvs/src/sys/arch/arm64/conf/GENERIC,v > retrieving revision 1.182 > diff -u -p -r1.182 GENERIC > --- sys/arch/arm64/conf/GENERIC 18 Dec 2020 18:24:44 -0000 1.182 > +++ sys/arch/arm64/conf/GENERIC 28 Dec 2020 03:25:31 -0000 > @@ -368,6 +368,7 @@ uslhcom* at uhidev? # Silicon Labs CP21 > ucom* at uslhcom? > uhid* at uhidev? # USB generic HID support > fido* at uhidev? # FIDO/U2F security key support > +ujoy* at uhidev? # USB joystick/gamecontroller > support > upd* at uhidev? # USB Power Devices sensors > aue* at uhub? # ADMtek AN986 Pegasus Ethernet > atu* at uhub? # Atmel AT76c50x based 802.11b > Index: sys/arch/armv7/conf/GENERIC > =================================================================== > RCS file: /cvs/src/sys/arch/armv7/conf/GENERIC,v > retrieving revision 1.132 > diff -u -p -r1.132 GENERIC > --- sys/arch/armv7/conf/GENERIC 23 Jun 2020 13:57:05 -0000 1.132 > +++ sys/arch/armv7/conf/GENERIC 28 Dec 2020 03:25:32 -0000 > @@ -321,6 +321,7 @@ uslhcom* at uhidev? # Silicon Labs CP21 > ucom* at uslhcom? > uhid* at uhidev? # USB generic HID support > fido* at uhidev? # FIDO/U2F security key support > +ujoy* at uhidev? # USB joystick/gamecontroller support > upd* at uhidev? # USB Power Devices sensors > aue* at uhub? # ADMtek AN986 Pegasus Ethernet > atu* at uhub? # Atmel AT76c50x based 802.11b > Index: sys/arch/hppa/conf/GENERIC > =================================================================== > RCS file: /cvs/src/sys/arch/hppa/conf/GENERIC,v > retrieving revision 1.180 > diff -u -p -r1.180 GENERIC > --- sys/arch/hppa/conf/GENERIC 17 Dec 2019 13:08:55 -0000 1.180 > +++ sys/arch/hppa/conf/GENERIC 28 Dec 2020 03:25:32 -0000 > @@ -111,6 +111,7 @@ ukbd* at uhidev? # USB keyboard > wskbd* at ukbd? mux 1 > uhid* at uhidev? # USB generic HID support > fido* at uhidev? # FIDO/U2F security key support > +ujoy* at uhidev? # USB joystick/gamecontroller support > upd* at uhidev? # USB Power Devices sensors > aue* at uhub? # ADMtek AN986 Pegasus Ethernet > url* at uhub? # Realtek RTL8150L based adapters > Index: sys/arch/hppa/hppa/conf.c > =================================================================== > RCS file: /cvs/src/sys/arch/hppa/hppa/conf.c,v > retrieving revision 1.70 > diff -u -p -r1.70 conf.c > --- sys/arch/hppa/hppa/conf.c 6 Jul 2020 04:32:25 -0000 1.70 > +++ sys/arch/hppa/hppa/conf.c 28 Dec 2020 03:25:32 -0000 > @@ -114,6 +114,7 @@ cdev_decl(pci); > #include "usb.h" > #include "uhid.h" > #include "fido.h" > +#include "ujoy.h" > #include "ugen.h" > #include "ulpt.h" > #include "ucom.h" > @@ -191,6 +192,7 @@ struct cdevsw cdevsw[] = > cdev_switch_init(NSWITCH,switch), /* 60: switch(4) control interface */ > cdev_fido_init(NFIDO,fido), /* 61: FIDO/U2F security key */ > cdev_pppx_init(NPPPX,pppac), /* 62: PPP Access Concentrator */ > + cdev_ujoy_init(NUJOY,ujoy), /* 63: USB joystick/gamecontroller */ > }; > int nchrdev = nitems(cdevsw); > > Index: sys/arch/i386/conf/GENERIC > =================================================================== > RCS file: /cvs/src/sys/arch/i386/conf/GENERIC,v > retrieving revision 1.853 > diff -u -p -r1.853 GENERIC > --- sys/arch/i386/conf/GENERIC 12 Sep 2020 15:01:05 -0000 1.853 > +++ sys/arch/i386/conf/GENERIC 28 Dec 2020 03:25:32 -0000 > @@ -284,6 +284,7 @@ uticom* at uhub? # TI serial > ucom* at uticom? > uhid* at uhidev? # USB generic HID support > fido* at uhidev? # FIDO/U2F security key support > +ujoy* at uhidev? # USB joystick/gamecontroller support > upd* at uhidev? # USB Power Devices sensors > aue* at uhub? # ADMtek AN986 Pegasus Ethernet > atu* at uhub? # Atmel AT76c50x based 802.11b > Index: sys/arch/i386/i386/conf.c > =================================================================== > RCS file: /cvs/src/sys/arch/i386/i386/conf.c,v > retrieving revision 1.170 > diff -u -p -r1.170 conf.c > --- sys/arch/i386/i386/conf.c 6 Jul 2020 04:32:25 -0000 1.170 > +++ sys/arch/i386/i386/conf.c 28 Dec 2020 03:25:32 -0000 > @@ -140,6 +140,7 @@ cdev_decl(cy); > #include "usb.h" > #include "uhid.h" > #include "fido.h" > +#include "ujoy.h" > #include "ugen.h" > #include "ulpt.h" > #include "ucom.h" > @@ -288,6 +289,7 @@ struct cdevsw cdevsw[] = > cdev_switch_init(NSWITCH,switch), /* 97: switch(4) control interface */ > cdev_fido_init(NFIDO,fido), /* 98: FIDO/U2F security key */ > cdev_pppx_init(NPPPX,pppac), /* 99: PPP Access Concentrator */ > + cdev_ujoy_init(NUJOY,ujoy), /* 100: USB joystick/gamecontroller */ > }; > int nchrdev = nitems(cdevsw); > > Index: sys/arch/landisk/conf/GENERIC > =================================================================== > RCS file: /cvs/src/sys/arch/landisk/conf/GENERIC,v > retrieving revision 1.55 > diff -u -p -r1.55 GENERIC > --- sys/arch/landisk/conf/GENERIC 17 Dec 2019 13:08:55 -0000 1.55 > +++ sys/arch/landisk/conf/GENERIC 28 Dec 2020 03:25:32 -0000 > @@ -137,6 +137,7 @@ uslhcom* at uhidev? # Silicon Labs CP21 > ucom* at uslhcom? > uhid* at uhidev? # USB generic HID support > fido* at uhidev? # FIDO/U2F security key support > +ujoy* at uhidev? # USB joystick/gamecontroller support > upd* at uhidev? # USB Power Devices sensors > aue* at uhub? # ADMtek AN986 Pegasus Ethernet > atu* at uhub? # Atmel AT76c50x based 802.11b > Index: sys/arch/landisk/landisk/conf.c > =================================================================== > RCS file: /cvs/src/sys/arch/landisk/landisk/conf.c,v > retrieving revision 1.42 > diff -u -p -r1.42 conf.c > --- sys/arch/landisk/landisk/conf.c 6 Jul 2020 04:32:25 -0000 1.42 > +++ sys/arch/landisk/landisk/conf.c 28 Dec 2020 03:25:32 -0000 > @@ -116,6 +116,7 @@ cdev_decl(pci); > #include "ugen.h" > #include "uhid.h" > #include "fido.h" > +#include "ujoy.h" > #include "ulpt.h" > > /* > @@ -357,6 +358,7 @@ struct cdevsw cdevsw[] = { > cdev_switch_init(NSWITCH,switch), /* 105: switch(4) control > interface */ > cdev_fido_init(NFIDO,fido), /* 106: FIDO/U2F security key */ > cdev_pppx_init(NPPPX,pppac), /* 107: PPP Access Concentrator > */ > + cdev_ujoy_init(NUJOY,ujoy), /* 108: USB > joystick/gamecontroller */ > }; > > int nblkdev = nitems(bdevsw); > Index: sys/arch/loongson/conf/GENERIC > =================================================================== > RCS file: /cvs/src/sys/arch/loongson/conf/GENERIC,v > retrieving revision 1.62 > diff -u -p -r1.62 GENERIC > --- sys/arch/loongson/conf/GENERIC 30 Sep 2020 22:23:41 -0000 1.62 > +++ sys/arch/loongson/conf/GENERIC 28 Dec 2020 03:25:32 -0000 > @@ -164,6 +164,7 @@ uslhcom* at uhidev? # Silicon Labs CP21 > ucom* at uslhcom? > uhid* at uhidev? # USB generic HID support > fido* at uhidev? # FIDO/U2F security key support > +ujoy* at uhidev? # USB joystick/gamecontroller support > upd* at uhidev? # USB Power Devices sensors > atu* at uhub? # Atmel AT76c50x based 802.11b > aue* at uhub? # ADMtek AN986 Pegasus Ethernet > Index: sys/arch/loongson/loongson/conf.c > =================================================================== > RCS file: /cvs/src/sys/arch/loongson/loongson/conf.c,v > retrieving revision 1.29 > diff -u -p -r1.29 conf.c > --- sys/arch/loongson/loongson/conf.c 6 Jul 2020 04:32:25 -0000 1.29 > +++ sys/arch/loongson/loongson/conf.c 28 Dec 2020 03:25:32 -0000 > @@ -123,6 +123,7 @@ cdev_decl(pci); > #include "usb.h" > #include "uhid.h" > #include "fido.h" > +#include "ujoy.h" > #include "ugen.h" > #include "ulpt.h" > #include "ucom.h" > @@ -228,6 +229,7 @@ struct cdevsw cdevsw[] = > cdev_drm_init(NDRM,drm), /* 87: drm */ > cdev_fido_init(NFIDO,fido), /* 88: FIDO/U2F security key */ > cdev_pppx_init(NPPPX,pppac), /* 89: PPP Access Concentrator */ > + cdev_ujoy_init(NUJOY,ujoy), /* 90: USB joystick/gamecontroller */ > }; > > int nchrdev = nitems(cdevsw); > Index: sys/arch/macppc/conf/GENERIC > =================================================================== > RCS file: /cvs/src/sys/arch/macppc/conf/GENERIC,v > retrieving revision 1.271 > diff -u -p -r1.271 GENERIC > --- sys/arch/macppc/conf/GENERIC 24 Jan 2020 04:44:14 -0000 1.271 > +++ sys/arch/macppc/conf/GENERIC 28 Dec 2020 03:25:32 -0000 > @@ -260,6 +260,7 @@ uslhcom* at uhidev? # Silicon Labs CP21 > ucom* at uslhcom? > uhid* at uhidev? # USB generic HID support > fido* at uhidev? # FIDO/U2F security key support > +ujoy* at uhidev? # USB joystick/gamecontroller support > upd* at uhidev? # USB Power Devices sensors > aue* at uhub? # ADMtek AN986 Pegasus Ethernet > atu* at uhub? # Atmel AT76c50x based 802.11b > Index: sys/arch/macppc/macppc/conf.c > =================================================================== > RCS file: /cvs/src/sys/arch/macppc/macppc/conf.c,v > retrieving revision 1.72 > diff -u -p -r1.72 conf.c > --- sys/arch/macppc/macppc/conf.c 6 Jul 2020 04:32:25 -0000 1.72 > +++ sys/arch/macppc/macppc/conf.c 28 Dec 2020 03:25:32 -0000 > @@ -98,6 +98,7 @@ cdev_decl(com); > #include "usb.h" > #include "uhid.h" > #include "fido.h" > +#include "ujoy.h" > #include "ugen.h" > #include "ulpt.h" > #include "ucom.h" > @@ -231,6 +232,7 @@ struct cdevsw cdevsw[] = { > cdev_switch_init(NSWITCH,switch), /* 89: switch(4) control interface */ > cdev_fido_init(NFIDO,fido), /* 90: FIDO/U2F security key */ > cdev_pppx_init(NPPPX,pppac), /* 91: PPP Access Concentrator */ > + cdev_ujoy_init(NUJOY,ujoy), /* 92: USB joystick/gamecontroller */ > }; > int nchrdev = nitems(cdevsw); > > Index: sys/arch/octeon/conf/GENERIC > =================================================================== > RCS file: /cvs/src/sys/arch/octeon/conf/GENERIC,v > retrieving revision 1.56 > diff -u -p -r1.56 GENERIC > --- sys/arch/octeon/conf/GENERIC 25 Oct 2020 10:33:31 -0000 1.56 > +++ sys/arch/octeon/conf/GENERIC 28 Dec 2020 03:25:32 -0000 > @@ -156,6 +156,7 @@ uslhcom* at uhidev? # Silicon Labs CP211 > ucom* at uslhcom? > uhid* at uhidev? # USB generic HID support > fido* at uhidev? # FIDO/U2F security key support > +ujoy* at uhidev? # USB joystick/gamecontroller support > upd* at uhidev? # USB Power Devices sensors > aue* at uhub? # ADMtek AN986 Pegasus Ethernet > atu* at uhub? # Atmel AT76c50x based 802.11b > Index: sys/arch/octeon/octeon/conf.c > =================================================================== > RCS file: /cvs/src/sys/arch/octeon/octeon/conf.c,v > retrieving revision 1.25 > diff -u -p -r1.25 conf.c > --- sys/arch/octeon/octeon/conf.c 6 Jul 2020 04:32:25 -0000 1.25 > +++ sys/arch/octeon/octeon/conf.c 28 Dec 2020 03:25:32 -0000 > @@ -136,6 +136,7 @@ cdev_decl(pci); > #include "usb.h" > #include "uhid.h" > #include "fido.h" > +#include "ujoy.h" > #include "ugen.h" > #include "ulpt.h" > #include "ucom.h" > @@ -235,6 +236,7 @@ struct cdevsw cdevsw[] = > cdev_switch_init(NSWITCH,switch), /* 75: switch(4) control interface */ > cdev_fido_init(NFIDO,fido), /* 76: FIDO/U2F security key */ > cdev_pppx_init(NPPPX,pppac), /* 77: PPP Access Concentrator */ > + cdev_ujoy_init(NUJOY,ujoy), /* 78: USB joystick/gamecontroller */ > }; > > int nchrdev = nitems(cdevsw); > Index: sys/arch/powerpc64/conf/GENERIC > =================================================================== > RCS file: /cvs/src/sys/arch/powerpc64/conf/GENERIC,v > retrieving revision 1.22 > diff -u -p -r1.22 GENERIC > --- sys/arch/powerpc64/conf/GENERIC 16 Nov 2020 19:04:57 -0000 1.22 > +++ sys/arch/powerpc64/conf/GENERIC 28 Dec 2020 03:25:32 -0000 > @@ -126,6 +126,7 @@ uslhcom* at uhidev? # Silicon Labs CP21 > ucom* at uslhcom? > uhid* at uhidev? # USB generic HID support > fido* at uhidev? # FIDO/U2F security key support > +ujoy* at uhidev? # USB joystick/gamecontroller support > upd* at uhidev? # USB Power Devices sensors > umstc* at uhidev? # Microsoft Surface Type Cover > aue* at uhub? # ADMtek AN986 Pegasus Ethernet > Index: sys/arch/powerpc64/powerpc64/conf.c > =================================================================== > RCS file: /cvs/src/sys/arch/powerpc64/powerpc64/conf.c,v > retrieving revision 1.10 > diff -u -p -r1.10 conf.c > --- sys/arch/powerpc64/powerpc64/conf.c 24 Oct 2020 21:06:56 -0000 > 1.10 > +++ sys/arch/powerpc64/powerpc64/conf.c 28 Dec 2020 03:25:32 -0000 > @@ -64,6 +64,7 @@ cdev_decl(com); > #include "drm.h" > #include "dt.h" > #include "fido.h" > +#include "ujoy.h" > #include "fuse.h" > #include "hotplug.h" > #include "ipmi.h" > @@ -203,6 +204,7 @@ struct cdevsw cdevsw[] = > #else > cdev_notdef(), /* 93 */ > #endif > + cdev_ujoy_init(NUJOY,ujoy), /* 94: USB joystick/gamecontroller */ > }; > int nchrdev = nitems(cdevsw); > > Index: sys/arch/sgi/conf/GENERIC-IP27 > =================================================================== > RCS file: /cvs/src/sys/arch/sgi/conf/GENERIC-IP27,v > retrieving revision 1.66 > diff -u -p -r1.66 GENERIC-IP27 > --- sys/arch/sgi/conf/GENERIC-IP27 17 Dec 2019 13:08:56 -0000 1.66 > +++ sys/arch/sgi/conf/GENERIC-IP27 28 Dec 2020 03:25:32 -0000 > @@ -128,6 +128,7 @@ uslhcom* at uhidev? # Silicon Labs CP211 > ucom* at uslhcom? > uhid* at uhidev? # USB generic HID support > fido* at uhidev? # FIDO/U2F security key support > +ujoy* at uhidev? # USB joystick/gamecontroller support > atu* at uhub? # Atmel AT76c50x based 802.11b > aue* at uhub? # ADMtek AN986 Pegasus Ethernet > axe* at uhub? # ASIX Electronics AX88172 USB Ethernet > Index: sys/arch/sgi/conf/GENERIC-IP30 > =================================================================== > RCS file: /cvs/src/sys/arch/sgi/conf/GENERIC-IP30,v > retrieving revision 1.59 > diff -u -p -r1.59 GENERIC-IP30 > --- sys/arch/sgi/conf/GENERIC-IP30 17 Dec 2019 13:08:56 -0000 1.59 > +++ sys/arch/sgi/conf/GENERIC-IP30 28 Dec 2020 03:25:32 -0000 > @@ -119,6 +119,7 @@ uslhcom* at uhidev? # Silicon Labs CP211 > ucom* at uslhcom? > uhid* at uhidev? # USB generic HID support > fido* at uhidev? # FIDO/U2F security key support > +ujoy* at uhidev? # USB joystick/gamecontroller support > atu* at uhub? # Atmel AT76c50x based 802.11b > aue* at uhub? # ADMtek AN986 Pegasus Ethernet > axe* at uhub? # ASIX Electronics AX88172 USB Ethernet > Index: sys/arch/sgi/conf/GENERIC-IP32 > =================================================================== > RCS file: /cvs/src/sys/arch/sgi/conf/GENERIC-IP32,v > retrieving revision 1.50 > diff -u -p -r1.50 GENERIC-IP32 > --- sys/arch/sgi/conf/GENERIC-IP32 17 Dec 2019 13:08:56 -0000 1.50 > +++ sys/arch/sgi/conf/GENERIC-IP32 28 Dec 2020 03:25:32 -0000 > @@ -111,6 +111,7 @@ uslhcom* at uhidev? # Silicon Labs CP211 > ucom* at uslhcom? > uhid* at uhidev? # USB generic HID support > fido* at uhidev? # FIDO/U2F security key support > +ujoy* at uhidev? # USB joystick/gamecontroller support > atu* at uhub? # Atmel AT76c50x based 802.11b > aue* at uhub? # ADMtek AN986 Pegasus Ethernet > axe* at uhub? # ASIX Electronics AX88172 USB Ethernet > Index: sys/arch/sgi/sgi/conf.c > =================================================================== > RCS file: /cvs/src/sys/arch/sgi/sgi/conf.c,v > retrieving revision 1.43 > diff -u -p -r1.43 conf.c > --- sys/arch/sgi/sgi/conf.c 6 Jul 2020 04:32:25 -0000 1.43 > +++ sys/arch/sgi/sgi/conf.c 28 Dec 2020 03:25:32 -0000 > @@ -122,6 +122,7 @@ cdev_decl(pci); > #include "usb.h" > #include "uhid.h" > #include "fido.h" > +#include "ujoy.h" > #include "ugen.h" > #include "ulpt.h" > #include "ucom.h" > @@ -215,6 +216,7 @@ struct cdevsw cdevsw[] = > cdev_switch_init(NSWITCH,switch), /* 75: switch(4) control interface */ > cdev_fido_init(NFIDO,fido), /* 76: FIDO/U2F security key */ > cdev_pppx_init(NPPPX,pppac), /* 77: PPP Access Concentrator */ > + cdev_ujoy_init(NUJOY,ujoy), /* 78: USB joystick/gamecontroller */ > }; > > int nchrdev = nitems(cdevsw); > Index: sys/arch/sparc64/conf/GENERIC > =================================================================== > RCS file: /cvs/src/sys/arch/sparc64/conf/GENERIC,v > retrieving revision 1.314 > diff -u -p -r1.314 GENERIC > --- sys/arch/sparc64/conf/GENERIC 17 Dec 2019 13:08:56 -0000 1.314 > +++ sys/arch/sparc64/conf/GENERIC 28 Dec 2020 03:25:32 -0000 > @@ -224,6 +224,7 @@ umsm* at uhub? # Qualcomm MSM EVDO > ucom* at umsm? > uhid* at uhidev? # USB generic HID support > fido* at uhidev? # FIDO/U2F security key support > +ujoy* at uhidev? # USB joystick/gamecontroller support > upd* at uhidev? # USB Power Devices sensors > aue* at uhub? # ADMtek AN986 Pegasus Ethernet > atu* at uhub? # Atmel AT76c50x based 802.11b > Index: sys/arch/sparc64/sparc64/conf.c > =================================================================== > RCS file: /cvs/src/sys/arch/sparc64/sparc64/conf.c,v > retrieving revision 1.84 > diff -u -p -r1.84 conf.c > --- sys/arch/sparc64/sparc64/conf.c 6 Jul 2020 04:32:25 -0000 1.84 > +++ sys/arch/sparc64/sparc64/conf.c 28 Dec 2020 03:25:32 -0000 > @@ -104,6 +104,7 @@ cdev_decl(pci); > #include "usb.h" > #include "uhid.h" > #include "fido.h" > +#include "ujoy.h" > #include "ugen.h" > #include "ulpt.h" > #include "ucom.h" > @@ -297,6 +298,7 @@ struct cdevsw cdevsw[] = > cdev_switch_init(NSWITCH,switch), /* 136: switch(4) control interface */ > cdev_fido_init(NFIDO,fido), /* 137: FIDO/U2F security key */ > cdev_pppx_init(NPPPX,pppac), /* 138: PPP Access Concentrator */ > + cdev_ujoy_init(NUJOY,ujoy), /* 139: USB joystick/gamecontroller */ > }; > int nchrdev = nitems(cdevsw); > > Index: sys/dev/usb/files.usb > =================================================================== > RCS file: /cvs/src/sys/dev/usb/files.usb,v > retrieving revision 1.143 > diff -u -p -r1.143 files.usb > --- sys/dev/usb/files.usb 31 May 2020 18:15:37 -0000 1.143 > +++ sys/dev/usb/files.usb 28 Dec 2020 03:25:33 -0000 > @@ -74,12 +74,17 @@ file dev/usb/uhidev.c uhidev > # Generic HID devices > device uhid: hid > attach uhid at uhidbus > -file dev/usb/uhid.c uhid | fido needs-flag > +file dev/usb/uhid.c uhid | fido | ujoy needs-flag > > # FIDO/U2F security keys > device fido: hid > attach fido at uhidbus > file dev/usb/fido.c fido needs-flag > + > +# USB Joysticks/Gamecontrollers > +device ujoy: hid > +attach ujoy at uhidbus > +file dev/usb/ujoy.c ujoy needs-flag > > # Keyboards > file dev/usb/ukbdmap.c hidkbd > Index: sys/dev/usb/uhid.c > =================================================================== > RCS file: /cvs/src/sys/dev/usb/uhid.c,v > retrieving revision 1.81 > diff -u -p -r1.81 uhid.c > --- sys/dev/usb/uhid.c 25 Dec 2020 12:59:52 -0000 1.81 > +++ sys/dev/usb/uhid.c 28 Dec 2020 03:25:33 -0000 > @@ -36,6 +36,7 @@ > */ > > #include "fido.h" > +#include "ujoy.h" > > #include <sys/param.h> > #include <sys/systm.h> > @@ -96,6 +97,10 @@ uhid_lookup(dev_t dev) > #if NFIDO > 0 > else if (cdev->d_open == fidoopen) > cd = &fido_cd; > +#endif > +#if NUJOY > 0 > + else if (cdev->d_open == ujoyopen) > + cd = &ujoy_cd; > #endif > else > return (NULL); > Index: sys/dev/usb/uhid.h > =================================================================== > RCS file: /cvs/src/sys/dev/usb/uhid.h,v > retrieving revision 1.1 > diff -u -p -r1.1 uhid.h > --- sys/dev/usb/uhid.h 17 Dec 2019 13:08:54 -0000 1.1 > +++ sys/dev/usb/uhid.h 28 Dec 2020 03:25:33 -0000 > @@ -48,6 +48,7 @@ struct uhid_softc { > > extern struct cfdriver uhid_cd; > extern struct cfdriver fido_cd; > +extern struct cfdriver ujoy_cd; > > #define UHIDUNIT(dev) (minor(dev)) > #define UHID_CHUNK 128 /* chunk size for read */ > Index: sys/dev/usb/ujoy.c > =================================================================== > RCS file: sys/dev/usb/ujoy.c > diff -N sys/dev/usb/ujoy.c > --- /dev/null 1 Jan 1970 00:00:00 -0000 > +++ sys/dev/usb/ujoy.c 28 Dec 2020 03:25:33 -0000 > @@ -0,0 +1,108 @@ > +/* $OpenBSD: ujoy.c,v 1.2 2019/12/18 05:09:53 deraadt Exp $ */ > + > +/* > + * Copyright (c) 2020 Thomas Frohwein <t...@openbsd.org> > + * Copyright (c) 2020 Bryan Steele <bry...@openbsd.org> > + * > + * Permission to use, copy, modify, and distribute this software for any > + * purpose with or without fee is hereby granted, provided that the above > + * copyright notice and this permission notice appear in all copies. > + * > + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES > + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF > + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR > + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES > + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN > + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF > + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. > + */ > + > +#include <sys/param.h> > +#include <sys/systm.h> > +#include <sys/kernel.h> > +#include <sys/malloc.h> > +#include <sys/signalvar.h> > +#include <sys/device.h> > +#include <sys/ioctl.h> > +#include <sys/conf.h> > +#include <sys/tty.h> > +#include <sys/selinfo.h> > +#include <sys/proc.h> > +#include <sys/vnode.h> > +#include <sys/poll.h> > +#include <sys/fcntl.h> > + > +#include <dev/usb/usb.h> > +#include <dev/usb/usbhid.h> > + > +#include <dev/usb/usbdevs.h> > +#include <dev/usb/usbdi.h> > +#include <dev/usb/usbdi_util.h> > + > +#include <dev/usb/uhidev.h> > +#include <dev/usb/uhid.h> > + > +int ujoy_match(struct device *, void *, void *); > + > +struct cfdriver ujoy_cd = { > + NULL, "ujoy", DV_DULL > +}; > + > +const struct cfattach ujoy_ca = { > + sizeof(struct uhid_softc), > + ujoy_match, > + uhid_attach, > + uhid_detach, > +}; > + > +int > +ujoy_match(struct device *parent, void *match, void *aux) > +{ > + struct uhidev_attach_arg *uha = (struct uhidev_attach_arg *)aux; > + int size; > + void *desc; > + int ret = UMATCH_NONE; > + > + if (uha->reportid == UHIDEV_CLAIM_ALLREPORTID) > + return (ret); > + > + /* Find the general usage page and gamecontroller collections */ > + uhidev_get_report_desc(uha->parent, &desc, &size); > + > + if (hid_is_collection(desc, size, uha->reportid, > + HID_USAGE2(HUP_GENERIC_DESKTOP, HUG_JOYSTICK))) > + ret = UMATCH_IFACECLASS; > + > + if (hid_is_collection(desc, size, uha->reportid, > + HID_USAGE2(HUP_GENERIC_DESKTOP, HUG_GAME_PAD))) > + ret = UMATCH_IFACECLASS; > + > + return (ret); > +} > + > +int > +ujoyopen(dev_t dev, int flag, int mode, struct proc *p) > +{ > + /* Restrict ujoy devices to read operations */ > + if ((flag & FWRITE)) > + return (EPERM); > + return (uhid_do_open(dev, flag, mode, p)); > +} > + > +int > +ujoyioctl(dev_t dev, u_long cmd, caddr_t addr, int flag, struct proc *p) > +{ > + switch (cmd) { > + case FIONBIO: > + case FIOASYNC: > + case USB_GET_DEVICEINFO: > + case USB_GET_REPORT: > + case USB_GET_REPORT_DESC: > + case USB_GET_REPORT_ID: > + break; > + default: > + return (EPERM); > + } > + > + return (uhidioctl(dev, cmd, addr, flag, p)); > +} > Index: sys/sys/conf.h > =================================================================== > RCS file: /cvs/src/sys/sys/conf.h,v > retrieving revision 1.155 > diff -u -p -r1.155 conf.h > --- sys/sys/conf.h 6 Jul 2020 04:11:26 -0000 1.155 > +++ sys/sys/conf.h 28 Dec 2020 03:25:34 -0000 > @@ -383,6 +383,13 @@ extern struct cdevsw cdevsw[]; > (dev_type_stop((*))) enodev, 0, dev_init(c,uhid,poll), \ > (dev_type_mmap((*))) enodev, 0, 0, dev_init(c,uhid,kqfilter) } > > +/* open, close, read, write, ioctl, poll, kqfilter */ > +#define cdev_ujoy_init(c,n) { \ > + dev_init(c,n,open), dev_init(c,uhid,close), dev_init(c,uhid,read), \ > + dev_init(c,uhid,write), dev_init(c,ujoy,ioctl), \ > + (dev_type_stop((*))) enodev, 0, dev_init(c,uhid,poll), \ > + (dev_type_mmap((*))) enodev, 0, 0, dev_init(c,uhid,kqfilter) } > + > /* open, close, init */ > #define cdev_pci_init(c,n) { \ > dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \ > @@ -624,6 +631,7 @@ cdev_decl(usb); > cdev_decl(ugen); > cdev_decl(uhid); > cdev_decl(fido); > +cdev_decl(ujoy); > cdev_decl(ucom); > cdev_decl(ulpt); > cdev_decl(urio); >