File: /usr/src/linux/include/linux/input.h

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 BTN_MISC		0x100
311     #define BTN_0			0x100
312     #define BTN_1			0x101
313     #define BTN_2			0x102
314     #define BTN_3			0x103
315     #define BTN_4			0x104
316     #define BTN_5			0x105
317     #define BTN_6			0x106
318     #define BTN_7			0x107
319     #define BTN_8			0x108
320     #define BTN_9			0x109
321     
322     #define BTN_MOUSE		0x110
323     #define BTN_LEFT		0x110
324     #define BTN_RIGHT		0x111
325     #define BTN_MIDDLE		0x112
326     #define BTN_SIDE		0x113
327     #define BTN_EXTRA		0x114
328     #define BTN_FORWARD		0x115
329     #define BTN_BACK		0x116
330     
331     #define BTN_JOYSTICK		0x120
332     #define BTN_TRIGGER		0x120
333     #define BTN_THUMB		0x121
334     #define BTN_THUMB2		0x122
335     #define BTN_TOP			0x123
336     #define BTN_TOP2		0x124
337     #define BTN_PINKIE		0x125
338     #define BTN_BASE		0x126
339     #define BTN_BASE2		0x127
340     #define BTN_BASE3		0x128
341     #define BTN_BASE4		0x129
342     #define BTN_BASE5		0x12a
343     #define BTN_BASE6		0x12b
344     #define BTN_DEAD		0x12f
345     
346     #define BTN_GAMEPAD		0x130
347     #define BTN_A			0x130
348     #define BTN_B			0x131
349     #define BTN_C			0x132
350     #define BTN_X			0x133
351     #define BTN_Y			0x134
352     #define BTN_Z			0x135
353     #define BTN_TL			0x136
354     #define BTN_TR			0x137
355     #define BTN_TL2			0x138
356     #define BTN_TR2			0x139
357     #define BTN_SELECT		0x13a
358     #define BTN_START		0x13b
359     #define BTN_MODE		0x13c
360     #define BTN_THUMBL		0x13d
361     #define BTN_THUMBR		0x13e
362     
363     #define BTN_DIGI		0x140
364     #define BTN_TOOL_PEN		0x140
365     #define BTN_TOOL_RUBBER		0x141
366     #define BTN_TOOL_BRUSH		0x142
367     #define BTN_TOOL_PENCIL		0x143
368     #define BTN_TOOL_AIRBRUSH	0x144
369     #define BTN_TOOL_FINGER		0x145
370     #define BTN_TOOL_MOUSE		0x146
371     #define BTN_TOOL_LENS		0x147
372     #define BTN_TOUCH		0x14a
373     #define BTN_STYLUS		0x14b
374     #define BTN_STYLUS2		0x14c
375     
376     #define KEY_MAX			0x1ff
377     
378     /*
379      * Relative axes
380      */
381     
382     #define REL_X			0x00
383     #define REL_Y			0x01
384     #define REL_Z			0x02
385     #define REL_HWHEEL		0x06
386     #define REL_DIAL		0x07
387     #define REL_WHEEL		0x08
388     #define REL_MISC		0x09
389     #define REL_MAX			0x0f
390     
391     /*
392      * Absolute axes
393      */
394     
395     #define ABS_X			0x00
396     #define ABS_Y			0x01
397     #define ABS_Z			0x02
398     #define ABS_RX			0x03
399     #define ABS_RY			0x04
400     #define ABS_RZ			0x05
401     #define ABS_THROTTLE		0x06
402     #define ABS_RUDDER		0x07
403     #define ABS_WHEEL		0x08
404     #define ABS_GAS			0x09
405     #define ABS_BRAKE		0x0a
406     #define ABS_HAT0X		0x10
407     #define ABS_HAT0Y		0x11
408     #define ABS_HAT1X		0x12
409     #define ABS_HAT1Y		0x13
410     #define ABS_HAT2X		0x14
411     #define ABS_HAT2Y		0x15
412     #define ABS_HAT3X		0x16
413     #define ABS_HAT3Y		0x17
414     #define ABS_PRESSURE		0x18
415     #define ABS_DISTANCE		0x19
416     #define ABS_TILT_X		0x1a
417     #define ABS_TILT_Y		0x1b
418     #define ABS_MISC		0x1c
419     #define ABS_MAX			0x1f
420     
421     /*
422      * Misc events
423      */
424     
425     #define MSC_SERIAL		0x00
426     #define MSC_MAX			0x07
427     
428     /*
429      * LEDs
430      */
431     
432     #define LED_NUML		0x00
433     #define LED_CAPSL		0x01
434     #define LED_SCROLLL		0x02
435     #define LED_COMPOSE		0x03
436     #define LED_KANA		0x04
437     #define LED_SLEEP		0x05
438     #define LED_SUSPEND		0x06
439     #define LED_MUTE		0x07
440     #define LED_MISC		0x08
441     #define LED_MAX			0x0f
442     
443     /*
444      * Autorepeat values
445      */
446     
447     #define REP_DELAY		0x00
448     #define REP_PERIOD		0x01
449     #define REP_MAX			0x01
450     
451     /*
452      * Sounds
453      */
454     
455     #define SND_CLICK		0x00
456     #define SND_BELL		0x01
457     #define SND_MAX			0x07
458     
459     /*
460      * IDs.
461      */
462     
463     #define ID_BUS			0
464     #define ID_VENDOR		1
465     #define ID_PRODUCT		2
466     #define ID_VERSION		3
467     
468     #define BUS_PCI			0x01
469     #define BUS_ISAPNP		0x02
470     #define BUS_USB			0x03
471     
472     #define BUS_ISA			0x10
473     #define BUS_I8042		0x11
474     #define BUS_XTKBD		0x12
475     #define BUS_RS232		0x13
476     #define BUS_GAMEPORT		0x14
477     #define BUS_PARPORT		0x15
478     #define BUS_AMIGA		0x16
479     #define BUS_ADB			0x17
480     #define BUS_I2C			0x18
481     
482     /*
483      * Structures used in ioctls to upload effects to a device
484      * The first structures are not passed directly by using ioctls.
485      * They are sub-structures of the actually sent structure (called ff_effect)
486      */
487     
488     struct ff_replay {
489     	__u16 length;		/* Duration of an effect */
490     	__u16 delay;		/* Time to wait before to start playing an effect */
491     };
492     
493     struct ff_trigger {
494     	__u16 button;		/* Number of button triggering an effect */
495     	__u16 interval;		/* Time to wait before an effect can be re-triggered */
496     };
497     
498     struct ff_shape {
499     	__u16 attack_length;	/* Duration of attack */
500     	__s16 attack_level;	/* Level at beginning of attack */
501     	__u16 fade_length;	/* Duration of fade */
502     	__s16 fade_level;	/* Level at end of fade */
503     };
504     
505     /* FF_CONSTANT */
506     struct ff_constant_effect {
507     	__s16 level;		/* Strength of effect */
508     	__u16 direction;	/* Direction of effect (see periodic effects) */
509     	struct ff_shape shape;
510     };
511     
512     /* FF_SPRING of FF_FRICTION */
513     struct ff_interactive_effect {
514     /* Axis along which effect must be created. If null, the field named direction
515      * is used
516      * It is a bit array (ie to enable axes X and Y, use BIT(ABS_X) | BIT(ABS_Y)
517      */
518     	__u16 axis;
519     	__u16 direction;
520     
521     	__s16 right_saturation; /* Max level when joystick is on the right */
522     	__s16 left_saturation;  /* Max level when joystick in on the left */
523     
524     	__s16 right_coeff;	/* Indicates how fast the force grows when the
525     				   joystick moves to the right */
526     	__s16 left_coeff;	/* Same for left side */
527     
528     	__u16 deadband;		/* Size of area where no force is produced */
529     	__s16 center;		/* Position of dead dead zone */
530     
531     };
532     
533     /* FF_PERIODIC */
534     struct ff_periodic_effect {
535     	__u16 waveform;		/* Kind of wave (sine, square...) */
536     	__u16 period;
537     	__s16 magnitude;	/* Peak value */
538     	__s16 offset;		/* Mean value of wave (roughly) */
539     	__u16 phase;		/* 'Horizontal' shift */
540     	__u16 direction;	/* Direction. 0 deg -> 0x0000
541     					     90 deg -> 0x4000 */
542     
543     	struct ff_shape shape;
544     };
545     
546     /*
547      * Structure sent through ioctl from the application to the driver
548      */
549     struct ff_effect {
550     	__u16 type;
551     /* Following field denotes the unique id assigned to an effect.
552      * It is set by the driver.
553      */
554     	__s16 id;
555     
556     	struct ff_trigger trigger;
557     	struct ff_replay replay;
558     
559     	union {
560     		struct ff_constant_effect constant;
561     		struct ff_periodic_effect periodic;
562     		struct ff_interactive_effect interactive;
563     	} u;
564     };
565     
566     /*
567      * Buttons that can trigger effects.  Use for example FF_BTN(BTN_TRIGGER) to
568      * access the bitmap.
569      */
570     
571     #define FF_BTN(x)	((x) - BTN_MISC + FF_BTN_OFFSET)
572     #define FF_BTN_OFFSET	0x00
573     
574     /*
575      * Force feedback axis mappings. Use FF_ABS() to access the bitmap.
576      */
577     
578     #define FF_ABS(x)	((x) + FF_ABS_OFFSET)
579     #define FF_ABS_OFFSET	0x40
580     
581     /*
582      * Force feedback effect types
583      */
584     
585     #define FF_RUMBLE	0x50
586     #define FF_PERIODIC	0x51
587     #define FF_CONSTANT	0x52
588     #define FF_SPRING	0x53
589     #define FF_FRICTION	0x54
590     
591     /*
592      * Force feedback periodic effect types
593      */
594     
595     #define FF_SQUARE	0x58
596     #define FF_TRIANGLE	0x59
597     #define FF_SINE		0x5a
598     #define FF_SAW_UP	0x5b
599     #define FF_SAW_DOWN	0x5c
600     #define FF_CUSTOM	0x5d
601     
602     /*
603      * Set ff device properties
604      */
605     
606     #define FF_GAIN		0x60
607     #define FF_AUTOCENTER	0x61
608     
609     #define FF_MAX		0x7f
610     
611     #ifdef __KERNEL__
612     
613     /*
614      * In-kernel definitions.
615      */
616     
617     #include <linux/sched.h>
618     #include <linux/devfs_fs_kernel.h>
619     
620     #define NBITS(x) ((((x)-1)/BITS_PER_LONG)+1)
621     #define BIT(x)	(1UL<<((x)%BITS_PER_LONG))
622     #define LONG(x) ((x)/BITS_PER_LONG)
623     
624     struct input_dev {
625     
626     	void *private;
627     
628     	int number;
629     	char *name;
630     	unsigned short idbus;
631     	unsigned short idvendor;
632     	unsigned short idproduct;
633     	unsigned short idversion;
634     
635     	unsigned long evbit[NBITS(EV_MAX)];
636     	unsigned long keybit[NBITS(KEY_MAX)];
637     	unsigned long relbit[NBITS(REL_MAX)];
638     	unsigned long absbit[NBITS(ABS_MAX)];
639     	unsigned long mscbit[NBITS(MSC_MAX)];
640     	unsigned long ledbit[NBITS(LED_MAX)];
641     	unsigned long sndbit[NBITS(SND_MAX)];
642     	unsigned long ffbit[NBITS(FF_MAX)];
643     	int ff_effects_max;
644     
645     	unsigned int keycodemax;
646     	unsigned int keycodesize;
647     	void *keycode;
648     
649     	unsigned int repeat_key;
650     	struct timer_list timer;
651     
652     	int abs[ABS_MAX + 1];
653     	int rep[REP_MAX + 1];
654     
655     	unsigned long key[NBITS(KEY_MAX)];
656     	unsigned long led[NBITS(LED_MAX)];
657     	unsigned long snd[NBITS(SND_MAX)];
658     
659     	int absmax[ABS_MAX + 1];
660     	int absmin[ABS_MAX + 1];
661     	int absfuzz[ABS_MAX + 1];
662     	int absflat[ABS_MAX + 1];
663     
664     	int (*open)(struct input_dev *dev);
665     	void (*close)(struct input_dev *dev);
666     	int (*event)(struct input_dev *dev, unsigned int type, unsigned int code, int value);
667     	int (*upload_effect)(struct input_dev *dev, struct ff_effect *effect);
668     	int (*erase_effect)(struct input_dev *dev, int effect_id);
669     
670     	struct input_handle *handle;
671     	struct input_dev *next;
672     };
673     
674     struct input_handler {
675     
676     	void *private;
677     
678     	void (*event)(struct input_handle *handle, unsigned int type, unsigned int code, int value);
679     	struct input_handle* (*connect)(struct input_handler *handler, struct input_dev *dev);
680     	void (*disconnect)(struct input_handle *handle);
681     
682     	struct file_operations *fops;
683     	int minor;
684     
685     	struct input_handle *handle;
686     	struct input_handler *next;
687     };
688     
689     struct input_handle {
690     
691     	void *private;
692     
693     	int open;
694     
695     	struct input_dev *dev;
696     	struct input_handler *handler;
697     
698     	struct input_handle *dnext;
699     	struct input_handle *hnext;
700     };
701     
702     void input_register_device(struct input_dev *);
703     void input_unregister_device(struct input_dev *);
704     
705     void input_register_handler(struct input_handler *);
706     void input_unregister_handler(struct input_handler *);
707     
708     int input_open_device(struct input_handle *);
709     void input_close_device(struct input_handle *);
710     
711     devfs_handle_t input_register_minor(char *name, int minor, int minor_base);
712     void input_unregister_minor(devfs_handle_t handle);
713     
714     void input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value);
715     
716     #define input_report_key(a,b,c) input_event(a, EV_KEY, b, !!(c))
717     #define input_report_rel(a,b,c) input_event(a, EV_REL, b, c)
718     #define input_report_abs(a,b,c) input_event(a, EV_ABS, b, c)
719     
720     #endif
721     #endif
722