mirror of
https://git.freebsd.org/src.git
synced 2026-01-11 19:57:22 +00:00
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
This commit is contained in:
parent
7b3fb3caef
commit
d5e5fed1ed
2 changed files with 70 additions and 0 deletions
|
|
@ -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
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -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
|
||||
*/
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue