linux/drivers/char/ppdev.c
<<
>>
Prefs
   1/*
   2 * linux/drivers/char/ppdev.c
   3 *
   4 * This is the code behind /dev/parport* -- it allows a user-space
   5 * application to use the parport subsystem.
   6 *
   7 * Copyright (C) 1998-2000, 2002 Tim Waugh <tim@cyberelk.net>
   8 *
   9 * This program is free software; you can redistribute it and/or
  10 * modify it under the terms of the GNU General Public License
  11 * as published by the Free Software Foundation; either version
  12 * 2 of the License, or (at your option) any later version.
  13 *
  14 * A /dev/parportx device node represents an arbitrary device
  15 * on port 'x'.  The following operations are possible:
  16 *
  17 * open         do nothing, set up default IEEE 1284 protocol to be COMPAT
  18 * close        release port and unregister device (if necessary)
  19 * ioctl
  20 *   EXCL       register device exclusively (may fail)
  21 *   CLAIM      (register device first time) parport_claim_or_block
  22 *   RELEASE    parport_release
  23 *   SETMODE    set the IEEE 1284 protocol to use for read/write
  24 *   SETPHASE   set the IEEE 1284 phase of a particular mode.  Not to be
  25 *              confused with ioctl(fd, SETPHASER, &stun). ;-)
  26 *   DATADIR    data_forward / data_reverse
  27 *   WDATA      write_data
  28 *   RDATA      read_data
  29 *   WCONTROL   write_control
  30 *   RCONTROL   read_control
  31 *   FCONTROL   frob_control
  32 *   RSTATUS    read_status
  33 *   NEGOT      parport_negotiate
  34 *   YIELD      parport_yield_blocking
  35 *   WCTLONIRQ  on interrupt, set control lines
  36 *   CLRIRQ     clear (and return) interrupt count
  37 *   SETTIME    sets device timeout (struct timeval)
  38 *   GETTIME    gets device timeout (struct timeval)
  39 *   GETMODES   gets hardware supported modes (unsigned int)
  40 *   GETMODE    gets the current IEEE1284 mode
  41 *   GETPHASE   gets the current IEEE1284 phase
  42 *   GETFLAGS   gets current (user-visible) flags
  43 *   SETFLAGS   sets current (user-visible) flags
  44 * read/write   read or write in current IEEE 1284 protocol
  45 * select       wait for interrupt (in readfds)
  46 *
  47 * Changes:
  48 * Added SETTIME/GETTIME ioctl, Fred Barnes, 1999.
  49 *
  50 * Arnaldo Carvalho de Melo <acme@conectiva.com.br> 2000/08/25
  51 * - On error, copy_from_user and copy_to_user do not return -EFAULT,
  52 *   They return the positive number of bytes *not* copied due to address
  53 *   space errors.
  54 *
  55 * Added GETMODES/GETMODE/GETPHASE ioctls, Fred Barnes <frmb2@ukc.ac.uk>, 03/01/2001.
  56 * Added GETFLAGS/SETFLAGS ioctls, Fred Barnes, 04/2001
  57 */
  58
  59#include <linux/module.h>
  60#include <linux/init.h>
  61#include <linux/sched/signal.h>
  62#include <linux/device.h>
  63#include <linux/ioctl.h>
  64#include <linux/parport.h>
  65#include <linux/ctype.h>
  66#include <linux/poll.h>
  67#include <linux/slab.h>
  68#include <linux/major.h>
  69#include <linux/ppdev.h>
  70#include <linux/mutex.h>
  71#include <linux/uaccess.h>
  72#include <linux/compat.h>
  73
  74#define PP_VERSION "ppdev: user-space parallel port driver"
  75#define CHRDEV "ppdev"
  76
  77struct pp_struct {
  78        struct pardevice *pdev;
  79        wait_queue_head_t irq_wait;
  80        atomic_t irqc;
  81        unsigned int flags;
  82        int irqresponse;
  83        unsigned char irqctl;
  84        struct ieee1284_info state;
  85        struct ieee1284_info saved_state;
  86        long default_inactivity;
  87        int index;
  88};
  89
  90/* should we use PARDEVICE_MAX here? */
  91static struct device *devices[PARPORT_MAX];
  92
  93static DEFINE_IDA(ida_index);
  94
  95/* pp_struct.flags bitfields */
  96#define PP_CLAIMED    (1<<0)
  97#define PP_EXCL       (1<<1)
  98
  99/* Other constants */
 100#define PP_INTERRUPT_TIMEOUT (10 * HZ) /* 10s */
 101#define PP_BUFFER_SIZE 1024
 102#define PARDEVICE_MAX 8
 103
 104static DEFINE_MUTEX(pp_do_mutex);
 105
 106/* define fixed sized ioctl cmd for y2038 migration */
 107#define PPGETTIME32     _IOR(PP_IOCTL, 0x95, s32[2])
 108#define PPSETTIME32     _IOW(PP_IOCTL, 0x96, s32[2])
 109#define PPGETTIME64     _IOR(PP_IOCTL, 0x95, s64[2])
 110#define PPSETTIME64     _IOW(PP_IOCTL, 0x96, s64[2])
 111
 112static inline void pp_enable_irq(struct pp_struct *pp)
 113{
 114        struct parport *port = pp->pdev->port;
 115
 116        port->ops->enable_irq(port);
 117}
 118
 119static ssize_t pp_read(struct file *file, char __user *buf, size_t count,
 120                       loff_t *ppos)
 121{
 122        unsigned int minor = iminor(file_inode(file));
 123        struct pp_struct *pp = file->private_data;
 124        char *kbuffer;
 125        ssize_t bytes_read = 0;
 126        struct parport *pport;
 127        int mode;
 128
 129        if (!(pp->flags & PP_CLAIMED)) {
 130                /* Don't have the port claimed */
 131                pr_debug(CHRDEV "%x: claim the port first\n", minor);
 132                return -EINVAL;
 133        }
 134
 135        /* Trivial case. */
 136        if (count == 0)
 137                return 0;
 138
 139        kbuffer = kmalloc(min_t(size_t, count, PP_BUFFER_SIZE), GFP_KERNEL);
 140        if (!kbuffer)
 141                return -ENOMEM;
 142        pport = pp->pdev->port;
 143        mode = pport->ieee1284.mode & ~(IEEE1284_DEVICEID | IEEE1284_ADDR);
 144
 145        parport_set_timeout(pp->pdev,
 146                            (file->f_flags & O_NONBLOCK) ?
 147                            PARPORT_INACTIVITY_O_NONBLOCK :
 148                            pp->default_inactivity);
 149
 150        while (bytes_read == 0) {
 151                ssize_t need = min_t(unsigned long, count, PP_BUFFER_SIZE);
 152
 153                if (mode == IEEE1284_MODE_EPP) {
 154                        /* various specials for EPP mode */
 155                        int flags = 0;
 156                        size_t (*fn)(struct parport *, void *, size_t, int);
 157
 158                        if (pp->flags & PP_W91284PIC)
 159                                flags |= PARPORT_W91284PIC;
 160                        if (pp->flags & PP_FASTREAD)
 161                                flags |= PARPORT_EPP_FAST;
 162                        if (pport->ieee1284.mode & IEEE1284_ADDR)
 163                                fn = pport->ops->epp_read_addr;
 164                        else
 165                                fn = pport->ops->epp_read_data;
 166                        bytes_read = (*fn)(pport, kbuffer, need, flags);
 167                } else {
 168                        bytes_read = parport_read(pport, kbuffer, need);
 169                }
 170
 171                if (bytes_read != 0)
 172                        break;
 173
 174                if (file->f_flags & O_NONBLOCK) {
 175                        bytes_read = -EAGAIN;
 176                        break;
 177                }
 178
 179                if (signal_pending(current)) {
 180                        bytes_read = -ERESTARTSYS;
 181                        break;
 182                }
 183
 184                cond_resched();
 185        }
 186
 187        parport_set_timeout(pp->pdev, pp->default_inactivity);
 188
 189        if (bytes_read > 0 && copy_to_user(buf, kbuffer, bytes_read))
 190                bytes_read = -EFAULT;
 191
 192        kfree(kbuffer);
 193        pp_enable_irq(pp);
 194        return bytes_read;
 195}
 196
 197static ssize_t pp_write(struct file *file, const char __user *buf,
 198                        size_t count, loff_t *ppos)
 199{
 200        unsigned int minor = iminor(file_inode(file));
 201        struct pp_struct *pp = file->private_data;
 202        char *kbuffer;
 203        ssize_t bytes_written = 0;
 204        ssize_t wrote;
 205        int mode;
 206        struct parport *pport;
 207
 208        if (!(pp->flags & PP_CLAIMED)) {
 209                /* Don't have the port claimed */
 210                pr_debug(CHRDEV "%x: claim the port first\n", minor);
 211                return -EINVAL;
 212        }
 213
 214        kbuffer = kmalloc(min_t(size_t, count, PP_BUFFER_SIZE), GFP_KERNEL);
 215        if (!kbuffer)
 216                return -ENOMEM;
 217
 218        pport = pp->pdev->port;
 219        mode = pport->ieee1284.mode & ~(IEEE1284_DEVICEID | IEEE1284_ADDR);
 220
 221        parport_set_timeout(pp->pdev,
 222                            (file->f_flags & O_NONBLOCK) ?
 223                            PARPORT_INACTIVITY_O_NONBLOCK :
 224                            pp->default_inactivity);
 225
 226        while (bytes_written < count) {
 227                ssize_t n = min_t(unsigned long, count - bytes_written, PP_BUFFER_SIZE);
 228
 229                if (copy_from_user(kbuffer, buf + bytes_written, n)) {
 230                        bytes_written = -EFAULT;
 231                        break;
 232                }
 233
 234                if ((pp->flags & PP_FASTWRITE) && (mode == IEEE1284_MODE_EPP)) {
 235                        /* do a fast EPP write */
 236                        if (pport->ieee1284.mode & IEEE1284_ADDR) {
 237                                wrote = pport->ops->epp_write_addr(pport,
 238                                        kbuffer, n, PARPORT_EPP_FAST);
 239                        } else {
 240                                wrote = pport->ops->epp_write_data(pport,
 241                                        kbuffer, n, PARPORT_EPP_FAST);
 242                        }
 243                } else {
 244                        wrote = parport_write(pp->pdev->port, kbuffer, n);
 245                }
 246
 247                if (wrote <= 0) {
 248                        if (!bytes_written)
 249                                bytes_written = wrote;
 250                        break;
 251                }
 252
 253                bytes_written += wrote;
 254
 255                if (file->f_flags & O_NONBLOCK) {
 256                        if (!bytes_written)
 257                                bytes_written = -EAGAIN;
 258                        break;
 259                }
 260
 261                if (signal_pending(current))
 262                        break;
 263
 264                cond_resched();
 265        }
 266
 267        parport_set_timeout(pp->pdev, pp->default_inactivity);
 268
 269        kfree(kbuffer);
 270        pp_enable_irq(pp);
 271        return bytes_written;
 272}
 273
 274static void pp_irq(void *private)
 275{
 276        struct pp_struct *pp = private;
 277
 278        if (pp->irqresponse) {
 279                parport_write_control(pp->pdev->port, pp->irqctl);
 280                pp->irqresponse = 0;
 281        }
 282
 283        atomic_inc(&pp->irqc);
 284        wake_up_interruptible(&pp->irq_wait);
 285}
 286
 287static int register_device(int minor, struct pp_struct *pp)
 288{
 289        struct parport *port;
 290        struct pardevice *pdev = NULL;
 291        char *name;
 292        struct pardev_cb ppdev_cb;
 293        int rc = 0, index;
 294
 295        name = kasprintf(GFP_KERNEL, CHRDEV "%x", minor);
 296        if (name == NULL)
 297                return -ENOMEM;
 298
 299        port = parport_find_number(minor);
 300        if (!port) {
 301                pr_warn("%s: no associated port!\n", name);
 302                rc = -ENXIO;
 303                goto err;
 304        }
 305
 306        index = ida_simple_get(&ida_index, 0, 0, GFP_KERNEL);
 307        memset(&ppdev_cb, 0, sizeof(ppdev_cb));
 308        ppdev_cb.irq_func = pp_irq;
 309        ppdev_cb.flags = (pp->flags & PP_EXCL) ? PARPORT_FLAG_EXCL : 0;
 310        ppdev_cb.private = pp;
 311        pdev = parport_register_dev_model(port, name, &ppdev_cb, index);
 312        parport_put_port(port);
 313
 314        if (!pdev) {
 315                pr_warn("%s: failed to register device!\n", name);
 316                rc = -ENXIO;
 317                ida_simple_remove(&ida_index, index);
 318                goto err;
 319        }
 320
 321        pp->pdev = pdev;
 322        pp->index = index;
 323        dev_dbg(&pdev->dev, "registered pardevice\n");
 324err:
 325        kfree(name);
 326        return rc;
 327}
 328
 329static enum ieee1284_phase init_phase(int mode)
 330{
 331        switch (mode & ~(IEEE1284_DEVICEID
 332                         | IEEE1284_ADDR)) {
 333        case IEEE1284_MODE_NIBBLE:
 334        case IEEE1284_MODE_BYTE:
 335                return IEEE1284_PH_REV_IDLE;
 336        }
 337        return IEEE1284_PH_FWD_IDLE;
 338}
 339
 340static int pp_set_timeout(struct pardevice *pdev, long tv_sec, int tv_usec)
 341{
 342        long to_jiffies;
 343
 344        if ((tv_sec < 0) || (tv_usec < 0))
 345                return -EINVAL;
 346
 347        to_jiffies = usecs_to_jiffies(tv_usec);
 348        to_jiffies += tv_sec * HZ;
 349        if (to_jiffies <= 0)
 350                return -EINVAL;
 351
 352        pdev->timeout = to_jiffies;
 353        return 0;
 354}
 355
 356static int pp_do_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
 357{
 358        unsigned int minor = iminor(file_inode(file));
 359        struct pp_struct *pp = file->private_data;
 360        struct parport *port;
 361        void __user *argp = (void __user *)arg;
 362
 363        /* First handle the cases that don't take arguments. */
 364        switch (cmd) {
 365        case PPCLAIM:
 366            {
 367                struct ieee1284_info *info;
 368                int ret;
 369
 370                if (pp->flags & PP_CLAIMED) {
 371                        dev_dbg(&pp->pdev->dev, "you've already got it!\n");
 372                        return -EINVAL;
 373                }
 374
 375                /* Deferred device registration. */
 376                if (!pp->pdev) {
 377                        int err = register_device(minor, pp);
 378
 379                        if (err)
 380                                return err;
 381                }
 382
 383                ret = parport_claim_or_block(pp->pdev);
 384                if (ret < 0)
 385                        return ret;
 386
 387                pp->flags |= PP_CLAIMED;
 388
 389                /* For interrupt-reporting to work, we need to be
 390                 * informed of each interrupt. */
 391                pp_enable_irq(pp);
 392
 393                /* We may need to fix up the state machine. */
 394                info = &pp->pdev->port->ieee1284;
 395                pp->saved_state.mode = info->mode;
 396                pp->saved_state.phase = info->phase;
 397                info->mode = pp->state.mode;
 398                info->phase = pp->state.phase;
 399                pp->default_inactivity = parport_set_timeout(pp->pdev, 0);
 400                parport_set_timeout(pp->pdev, pp->default_inactivity);
 401
 402                return 0;
 403            }
 404        case PPEXCL:
 405                if (pp->pdev) {
 406                        dev_dbg(&pp->pdev->dev,
 407                                "too late for PPEXCL; already registered\n");
 408                        if (pp->flags & PP_EXCL)
 409                                /* But it's not really an error. */
 410                                return 0;
 411                        /* There's no chance of making the driver happy. */
 412                        return -EINVAL;
 413                }
 414
 415                /* Just remember to register the device exclusively
 416                 * when we finally do the registration. */
 417                pp->flags |= PP_EXCL;
 418                return 0;
 419        case PPSETMODE:
 420            {
 421                int mode;
 422
 423                if (copy_from_user(&mode, argp, sizeof(mode)))
 424                        return -EFAULT;
 425                /* FIXME: validate mode */
 426                pp->state.mode = mode;
 427                pp->state.phase = init_phase(mode);
 428
 429                if (pp->flags & PP_CLAIMED) {
 430                        pp->pdev->port->ieee1284.mode = mode;
 431                        pp->pdev->port->ieee1284.phase = pp->state.phase;
 432                }
 433
 434                return 0;
 435            }
 436        case PPGETMODE:
 437            {
 438                int mode;
 439
 440                if (pp->flags & PP_CLAIMED)
 441                        mode = pp->pdev->port->ieee1284.mode;
 442                else
 443                        mode = pp->state.mode;
 444
 445                if (copy_to_user(argp, &mode, sizeof(mode)))
 446                        return -EFAULT;
 447                return 0;
 448            }
 449        case PPSETPHASE:
 450            {
 451                int phase;
 452
 453                if (copy_from_user(&phase, argp, sizeof(phase)))
 454                        return -EFAULT;
 455
 456                /* FIXME: validate phase */
 457                pp->state.phase = phase;
 458
 459                if (pp->flags & PP_CLAIMED)
 460                        pp->pdev->port->ieee1284.phase = phase;
 461
 462                return 0;
 463            }
 464        case PPGETPHASE:
 465            {
 466                int phase;
 467
 468                if (pp->flags & PP_CLAIMED)
 469                        phase = pp->pdev->port->ieee1284.phase;
 470                else
 471                        phase = pp->state.phase;
 472                if (copy_to_user(argp, &phase, sizeof(phase)))
 473                        return -EFAULT;
 474                return 0;
 475            }
 476        case PPGETMODES:
 477            {
 478                unsigned int modes;
 479
 480                port = parport_find_number(minor);
 481                if (!port)
 482                        return -ENODEV;
 483
 484                modes = port->modes;
 485                parport_put_port(port);
 486                if (copy_to_user(argp, &modes, sizeof(modes)))
 487                        return -EFAULT;
 488                return 0;
 489            }
 490        case PPSETFLAGS:
 491            {
 492                int uflags;
 493
 494                if (copy_from_user(&uflags, argp, sizeof(uflags)))
 495                        return -EFAULT;
 496                pp->flags &= ~PP_FLAGMASK;
 497                pp->flags |= (uflags & PP_FLAGMASK);
 498                return 0;
 499            }
 500        case PPGETFLAGS:
 501            {
 502                int uflags;
 503
 504                uflags = pp->flags & PP_FLAGMASK;
 505                if (copy_to_user(argp, &uflags, sizeof(uflags)))
 506                        return -EFAULT;
 507                return 0;
 508            }
 509        }       /* end switch() */
 510
 511        /* Everything else requires the port to be claimed, so check
 512         * that now. */
 513        if ((pp->flags & PP_CLAIMED) == 0) {
 514                pr_debug(CHRDEV "%x: claim the port first\n", minor);
 515                return -EINVAL;
 516        }
 517
 518        port = pp->pdev->port;
 519        switch (cmd) {
 520                struct ieee1284_info *info;
 521                unsigned char reg;
 522                unsigned char mask;
 523                int mode;
 524                s32 time32[2];
 525                s64 time64[2];
 526                struct timespec64 ts;
 527                int ret;
 528
 529        case PPRSTATUS:
 530                reg = parport_read_status(port);
 531                if (copy_to_user(argp, &reg, sizeof(reg)))
 532                        return -EFAULT;
 533                return 0;
 534        case PPRDATA:
 535                reg = parport_read_data(port);
 536                if (copy_to_user(argp, &reg, sizeof(reg)))
 537                        return -EFAULT;
 538                return 0;
 539        case PPRCONTROL:
 540                reg = parport_read_control(port);
 541                if (copy_to_user(argp, &reg, sizeof(reg)))
 542                        return -EFAULT;
 543                return 0;
 544        case PPYIELD:
 545                parport_yield_blocking(pp->pdev);
 546                return 0;
 547
 548        case PPRELEASE:
 549                /* Save the state machine's state. */
 550                info = &pp->pdev->port->ieee1284;
 551                pp->state.mode = info->mode;
 552                pp->state.phase = info->phase;
 553                info->mode = pp->saved_state.mode;
 554                info->phase = pp->saved_state.phase;
 555                parport_release(pp->pdev);
 556                pp->flags &= ~PP_CLAIMED;
 557                return 0;
 558
 559        case PPWCONTROL:
 560                if (copy_from_user(&reg, argp, sizeof(reg)))
 561                        return -EFAULT;
 562                parport_write_control(port, reg);
 563                return 0;
 564
 565        case PPWDATA:
 566                if (copy_from_user(&reg, argp, sizeof(reg)))
 567                        return -EFAULT;
 568                parport_write_data(port, reg);
 569                return 0;
 570
 571        case PPFCONTROL:
 572                if (copy_from_user(&mask, argp,
 573                                   sizeof(mask)))
 574                        return -EFAULT;
 575                if (copy_from_user(&reg, 1 + (unsigned char __user *) arg,
 576                                   sizeof(reg)))
 577                        return -EFAULT;
 578                parport_frob_control(port, mask, reg);
 579                return 0;
 580
 581        case PPDATADIR:
 582                if (copy_from_user(&mode, argp, sizeof(mode)))
 583                        return -EFAULT;
 584                if (mode)
 585                        port->ops->data_reverse(port);
 586                else
 587                        port->ops->data_forward(port);
 588                return 0;
 589
 590        case PPNEGOT:
 591                if (copy_from_user(&mode, argp, sizeof(mode)))
 592                        return -EFAULT;
 593                switch ((ret = parport_negotiate(port, mode))) {
 594                case 0: break;
 595                case -1: /* handshake failed, peripheral not IEEE 1284 */
 596                        ret = -EIO;
 597                        break;
 598                case 1:  /* handshake succeeded, peripheral rejected mode */
 599                        ret = -ENXIO;
 600                        break;
 601                }
 602                pp_enable_irq(pp);
 603                return ret;
 604
 605        case PPWCTLONIRQ:
 606                if (copy_from_user(&reg, argp, sizeof(reg)))
 607                        return -EFAULT;
 608
 609                /* Remember what to set the control lines to, for next
 610                 * time we get an interrupt. */
 611                pp->irqctl = reg;
 612                pp->irqresponse = 1;
 613                return 0;
 614
 615        case PPCLRIRQ:
 616                ret = atomic_read(&pp->irqc);
 617                if (copy_to_user(argp, &ret, sizeof(ret)))
 618                        return -EFAULT;
 619                atomic_sub(ret, &pp->irqc);
 620                return 0;
 621
 622        case PPSETTIME32:
 623                if (copy_from_user(time32, argp, sizeof(time32)))
 624                        return -EFAULT;
 625
 626                return pp_set_timeout(pp->pdev, time32[0], time32[1]);
 627
 628        case PPSETTIME64:
 629                if (copy_from_user(time64, argp, sizeof(time64)))
 630                        return -EFAULT;
 631
 632                return pp_set_timeout(pp->pdev, time64[0], time64[1]);
 633
 634        case PPGETTIME32:
 635                jiffies_to_timespec64(pp->pdev->timeout, &ts);
 636                time32[0] = ts.tv_sec;
 637                time32[1] = ts.tv_nsec / NSEC_PER_USEC;
 638                if ((time32[0] < 0) || (time32[1] < 0))
 639                        return -EINVAL;
 640
 641                if (copy_to_user(argp, time32, sizeof(time32)))
 642                        return -EFAULT;
 643
 644                return 0;
 645
 646        case PPGETTIME64:
 647                jiffies_to_timespec64(pp->pdev->timeout, &ts);
 648                time64[0] = ts.tv_sec;
 649                time64[1] = ts.tv_nsec / NSEC_PER_USEC;
 650                if ((time64[0] < 0) || (time64[1] < 0))
 651                        return -EINVAL;
 652
 653                if (copy_to_user(argp, time64, sizeof(time64)))
 654                        return -EFAULT;
 655
 656                return 0;
 657
 658        default:
 659                dev_dbg(&pp->pdev->dev, "What? (cmd=0x%x)\n", cmd);
 660                return -EINVAL;
 661        }
 662
 663        /* Keep the compiler happy */
 664        return 0;
 665}
 666
 667static long pp_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
 668{
 669        long ret;
 670
 671        mutex_lock(&pp_do_mutex);
 672        ret = pp_do_ioctl(file, cmd, arg);
 673        mutex_unlock(&pp_do_mutex);
 674        return ret;
 675}
 676
 677#ifdef CONFIG_COMPAT
 678static long pp_compat_ioctl(struct file *file, unsigned int cmd,
 679                            unsigned long arg)
 680{
 681        return pp_ioctl(file, cmd, (unsigned long)compat_ptr(arg));
 682}
 683#endif
 684
 685static int pp_open(struct inode *inode, struct file *file)
 686{
 687        unsigned int minor = iminor(inode);
 688        struct pp_struct *pp;
 689
 690        if (minor >= PARPORT_MAX)
 691                return -ENXIO;
 692
 693        pp = kmalloc(sizeof(struct pp_struct), GFP_KERNEL);
 694        if (!pp)
 695                return -ENOMEM;
 696
 697        pp->state.mode = IEEE1284_MODE_COMPAT;
 698        pp->state.phase = init_phase(pp->state.mode);
 699        pp->flags = 0;
 700        pp->irqresponse = 0;
 701        atomic_set(&pp->irqc, 0);
 702        init_waitqueue_head(&pp->irq_wait);
 703
 704        /* Defer the actual device registration until the first claim.
 705         * That way, we know whether or not the driver wants to have
 706         * exclusive access to the port (PPEXCL).
 707         */
 708        pp->pdev = NULL;
 709        file->private_data = pp;
 710
 711        return 0;
 712}
 713
 714static int pp_release(struct inode *inode, struct file *file)
 715{
 716        unsigned int minor = iminor(inode);
 717        struct pp_struct *pp = file->private_data;
 718        int compat_negot;
 719
 720        compat_negot = 0;
 721        if (!(pp->flags & PP_CLAIMED) && pp->pdev &&
 722            (pp->state.mode != IEEE1284_MODE_COMPAT)) {
 723                struct ieee1284_info *info;
 724
 725                /* parport released, but not in compatibility mode */
 726                parport_claim_or_block(pp->pdev);
 727                pp->flags |= PP_CLAIMED;
 728                info = &pp->pdev->port->ieee1284;
 729                pp->saved_state.mode = info->mode;
 730                pp->saved_state.phase = info->phase;
 731                info->mode = pp->state.mode;
 732                info->phase = pp->state.phase;
 733                compat_negot = 1;
 734        } else if ((pp->flags & PP_CLAIMED) && pp->pdev &&
 735            (pp->pdev->port->ieee1284.mode != IEEE1284_MODE_COMPAT)) {
 736                compat_negot = 2;
 737        }
 738        if (compat_negot) {
 739                parport_negotiate(pp->pdev->port, IEEE1284_MODE_COMPAT);
 740                dev_dbg(&pp->pdev->dev,
 741                        "negotiated back to compatibility mode because user-space forgot\n");
 742        }
 743
 744        if (pp->flags & PP_CLAIMED) {
 745                struct ieee1284_info *info;
 746
 747                info = &pp->pdev->port->ieee1284;
 748                pp->state.mode = info->mode;
 749                pp->state.phase = info->phase;
 750                info->mode = pp->saved_state.mode;
 751                info->phase = pp->saved_state.phase;
 752                parport_release(pp->pdev);
 753                if (compat_negot != 1) {
 754                        pr_debug(CHRDEV "%x: released pardevice "
 755                                "because user-space forgot\n", minor);
 756                }
 757        }
 758
 759        if (pp->pdev) {
 760                parport_unregister_device(pp->pdev);
 761                ida_simple_remove(&ida_index, pp->index);
 762                pp->pdev = NULL;
 763                pr_debug(CHRDEV "%x: unregistered pardevice\n", minor);
 764        }
 765
 766        kfree(pp);
 767
 768        return 0;
 769}
 770
 771/* No kernel lock held - fine */
 772static unsigned int pp_poll(struct file *file, poll_table *wait)
 773{
 774        struct pp_struct *pp = file->private_data;
 775        unsigned int mask = 0;
 776
 777        poll_wait(file, &pp->irq_wait, wait);
 778        if (atomic_read(&pp->irqc))
 779                mask |= POLLIN | POLLRDNORM;
 780
 781        return mask;
 782}
 783
 784static struct class *ppdev_class;
 785
 786static const struct file_operations pp_fops = {
 787        .owner          = THIS_MODULE,
 788        .llseek         = no_llseek,
 789        .read           = pp_read,
 790        .write          = pp_write,
 791        .poll           = pp_poll,
 792        .unlocked_ioctl = pp_ioctl,
 793#ifdef CONFIG_COMPAT
 794        .compat_ioctl   = pp_compat_ioctl,
 795#endif
 796        .open           = pp_open,
 797        .release        = pp_release,
 798};
 799
 800static void pp_attach(struct parport *port)
 801{
 802        struct device *ret;
 803
 804        if (devices[port->number])
 805                return;
 806
 807        ret = device_create(ppdev_class, port->dev,
 808                            MKDEV(PP_MAJOR, port->number), NULL,
 809                            "parport%d", port->number);
 810        if (IS_ERR(ret)) {
 811                pr_err("Failed to create device parport%d\n",
 812                       port->number);
 813                return;
 814        }
 815        devices[port->number] = ret;
 816}
 817
 818static void pp_detach(struct parport *port)
 819{
 820        if (!devices[port->number])
 821                return;
 822
 823        device_destroy(ppdev_class, MKDEV(PP_MAJOR, port->number));
 824        devices[port->number] = NULL;
 825}
 826
 827static int pp_probe(struct pardevice *par_dev)
 828{
 829        struct device_driver *drv = par_dev->dev.driver;
 830        int len = strlen(drv->name);
 831
 832        if (strncmp(par_dev->name, drv->name, len))
 833                return -ENODEV;
 834
 835        return 0;
 836}
 837
 838static struct parport_driver pp_driver = {
 839        .name           = CHRDEV,
 840        .probe          = pp_probe,
 841        .match_port     = pp_attach,
 842        .detach         = pp_detach,
 843        .devmodel       = true,
 844};
 845
 846static int __init ppdev_init(void)
 847{
 848        int err = 0;
 849
 850        if (register_chrdev(PP_MAJOR, CHRDEV, &pp_fops)) {
 851                pr_warn(CHRDEV ": unable to get major %d\n", PP_MAJOR);
 852                return -EIO;
 853        }
 854        ppdev_class = class_create(THIS_MODULE, CHRDEV);
 855        if (IS_ERR(ppdev_class)) {
 856                err = PTR_ERR(ppdev_class);
 857                goto out_chrdev;
 858        }
 859        err = parport_register_driver(&pp_driver);
 860        if (err < 0) {
 861                pr_warn(CHRDEV ": unable to register with parport\n");
 862                goto out_class;
 863        }
 864
 865        pr_info(PP_VERSION "\n");
 866        goto out;
 867
 868out_class:
 869        class_destroy(ppdev_class);
 870out_chrdev:
 871        unregister_chrdev(PP_MAJOR, CHRDEV);
 872out:
 873        return err;
 874}
 875
 876static void __exit ppdev_cleanup(void)
 877{
 878        /* Clean up all parport stuff */
 879        parport_unregister_driver(&pp_driver);
 880        class_destroy(ppdev_class);
 881        unregister_chrdev(PP_MAJOR, CHRDEV);
 882}
 883
 884module_init(ppdev_init);
 885module_exit(ppdev_cleanup);
 886
 887MODULE_LICENSE("GPL");
 888MODULE_ALIAS_CHARDEV_MAJOR(PP_MAJOR);
 889