fs: Provide __inode_get_bytes()
[sfrench/cifs-2.6.git] / include / linux / uinput.h
1 /*
2  *  User level driver support for input subsystem
3  *
4  * Heavily based on evdev.c by Vojtech Pavlik
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19  *
20  * Author: Aristeu Sergio Rozanski Filho <aris@cathedrallabs.org>
21  *
22  * Changes/Revisions:
23  *      0.5     08/13/2015 (David Herrmann <dh.herrmann@gmail.com> &
24  *                          Benjamin Tissoires <benjamin.tissoires@redhat.com>)
25  *              - add UI_DEV_SETUP ioctl
26  *              - add UI_ABS_SETUP ioctl
27  *              - add UI_GET_VERSION ioctl
28  *      0.4     01/09/2014 (Benjamin Tissoires <benjamin.tissoires@redhat.com>)
29  *              - add UI_GET_SYSNAME ioctl
30  *      0.3     24/05/2006 (Anssi Hannula <anssi.hannulagmail.com>)
31  *              - update ff support for the changes in kernel interface
32  *              - add UINPUT_VERSION
33  *      0.2     16/10/2004 (Micah Dowty <micah@navi.cx>)
34  *              - added force feedback support
35  *             - added UI_SET_PHYS
36  *      0.1     20/06/2002
37  *              - first public version
38  */
39 #ifndef __UINPUT_H_
40 #define __UINPUT_H_
41
42 #include <uapi/linux/uinput.h>
43
44 #define UINPUT_NAME             "uinput"
45 #define UINPUT_BUFFER_SIZE      16
46 #define UINPUT_NUM_REQUESTS     16
47
48 enum uinput_state { UIST_NEW_DEVICE, UIST_SETUP_COMPLETE, UIST_CREATED };
49
50 struct uinput_request {
51         unsigned int            id;
52         unsigned int            code;   /* UI_FF_UPLOAD, UI_FF_ERASE */
53
54         int                     retval;
55         struct completion       done;
56
57         union {
58                 unsigned int    effect_id;
59                 struct {
60                         struct ff_effect *effect;
61                         struct ff_effect *old;
62                 } upload;
63         } u;
64 };
65
66 struct uinput_device {
67         struct input_dev        *dev;
68         struct mutex            mutex;
69         enum uinput_state       state;
70         wait_queue_head_t       waitq;
71         unsigned char           ready;
72         unsigned char           head;
73         unsigned char           tail;
74         struct input_event      buff[UINPUT_BUFFER_SIZE];
75         unsigned int            ff_effects_max;
76
77         struct uinput_request   *requests[UINPUT_NUM_REQUESTS];
78         wait_queue_head_t       requests_waitq;
79         spinlock_t              requests_lock;
80 };
81 #endif  /* __UINPUT_H_ */