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