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