# Copyright 2015 syzkaller project authors. All rights reserved.
# Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.

include <linux/input.h>

resource fd_evdev[fd]

# There seems to be nothing special we can do with this fd.
syz_open_dev$mouse(dev ptr[in, string["/dev/input/mouse#"]], id intptr, flags flags[open_flags]) fd
syz_open_dev$mice(dev ptr[in, string["/dev/input/mice"]], id const[0], flags flags[open_flags]) fd

syz_open_dev$evdev(dev ptr[in, string["/dev/input/event#"]], id intptr, flags flags[open_flags]) fd_evdev

write$evdev(fd fd_evdev, data ptr[in, array[input_event]], len bytesize[data])

ioctl$EVIOCGVERSION(fd fd_evdev, cmd const[EVIOCGVERSION], arg buffer[out])
ioctl$EVIOCGID(fd fd_evdev, cmd const[EVIOCGID], arg buffer[out])
ioctl$EVIOCGREP(fd fd_evdev, cmd const[EVIOCGREP], arg buffer[out])
ioctl$EVIOCGKEYCODE(fd fd_evdev, cmd const[EVIOCGKEYCODE], arg buffer[out])
ioctl$EVIOCGKEYCODE_V2(fd fd_evdev, cmd const[EVIOCGKEYCODE_V2], arg buffer[out])
ioctl$EVIOCGEFFECTS(fd fd_evdev, cmd const[EVIOCGEFFECTS], arg buffer[out])
ioctl$EVIOCGMASK(fd fd_evdev, cmd const[EVIOCGMASK], arg ptr[in, input_mask])
ioctl$EVIOCGNAME(fd fd_evdev, cmd const[EVIOCGNAME64], arg buffer[out])
ioctl$EVIOCGPHYS(fd fd_evdev, cmd const[EVIOCGPHYS64], arg buffer[out])
ioctl$EVIOCGUNIQ(fd fd_evdev, cmd const[EVIOCGUNIQ64], arg buffer[out])
ioctl$EVIOCGPROP(fd fd_evdev, cmd const[EVIOCGPROP64], arg buffer[out])
ioctl$EVIOCGMTSLOTS(fd fd_evdev, cmd const[EVIOCGMTSLOTS64], arg buffer[out])
ioctl$EVIOCGKEY(fd fd_evdev, cmd const[EVIOCGKEY64], arg buffer[out])
ioctl$EVIOCGLED(fd fd_evdev, cmd const[EVIOCGLED64], arg buffer[out])
ioctl$EVIOCGSND(fd fd_evdev, cmd const[EVIOCGSND64], arg buffer[out])
ioctl$EVIOCGSW(fd fd_evdev, cmd const[EVIOCGSW64], arg buffer[out])
ioctl$EVIOCGBITKEY(fd fd_evdev, cmd const[EVIOCGBITKEY64], arg buffer[out])
ioctl$EVIOCGBITSND(fd fd_evdev, cmd const[EVIOCGBITSND64], arg buffer[out])
ioctl$EVIOCGBITSW(fd fd_evdev, cmd const[EVIOCGBITSW64], arg buffer[out])
ioctl$EVIOCGABS0(fd fd_evdev, cmd const[EVIOCGABS0], arg buffer[out])
ioctl$EVIOCGABS20(fd fd_evdev, cmd const[EVIOCGABS20], arg buffer[out])
ioctl$EVIOCGABS2F(fd fd_evdev, cmd const[EVIOCGABS2F], arg buffer[out])
ioctl$EVIOCGABS3F(fd fd_evdev, cmd const[EVIOCGABS3F], arg buffer[out])

ioctl$EVIOCSREP(fd fd_evdev, cmd const[EVIOCSREP], arg ptr[in, array[int32, 2]])
ioctl$EVIOCSKEYCODE(fd fd_evdev, cmd const[EVIOCSKEYCODE], arg ptr[in, array[int32, 2]])
ioctl$EVIOCSKEYCODE_V2(fd fd_evdev, cmd const[EVIOCSKEYCODE_V2], arg ptr[in, input_keymap_entry])
ioctl$EVIOCSFF(fd fd_evdev, cmd const[EVIOCSFF], arg ptr[in, ff_effect])
ioctl$EVIOCRMFF(fd fd_evdev, cmd const[EVIOCRMFF], arg ptr[in, int32])
ioctl$EVIOCGRAB(fd fd_evdev, cmd const[EVIOCGRAB], arg ptr[in, int32])
ioctl$EVIOCREVOKE(fd fd_evdev, cmd const[EVIOCREVOKE], arg ptr[in, int32])
ioctl$EVIOCSMASK(fd fd_evdev, cmd const[EVIOCSMASK], arg ptr[in, input_mask])
ioctl$EVIOCSCLOCKID(fd fd_evdev, cmd const[EVIOCSCLOCKID], arg ptr[in, int32])
ioctl$EVIOCSABS0(fd fd_evdev, cmd const[EVIOCSABS0], arg ptr[in, input_absinfo])
ioctl$EVIOCSABS20(fd fd_evdev, cmd const[EVIOCSABS20], arg ptr[in, input_absinfo])
ioctl$EVIOCSABS2F(fd fd_evdev, cmd const[EVIOCSABS2F], arg ptr[in, input_absinfo])
ioctl$EVIOCSABS3F(fd fd_evdev, cmd const[EVIOCSABS3F], arg ptr[in, input_absinfo])

