Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/drivers/input/input-compat.h
15109 views
1
#ifndef _INPUT_COMPAT_H
2
#define _INPUT_COMPAT_H
3
4
/*
5
* 32bit compatibility wrappers for the input subsystem.
6
*
7
* Very heavily based on evdev.c - Copyright (c) 1999-2002 Vojtech Pavlik
8
*
9
* This program is free software; you can redistribute it and/or modify it
10
* under the terms of the GNU General Public License version 2 as published by
11
* the Free Software Foundation.
12
*/
13
14
#include <linux/compiler.h>
15
#include <linux/compat.h>
16
#include <linux/input.h>
17
18
#ifdef CONFIG_COMPAT
19
20
/* Note to the author of this code: did it ever occur to
21
you why the ifdefs are needed? Think about it again. -AK */
22
#if defined(CONFIG_X86_64) || defined(CONFIG_TILE)
23
# define INPUT_COMPAT_TEST is_compat_task()
24
#elif defined(CONFIG_S390)
25
# define INPUT_COMPAT_TEST test_thread_flag(TIF_31BIT)
26
#elif defined(CONFIG_MIPS)
27
# define INPUT_COMPAT_TEST test_thread_flag(TIF_32BIT_ADDR)
28
#else
29
# define INPUT_COMPAT_TEST test_thread_flag(TIF_32BIT)
30
#endif
31
32
struct input_event_compat {
33
struct compat_timeval time;
34
__u16 type;
35
__u16 code;
36
__s32 value;
37
};
38
39
struct ff_periodic_effect_compat {
40
__u16 waveform;
41
__u16 period;
42
__s16 magnitude;
43
__s16 offset;
44
__u16 phase;
45
46
struct ff_envelope envelope;
47
48
__u32 custom_len;
49
compat_uptr_t custom_data;
50
};
51
52
struct ff_effect_compat {
53
__u16 type;
54
__s16 id;
55
__u16 direction;
56
struct ff_trigger trigger;
57
struct ff_replay replay;
58
59
union {
60
struct ff_constant_effect constant;
61
struct ff_ramp_effect ramp;
62
struct ff_periodic_effect_compat periodic;
63
struct ff_condition_effect condition[2]; /* One for each axis */
64
struct ff_rumble_effect rumble;
65
} u;
66
};
67
68
static inline size_t input_event_size(void)
69
{
70
return INPUT_COMPAT_TEST ?
71
sizeof(struct input_event_compat) : sizeof(struct input_event);
72
}
73
74
#else
75
76
static inline size_t input_event_size(void)
77
{
78
return sizeof(struct input_event);
79
}
80
81
#endif /* CONFIG_COMPAT */
82
83
int input_event_from_user(const char __user *buffer,
84
struct input_event *event);
85
86
int input_event_to_user(char __user *buffer,
87
const struct input_event *event);
88
89
int input_ff_effect_from_user(const char __user *buffer, size_t size,
90
struct ff_effect *effect);
91
92
#endif /* _INPUT_COMPAT_H */
93
94