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