uinput: Add FreeBSD specific ioctl to set unique identifier of input device.

Reviewed by:	gonzo
Differential Revision:	https://reviews.freebsd.org/D13456
This commit is contained in:
Vladimir Kondratyev 2018-04-30 10:34:16 +00:00
parent 3ee5c55415
commit 4b58fa1240
2 changed files with 16 additions and 0 deletions

View File

@ -604,6 +604,15 @@ uinput_ioctl_sub(struct uinput_cdev_state *state, u_long cmd, caddr_t data)
evdev_set_phys(state->ucs_evdev, buf);
return (0);
case UI_SET_BSDUNIQ:
if (state->ucs_state == UINPUT_RUNNING)
return (EINVAL);
ret = copyinstr(*(void **)data, buf, sizeof(buf), NULL);
if (ret != 0)
return (ret);
evdev_set_serial(state->ucs_evdev, buf);
return (0);
case UI_SET_SWBIT:
if (state->ucs_state == UINPUT_RUNNING ||
intdata > SW_MAX || intdata < 0)

View File

@ -90,6 +90,13 @@ struct uinput_abs_setup {
#define UI_BEGIN_FF_ERASE _IOWR(UINPUT_IOCTL_BASE, 202, struct uinput_ff_erase)
#define UI_END_FF_ERASE _IOW(UINPUT_IOCTL_BASE, 203, struct uinput_ff_erase)
/*
* FreeBSD specific. Set unique identifier of input device.
* Name and magic are chosen to reduce chances of clashing
* with possible future Linux extensions.
*/
#define UI_SET_BSDUNIQ _IO(UINPUT_IOCTL_BASE, 109)
#define EV_UINPUT 0x0101
#define UI_FF_UPLOAD 1
#define UI_FF_ERASE 2