root/drivers/input/evdev.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. evdev_get_mask_cnt
  2. __evdev_is_filtered
  3. __evdev_flush_queue
  4. __evdev_queue_syn_dropped
  5. evdev_queue_syn_dropped
  6. evdev_set_clk_type
  7. __pass_event
  8. evdev_pass_values
  9. evdev_events
  10. evdev_event
  11. evdev_fasync
  12. evdev_free
  13. evdev_grab
  14. evdev_ungrab
  15. evdev_attach_client
  16. evdev_detach_client
  17. evdev_open_device
  18. evdev_close_device
  19. evdev_hangup
  20. evdev_release
  21. evdev_compute_buffer_size
  22. evdev_open
  23. evdev_write
  24. evdev_fetch_next_event
  25. evdev_read
  26. evdev_poll
  27. bits_to_user
  28. bits_from_user
  29. bits_to_user
  30. bits_from_user
  31. bits_to_user
  32. bits_from_user
  33. str_to_user
  34. handle_eviocgbit
  35. evdev_handle_get_keycode
  36. evdev_handle_get_keycode_v2
  37. evdev_handle_set_keycode
  38. evdev_handle_set_keycode_v2
  39. evdev_handle_get_val
  40. evdev_handle_mt_request
  41. evdev_revoke
  42. evdev_set_mask
  43. evdev_get_mask
  44. evdev_do_ioctl
  45. evdev_ioctl_handler
  46. evdev_ioctl
  47. evdev_ioctl_compat
  48. evdev_mark_dead
  49. evdev_cleanup
  50. evdev_connect
  51. evdev_disconnect
  52. evdev_init
  53. evdev_exit

   1 // SPDX-License-Identifier: GPL-2.0-only
   2 /*
   3  * Event char devices, giving access to raw input device events.
   4  *
   5  * Copyright (c) 1999-2002 Vojtech Pavlik
   6  */
   7 
   8 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
   9 
  10 #define EVDEV_MINOR_BASE        64
  11 #define EVDEV_MINORS            32
  12 #define EVDEV_MIN_BUFFER_SIZE   64U
  13 #define EVDEV_BUF_PACKETS       8
  14 
  15 #include <linux/poll.h>
  16 #include <linux/sched.h>
  17 #include <linux/slab.h>
  18 #include <linux/vmalloc.h>
  19 #include <linux/mm.h>
  20 #include <linux/module.h>
  21 #include <linux/init.h>
  22 #include <linux/input/mt.h>
  23 #include <linux/major.h>
  24 #include <linux/device.h>
  25 #include <linux/cdev.h>
  26 #include "input-compat.h"
  27 
  28 struct evdev {
  29         int open;
  30         struct input_handle handle;
  31         wait_queue_head_t wait;
  32         struct evdev_client __rcu *grab;
  33         struct list_head client_list;
  34         spinlock_t client_lock; /* protects client_list */
  35         struct mutex mutex;
  36         struct device dev;
  37         struct cdev cdev;
  38         bool exist;
  39 };
  40 
  41 struct evdev_client {
  42         unsigned int head;
  43         unsigned int tail;
  44         unsigned int packet_head; /* [future] position of the first element of next packet */
  45         spinlock_t buffer_lock; /* protects access to buffer, head and tail */
  46         struct fasync_struct *fasync;
  47         struct evdev *evdev;
  48         struct list_head node;
  49         enum input_clock_type clk_type;
  50         bool revoked;
  51         unsigned long *evmasks[EV_CNT];
  52         unsigned int bufsize;
  53         struct input_event buffer[];
  54 };
  55 
  56 static size_t evdev_get_mask_cnt(unsigned int type)
  57 {
  58         static const size_t counts[EV_CNT] = {
  59                 /* EV_SYN==0 is EV_CNT, _not_ SYN_CNT, see EVIOCGBIT */
  60                 [EV_SYN]        = EV_CNT,
  61                 [EV_KEY]        = KEY_CNT,
  62                 [EV_REL]        = REL_CNT,
  63                 [EV_ABS]        = ABS_CNT,
  64                 [EV_MSC]        = MSC_CNT,
  65                 [EV_SW]         = SW_CNT,
  66                 [EV_LED]        = LED_CNT,
  67                 [EV_SND]        = SND_CNT,
  68                 [EV_FF]         = FF_CNT,
  69         };
  70 
  71         return (type < EV_CNT) ? counts[type] : 0;
  72 }
  73 
  74 /* requires the buffer lock to be held */
  75 static bool __evdev_is_filtered(struct evdev_client *client,
  76                                 unsigned int type,
  77                                 unsigned int code)
  78 {
  79         unsigned long *mask;
  80         size_t cnt;
  81 
  82         /* EV_SYN and unknown codes are never filtered */
  83         if (type == EV_SYN || type >= EV_CNT)
  84                 return false;
  85 
  86         /* first test whether the type is filtered */
  87         mask = client->evmasks[0];
  88         if (mask && !test_bit(type, mask))
  89                 return true;
  90 
  91         /* unknown values are never filtered */
  92         cnt = evdev_get_mask_cnt(type);
  93         if (!cnt || code >= cnt)
  94                 return false;
  95 
  96         mask = client->evmasks[type];
  97         return mask && !test_bit(code, mask);
  98 }
  99 
 100 /* flush queued events of type @type, caller must hold client->buffer_lock */
 101 static void __evdev_flush_queue(struct evdev_client *client, unsigned int type)
 102 {
 103         unsigned int i, head, num;
 104         unsigned int mask = client->bufsize - 1;
 105         bool is_report;
 106         struct input_event *ev;
 107 
 108         BUG_ON(type == EV_SYN);
 109 
 110         head = client->tail;
 111         client->packet_head = client->tail;
 112 
 113         /* init to 1 so a leading SYN_REPORT will not be dropped */
 114         num = 1;
 115 
 116         for (i = client->tail; i != client->head; i = (i + 1) & mask) {
 117                 ev = &client->buffer[i];
 118                 is_report = ev->type == EV_SYN && ev->code == SYN_REPORT;
 119 
 120                 if (ev->type == type) {
 121                         /* drop matched entry */
 122                         continue;
 123                 } else if (is_report && !num) {
 124                         /* drop empty SYN_REPORT groups */
 125                         continue;
 126                 } else if (head != i) {
 127                         /* move entry to fill the gap */
 128                         client->buffer[head] = *ev;
 129                 }
 130 
 131                 num++;
 132                 head = (head + 1) & mask;
 133 
 134                 if (is_report) {
 135                         num = 0;
 136                         client->packet_head = head;
 137                 }
 138         }
 139 
 140         client->head = head;
 141 }
 142 
 143 static void __evdev_queue_syn_dropped(struct evdev_client *client)
 144 {
 145         ktime_t *ev_time = input_get_timestamp(client->evdev->handle.dev);
 146         struct timespec64 ts = ktime_to_timespec64(ev_time[client->clk_type]);
 147         struct input_event ev;
 148 
 149         ev.input_event_sec = ts.tv_sec;
 150         ev.input_event_usec = ts.tv_nsec / NSEC_PER_USEC;
 151         ev.type = EV_SYN;
 152         ev.code = SYN_DROPPED;
 153         ev.value = 0;
 154 
 155         client->buffer[client->head++] = ev;
 156         client->head &= client->bufsize - 1;
 157 
 158         if (unlikely(client->head == client->tail)) {
 159                 /* drop queue but keep our SYN_DROPPED event */
 160                 client->tail = (client->head - 1) & (client->bufsize - 1);
 161                 client->packet_head = client->tail;
 162         }
 163 }
 164 
 165 static void evdev_queue_syn_dropped(struct evdev_client *client)
 166 {
 167         unsigned long flags;
 168 
 169         spin_lock_irqsave(&client->buffer_lock, flags);
 170         __evdev_queue_syn_dropped(client);
 171         spin_unlock_irqrestore(&client->buffer_lock, flags);
 172 }
 173 
 174 static int evdev_set_clk_type(struct evdev_client *client, unsigned int clkid)
 175 {
 176         unsigned long flags;
 177         enum input_clock_type clk_type;
 178 
 179         switch (clkid) {
 180 
 181         case CLOCK_REALTIME:
 182                 clk_type = INPUT_CLK_REAL;
 183                 break;
 184         case CLOCK_MONOTONIC:
 185                 clk_type = INPUT_CLK_MONO;
 186                 break;
 187         case CLOCK_BOOTTIME:
 188                 clk_type = INPUT_CLK_BOOT;
 189                 break;
 190         default:
 191                 return -EINVAL;
 192         }
 193 
 194         if (client->clk_type != clk_type) {
 195                 client->clk_type = clk_type;
 196 
 197                 /*
 198                  * Flush pending events and queue SYN_DROPPED event,
 199                  * but only if the queue is not empty.
 200                  */
 201                 spin_lock_irqsave(&client->buffer_lock, flags);
 202 
 203                 if (client->head != client->tail) {
 204                         client->packet_head = client->head = client->tail;
 205                         __evdev_queue_syn_dropped(client);
 206                 }
 207 
 208                 spin_unlock_irqrestore(&client->buffer_lock, flags);
 209         }
 210 
 211         return 0;
 212 }
 213 
 214 static void __pass_event(struct evdev_client *client,
 215                          const struct input_event *event)
 216 {
 217         client->buffer[client->head++] = *event;
 218         client->head &= client->bufsize - 1;
 219 
 220         if (unlikely(client->head == client->tail)) {
 221                 /*
 222                  * This effectively "drops" all unconsumed events, leaving
 223                  * EV_SYN/SYN_DROPPED plus the newest event in the queue.
 224                  */
 225                 client->tail = (client->head - 2) & (client->bufsize - 1);
 226 
 227                 client->buffer[client->tail] = (struct input_event) {
 228                         .input_event_sec = event->input_event_sec,
 229                         .input_event_usec = event->input_event_usec,
 230                         .type = EV_SYN,
 231                         .code = SYN_DROPPED,
 232                         .value = 0,
 233                 };
 234 
 235                 client->packet_head = client->tail;
 236         }
 237 
 238         if (event->type == EV_SYN && event->code == SYN_REPORT) {
 239                 client->packet_head = client->head;
 240                 kill_fasync(&client->fasync, SIGIO, POLL_IN);
 241         }
 242 }
 243 
 244 static void evdev_pass_values(struct evdev_client *client,
 245                         const struct input_value *vals, unsigned int count,
 246                         ktime_t *ev_time)
 247 {
 248         struct evdev *evdev = client->evdev;
 249         const struct input_value *v;
 250         struct input_event event;
 251         struct timespec64 ts;
 252         bool wakeup = false;
 253 
 254         if (client->revoked)
 255                 return;
 256 
 257         ts = ktime_to_timespec64(ev_time[client->clk_type]);
 258         event.input_event_sec = ts.tv_sec;
 259         event.input_event_usec = ts.tv_nsec / NSEC_PER_USEC;
 260 
 261         /* Interrupts are disabled, just acquire the lock. */
 262         spin_lock(&client->buffer_lock);
 263 
 264         for (v = vals; v != vals + count; v++) {
 265                 if (__evdev_is_filtered(client, v->type, v->code))
 266                         continue;
 267 
 268                 if (v->type == EV_SYN && v->code == SYN_REPORT) {
 269                         /* drop empty SYN_REPORT */
 270                         if (client->packet_head == client->head)
 271                                 continue;
 272 
 273                         wakeup = true;
 274                 }
 275 
 276                 event.type = v->type;
 277                 event.code = v->code;
 278                 event.value = v->value;
 279                 __pass_event(client, &event);
 280         }
 281 
 282         spin_unlock(&client->buffer_lock);
 283 
 284         if (wakeup)
 285                 wake_up_interruptible(&evdev->wait);
 286 }
 287 
 288 /*
 289  * Pass incoming events to all connected clients.
 290  */
 291 static void evdev_events(struct input_handle *handle,
 292                          const struct input_value *vals, unsigned int count)
 293 {
 294         struct evdev *evdev = handle->private;
 295         struct evdev_client *client;
 296         ktime_t *ev_time = input_get_timestamp(handle->dev);
 297 
 298         rcu_read_lock();
 299 
 300         client = rcu_dereference(evdev->grab);
 301 
 302         if (client)
 303                 evdev_pass_values(client, vals, count, ev_time);
 304         else
 305                 list_for_each_entry_rcu(client, &evdev->client_list, node)
 306                         evdev_pass_values(client, vals, count, ev_time);
 307 
 308         rcu_read_unlock();
 309 }
 310 
 311 /*
 312  * Pass incoming event to all connected clients.
 313  */
 314 static void evdev_event(struct input_handle *handle,
 315                         unsigned int type, unsigned int code, int value)
 316 {
 317         struct input_value vals[] = { { type, code, value } };
 318 
 319         evdev_events(handle, vals, 1);
 320 }
 321 
 322 static int evdev_fasync(int fd, struct file *file, int on)
 323 {
 324         struct evdev_client *client = file->private_data;
 325 
 326         return fasync_helper(fd, file, on, &client->fasync);
 327 }
 328 
 329 static void evdev_free(struct device *dev)
 330 {
 331         struct evdev *evdev = container_of(dev, struct evdev, dev);
 332 
 333         input_put_device(evdev->handle.dev);
 334         kfree(evdev);
 335 }
 336 
 337 /*
 338  * Grabs an event device (along with underlying input device).
 339  * This function is called with evdev->mutex taken.
 340  */
 341 static int evdev_grab(struct evdev *evdev, struct evdev_client *client)
 342 {
 343         int error;
 344 
 345         if (evdev->grab)
 346                 return -EBUSY;
 347 
 348         error = input_grab_device(&evdev->handle);
 349         if (error)
 350                 return error;
 351 
 352         rcu_assign_pointer(evdev->grab, client);
 353 
 354         return 0;
 355 }
 356 
 357 static int evdev_ungrab(struct evdev *evdev, struct evdev_client *client)
 358 {
 359         struct evdev_client *grab = rcu_dereference_protected(evdev->grab,
 360                                         lockdep_is_held(&evdev->mutex));
 361 
 362         if (grab != client)
 363                 return  -EINVAL;
 364 
 365         rcu_assign_pointer(evdev->grab, NULL);
 366         synchronize_rcu();
 367         input_release_device(&evdev->handle);
 368 
 369         return 0;
 370 }
 371 
 372 static void evdev_attach_client(struct evdev *evdev,
 373                                 struct evdev_client *client)
 374 {
 375         spin_lock(&evdev->client_lock);
 376         list_add_tail_rcu(&client->node, &evdev->client_list);
 377         spin_unlock(&evdev->client_lock);
 378 }
 379 
 380 static void evdev_detach_client(struct evdev *evdev,
 381                                 struct evdev_client *client)
 382 {
 383         spin_lock(&evdev->client_lock);
 384         list_del_rcu(&client->node);
 385         spin_unlock(&evdev->client_lock);
 386         synchronize_rcu();
 387 }
 388 
 389 static int evdev_open_device(struct evdev *evdev)
 390 {
 391         int retval;
 392 
 393         retval = mutex_lock_interruptible(&evdev->mutex);
 394         if (retval)
 395                 return retval;
 396 
 397         if (!evdev->exist)
 398                 retval = -ENODEV;
 399         else if (!evdev->open++) {
 400                 retval = input_open_device(&evdev->handle);
 401                 if (retval)
 402                         evdev->open--;
 403         }
 404 
 405         mutex_unlock(&evdev->mutex);
 406         return retval;
 407 }
 408 
 409 static void evdev_close_device(struct evdev *evdev)
 410 {
 411         mutex_lock(&evdev->mutex);
 412 
 413         if (evdev->exist && !--evdev->open)
 414                 input_close_device(&evdev->handle);
 415 
 416         mutex_unlock(&evdev->mutex);
 417 }
 418 
 419 /*
 420  * Wake up users waiting for IO so they can disconnect from
 421  * dead device.
 422  */
 423 static void evdev_hangup(struct evdev *evdev)
 424 {
 425         struct evdev_client *client;
 426 
 427         spin_lock(&evdev->client_lock);
 428         list_for_each_entry(client, &evdev->client_list, node)
 429                 kill_fasync(&client->fasync, SIGIO, POLL_HUP);
 430         spin_unlock(&evdev->client_lock);
 431 
 432         wake_up_interruptible(&evdev->wait);
 433 }
 434 
 435 static int evdev_release(struct inode *inode, struct file *file)
 436 {
 437         struct evdev_client *client = file->private_data;
 438         struct evdev *evdev = client->evdev;
 439         unsigned int i;
 440 
 441         mutex_lock(&evdev->mutex);
 442 
 443         if (evdev->exist && !client->revoked)
 444                 input_flush_device(&evdev->handle, file);
 445 
 446         evdev_ungrab(evdev, client);
 447         mutex_unlock(&evdev->mutex);
 448 
 449         evdev_detach_client(evdev, client);
 450 
 451         for (i = 0; i < EV_CNT; ++i)
 452                 bitmap_free(client->evmasks[i]);
 453 
 454         kvfree(client);
 455 
 456         evdev_close_device(evdev);
 457 
 458         return 0;
 459 }
 460 
 461 static unsigned int evdev_compute_buffer_size(struct input_dev *dev)
 462 {
 463         unsigned int n_events =
 464                 max(dev->hint_events_per_packet * EVDEV_BUF_PACKETS,
 465                     EVDEV_MIN_BUFFER_SIZE);
 466 
 467         return roundup_pow_of_two(n_events);
 468 }
 469 
 470 static int evdev_open(struct inode *inode, struct file *file)
 471 {
 472         struct evdev *evdev = container_of(inode->i_cdev, struct evdev, cdev);
 473         unsigned int bufsize = evdev_compute_buffer_size(evdev->handle.dev);
 474         struct evdev_client *client;
 475         int error;
 476 
 477         client = kvzalloc(struct_size(client, buffer, bufsize), GFP_KERNEL);
 478         if (!client)
 479                 return -ENOMEM;
 480 
 481         client->bufsize = bufsize;
 482         spin_lock_init(&client->buffer_lock);
 483         client->evdev = evdev;
 484         evdev_attach_client(evdev, client);
 485 
 486         error = evdev_open_device(evdev);
 487         if (error)
 488                 goto err_free_client;
 489 
 490         file->private_data = client;
 491         stream_open(inode, file);
 492 
 493         return 0;
 494 
 495  err_free_client:
 496         evdev_detach_client(evdev, client);
 497         kvfree(client);
 498         return error;
 499 }
 500 
 501 static ssize_t evdev_write(struct file *file, const char __user *buffer,
 502                            size_t count, loff_t *ppos)
 503 {
 504         struct evdev_client *client = file->private_data;
 505         struct evdev *evdev = client->evdev;
 506         struct input_event event;
 507         int retval = 0;
 508 
 509         if (count != 0 && count < input_event_size())
 510                 return -EINVAL;
 511 
 512         retval = mutex_lock_interruptible(&evdev->mutex);
 513         if (retval)
 514                 return retval;
 515 
 516         if (!evdev->exist || client->revoked) {
 517                 retval = -ENODEV;
 518                 goto out;
 519         }
 520 
 521         while (retval + input_event_size() <= count) {
 522 
 523                 if (input_event_from_user(buffer + retval, &event)) {
 524                         retval = -EFAULT;
 525                         goto out;
 526                 }
 527                 retval += input_event_size();
 528 
 529                 input_inject_event(&evdev->handle,
 530                                    event.type, event.code, event.value);
 531                 cond_resched();
 532         }
 533 
 534  out:
 535         mutex_unlock(&evdev->mutex);
 536         return retval;
 537 }
 538 
 539 static int evdev_fetch_next_event(struct evdev_client *client,
 540                                   struct input_event *event)
 541 {
 542         int have_event;
 543 
 544         spin_lock_irq(&client->buffer_lock);
 545 
 546         have_event = client->packet_head != client->tail;
 547         if (have_event) {
 548                 *event = client->buffer[client->tail++];
 549                 client->tail &= client->bufsize - 1;
 550         }
 551 
 552         spin_unlock_irq(&client->buffer_lock);
 553 
 554         return have_event;
 555 }
 556 
 557 static ssize_t evdev_read(struct file *file, char __user *buffer,
 558                           size_t count, loff_t *ppos)
 559 {
 560         struct evdev_client *client = file->private_data;
 561         struct evdev *evdev = client->evdev;
 562         struct input_event event;
 563         size_t read = 0;
 564         int error;
 565 
 566         if (count != 0 && count < input_event_size())
 567                 return -EINVAL;
 568 
 569         for (;;) {
 570                 if (!evdev->exist || client->revoked)
 571                         return -ENODEV;
 572 
 573                 if (client->packet_head == client->tail &&
 574                     (file->f_flags & O_NONBLOCK))
 575                         return -EAGAIN;
 576 
 577                 /*
 578                  * count == 0 is special - no IO is done but we check
 579                  * for error conditions (see above).
 580                  */
 581                 if (count == 0)
 582                         break;
 583 
 584                 while (read + input_event_size() <= count &&
 585                        evdev_fetch_next_event(client, &event)) {
 586 
 587                         if (input_event_to_user(buffer + read, &event))
 588                                 return -EFAULT;
 589 
 590                         read += input_event_size();
 591                 }
 592 
 593                 if (read)
 594                         break;
 595 
 596                 if (!(file->f_flags & O_NONBLOCK)) {
 597                         error = wait_event_interruptible(evdev->wait,
 598                                         client->packet_head != client->tail ||
 599                                         !evdev->exist || client->revoked);
 600                         if (error)
 601                                 return error;
 602                 }
 603         }
 604 
 605         return read;
 606 }
 607 
 608 /* No kernel lock - fine */
 609 static __poll_t evdev_poll(struct file *file, poll_table *wait)
 610 {
 611         struct evdev_client *client = file->private_data;
 612         struct evdev *evdev = client->evdev;
 613         __poll_t mask;
 614 
 615         poll_wait(file, &evdev->wait, wait);
 616 
 617         if (evdev->exist && !client->revoked)
 618                 mask = EPOLLOUT | EPOLLWRNORM;
 619         else
 620                 mask = EPOLLHUP | EPOLLERR;
 621 
 622         if (client->packet_head != client->tail)
 623                 mask |= EPOLLIN | EPOLLRDNORM;
 624 
 625         return mask;
 626 }
 627 
 628 #ifdef CONFIG_COMPAT
 629 
 630 #define BITS_PER_LONG_COMPAT (sizeof(compat_long_t) * 8)
 631 #define BITS_TO_LONGS_COMPAT(x) ((((x) - 1) / BITS_PER_LONG_COMPAT) + 1)
 632 
 633 #ifdef __BIG_ENDIAN
 634 static int bits_to_user(unsigned long *bits, unsigned int maxbit,
 635                         unsigned int maxlen, void __user *p, int compat)
 636 {
 637         int len, i;
 638 
 639         if (compat) {
 640                 len = BITS_TO_LONGS_COMPAT(maxbit) * sizeof(compat_long_t);
 641                 if (len > maxlen)
 642                         len = maxlen;
 643 
 644                 for (i = 0; i < len / sizeof(compat_long_t); i++)
 645                         if (copy_to_user((compat_long_t __user *) p + i,
 646                                          (compat_long_t *) bits +
 647                                                 i + 1 - ((i % 2) << 1),
 648                                          sizeof(compat_long_t)))
 649                                 return -EFAULT;
 650         } else {
 651                 len = BITS_TO_LONGS(maxbit) * sizeof(long);
 652                 if (len > maxlen)
 653                         len = maxlen;
 654 
 655                 if (copy_to_user(p, bits, len))
 656                         return -EFAULT;
 657         }
 658 
 659         return len;
 660 }
 661 
 662 static int bits_from_user(unsigned long *bits, unsigned int maxbit,
 663                           unsigned int maxlen, const void __user *p, int compat)
 664 {
 665         int len, i;
 666 
 667         if (compat) {
 668                 if (maxlen % sizeof(compat_long_t))
 669                         return -EINVAL;
 670 
 671                 len = BITS_TO_LONGS_COMPAT(maxbit) * sizeof(compat_long_t);
 672                 if (len > maxlen)
 673                         len = maxlen;
 674 
 675                 for (i = 0; i < len / sizeof(compat_long_t); i++)
 676                         if (copy_from_user((compat_long_t *) bits +
 677                                                 i + 1 - ((i % 2) << 1),
 678                                            (compat_long_t __user *) p + i,
 679                                            sizeof(compat_long_t)))
 680                                 return -EFAULT;
 681                 if (i % 2)
 682                         *((compat_long_t *) bits + i - 1) = 0;
 683 
 684         } else {
 685                 if (maxlen % sizeof(long))
 686                         return -EINVAL;
 687 
 688                 len = BITS_TO_LONGS(maxbit) * sizeof(long);
 689                 if (len > maxlen)
 690                         len = maxlen;
 691 
 692                 if (copy_from_user(bits, p, len))
 693                         return -EFAULT;
 694         }
 695 
 696         return len;
 697 }
 698 
 699 #else
 700 
 701 static int bits_to_user(unsigned long *bits, unsigned int maxbit,
 702                         unsigned int maxlen, void __user *p, int compat)
 703 {
 704         int len = compat ?
 705                         BITS_TO_LONGS_COMPAT(maxbit) * sizeof(compat_long_t) :
 706                         BITS_TO_LONGS(maxbit) * sizeof(long);
 707 
 708         if (len > maxlen)
 709                 len = maxlen;
 710 
 711         return copy_to_user(p, bits, len) ? -EFAULT : len;
 712 }
 713 
 714 static int bits_from_user(unsigned long *bits, unsigned int maxbit,
 715                           unsigned int maxlen, const void __user *p, int compat)
 716 {
 717         size_t chunk_size = compat ? sizeof(compat_long_t) : sizeof(long);
 718         int len;
 719 
 720         if (maxlen % chunk_size)
 721                 return -EINVAL;
 722 
 723         len = compat ? BITS_TO_LONGS_COMPAT(maxbit) : BITS_TO_LONGS(maxbit);
 724         len *= chunk_size;
 725         if (len > maxlen)
 726                 len = maxlen;
 727 
 728         return copy_from_user(bits, p, len) ? -EFAULT : len;
 729 }
 730 
 731 #endif /* __BIG_ENDIAN */
 732 
 733 #else
 734 
 735 static int bits_to_user(unsigned long *bits, unsigned int maxbit,
 736                         unsigned int maxlen, void __user *p, int compat)
 737 {
 738         int len = BITS_TO_LONGS(maxbit) * sizeof(long);
 739 
 740         if (len > maxlen)
 741                 len = maxlen;
 742 
 743         return copy_to_user(p, bits, len) ? -EFAULT : len;
 744 }
 745 
 746 static int bits_from_user(unsigned long *bits, unsigned int maxbit,
 747                           unsigned int maxlen, const void __user *p, int compat)
 748 {
 749         int len;
 750 
 751         if (maxlen % sizeof(long))
 752                 return -EINVAL;
 753 
 754         len = BITS_TO_LONGS(maxbit) * sizeof(long);
 755         if (len > maxlen)
 756                 len = maxlen;
 757 
 758         return copy_from_user(bits, p, len) ? -EFAULT : len;
 759 }
 760 
 761 #endif /* CONFIG_COMPAT */
 762 
 763 static int str_to_user(const char *str, unsigned int maxlen, void __user *p)
 764 {
 765         int len;
 766 
 767         if (!str)
 768                 return -ENOENT;
 769 
 770         len = strlen(str) + 1;
 771         if (len > maxlen)
 772                 len = maxlen;
 773 
 774         return copy_to_user(p, str, len) ? -EFAULT : len;
 775 }
 776 
 777 static int handle_eviocgbit(struct input_dev *dev,
 778                             unsigned int type, unsigned int size,
 779                             void __user *p, int compat_mode)
 780 {
 781         unsigned long *bits;
 782         int len;
 783 
 784         switch (type) {
 785 
 786         case      0: bits = dev->evbit;  len = EV_MAX;  break;
 787         case EV_KEY: bits = dev->keybit; len = KEY_MAX; break;
 788         case EV_REL: bits = dev->relbit; len = REL_MAX; break;
 789         case EV_ABS: bits = dev->absbit; len = ABS_MAX; break;
 790         case EV_MSC: bits = dev->mscbit; len = MSC_MAX; break;
 791         case EV_LED: bits = dev->ledbit; len = LED_MAX; break;
 792         case EV_SND: bits = dev->sndbit; len = SND_MAX; break;
 793         case EV_FF:  bits = dev->ffbit;  len = FF_MAX;  break;
 794         case EV_SW:  bits = dev->swbit;  len = SW_MAX;  break;
 795         default: return -EINVAL;
 796         }
 797 
 798         return bits_to_user(bits, len, size, p, compat_mode);
 799 }
 800 
 801 static int evdev_handle_get_keycode(struct input_dev *dev, void __user *p)
 802 {
 803         struct input_keymap_entry ke = {
 804                 .len    = sizeof(unsigned int),
 805                 .flags  = 0,
 806         };
 807         int __user *ip = (int __user *)p;
 808         int error;
 809 
 810         /* legacy case */
 811         if (copy_from_user(ke.scancode, p, sizeof(unsigned int)))
 812                 return -EFAULT;
 813 
 814         error = input_get_keycode(dev, &ke);
 815         if (error)
 816                 return error;
 817 
 818         if (put_user(ke.keycode, ip + 1))
 819                 return -EFAULT;
 820 
 821         return 0;
 822 }
 823 
 824 static int evdev_handle_get_keycode_v2(struct input_dev *dev, void __user *p)
 825 {
 826         struct input_keymap_entry ke;
 827         int error;
 828 
 829         if (copy_from_user(&ke, p, sizeof(ke)))
 830                 return -EFAULT;
 831 
 832         error = input_get_keycode(dev, &ke);
 833         if (error)
 834                 return error;
 835 
 836         if (copy_to_user(p, &ke, sizeof(ke)))
 837                 return -EFAULT;
 838 
 839         return 0;
 840 }
 841 
 842 static int evdev_handle_set_keycode(struct input_dev *dev, void __user *p)
 843 {
 844         struct input_keymap_entry ke = {
 845                 .len    = sizeof(unsigned int),
 846                 .flags  = 0,
 847         };
 848         int __user *ip = (int __user *)p;
 849 
 850         if (copy_from_user(ke.scancode, p, sizeof(unsigned int)))
 851                 return -EFAULT;
 852 
 853         if (get_user(ke.keycode, ip + 1))
 854                 return -EFAULT;
 855 
 856         return input_set_keycode(dev, &ke);
 857 }
 858 
 859 static int evdev_handle_set_keycode_v2(struct input_dev *dev, void __user *p)
 860 {
 861         struct input_keymap_entry ke;
 862 
 863         if (copy_from_user(&ke, p, sizeof(ke)))
 864                 return -EFAULT;
 865 
 866         if (ke.len > sizeof(ke.scancode))
 867                 return -EINVAL;
 868 
 869         return input_set_keycode(dev, &ke);
 870 }
 871 
 872 /*
 873  * If we transfer state to the user, we should flush all pending events
 874  * of the same type from the client's queue. Otherwise, they might end up
 875  * with duplicate events, which can screw up client's state tracking.
 876  * If bits_to_user fails after flushing the queue, we queue a SYN_DROPPED
 877  * event so user-space will notice missing events.
 878  *
 879  * LOCKING:
 880  * We need to take event_lock before buffer_lock to avoid dead-locks. But we
 881  * need the even_lock only to guarantee consistent state. We can safely release
 882  * it while flushing the queue. This allows input-core to handle filters while
 883  * we flush the queue.
 884  */
 885 static int evdev_handle_get_val(struct evdev_client *client,
 886                                 struct input_dev *dev, unsigned int type,
 887                                 unsigned long *bits, unsigned int maxbit,
 888                                 unsigned int maxlen, void __user *p,
 889                                 int compat)
 890 {
 891         int ret;
 892         unsigned long *mem;
 893 
 894         mem = bitmap_alloc(maxbit, GFP_KERNEL);
 895         if (!mem)
 896                 return -ENOMEM;
 897 
 898         spin_lock_irq(&dev->event_lock);
 899         spin_lock(&client->buffer_lock);
 900 
 901         bitmap_copy(mem, bits, maxbit);
 902 
 903         spin_unlock(&dev->event_lock);
 904 
 905         __evdev_flush_queue(client, type);
 906 
 907         spin_unlock_irq(&client->buffer_lock);
 908 
 909         ret = bits_to_user(mem, maxbit, maxlen, p, compat);
 910         if (ret < 0)
 911                 evdev_queue_syn_dropped(client);
 912 
 913         bitmap_free(mem);
 914 
 915         return ret;
 916 }
 917 
 918 static int evdev_handle_mt_request(struct input_dev *dev,
 919                                    unsigned int size,
 920                                    int __user *ip)
 921 {
 922         const struct input_mt *mt = dev->mt;
 923         unsigned int code;
 924         int max_slots;
 925         int i;
 926 
 927         if (get_user(code, &ip[0]))
 928                 return -EFAULT;
 929         if (!mt || !input_is_mt_value(code))
 930                 return -EINVAL;
 931 
 932         max_slots = (size - sizeof(__u32)) / sizeof(__s32);
 933         for (i = 0; i < mt->num_slots && i < max_slots; i++) {
 934                 int value = input_mt_get_value(&mt->slots[i], code);
 935                 if (put_user(value, &ip[1 + i]))
 936                         return -EFAULT;
 937         }
 938 
 939         return 0;
 940 }
 941 
 942 static int evdev_revoke(struct evdev *evdev, struct evdev_client *client,
 943                         struct file *file)
 944 {
 945         client->revoked = true;
 946         evdev_ungrab(evdev, client);
 947         input_flush_device(&evdev->handle, file);
 948         wake_up_interruptible(&evdev->wait);
 949 
 950         return 0;
 951 }
 952 
 953 /* must be called with evdev-mutex held */
 954 static int evdev_set_mask(struct evdev_client *client,
 955                           unsigned int type,
 956                           const void __user *codes,
 957                           u32 codes_size,
 958                           int compat)
 959 {
 960         unsigned long flags, *mask, *oldmask;
 961         size_t cnt;
 962         int error;
 963 
 964         /* we allow unknown types and 'codes_size > size' for forward-compat */
 965         cnt = evdev_get_mask_cnt(type);
 966         if (!cnt)
 967                 return 0;
 968 
 969         mask = bitmap_zalloc(cnt, GFP_KERNEL);
 970         if (!mask)
 971                 return -ENOMEM;
 972 
 973         error = bits_from_user(mask, cnt - 1, codes_size, codes, compat);
 974         if (error < 0) {
 975                 bitmap_free(mask);
 976                 return error;
 977         }
 978 
 979         spin_lock_irqsave(&client->buffer_lock, flags);
 980         oldmask = client->evmasks[type];
 981         client->evmasks[type] = mask;
 982         spin_unlock_irqrestore(&client->buffer_lock, flags);
 983 
 984         bitmap_free(oldmask);
 985 
 986         return 0;
 987 }
 988 
 989 /* must be called with evdev-mutex held */
 990 static int evdev_get_mask(struct evdev_client *client,
 991                           unsigned int type,
 992                           void __user *codes,
 993                           u32 codes_size,
 994                           int compat)
 995 {
 996         unsigned long *mask;
 997         size_t cnt, size, xfer_size;
 998         int i;
 999         int error;
1000 
1001         /* we allow unknown types and 'codes_size > size' for forward-compat */
1002         cnt = evdev_get_mask_cnt(type);
1003         size = sizeof(unsigned long) * BITS_TO_LONGS(cnt);
1004         xfer_size = min_t(size_t, codes_size, size);
1005 
1006         if (cnt > 0) {
1007                 mask = client->evmasks[type];
1008                 if (mask) {
1009                         error = bits_to_user(mask, cnt - 1,
1010                                              xfer_size, codes, compat);
1011                         if (error < 0)
1012                                 return error;
1013                 } else {
1014                         /* fake mask with all bits set */
1015                         for (i = 0; i < xfer_size; i++)
1016                                 if (put_user(0xffU, (u8 __user *)codes + i))
1017                                         return -EFAULT;
1018                 }
1019         }
1020 
1021         if (xfer_size < codes_size)
1022                 if (clear_user(codes + xfer_size, codes_size - xfer_size))
1023                         return -EFAULT;
1024 
1025         return 0;
1026 }
1027 
1028 static long evdev_do_ioctl(struct file *file, unsigned int cmd,
1029                            void __user *p, int compat_mode)
1030 {
1031         struct evdev_client *client = file->private_data;
1032         struct evdev *evdev = client->evdev;
1033         struct input_dev *dev = evdev->handle.dev;
1034         struct input_absinfo abs;
1035         struct input_mask mask;
1036         struct ff_effect effect;
1037         int __user *ip = (int __user *)p;
1038         unsigned int i, t, u, v;
1039         unsigned int size;
1040         int error;
1041 
1042         /* First we check for fixed-length commands */
1043         switch (cmd) {
1044 
1045         case EVIOCGVERSION:
1046                 return put_user(EV_VERSION, ip);
1047 
1048         case EVIOCGID:
1049                 if (copy_to_user(p, &dev->id, sizeof(struct input_id)))
1050                         return -EFAULT;
1051                 return 0;
1052 
1053         case EVIOCGREP:
1054                 if (!test_bit(EV_REP, dev->evbit))
1055                         return -ENOSYS;
1056                 if (put_user(dev->rep[REP_DELAY], ip))
1057                         return -EFAULT;
1058                 if (put_user(dev->rep[REP_PERIOD], ip + 1))
1059                         return -EFAULT;
1060                 return 0;
1061 
1062         case EVIOCSREP:
1063                 if (!test_bit(EV_REP, dev->evbit))
1064                         return -ENOSYS;
1065                 if (get_user(u, ip))
1066                         return -EFAULT;
1067                 if (get_user(v, ip + 1))
1068                         return -EFAULT;
1069 
1070                 input_inject_event(&evdev->handle, EV_REP, REP_DELAY, u);
1071                 input_inject_event(&evdev->handle, EV_REP, REP_PERIOD, v);
1072 
1073                 return 0;
1074 
1075         case EVIOCRMFF:
1076                 return input_ff_erase(dev, (int)(unsigned long) p, file);
1077 
1078         case EVIOCGEFFECTS:
1079                 i = test_bit(EV_FF, dev->evbit) ?
1080                                 dev->ff->max_effects : 0;
1081                 if (put_user(i, ip))
1082                         return -EFAULT;
1083                 return 0;
1084 
1085         case EVIOCGRAB:
1086                 if (p)
1087                         return evdev_grab(evdev, client);
1088                 else
1089                         return evdev_ungrab(evdev, client);
1090 
1091         case EVIOCREVOKE:
1092                 if (p)
1093                         return -EINVAL;
1094                 else
1095                         return evdev_revoke(evdev, client, file);
1096 
1097         case EVIOCGMASK: {
1098                 void __user *codes_ptr;
1099 
1100                 if (copy_from_user(&mask, p, sizeof(mask)))
1101                         return -EFAULT;
1102 
1103                 codes_ptr = (void __user *)(unsigned long)mask.codes_ptr;
1104                 return evdev_get_mask(client,
1105                                       mask.type, codes_ptr, mask.codes_size,
1106                                       compat_mode);
1107         }
1108 
1109         case EVIOCSMASK: {
1110                 const void __user *codes_ptr;
1111 
1112                 if (copy_from_user(&mask, p, sizeof(mask)))
1113                         return -EFAULT;
1114 
1115                 codes_ptr = (const void __user *)(unsigned long)mask.codes_ptr;
1116                 return evdev_set_mask(client,
1117                                       mask.type, codes_ptr, mask.codes_size,
1118                                       compat_mode);
1119         }
1120 
1121         case EVIOCSCLOCKID:
1122                 if (copy_from_user(&i, p, sizeof(unsigned int)))
1123                         return -EFAULT;
1124 
1125                 return evdev_set_clk_type(client, i);
1126 
1127         case EVIOCGKEYCODE:
1128                 return evdev_handle_get_keycode(dev, p);
1129 
1130         case EVIOCSKEYCODE:
1131                 return evdev_handle_set_keycode(dev, p);
1132 
1133         case EVIOCGKEYCODE_V2:
1134                 return evdev_handle_get_keycode_v2(dev, p);
1135 
1136         case EVIOCSKEYCODE_V2:
1137                 return evdev_handle_set_keycode_v2(dev, p);
1138         }
1139 
1140         size = _IOC_SIZE(cmd);
1141 
1142         /* Now check variable-length commands */
1143 #define EVIOC_MASK_SIZE(nr)     ((nr) & ~(_IOC_SIZEMASK << _IOC_SIZESHIFT))
1144         switch (EVIOC_MASK_SIZE(cmd)) {
1145 
1146         case EVIOCGPROP(0):
1147                 return bits_to_user(dev->propbit, INPUT_PROP_MAX,
1148                                     size, p, compat_mode);
1149 
1150         case EVIOCGMTSLOTS(0):
1151                 return evdev_handle_mt_request(dev, size, ip);
1152 
1153         case EVIOCGKEY(0):
1154                 return evdev_handle_get_val(client, dev, EV_KEY, dev->key,
1155                                             KEY_MAX, size, p, compat_mode);
1156 
1157         case EVIOCGLED(0):
1158                 return evdev_handle_get_val(client, dev, EV_LED, dev->led,
1159                                             LED_MAX, size, p, compat_mode);
1160 
1161         case EVIOCGSND(0):
1162                 return evdev_handle_get_val(client, dev, EV_SND, dev->snd,
1163                                             SND_MAX, size, p, compat_mode);
1164 
1165         case EVIOCGSW(0):
1166                 return evdev_handle_get_val(client, dev, EV_SW, dev->sw,
1167                                             SW_MAX, size, p, compat_mode);
1168 
1169         case EVIOCGNAME(0):
1170                 return str_to_user(dev->name, size, p);
1171 
1172         case EVIOCGPHYS(0):
1173                 return str_to_user(dev->phys, size, p);
1174 
1175         case EVIOCGUNIQ(0):
1176                 return str_to_user(dev->uniq, size, p);
1177 
1178         case EVIOC_MASK_SIZE(EVIOCSFF):
1179                 if (input_ff_effect_from_user(p, size, &effect))
1180                         return -EFAULT;
1181 
1182                 error = input_ff_upload(dev, &effect, file);
1183                 if (error)
1184                         return error;
1185 
1186                 if (put_user(effect.id, &(((struct ff_effect __user *)p)->id)))
1187                         return -EFAULT;
1188 
1189                 return 0;
1190         }
1191 
1192         /* Multi-number variable-length handlers */
1193         if (_IOC_TYPE(cmd) != 'E')
1194                 return -EINVAL;
1195 
1196         if (_IOC_DIR(cmd) == _IOC_READ) {
1197 
1198                 if ((_IOC_NR(cmd) & ~EV_MAX) == _IOC_NR(EVIOCGBIT(0, 0)))
1199                         return handle_eviocgbit(dev,
1200                                                 _IOC_NR(cmd) & EV_MAX, size,
1201                                                 p, compat_mode);
1202 
1203                 if ((_IOC_NR(cmd) & ~ABS_MAX) == _IOC_NR(EVIOCGABS(0))) {
1204 
1205                         if (!dev->absinfo)
1206                                 return -EINVAL;
1207 
1208                         t = _IOC_NR(cmd) & ABS_MAX;
1209                         abs = dev->absinfo[t];
1210 
1211                         if (copy_to_user(p, &abs, min_t(size_t,
1212                                         size, sizeof(struct input_absinfo))))
1213                                 return -EFAULT;
1214 
1215                         return 0;
1216                 }
1217         }
1218 
1219         if (_IOC_DIR(cmd) == _IOC_WRITE) {
1220 
1221                 if ((_IOC_NR(cmd) & ~ABS_MAX) == _IOC_NR(EVIOCSABS(0))) {
1222 
1223                         if (!dev->absinfo)
1224                                 return -EINVAL;
1225 
1226                         t = _IOC_NR(cmd) & ABS_MAX;
1227 
1228                         if (copy_from_user(&abs, p, min_t(size_t,
1229                                         size, sizeof(struct input_absinfo))))
1230                                 return -EFAULT;
1231 
1232                         if (size < sizeof(struct input_absinfo))
1233                                 abs.resolution = 0;
1234 
1235                         /* We can't change number of reserved MT slots */
1236                         if (t == ABS_MT_SLOT)
1237                                 return -EINVAL;
1238 
1239                         /*
1240                          * Take event lock to ensure that we are not
1241                          * changing device parameters in the middle
1242                          * of event.
1243                          */
1244                         spin_lock_irq(&dev->event_lock);
1245                         dev->absinfo[t] = abs;
1246                         spin_unlock_irq(&dev->event_lock);
1247 
1248                         return 0;
1249                 }
1250         }
1251 
1252         return -EINVAL;
1253 }
1254 
1255 static long evdev_ioctl_handler(struct file *file, unsigned int cmd,
1256                                 void __user *p, int compat_mode)
1257 {
1258         struct evdev_client *client = file->private_data;
1259         struct evdev *evdev = client->evdev;
1260         int retval;
1261 
1262         retval = mutex_lock_interruptible(&evdev->mutex);
1263         if (retval)
1264                 return retval;
1265 
1266         if (!evdev->exist || client->revoked) {
1267                 retval = -ENODEV;
1268                 goto out;
1269         }
1270 
1271         retval = evdev_do_ioctl(file, cmd, p, compat_mode);
1272 
1273  out:
1274         mutex_unlock(&evdev->mutex);
1275         return retval;
1276 }
1277 
1278 static long evdev_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
1279 {
1280         return evdev_ioctl_handler(file, cmd, (void __user *)arg, 0);
1281 }
1282 
1283 #ifdef CONFIG_COMPAT
1284 static long evdev_ioctl_compat(struct file *file,
1285                                 unsigned int cmd, unsigned long arg)
1286 {
1287         return evdev_ioctl_handler(file, cmd, compat_ptr(arg), 1);
1288 }
1289 #endif
1290 
1291 static const struct file_operations evdev_fops = {
1292         .owner          = THIS_MODULE,
1293         .read           = evdev_read,
1294         .write          = evdev_write,
1295         .poll           = evdev_poll,
1296         .open           = evdev_open,
1297         .release        = evdev_release,
1298         .unlocked_ioctl = evdev_ioctl,
1299 #ifdef CONFIG_COMPAT
1300         .compat_ioctl   = evdev_ioctl_compat,
1301 #endif
1302         .fasync         = evdev_fasync,
1303         .llseek         = no_llseek,
1304 };
1305 
1306 /*
1307  * Mark device non-existent. This disables writes, ioctls and
1308  * prevents new users from opening the device. Already posted
1309  * blocking reads will stay, however new ones will fail.
1310  */
1311 static void evdev_mark_dead(struct evdev *evdev)
1312 {
1313         mutex_lock(&evdev->mutex);
1314         evdev->exist = false;
1315         mutex_unlock(&evdev->mutex);
1316 }
1317 
1318 static void evdev_cleanup(struct evdev *evdev)
1319 {
1320         struct input_handle *handle = &evdev->handle;
1321 
1322         evdev_mark_dead(evdev);
1323         evdev_hangup(evdev);
1324 
1325         /* evdev is marked dead so no one else accesses evdev->open */
1326         if (evdev->open) {
1327                 input_flush_device(handle, NULL);
1328                 input_close_device(handle);
1329         }
1330 }
1331 
1332 /*
1333  * Create new evdev device. Note that input core serializes calls
1334  * to connect and disconnect.
1335  */
1336 static int evdev_connect(struct input_handler *handler, struct input_dev *dev,
1337                          const struct input_device_id *id)
1338 {
1339         struct evdev *evdev;
1340         int minor;
1341         int dev_no;
1342         int error;
1343 
1344         minor = input_get_new_minor(EVDEV_MINOR_BASE, EVDEV_MINORS, true);
1345         if (minor < 0) {
1346                 error = minor;
1347                 pr_err("failed to reserve new minor: %d\n", error);
1348                 return error;
1349         }
1350 
1351         evdev = kzalloc(sizeof(struct evdev), GFP_KERNEL);
1352         if (!evdev) {
1353                 error = -ENOMEM;
1354                 goto err_free_minor;
1355         }
1356 
1357         INIT_LIST_HEAD(&evdev->client_list);
1358         spin_lock_init(&evdev->client_lock);
1359         mutex_init(&evdev->mutex);
1360         init_waitqueue_head(&evdev->wait);
1361         evdev->exist = true;
1362 
1363         dev_no = minor;
1364         /* Normalize device number if it falls into legacy range */
1365         if (dev_no < EVDEV_MINOR_BASE + EVDEV_MINORS)
1366                 dev_no -= EVDEV_MINOR_BASE;
1367         dev_set_name(&evdev->dev, "event%d", dev_no);
1368 
1369         evdev->handle.dev = input_get_device(dev);
1370         evdev->handle.name = dev_name(&evdev->dev);
1371         evdev->handle.handler = handler;
1372         evdev->handle.private = evdev;
1373 
1374         evdev->dev.devt = MKDEV(INPUT_MAJOR, minor);
1375         evdev->dev.class = &input_class;
1376         evdev->dev.parent = &dev->dev;
1377         evdev->dev.release = evdev_free;
1378         device_initialize(&evdev->dev);
1379 
1380         error = input_register_handle(&evdev->handle);
1381         if (error)
1382                 goto err_free_evdev;
1383 
1384         cdev_init(&evdev->cdev, &evdev_fops);
1385 
1386         error = cdev_device_add(&evdev->cdev, &evdev->dev);
1387         if (error)
1388                 goto err_cleanup_evdev;
1389 
1390         return 0;
1391 
1392  err_cleanup_evdev:
1393         evdev_cleanup(evdev);
1394         input_unregister_handle(&evdev->handle);
1395  err_free_evdev:
1396         put_device(&evdev->dev);
1397  err_free_minor:
1398         input_free_minor(minor);
1399         return error;
1400 }
1401 
1402 static void evdev_disconnect(struct input_handle *handle)
1403 {
1404         struct evdev *evdev = handle->private;
1405 
1406         cdev_device_del(&evdev->cdev, &evdev->dev);
1407         evdev_cleanup(evdev);
1408         input_free_minor(MINOR(evdev->dev.devt));
1409         input_unregister_handle(handle);
1410         put_device(&evdev->dev);
1411 }
1412 
1413 static const struct input_device_id evdev_ids[] = {
1414         { .driver_info = 1 },   /* Matches all devices */
1415         { },                    /* Terminating zero entry */
1416 };
1417 
1418 MODULE_DEVICE_TABLE(input, evdev_ids);
1419 
1420 static struct input_handler evdev_handler = {
1421         .event          = evdev_event,
1422         .events         = evdev_events,
1423         .connect        = evdev_connect,
1424         .disconnect     = evdev_disconnect,
1425         .legacy_minors  = true,
1426         .minor          = EVDEV_MINOR_BASE,
1427         .name           = "evdev",
1428         .id_table       = evdev_ids,
1429 };
1430 
1431 static int __init evdev_init(void)
1432 {
1433         return input_register_handler(&evdev_handler);
1434 }
1435 
1436 static void __exit evdev_exit(void)
1437 {
1438         input_unregister_handler(&evdev_handler);
1439 }
1440 
1441 module_init(evdev_init);
1442 module_exit(evdev_exit);
1443 
1444 MODULE_AUTHOR("Vojtech Pavlik <vojtech@ucw.cz>");
1445 MODULE_DESCRIPTION("Input driver event char devices");
1446 MODULE_LICENSE("GPL");

/* [<][>][^][v][top][bottom][index][help] */