2019-06-04 11:11:33 +03:00
/* SPDX-License-Identifier: GPL-2.0-only */
2008-10-17 06:31:42 +04:00
# ifndef _INPUT_COMPAT_H
# define _INPUT_COMPAT_H
/*
* 32 bit compatibility wrappers for the input subsystem .
*
* Very heavily based on evdev . c - Copyright ( c ) 1999 - 2002 Vojtech Pavlik
*/
# include <linux/compiler.h>
# include <linux/compat.h>
# include <linux/input.h>
# ifdef CONFIG_COMPAT
struct input_event_compat {
2018-01-08 04:44:42 +03:00
compat_ulong_t sec ;
compat_ulong_t usec ;
2008-10-17 06:31:42 +04:00
__u16 type ;
__u16 code ;
__s32 value ;
} ;
struct ff_periodic_effect_compat {
__u16 waveform ;
__u16 period ;
__s16 magnitude ;
__s16 offset ;
__u16 phase ;
struct ff_envelope envelope ;
__u32 custom_len ;
compat_uptr_t custom_data ;
} ;
struct ff_effect_compat {
__u16 type ;
__s16 id ;
__u16 direction ;
struct ff_trigger trigger ;
struct ff_replay replay ;
union {
struct ff_constant_effect constant ;
struct ff_ramp_effect ramp ;
struct ff_periodic_effect_compat periodic ;
struct ff_condition_effect condition [ 2 ] ; /* One for each axis */
struct ff_rumble_effect rumble ;
} u ;
} ;
static inline size_t input_event_size ( void )
{
2016-03-26 00:20:47 +03:00
return ( in_compat_syscall ( ) & & ! COMPAT_USE_64BIT_TIME ) ?
2008-10-17 06:31:42 +04:00
sizeof ( struct input_event_compat ) : sizeof ( struct input_event ) ;
}
# else
static inline size_t input_event_size ( void )
{
return sizeof ( struct input_event ) ;
}
# endif /* CONFIG_COMPAT */
int input_event_from_user ( const char __user * buffer ,
struct input_event * event ) ;
int input_event_to_user ( char __user * buffer ,
const struct input_event * event ) ;
int input_ff_effect_from_user ( const char __user * buffer , size_t size ,
struct ff_effect * effect ) ;
# endif /* _INPUT_COMPAT_H */