]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - include/linux/uinput.h
Merge remote-tracking branch 'parisc-hd/for-next'
[karo-tx-linux.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.4     01/09/2014 (Benjamin Tissoires <benjamin.tissoires@redhat.com>)
24  *              - add UI_GET_SYSNAME ioctl
25  *      0.3     24/05/2006 (Anssi Hannula <anssi.hannulagmail.com>)
26  *              - update ff support for the changes in kernel interface
27  *              - add UINPUT_VERSION
28  *      0.2     16/10/2004 (Micah Dowty <micah@navi.cx>)
29  *              - added force feedback support
30  *             - added UI_SET_PHYS
31  *      0.1     20/06/2002
32  *              - first public version
33  */
34 #ifndef __UINPUT_H_
35 #define __UINPUT_H_
36
37 #include <uapi/linux/uinput.h>
38
39 #define UINPUT_NAME             "uinput"
40 #define UINPUT_BUFFER_SIZE      16
41 #define UINPUT_NUM_REQUESTS     16
42
43 enum uinput_state { UIST_NEW_DEVICE, UIST_SETUP_COMPLETE, UIST_CREATED };
44
45 struct uinput_request {
46         unsigned int            id;
47         unsigned int            code;   /* UI_FF_UPLOAD, UI_FF_ERASE */
48
49         int                     retval;
50         struct completion       done;
51
52         union {
53                 unsigned int    effect_id;
54                 struct {
55                         struct ff_effect *effect;
56                         struct ff_effect *old;
57                 } upload;
58         } u;
59 };
60
61 struct uinput_device {
62         struct input_dev        *dev;
63         struct mutex            mutex;
64         enum uinput_state       state;
65         wait_queue_head_t       waitq;
66         unsigned char           ready;
67         unsigned char           head;
68         unsigned char           tail;
69         struct input_event      buff[UINPUT_BUFFER_SIZE];
70         unsigned int            ff_effects_max;
71
72         struct uinput_request   *requests[UINPUT_NUM_REQUESTS];
73         wait_queue_head_t       requests_waitq;
74         spinlock_t              requests_lock;
75 };
76 #endif  /* __UINPUT_H_ */