ff_effect_type = FF_PERIODIC, FF_CONSTANT, FF_SPRING, FF_FRICTION, FF_DAMPER, FF_INERTIA, FF_RAMP
ff_periodic_effect_wave = FF_SQUARE, FF_TRIANGLE, FF_SINE, FF_SAW_UP, FF_SAW_DOWN, FF_CUSTOM
input_codes = EV_SYN, EV_KEY, EV_REL, EV_ABS, EV_MSC, EV_SW, EV_LED, EV_SND, EV_REP, EV_FF, EV_PWR, EV_FF_STATUS, EV_MAX

input_event {
	time	timeval
	type	flags[input_codes, int16]
	code	int16
	val	int32
}

input_keymap_entry {
	flags	int8
	len	int8[0:32]
	index	int16
	keycode	int32
	scancod	array[int8, 32]
}

ff_effect {
	type	flags[ff_effect_type, int16]
	id	int16
	dir	int16
	trigger	ff_trigger
	replay	ff_replay
	u	ff_effect_u
}

ff_effect_u [
	const	ff_constant_effect
	ramp	ff_ramp_effect
	period	ff_periodic_effect
	cond	array[ff_condition_effect, 2]
	rumble	ff_rumble_effect
]

ff_trigger {
	button	int16
	interv	int16
}

ff_replay {
	len	int16
	delay	int16
}

ff_constant_effect {
	level	int16
	envelop	ff_envelope
}

ff_ramp_effect {
	slevel	int16
	elevel	int16
	envelop	ff_envelope
}

ff_periodic_effect {
	wave		flags[ff_periodic_effect_wave, int16]
	period		int16
	magnit		int16
	offset		int16
	phase		int16
	envelope	ff_envelope
	custom_len	len[custom_data, int32]
	custom_data	ptr[in, array[int16]]
}

ff_condition_effect {
	rsatur	int16
	lsatur	int16
	rcoeff	int16
	lcoeff	int16
	dead	int16
	center	int16
}

ff_rumble_effect {
	smagnit	int16
	wmagnit	int16
}

ff_envelope {
	len	int16
	level	int16
	flen	int16
	flevel	int16
}

input_mask {
	type	flags[input_codes, int32]
	size	bytesize[ptr, int32]
	ptr	buffer[in]
}

input_absinfo {
	val	int32
	min	int32
	max	int32
	fuzz	int32
	flag	int32
	res	int32
}

define EVIOCGNAME64	EVIOCGNAME(64)
define EVIOCGPHYS64	EVIOCGPHYS(64)
define EVIOCGUNIQ64	EVIOCGUNIQ(64)
define EVIOCGPROP64	EVIOCGPROP(64)
define EVIOCGMTSLOTS64	EVIOCGMTSLOTS(64)
define EVIOCGKEY64	EVIOCGKEY(64)
define EVIOCGLED64	EVIOCGLED(64)
define EVIOCGSND64	EVIOCGSND(64)
define EVIOCGSW64	EVIOCGSW(64)
define EVIOCGBITKEY64	EVIOCGBIT(EV_KEY, 64)
define EVIOCGBITSND64	EVIOCGBIT(EV_SND, 64)
define EVIOCGBITSW64	EVIOCGBIT(EV_SW, 64)
define EVIOCGABS0	EVIOCGABS(0)
define EVIOCGABS20	EVIOCGABS(0x20)
define EVIOCGABS2F	EVIOCGABS(0x2F)
define EVIOCGABS3F	EVIOCGABS(0x3F)
define EVIOCSABS0	EVIOCSABS(0)
define EVIOCSABS20	EVIOCSABS(0x20)
define EVIOCSABS2F	EVIOCSABS(0x2F)
define EVIOCSABS3F	EVIOCSABS(0x3F)
