1 #ifndef _INPUT_H
2 #define _INPUT_H
3 
4 /*
5  * $Id: input.h,v 1.34 2001/05/28 09:06:44 vojtech Exp $
6  *
7  *  Copyright (c) 1999-2000 Vojtech Pavlik
8  *
9  *  Sponsored by SuSE
10  */
11 
12 /*
13  * This program is free software; you can redistribute it and/or modify
14  * it under the terms of the GNU General Public License as published by
15  * the Free Software Foundation; either version 2 of the License, or
16  * (at your option) any later version.
17  *
18  * This program is distributed in the hope that it will be useful,
19  * but WITHOUT ANY WARRANTY; without even the implied warranty of
20  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21  * GNU General Public License for more details.
22  *
23  * You should have received a copy of the GNU General Public License
24  * along with this program; if not, write to the Free Software
25  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
26  *
27  * Should you need to contact me, the author, you can do so either by
28  * e-mail - mail your message to <vojtech@suse.cz>, or by paper mail:
29  * Vojtech Pavlik, Ucitelska 1576, Prague 8, 182 00 Czech Republic
30  */
31 
32 #ifdef __KERNEL__
33 #include <linux/time.h>
34 #else
35 #include <sys/time.h>
36 #include <sys/ioctl.h>
37 #include <asm/types.h>
38 #endif
39 
40 /*
41  * The event structure itself
42  */
43 
44 struct input_event {
45 	struct timeval time;
46 	unsigned short type;
47 	unsigned short code;
48 	unsigned int value;
49 };
50 
51 /*
52  * Protocol version.
53  */
54 
55 #define EV_VERSION		0x010000
56 
57 /*
58  * IOCTLs (0x00 - 0x7f)
59  */
60 
61 #define EVIOCGVERSION		_IOR('E', 0x01, int)			/* get driver version */
62 #define EVIOCGID		_IOR('E', 0x02, short[4])		/* get device ID */
63 #define EVIOCGREP		_IOR('E', 0x03, int[2])			/* get repeat settings */
64 #define EVIOCSREP		_IOW('E', 0x03, int[2])			/* get repeat settings */
65 #define EVIOCGKEYCODE		_IOR('E', 0x04, int[2])			/* get keycode */
66 #define EVIOCSKEYCODE		_IOW('E', 0x04, int[2])			/* set keycode */
67 #define EVIOCGKEY		_IOR('E', 0x05, int[2])			/* get key value */
68 #define EVIOCGNAME(len)		_IOC(_IOC_READ, 'E', 0x06, len)		/* get device name */
69 #define EVIOCGBUS		_IOR('E', 0x07, short[4])		/* get bus address */
70 
71 #define EVIOCGBIT(ev,len)	_IOC(_IOC_READ, 'E', 0x20 + ev, len)	/* get event bits */
72 #define EVIOCGABS(abs)		_IOR('E', 0x40 + abs, int[5])		/* get abs value/limits */
73 
74 #define EVIOCSFF		_IOC(_IOC_WRITE, 'E', 0x80, sizeof(struct ff_effect))	/* send a force effect to a force feedback device */
75 #define EVIOCRMFF		_IOW('E', 0x81, int)			/* Erase a force effect */
76 #define EVIOCSGAIN		_IOW('E', 0x82, unsigned short)		/* Set overall gain */
77 #define EVIOCSAUTOCENTER	_IOW('E', 0x83, unsigned short)		/* Enable or disable auto-centering */
78 #define EVIOCGEFFECTS		_IOR('E', 0x84, int)			/* Report number of effects playable at the same time */
79 
80 /*
81  * Event types
82  */
83 
84 #define EV_RST			0x00
85 #define EV_KEY			0x01
86 #define EV_REL			0x02
87 #define EV_ABS			0x03
88 #define EV_MSC			0x04
89 #define EV_LED			0x11
90 #define EV_SND			0x12
91 #define EV_REP			0x14
92 #define EV_FF			0x15
93 #define EV_MAX			0x1f
94 
95 /*
96  * Keys and buttons
97  */
98 
99 #define KEY_RESERVED		0
100 #define KEY_ESC			1
101 #define KEY_1			2
102 #define KEY_2			3
103 #define KEY_3			4
104 #define KEY_4			5
105 #define KEY_5			6
106 #define KEY_6			7
107 #define KEY_7			8
108 #define KEY_8			9
109 #define KEY_9			10
110 #define KEY_0			11
111 #define KEY_MINUS		12
112 #define KEY_EQUAL		13
113 #define KEY_BACKSPACE		14
114 #define KEY_TAB			15
115 #define KEY_Q			16
116 #define KEY_W			17
117 #define KEY_E			18
118 #define KEY_R			19
119 #define KEY_T			20
120 #define KEY_Y			21
121 #define KEY_U			22
122 #define KEY_I			23
123 #define KEY_O			24
124 #define KEY_P			25
125 #define KEY_LEFTBRACE		26
126 #define KEY_RIGHTBRACE		27
127 #define KEY_ENTER		28
128 #define KEY_LEFTCTRL		29
129 #define KEY_A			30
130 #define KEY_S			31
131 #define KEY_D			32
132 #define KEY_F			33
133 #define KEY_G			34
134 #define KEY_H			35
135 #define KEY_J			36
136 #define KEY_K			37
137 #define KEY_L			38
138 #define KEY_SEMICOLON		39
139 #define KEY_APOSTROPHE		40
140 #define KEY_GRAVE		41
141 #define KEY_LEFTSHIFT		42
142 #define KEY_BACKSLASH		43
143 #define KEY_Z			44
144 #define KEY_X			45
145 #define KEY_C			46
146 #define KEY_V			47
147 #define KEY_B			48
148 #define KEY_N			49
149 #define KEY_M			50
150 #define KEY_COMMA		51
151 #define KEY_DOT			52
152 #define KEY_SLASH		53
153 #define KEY_RIGHTSHIFT		54
154 #define KEY_KPASTERISK		55
155 #define KEY_LEFTALT		56
156 #define KEY_SPACE		57
157 #define KEY_CAPSLOCK		58
158 #define KEY_F1			59
159 #define KEY_F2			60
160 #define KEY_F3			61
161 #define KEY_F4			62
162 #define KEY_F5			63
163 #define KEY_F6			64
164 #define KEY_F7			65
165 #define KEY_F8			66
166 #define KEY_F9			67
167 #define KEY_F10			68
168 #define KEY_NUMLOCK		69
169 #define KEY_SCROLLLOCK		70
170 #define KEY_KP7			71
171 #define KEY_KP8			72
172 #define KEY_KP9			73
173 #define KEY_KPMINUS		74
174 #define KEY_KP4			75
175 #define KEY_KP5			76
176 #define KEY_KP6			77
177 #define KEY_KPPLUS		78
178 #define KEY_KP1			79
179 #define KEY_KP2			80
180 #define KEY_KP3			81
181 #define KEY_KP0			82
182 #define KEY_KPDOT		83
183 #define KEY_103RD		84
184 #define KEY_F13			85
185 #define KEY_102ND		86
186 #define KEY_F11			87
187 #define KEY_F12			88
188 #define KEY_F14			89
189 #define KEY_F15			90
190 #define KEY_F16			91
191 #define KEY_F17			92
192 #define KEY_F18			93
193 #define KEY_F19			94
194 #define KEY_F20			95
195 #define KEY_KPENTER		96
196 #define KEY_RIGHTCTRL		97
197 #define KEY_KPSLASH		98
198 #define KEY_SYSRQ		99
199 #define KEY_RIGHTALT		100
200 #define KEY_LINEFEED		101
201 #define KEY_HOME		102
202 #define KEY_UP			103
203 #define KEY_PAGEUP		104
204 #define KEY_LEFT		105
205 #define KEY_RIGHT		106
206 #define KEY_END			107
207 #define KEY_DOWN		108
208 #define KEY_PAGEDOWN		109
209 #define KEY_INSERT		110
210 #define KEY_DELETE		111
211 #define KEY_MACRO		112
212 #define KEY_MUTE		113
213 #define KEY_VOLUMEDOWN		114
214 #define KEY_VOLUMEUP		115
215 #define KEY_POWER		116
216 #define KEY_KPEQUAL		117
217 #define KEY_KPPLUSMINUS		118
218 #define KEY_PAUSE		119
219 #define KEY_F21			120
220 #define KEY_F22			121
221 #define KEY_F23			122
222 #define KEY_F24			123
223 #define KEY_KPCOMMA		124
224 #define KEY_LEFTMETA		125
225 #define KEY_RIGHTMETA		126
226 #define KEY_COMPOSE		127
227 
228 #define KEY_STOP		128
229 #define KEY_AGAIN		129
230 #define KEY_PROPS		130
231 #define KEY_UNDO		131
232 #define KEY_FRONT		132
233 #define KEY_COPY		133
234 #define KEY_OPEN		134
235 #define KEY_PASTE		135
236 #define KEY_FIND		136
237 #define KEY_CUT			137
238 #define KEY_HELP		138
239 #define KEY_MENU		139
240 #define KEY_CALC		140
241 #define KEY_SETUP		141
242 #define KEY_SLEEP		142
243 #define KEY_WAKEUP		143
244 #define KEY_FILE		144
245 #define KEY_SENDFILE		145
246 #define KEY_DELETEFILE		146
247 #define KEY_XFER		147
248 #define KEY_PROG1		148
249 #define KEY_PROG2		149
250 #define KEY_WWW			150
251 #define KEY_MSDOS		151
252 #define KEY_COFFEE		152
253 #define KEY_DIRECTION		153
254 #define KEY_CYCLEWINDOWS	154
255 #define KEY_MAIL		155
256 #define KEY_BOOKMARKS		156
257 #define KEY_COMPUTER		157
258 #define KEY_BACK		158
259 #define KEY_FORWARD		159
260 #define KEY_CLOSECD		160
261 #define KEY_EJECTCD		161
262 #define KEY_EJECTCLOSECD	162
263 #define KEY_NEXTSONG		163
264 #define KEY_PLAYPAUSE		164
265 #define KEY_PREVIOUSSONG	165
266 #define KEY_STOPCD		166
267 #define KEY_RECORD		167
268 #define KEY_REWIND		168
269 #define KEY_PHONE		169
270 #define KEY_ISO			170
271 #define KEY_CONFIG		171
272 #define KEY_HOMEPAGE		172
273 #define KEY_REFRESH		173
274 #define KEY_EXIT		174
275 #define KEY_MOVE		175
276 #define KEY_EDIT		176
277 #define KEY_SCROLLUP		177
278 #define KEY_SCROLLDOWN		178
279 #define KEY_KPLEFTPAREN		179
280 #define KEY_KPRIGHTPAREN	180
281 
282 #define KEY_INTL1		181
283 #define KEY_INTL2		182
284 #define KEY_INTL3		183
285 #define KEY_INTL4		184
286 #define KEY_INTL5		185
287 #define KEY_INTL6		186
288 #define KEY_INTL7		187
289 #define KEY_INTL8		188
290 #define KEY_INTL9		189
291 #define KEY_LANG1		190
292 #define KEY_LANG2		191
293 #define KEY_LANG3		192
294 #define KEY_LANG4		193
295 #define KEY_LANG5		194
296 #define KEY_LANG6		195
297 #define KEY_LANG7		196
298 #define KEY_LANG8		197
299 #define KEY_LANG9		198
300 
301 #define KEY_PLAYCD		200
302 #define KEY_PAUSECD		201
303 #define KEY_PROG3		202
304 #define KEY_PROG4		203
305 #define KEY_SUSPEND		205
306 #define KEY_CLOSE		206
307 
308 #define KEY_UNKNOWN		220
309 
310 #define KEY_BRIGHTNESSDOWN	224
311 #define KEY_BRIGHTNESSUP	225
312 
313 #define BTN_MISC		0x100
314 #define BTN_0			0x100
315 #define BTN_1			0x101
316 #define BTN_2			0x102
317 #define BTN_3			0x103
318 #define BTN_4			0x104
319 #define BTN_5			0x105
320 #define BTN_6			0x106
321 #define BTN_7			0x107
322 #define BTN_8			0x108
323 #define BTN_9			0x109
324 
325 #define BTN_MOUSE		0x110
326 #define BTN_LEFT		0x110
327 #define BTN_RIGHT		0x111
328 #define BTN_MIDDLE		0x112
329 #define BTN_SIDE		0x113
330 #define BTN_EXTRA		0x114
331 #define BTN_FORWARD		0x115
332 #define BTN_BACK		0x116
333 
334 #define BTN_JOYSTICK		0x120
335 #define BTN_TRIGGER		0x120
336 #define BTN_THUMB		0x121
337 #define BTN_THUMB2		0x122
338 #define BTN_TOP			0x123
339 #define BTN_TOP2		0x124
340 #define BTN_PINKIE		0x125
341 #define BTN_BASE		0x126
342 #define BTN_BASE2		0x127
343 #define BTN_BASE3		0x128
344 #define BTN_BASE4		0x129
345 #define BTN_BASE5		0x12a
346 #define BTN_BASE6		0x12b
347 #define BTN_DEAD		0x12f
348 
349 #define BTN_GAMEPAD		0x130
350 #define BTN_A			0x130
351 #define BTN_B			0x131
352 #define BTN_C			0x132
353 #define BTN_X			0x133
354 #define BTN_Y			0x134
355 #define BTN_Z			0x135
356 #define BTN_TL			0x136
357 #define BTN_TR			0x137
358 #define BTN_TL2			0x138
359 #define BTN_TR2			0x139
360 #define BTN_SELECT		0x13a
361 #define BTN_START		0x13b
362 #define BTN_MODE		0x13c
363 #define BTN_THUMBL		0x13d
364 #define BTN_THUMBR		0x13e
365 
366 #define BTN_DIGI		0x140
367 #define BTN_TOOL_PEN		0x140
368 #define BTN_TOOL_RUBBER		0x141
369 #define BTN_TOOL_BRUSH		0x142
370 #define BTN_TOOL_PENCIL		0x143
371 #define BTN_TOOL_AIRBRUSH	0x144
372 #define BTN_TOOL_FINGER		0x145
373 #define BTN_TOOL_MOUSE		0x146
374 #define BTN_TOOL_LENS		0x147
375 #define BTN_TOUCH		0x14a
376 #define BTN_STYLUS		0x14b
377 #define BTN_STYLUS2		0x14c
378 
379 #define KEY_MAX			0x1ff
380 
381 /*
382  * Relative axes
383  */
384 
385 #define REL_X			0x00
386 #define REL_Y			0x01
387 #define REL_Z			0x02
388 #define REL_HWHEEL		0x06
389 #define REL_DIAL		0x07
390 #define REL_WHEEL		0x08
391 #define REL_MISC		0x09
392 #define REL_MAX			0x0f
393 
394 /*
395  * Absolute axes
396  */
397 
398 #define ABS_X			0x00
399 #define ABS_Y			0x01
400 #define ABS_Z			0x02
401 #define ABS_RX			0x03
402 #define ABS_RY			0x04
403 #define ABS_RZ			0x05
404 #define ABS_THROTTLE		0x06
405 #define ABS_RUDDER		0x07
406 #define ABS_WHEEL		0x08
407 #define ABS_GAS			0x09
408 #define ABS_BRAKE		0x0a
409 #define ABS_HAT0X		0x10
410 #define ABS_HAT0Y		0x11
411 #define ABS_HAT1X		0x12
412 #define ABS_HAT1Y		0x13
413 #define ABS_HAT2X		0x14
414 #define ABS_HAT2Y		0x15
415 #define ABS_HAT3X		0x16
416 #define ABS_HAT3Y		0x17
417 #define ABS_PRESSURE		0x18
418 #define ABS_DISTANCE		0x19
419 #define ABS_TILT_X		0x1a
420 #define ABS_TILT_Y		0x1b
421 #define ABS_MISC		0x1c
422 #define ABS_MAX			0x1f
423 
424 /*
425  * Misc events
426  */
427 
428 #define MSC_SERIAL		0x00
429 #define MSC_PULSELED		0x01
430 #define MSC_MAX			0x07
431 
432 /*
433  * LEDs
434  */
435 
436 #define LED_NUML		0x00
437 #define LED_CAPSL		0x01
438 #define LED_SCROLLL		0x02
439 #define LED_COMPOSE		0x03
440 #define LED_KANA		0x04
441 #define LED_SLEEP		0x05
442 #define LED_SUSPEND		0x06
443 #define LED_MUTE		0x07
444 #define LED_MISC		0x08
445 #define LED_MAX			0x0f
446 
447 /*
448  * Autorepeat values
449  */
450 
451 #define REP_DELAY		0x00
452 #define REP_PERIOD		0x01
453 #define REP_MAX			0x01
454 
455 /*
456  * Sounds
457  */
458 
459 #define SND_CLICK		0x00
460 #define SND_BELL		0x01
461 #define SND_MAX			0x07
462 
463 /*
464  * IDs.
465  */
466 
467 #define ID_BUS			0
468 #define ID_VENDOR		1
469 #define ID_PRODUCT		2
470 #define ID_VERSION		3
471 
472 #define BUS_PCI			0x01
473 #define BUS_ISAPNP		0x02
474 #define BUS_USB			0x03
475 #define BUS_HIL			0x04
476 #define BUS_BLUETOOTH		0x05
477 
478 #define BUS_ISA			0x10
479 #define BUS_I8042		0x11
480 #define BUS_XTKBD		0x12
481 #define BUS_RS232		0x13
482 #define BUS_GAMEPORT		0x14
483 #define BUS_PARPORT		0x15
484 #define BUS_AMIGA		0x16
485 #define BUS_ADB			0x17
486 #define BUS_I2C			0x18
487 
488 /*
489  * Structures used in ioctls to upload effects to a device
490  * The first structures are not passed directly by using ioctls.
491  * They are sub-structures of the actually sent structure (called ff_effect)
492  */
493 
494 struct ff_replay {
495 	__u16 length;		/* Duration of an effect */
496 	__u16 delay;		/* Time to wait before to start playing an effect */
497 };
498 
499 struct ff_trigger {
500 	__u16 button;		/* Number of button triggering an effect */
501 	__u16 interval;		/* Time to wait before an effect can be re-triggered */
502 };
503 
504 struct ff_shape {
505 	__u16 attack_length;	/* Duration of attack */
506 	__s16 attack_level;	/* Level at beginning of attack */
507 	__u16 fade_length;	/* Duration of fade */
508 	__s16 fade_level;	/* Level at end of fade */
509 };
510 
511 /* FF_CONSTANT */
512 struct ff_constant_effect {
513 	__s16 level;		/* Strength of effect */
514 	__u16 direction;	/* Direction of effect (see periodic effects) */
515 	struct ff_shape shape;
516 };
517 
518 /* FF_SPRING of FF_FRICTION */
519 struct ff_interactive_effect {
520 /* Axis along which effect must be created. If null, the field named direction
521  * is used
522  * It is a bit array (ie to enable axes X and Y, use BIT(ABS_X) | BIT(ABS_Y)
523  */
524 	__u16 axis;
525 	__u16 direction;
526 
527 	__s16 right_saturation; /* Max level when joystick is on the right */
528 	__s16 left_saturation;  /* Max level when joystick in on the left */
529 
530 	__s16 right_coeff;	/* Indicates how fast the force grows when the
531 				   joystick moves to the right */
532 	__s16 left_coeff;	/* Same for left side */
533 
534 	__u16 deadband;		/* Size of area where no force is produced */
535 	__s16 center;		/* Position of dead dead zone */
536 
537 };
538 
539 /* FF_PERIODIC */
540 struct ff_periodic_effect {
541 	__u16 waveform;		/* Kind of wave (sine, square...) */
542 	__u16 period;
543 	__s16 magnitude;	/* Peak value */
544 	__s16 offset;		/* Mean value of wave (roughly) */
545 	__u16 phase;		/* 'Horizontal' shift */
546 	__u16 direction;	/* Direction. 0 deg -> 0x0000
547 					     90 deg -> 0x4000 */
548 
549 	struct ff_shape shape;
550 };
551 
552 /*
553  * Structure sent through ioctl from the application to the driver
554  */
555 struct ff_effect {
556 	__u16 type;
557 /* Following field denotes the unique id assigned to an effect.
558  * It is set by the driver.
559  */
560 	__s16 id;
561 
562 	struct ff_trigger trigger;
563 	struct ff_replay replay;
564 
565 	union {
566 		struct ff_constant_effect constant;
567 		struct ff_periodic_effect periodic;
568 		struct ff_interactive_effect interactive;
569 	} u;
570 };
571 
572 /*
573  * Buttons that can trigger effects.  Use for example FF_BTN(BTN_TRIGGER) to
574  * access the bitmap.
575  */
576 
577 #define FF_BTN(x)	((x) - BTN_MISC + FF_BTN_OFFSET)
578 #define FF_BTN_OFFSET	0x00
579 
580 /*
581  * Force feedback axis mappings. Use FF_ABS() to access the bitmap.
582  */
583 
584 #define FF_ABS(x)	((x) + FF_ABS_OFFSET)
585 #define FF_ABS_OFFSET	0x40
586 
587 /*
588  * Force feedback effect types
589  */
590 
591 #define FF_RUMBLE	0x50
592 #define FF_PERIODIC	0x51
593 #define FF_CONSTANT	0x52
594 #define FF_SPRING	0x53
595 #define FF_FRICTION	0x54
596 
597 /*
598  * Force feedback periodic effect types
599  */
600 
601 #define FF_SQUARE	0x58
602 #define FF_TRIANGLE	0x59
603 #define FF_SINE		0x5a
604 #define FF_SAW_UP	0x5b
605 #define FF_SAW_DOWN	0x5c
606 #define FF_CUSTOM	0x5d
607 
608 /*
609  * Set ff device properties
610  */
611 
612 #define FF_GAIN		0x60
613 #define FF_AUTOCENTER	0x61
614 
615 #define FF_MAX		0x7f
616 
617 #ifdef __KERNEL__
618 
619 /*
620  * In-kernel definitions.
621  */
622 
623 #include <linux/sched.h>
624 #include <linux/devfs_fs_kernel.h>
625 
626 #define NBITS(x) ((((x)-1)/BITS_PER_LONG)+1)
627 #define BIT(x)	(1UL<<((x)%BITS_PER_LONG))
628 #define LONG(x) ((x)/BITS_PER_LONG)
629 
630 struct input_dev {
631 
632 	void *private;
633 
634 	int number;
635 	char *name;
636 	unsigned short idbus;
637 	unsigned short idvendor;
638 	unsigned short idproduct;
639 	unsigned short idversion;
640 
641 	unsigned long evbit[NBITS(EV_MAX)];
642 	unsigned long keybit[NBITS(KEY_MAX)];
643 	unsigned long relbit[NBITS(REL_MAX)];
644 	unsigned long absbit[NBITS(ABS_MAX)];
645 	unsigned long mscbit[NBITS(MSC_MAX)];
646 	unsigned long ledbit[NBITS(LED_MAX)];
647 	unsigned long sndbit[NBITS(SND_MAX)];
648 	unsigned long ffbit[NBITS(FF_MAX)];
649 	int ff_effects_max;
650 
651 	unsigned int keycodemax;
652 	unsigned int keycodesize;
653 	void *keycode;
654 
655 	unsigned int repeat_key;
656 	struct timer_list timer;
657 
658 	int abs[ABS_MAX + 1];
659 	int rep[REP_MAX + 1];
660 
661 	unsigned long key[NBITS(KEY_MAX)];
662 	unsigned long led[NBITS(LED_MAX)];
663 	unsigned long snd[NBITS(SND_MAX)];
664 
665 	int absmax[ABS_MAX + 1];
666 	int absmin[ABS_MAX + 1];
667 	int absfuzz[ABS_MAX + 1];
668 	int absflat[ABS_MAX + 1];
669 
670 	int (*open)(struct input_dev *dev);
671 	void (*close)(struct input_dev *dev);
672 	int (*event)(struct input_dev *dev, unsigned int type, unsigned int code, int value);
673 	int (*upload_effect)(struct input_dev *dev, struct ff_effect *effect);
674 	int (*erase_effect)(struct input_dev *dev, int effect_id);
675 
676 	struct input_handle *handle;
677 	struct input_dev *next;
678 };
679 
680 struct input_handler {
681 
682 	void *private;
683 
684 	void (*event)(struct input_handle *handle, unsigned int type, unsigned int code, int value);
685 	struct input_handle* (*connect)(struct input_handler *handler, struct input_dev *dev);
686 	void (*disconnect)(struct input_handle *handle);
687 
688 	struct file_operations *fops;
689 	int minor;
690 
691 	struct input_handle *handle;
692 	struct input_handler *next;
693 };
694 
695 struct input_handle {
696 
697 	void *private;
698 
699 	int open;
700 
701 	struct input_dev *dev;
702 	struct input_handler *handler;
703 
704 	struct input_handle *dnext;
705 	struct input_handle *hnext;
706 };
707 
708 void input_register_device(struct input_dev *);
709 void input_unregister_device(struct input_dev *);
710 
711 void input_register_handler(struct input_handler *);
712 void input_unregister_handler(struct input_handler *);
713 
714 int input_open_device(struct input_handle *);
715 void input_close_device(struct input_handle *);
716 
717 devfs_handle_t input_register_minor(char *name, int minor, int minor_base);
718 void input_unregister_minor(devfs_handle_t handle);
719 
720 void input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value);
721 
722 #define input_report_key(a,b,c) input_event(a, EV_KEY, b, !!(c))
723 #define input_report_rel(a,b,c) input_event(a, EV_REL, b, c)
724 #define input_report_abs(a,b,c) input_event(a, EV_ABS, b, c)
725 
726 #endif
727 #endif
728