• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_ */
82