• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/input/
1/*
2 * Event char devices, giving access to raw input device events.
3 *
4 * Copyright (c) 1999-2002 Vojtech Pavlik
5 *
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License version 2 as published by
8 * the Free Software Foundation.
9 */
10
11#define EVDEV_MINOR_BASE	64
12#define EVDEV_MINORS		32
13#define EVDEV_MIN_BUFFER_SIZE	64U
14#define EVDEV_BUF_PACKETS	8
15
16#include <linux/poll.h>
17#include <linux/sched.h>
18#include <linux/slab.h>
19#include <linux/module.h>
20#include <linux/init.h>
21#include <linux/input.h>
22#include <linux/major.h>
23#include <linux/device.h>
24#include "input-compat.h"
25
26struct evdev {
27	int open;
28	int minor;
29	struct input_handle handle;
30	wait_queue_head_t wait;
31	struct evdev_client *grab;
32	struct list_head client_list;
33	spinlock_t client_lock; /* protects client_list */
34	struct mutex mutex;
35	struct device dev;
36	bool exist;
37};
38
39struct evdev_client {
40	int head;
41	int tail;
42	spinlock_t buffer_lock; /* protects access to buffer, head and tail */
43	struct fasync_struct *fasync;
44	struct evdev *evdev;
45	struct list_head node;
46	int bufsize;
47	struct input_event buffer[];
48};
49
50static struct evdev *evdev_table[EVDEV_MINORS];
51static DEFINE_MUTEX(evdev_table_mutex);
52
53static void evdev_pass_event(struct evdev_client *client,
54			     struct input_event *event)
55{
56	/*
57	 * Interrupts are disabled, just acquire the lock.
58	 * Make sure we don't leave with the client buffer
59	 * "empty" by having client->head == client->tail.
60	 */
61	spin_lock(&client->buffer_lock);
62	do {
63		client->buffer[client->head++] = *event;
64		client->head &= client->bufsize - 1;
65	} while (client->head == client->tail);
66	spin_unlock(&client->buffer_lock);
67
68	if (event->type == EV_SYN)
69		kill_fasync(&client->fasync, SIGIO, POLL_IN);
70}
71
72/*
73 * Pass incoming event to all connected clients.
74 */
75static void evdev_event(struct input_handle *handle,
76			unsigned int type, unsigned int code, int value)
77{
78	struct evdev *evdev = handle->private;
79	struct evdev_client *client;
80	struct input_event event;
81
82	do_gettimeofday(&event.time);
83	event.type = type;
84	event.code = code;
85	event.value = value;
86
87	rcu_read_lock();
88
89	client = rcu_dereference(evdev->grab);
90	if (client)
91		evdev_pass_event(client, &event);
92	else
93		list_for_each_entry_rcu(client, &evdev->client_list, node)
94			evdev_pass_event(client, &event);
95
96	rcu_read_unlock();
97
98	wake_up_interruptible(&evdev->wait);
99}
100
101static int evdev_fasync(int fd, struct file *file, int on)
102{
103	struct evdev_client *client = file->private_data;
104
105	return fasync_helper(fd, file, on, &client->fasync);
106}
107
108static int evdev_flush(struct file *file, fl_owner_t id)
109{
110	struct evdev_client *client = file->private_data;
111	struct evdev *evdev = client->evdev;
112	int retval;
113
114	retval = mutex_lock_interruptible(&evdev->mutex);
115	if (retval)
116		return retval;
117
118	if (!evdev->exist)
119		retval = -ENODEV;
120	else
121		retval = input_flush_device(&evdev->handle, file);
122
123	mutex_unlock(&evdev->mutex);
124	return retval;
125}
126
127static void evdev_free(struct device *dev)
128{
129	struct evdev *evdev = container_of(dev, struct evdev, dev);
130
131	input_put_device(evdev->handle.dev);
132	kfree(evdev);
133}
134
135/*
136 * Grabs an event device (along with underlying input device).
137 * This function is called with evdev->mutex taken.
138 */
139static int evdev_grab(struct evdev *evdev, struct evdev_client *client)
140{
141	int error;
142
143	if (evdev->grab)
144		return -EBUSY;
145
146	error = input_grab_device(&evdev->handle);
147	if (error)
148		return error;
149
150	rcu_assign_pointer(evdev->grab, client);
151	synchronize_rcu();
152
153	return 0;
154}
155
156static int evdev_ungrab(struct evdev *evdev, struct evdev_client *client)
157{
158	if (evdev->grab != client)
159		return  -EINVAL;
160
161	rcu_assign_pointer(evdev->grab, NULL);
162	synchronize_rcu();
163	input_release_device(&evdev->handle);
164
165	return 0;
166}
167
168static void evdev_attach_client(struct evdev *evdev,
169				struct evdev_client *client)
170{
171	spin_lock(&evdev->client_lock);
172	list_add_tail_rcu(&client->node, &evdev->client_list);
173	spin_unlock(&evdev->client_lock);
174	synchronize_rcu();
175}
176
177static void evdev_detach_client(struct evdev *evdev,
178				struct evdev_client *client)
179{
180	spin_lock(&evdev->client_lock);
181	list_del_rcu(&client->node);
182	spin_unlock(&evdev->client_lock);
183	synchronize_rcu();
184}
185
186static int evdev_open_device(struct evdev *evdev)
187{
188	int retval;
189
190	retval = mutex_lock_interruptible(&evdev->mutex);
191	if (retval)
192		return retval;
193
194	if (!evdev->exist)
195		retval = -ENODEV;
196	else if (!evdev->open++) {
197		retval = input_open_device(&evdev->handle);
198		if (retval)
199			evdev->open--;
200	}
201
202	mutex_unlock(&evdev->mutex);
203	return retval;
204}
205
206static void evdev_close_device(struct evdev *evdev)
207{
208	mutex_lock(&evdev->mutex);
209
210	if (evdev->exist && !--evdev->open)
211		input_close_device(&evdev->handle);
212
213	mutex_unlock(&evdev->mutex);
214}
215
216/*
217 * Wake up users waiting for IO so they can disconnect from
218 * dead device.
219 */
220static void evdev_hangup(struct evdev *evdev)
221{
222	struct evdev_client *client;
223
224	spin_lock(&evdev->client_lock);
225	list_for_each_entry(client, &evdev->client_list, node)
226		kill_fasync(&client->fasync, SIGIO, POLL_HUP);
227	spin_unlock(&evdev->client_lock);
228
229	wake_up_interruptible(&evdev->wait);
230}
231
232static int evdev_release(struct inode *inode, struct file *file)
233{
234	struct evdev_client *client = file->private_data;
235	struct evdev *evdev = client->evdev;
236
237	mutex_lock(&evdev->mutex);
238	if (evdev->grab == client)
239		evdev_ungrab(evdev, client);
240	mutex_unlock(&evdev->mutex);
241
242	evdev_detach_client(evdev, client);
243	kfree(client);
244
245	evdev_close_device(evdev);
246	put_device(&evdev->dev);
247
248	return 0;
249}
250
251static unsigned int evdev_compute_buffer_size(struct input_dev *dev)
252{
253	unsigned int n_events =
254		max(dev->hint_events_per_packet * EVDEV_BUF_PACKETS,
255		    EVDEV_MIN_BUFFER_SIZE);
256
257	return roundup_pow_of_two(n_events);
258}
259
260static int evdev_open(struct inode *inode, struct file *file)
261{
262	struct evdev *evdev;
263	struct evdev_client *client;
264	int i = iminor(inode) - EVDEV_MINOR_BASE;
265	unsigned int bufsize;
266	int error;
267
268	if (i >= EVDEV_MINORS)
269		return -ENODEV;
270
271	error = mutex_lock_interruptible(&evdev_table_mutex);
272	if (error)
273		return error;
274	evdev = evdev_table[i];
275	if (evdev)
276		get_device(&evdev->dev);
277	mutex_unlock(&evdev_table_mutex);
278
279	if (!evdev)
280		return -ENODEV;
281
282	bufsize = evdev_compute_buffer_size(evdev->handle.dev);
283
284	client = kzalloc(sizeof(struct evdev_client) +
285				bufsize * sizeof(struct input_event),
286			 GFP_KERNEL);
287	if (!client) {
288		error = -ENOMEM;
289		goto err_put_evdev;
290	}
291
292	client->bufsize = bufsize;
293	spin_lock_init(&client->buffer_lock);
294	client->evdev = evdev;
295	evdev_attach_client(evdev, client);
296
297	error = evdev_open_device(evdev);
298	if (error)
299		goto err_free_client;
300
301	file->private_data = client;
302	nonseekable_open(inode, file);
303
304	return 0;
305
306 err_free_client:
307	evdev_detach_client(evdev, client);
308	kfree(client);
309 err_put_evdev:
310	put_device(&evdev->dev);
311	return error;
312}
313
314static ssize_t evdev_write(struct file *file, const char __user *buffer,
315			   size_t count, loff_t *ppos)
316{
317	struct evdev_client *client = file->private_data;
318	struct evdev *evdev = client->evdev;
319	struct input_event event;
320	int retval;
321
322	retval = mutex_lock_interruptible(&evdev->mutex);
323	if (retval)
324		return retval;
325
326	if (!evdev->exist) {
327		retval = -ENODEV;
328		goto out;
329	}
330
331	while (retval < count) {
332
333		if (input_event_from_user(buffer + retval, &event)) {
334			retval = -EFAULT;
335			goto out;
336		}
337
338		input_inject_event(&evdev->handle,
339				   event.type, event.code, event.value);
340		retval += input_event_size();
341	}
342
343 out:
344	mutex_unlock(&evdev->mutex);
345	return retval;
346}
347
348static int evdev_fetch_next_event(struct evdev_client *client,
349				  struct input_event *event)
350{
351	int have_event;
352
353	spin_lock_irq(&client->buffer_lock);
354
355	have_event = client->head != client->tail;
356	if (have_event) {
357		*event = client->buffer[client->tail++];
358		client->tail &= client->bufsize - 1;
359	}
360
361	spin_unlock_irq(&client->buffer_lock);
362
363	return have_event;
364}
365
366static ssize_t evdev_read(struct file *file, char __user *buffer,
367			  size_t count, loff_t *ppos)
368{
369	struct evdev_client *client = file->private_data;
370	struct evdev *evdev = client->evdev;
371	struct input_event event;
372	int retval;
373
374	if (count < input_event_size())
375		return -EINVAL;
376
377	if (client->head == client->tail && evdev->exist &&
378	    (file->f_flags & O_NONBLOCK))
379		return -EAGAIN;
380
381	retval = wait_event_interruptible(evdev->wait,
382		client->head != client->tail || !evdev->exist);
383	if (retval)
384		return retval;
385
386	if (!evdev->exist)
387		return -ENODEV;
388
389	while (retval + input_event_size() <= count &&
390	       evdev_fetch_next_event(client, &event)) {
391
392		if (input_event_to_user(buffer + retval, &event))
393			return -EFAULT;
394
395		retval += input_event_size();
396	}
397
398	return retval;
399}
400
401/* No kernel lock - fine */
402static unsigned int evdev_poll(struct file *file, poll_table *wait)
403{
404	struct evdev_client *client = file->private_data;
405	struct evdev *evdev = client->evdev;
406	unsigned int mask;
407
408	poll_wait(file, &evdev->wait, wait);
409
410	mask = evdev->exist ? POLLOUT | POLLWRNORM : POLLHUP | POLLERR;
411	if (client->head != client->tail)
412		mask |= POLLIN | POLLRDNORM;
413
414	return mask;
415}
416
417#ifdef CONFIG_COMPAT
418
419#define BITS_PER_LONG_COMPAT (sizeof(compat_long_t) * 8)
420#define BITS_TO_LONGS_COMPAT(x) ((((x) - 1) / BITS_PER_LONG_COMPAT) + 1)
421
422#ifdef __BIG_ENDIAN
423static int bits_to_user(unsigned long *bits, unsigned int maxbit,
424			unsigned int maxlen, void __user *p, int compat)
425{
426	int len, i;
427
428	if (compat) {
429		len = BITS_TO_LONGS_COMPAT(maxbit) * sizeof(compat_long_t);
430		if (len > maxlen)
431			len = maxlen;
432
433		for (i = 0; i < len / sizeof(compat_long_t); i++)
434			if (copy_to_user((compat_long_t __user *) p + i,
435					 (compat_long_t *) bits +
436						i + 1 - ((i % 2) << 1),
437					 sizeof(compat_long_t)))
438				return -EFAULT;
439	} else {
440		len = BITS_TO_LONGS(maxbit) * sizeof(long);
441		if (len > maxlen)
442			len = maxlen;
443
444		if (copy_to_user(p, bits, len))
445			return -EFAULT;
446	}
447
448	return len;
449}
450#else
451static int bits_to_user(unsigned long *bits, unsigned int maxbit,
452			unsigned int maxlen, void __user *p, int compat)
453{
454	int len = compat ?
455			BITS_TO_LONGS_COMPAT(maxbit) * sizeof(compat_long_t) :
456			BITS_TO_LONGS(maxbit) * sizeof(long);
457
458	if (len > maxlen)
459		len = maxlen;
460
461	return copy_to_user(p, bits, len) ? -EFAULT : len;
462}
463#endif /* __BIG_ENDIAN */
464
465#else
466
467static int bits_to_user(unsigned long *bits, unsigned int maxbit,
468			unsigned int maxlen, void __user *p, int compat)
469{
470	int len = BITS_TO_LONGS(maxbit) * sizeof(long);
471
472	if (len > maxlen)
473		len = maxlen;
474
475	return copy_to_user(p, bits, len) ? -EFAULT : len;
476}
477
478#endif /* CONFIG_COMPAT */
479
480static int str_to_user(const char *str, unsigned int maxlen, void __user *p)
481{
482	int len;
483
484	if (!str)
485		return -ENOENT;
486
487	len = strlen(str) + 1;
488	if (len > maxlen)
489		len = maxlen;
490
491	return copy_to_user(p, str, len) ? -EFAULT : len;
492}
493
494#define OLD_KEY_MAX	0x1ff
495static int handle_eviocgbit(struct input_dev *dev,
496			    unsigned int type, unsigned int size,
497			    void __user *p, int compat_mode)
498{
499	static unsigned long keymax_warn_time;
500	unsigned long *bits;
501	int len;
502
503	switch (type) {
504
505	case      0: bits = dev->evbit;  len = EV_MAX;  break;
506	case EV_KEY: bits = dev->keybit; len = KEY_MAX; break;
507	case EV_REL: bits = dev->relbit; len = REL_MAX; break;
508	case EV_ABS: bits = dev->absbit; len = ABS_MAX; break;
509	case EV_MSC: bits = dev->mscbit; len = MSC_MAX; break;
510	case EV_LED: bits = dev->ledbit; len = LED_MAX; break;
511	case EV_SND: bits = dev->sndbit; len = SND_MAX; break;
512	case EV_FF:  bits = dev->ffbit;  len = FF_MAX;  break;
513	case EV_SW:  bits = dev->swbit;  len = SW_MAX;  break;
514	default: return -EINVAL;
515	}
516
517	if (type == EV_KEY && size == OLD_KEY_MAX) {
518		len = OLD_KEY_MAX;
519		if (printk_timed_ratelimit(&keymax_warn_time, 10 * 1000))
520			printk(KERN_WARNING
521				"evdev.c(EVIOCGBIT): Suspicious buffer size %u, "
522				"limiting output to %zu bytes. See "
523				"http://userweb.kernel.org/~dtor/eviocgbit-bug.html\n",
524				OLD_KEY_MAX,
525				BITS_TO_LONGS(OLD_KEY_MAX) * sizeof(long));
526	}
527
528	return bits_to_user(bits, len, size, p, compat_mode);
529}
530#undef OLD_KEY_MAX
531
532static long evdev_do_ioctl(struct file *file, unsigned int cmd,
533			   void __user *p, int compat_mode)
534{
535	struct evdev_client *client = file->private_data;
536	struct evdev *evdev = client->evdev;
537	struct input_dev *dev = evdev->handle.dev;
538	struct input_absinfo abs;
539	struct ff_effect effect;
540	int __user *ip = (int __user *)p;
541	unsigned int i, t, u, v;
542	unsigned int size;
543	int error;
544
545	/* First we check for fixed-length commands */
546	switch (cmd) {
547
548	case EVIOCGVERSION:
549		return put_user(EV_VERSION, ip);
550
551	case EVIOCGID:
552		if (copy_to_user(p, &dev->id, sizeof(struct input_id)))
553			return -EFAULT;
554		return 0;
555
556	case EVIOCGREP:
557		if (!test_bit(EV_REP, dev->evbit))
558			return -ENOSYS;
559		if (put_user(dev->rep[REP_DELAY], ip))
560			return -EFAULT;
561		if (put_user(dev->rep[REP_PERIOD], ip + 1))
562			return -EFAULT;
563		return 0;
564
565	case EVIOCSREP:
566		if (!test_bit(EV_REP, dev->evbit))
567			return -ENOSYS;
568		if (get_user(u, ip))
569			return -EFAULT;
570		if (get_user(v, ip + 1))
571			return -EFAULT;
572
573		input_inject_event(&evdev->handle, EV_REP, REP_DELAY, u);
574		input_inject_event(&evdev->handle, EV_REP, REP_PERIOD, v);
575
576		return 0;
577
578	case EVIOCGKEYCODE:
579		if (get_user(t, ip))
580			return -EFAULT;
581
582		error = input_get_keycode(dev, t, &v);
583		if (error)
584			return error;
585
586		if (put_user(v, ip + 1))
587			return -EFAULT;
588
589		return 0;
590
591	case EVIOCSKEYCODE:
592		if (get_user(t, ip) || get_user(v, ip + 1))
593			return -EFAULT;
594
595		return input_set_keycode(dev, t, v);
596
597	case EVIOCRMFF:
598		return input_ff_erase(dev, (int)(unsigned long) p, file);
599
600	case EVIOCGEFFECTS:
601		i = test_bit(EV_FF, dev->evbit) ?
602				dev->ff->max_effects : 0;
603		if (put_user(i, ip))
604			return -EFAULT;
605		return 0;
606
607	case EVIOCGRAB:
608		if (p)
609			return evdev_grab(evdev, client);
610		else
611			return evdev_ungrab(evdev, client);
612	}
613
614	size = _IOC_SIZE(cmd);
615
616	/* Now check variable-length commands */
617#define EVIOC_MASK_SIZE(nr)	((nr) & ~(_IOC_SIZEMASK << _IOC_SIZESHIFT))
618
619	switch (EVIOC_MASK_SIZE(cmd)) {
620
621	case EVIOCGKEY(0):
622		return bits_to_user(dev->key, KEY_MAX, size, p, compat_mode);
623
624	case EVIOCGLED(0):
625		return bits_to_user(dev->led, LED_MAX, size, p, compat_mode);
626
627	case EVIOCGSND(0):
628		return bits_to_user(dev->snd, SND_MAX, size, p, compat_mode);
629
630	case EVIOCGSW(0):
631		return bits_to_user(dev->sw, SW_MAX, size, p, compat_mode);
632
633	case EVIOCGNAME(0):
634		return str_to_user(dev->name, size, p);
635
636	case EVIOCGPHYS(0):
637		return str_to_user(dev->phys, size, p);
638
639	case EVIOCGUNIQ(0):
640		return str_to_user(dev->uniq, size, p);
641
642	case EVIOC_MASK_SIZE(EVIOCSFF):
643		if (input_ff_effect_from_user(p, size, &effect))
644			return -EFAULT;
645
646		error = input_ff_upload(dev, &effect, file);
647
648		if (put_user(effect.id, &(((struct ff_effect __user *)p)->id)))
649			return -EFAULT;
650
651		return error;
652	}
653
654	/* Multi-number variable-length handlers */
655	if (_IOC_TYPE(cmd) != 'E')
656		return -EINVAL;
657
658	if (_IOC_DIR(cmd) == _IOC_READ) {
659
660		if ((_IOC_NR(cmd) & ~EV_MAX) == _IOC_NR(EVIOCGBIT(0, 0)))
661			return handle_eviocgbit(dev,
662						_IOC_NR(cmd) & EV_MAX, size,
663						p, compat_mode);
664
665		if ((_IOC_NR(cmd) & ~ABS_MAX) == _IOC_NR(EVIOCGABS(0))) {
666
667			if (!dev->absinfo)
668				return -EINVAL;
669
670			t = _IOC_NR(cmd) & ABS_MAX;
671			abs = dev->absinfo[t];
672
673			if (copy_to_user(p, &abs, min_t(size_t,
674					size, sizeof(struct input_absinfo))))
675				return -EFAULT;
676
677			return 0;
678		}
679	}
680
681	if (_IOC_DIR(cmd) == _IOC_WRITE) {
682
683		if ((_IOC_NR(cmd) & ~ABS_MAX) == _IOC_NR(EVIOCSABS(0))) {
684
685			if (!dev->absinfo)
686				return -EINVAL;
687
688			t = _IOC_NR(cmd) & ABS_MAX;
689
690			if (copy_from_user(&abs, p, min_t(size_t,
691					size, sizeof(struct input_absinfo))))
692				return -EFAULT;
693
694			if (size < sizeof(struct input_absinfo))
695				abs.resolution = 0;
696
697			/* We can't change number of reserved MT slots */
698			if (t == ABS_MT_SLOT)
699				return -EINVAL;
700
701			/*
702			 * Take event lock to ensure that we are not
703			 * changing device parameters in the middle
704			 * of event.
705			 */
706			spin_lock_irq(&dev->event_lock);
707			dev->absinfo[t] = abs;
708			spin_unlock_irq(&dev->event_lock);
709
710			return 0;
711		}
712	}
713
714	return -EINVAL;
715}
716
717static long evdev_ioctl_handler(struct file *file, unsigned int cmd,
718				void __user *p, int compat_mode)
719{
720	struct evdev_client *client = file->private_data;
721	struct evdev *evdev = client->evdev;
722	int retval;
723
724	retval = mutex_lock_interruptible(&evdev->mutex);
725	if (retval)
726		return retval;
727
728	if (!evdev->exist) {
729		retval = -ENODEV;
730		goto out;
731	}
732
733	retval = evdev_do_ioctl(file, cmd, p, compat_mode);
734
735 out:
736	mutex_unlock(&evdev->mutex);
737	return retval;
738}
739
740static long evdev_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
741{
742	return evdev_ioctl_handler(file, cmd, (void __user *)arg, 0);
743}
744
745#ifdef CONFIG_COMPAT
746static long evdev_ioctl_compat(struct file *file,
747				unsigned int cmd, unsigned long arg)
748{
749	return evdev_ioctl_handler(file, cmd, compat_ptr(arg), 1);
750}
751#endif
752
753static const struct file_operations evdev_fops = {
754	.owner		= THIS_MODULE,
755	.read		= evdev_read,
756	.write		= evdev_write,
757	.poll		= evdev_poll,
758	.open		= evdev_open,
759	.release	= evdev_release,
760	.unlocked_ioctl	= evdev_ioctl,
761#ifdef CONFIG_COMPAT
762	.compat_ioctl	= evdev_ioctl_compat,
763#endif
764	.fasync		= evdev_fasync,
765	.flush		= evdev_flush
766};
767
768static int evdev_install_chrdev(struct evdev *evdev)
769{
770	/*
771	 * No need to do any locking here as calls to connect and
772	 * disconnect are serialized by the input core
773	 */
774	evdev_table[evdev->minor] = evdev;
775	return 0;
776}
777
778static void evdev_remove_chrdev(struct evdev *evdev)
779{
780	/*
781	 * Lock evdev table to prevent race with evdev_open()
782	 */
783	mutex_lock(&evdev_table_mutex);
784	evdev_table[evdev->minor] = NULL;
785	mutex_unlock(&evdev_table_mutex);
786}
787
788/*
789 * Mark device non-existent. This disables writes, ioctls and
790 * prevents new users from opening the device. Already posted
791 * blocking reads will stay, however new ones will fail.
792 */
793static void evdev_mark_dead(struct evdev *evdev)
794{
795	mutex_lock(&evdev->mutex);
796	evdev->exist = false;
797	mutex_unlock(&evdev->mutex);
798}
799
800static void evdev_cleanup(struct evdev *evdev)
801{
802	struct input_handle *handle = &evdev->handle;
803
804	evdev_mark_dead(evdev);
805	evdev_hangup(evdev);
806	evdev_remove_chrdev(evdev);
807
808	/* evdev is marked dead so no one else accesses evdev->open */
809	if (evdev->open) {
810		input_flush_device(handle, NULL);
811		input_close_device(handle);
812	}
813}
814
815/*
816 * Create new evdev device. Note that input core serializes calls
817 * to connect and disconnect so we don't need to lock evdev_table here.
818 */
819static int evdev_connect(struct input_handler *handler, struct input_dev *dev,
820			 const struct input_device_id *id)
821{
822	struct evdev *evdev;
823	int minor;
824	int error;
825
826	for (minor = 0; minor < EVDEV_MINORS; minor++)
827		if (!evdev_table[minor])
828			break;
829
830	if (minor == EVDEV_MINORS) {
831		printk(KERN_ERR "evdev: no more free evdev devices\n");
832		return -ENFILE;
833	}
834
835	evdev = kzalloc(sizeof(struct evdev), GFP_KERNEL);
836	if (!evdev)
837		return -ENOMEM;
838
839	INIT_LIST_HEAD(&evdev->client_list);
840	spin_lock_init(&evdev->client_lock);
841	mutex_init(&evdev->mutex);
842	init_waitqueue_head(&evdev->wait);
843
844	dev_set_name(&evdev->dev, "event%d", minor);
845	evdev->exist = true;
846	evdev->minor = minor;
847
848	evdev->handle.dev = input_get_device(dev);
849	evdev->handle.name = dev_name(&evdev->dev);
850	evdev->handle.handler = handler;
851	evdev->handle.private = evdev;
852
853	evdev->dev.devt = MKDEV(INPUT_MAJOR, EVDEV_MINOR_BASE + minor);
854	evdev->dev.class = &input_class;
855	evdev->dev.parent = &dev->dev;
856	evdev->dev.release = evdev_free;
857	device_initialize(&evdev->dev);
858
859	error = input_register_handle(&evdev->handle);
860	if (error)
861		goto err_free_evdev;
862
863	error = evdev_install_chrdev(evdev);
864	if (error)
865		goto err_unregister_handle;
866
867	error = device_add(&evdev->dev);
868	if (error)
869		goto err_cleanup_evdev;
870
871	return 0;
872
873 err_cleanup_evdev:
874	evdev_cleanup(evdev);
875 err_unregister_handle:
876	input_unregister_handle(&evdev->handle);
877 err_free_evdev:
878	put_device(&evdev->dev);
879	return error;
880}
881
882static void evdev_disconnect(struct input_handle *handle)
883{
884	struct evdev *evdev = handle->private;
885
886	device_del(&evdev->dev);
887	evdev_cleanup(evdev);
888	input_unregister_handle(handle);
889	put_device(&evdev->dev);
890}
891
892static const struct input_device_id evdev_ids[] = {
893	{ .driver_info = 1 },	/* Matches all devices */
894	{ },			/* Terminating zero entry */
895};
896
897MODULE_DEVICE_TABLE(input, evdev_ids);
898
899static struct input_handler evdev_handler = {
900	.event		= evdev_event,
901	.connect	= evdev_connect,
902	.disconnect	= evdev_disconnect,
903	.fops		= &evdev_fops,
904	.minor		= EVDEV_MINOR_BASE,
905	.name		= "evdev",
906	.id_table	= evdev_ids,
907};
908
909static int __init evdev_init(void)
910{
911	return input_register_handler(&evdev_handler);
912}
913
914static void __exit evdev_exit(void)
915{
916	input_unregister_handler(&evdev_handler);
917}
918
919module_init(evdev_init);
920module_exit(evdev_exit);
921
922MODULE_AUTHOR("Vojtech Pavlik <vojtech@ucw.cz>");
923MODULE_DESCRIPTION("Input driver event char devices");
924MODULE_LICENSE("GPL");
925