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.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/major.h>
  68#include <linux/ppdev.h>
  69#include <linux/smp_lock.h>
  70#include <linux/uaccess.h>
  71
  72#define PP_VERSION "ppdev: user-space parallel port driver"
  73#define CHRDEV "ppdev"
  74
  75struct pp_struct {
  76        struct pardevice * pdev;
  77        wait_queue_head_t irq_wait;
  78        atomic_t irqc;
  79        unsigned int flags;
  80        int irqresponse;
  81        unsigned char irqctl;
  82        struct ieee1284_info state;
  83        struct ieee1284_info saved_state;
  84        long default_inactivity;
  85};
  86
  87/* pp_struct.flags bitfields */
  88#define PP_CLAIMED    (1<<0)
  89#define PP_EXCL       (1<<1)
  90
  91/* Other constants */
  92#define PP_INTERRUPT_TIMEOUT (10 * HZ) /* 10s */
  93#define PP_BUFFER_SIZE 1024
  94#define PARDEVICE_MAX 8
  95
  96/* ROUND_UP macro from fs/select.c */
  97#define ROUND_UP(x,y) (((x)+(y)-1)/(y))
  98
  99static inline void pp_enable_irq (struct pp_struct *pp)
 100{
 101        struct parport *port = pp->pdev->port;
 102        port->ops->enable_irq (port);
 103}
 104
 105static ssize_t pp_read (struct file * file, char __user * buf, size_t count,
 106                        loff_t * ppos)
 107{
 108        unsigned int minor = iminor(file->f_path.dentry->d_inode);
 109        struct pp_struct *pp = file->private_data;
 110        char * kbuffer;
 111        ssize_t bytes_read = 0;
 112        struct parport *pport;
 113        int mode;
 114
 115        if (!(pp->flags & PP_CLAIMED)) {
 116                /* Don't have the port claimed */
 117                pr_debug(CHRDEV "%x: claim the port first\n", minor);
 118                return -EINVAL;
 119        }
 120
 121        /* Trivial case. */
 122        if (count == 0)
 123                return 0;
 124
 125        kbuffer = kmalloc(min_t(size_t, count, PP_BUFFER_SIZE), GFP_KERNEL);
 126        if (!kbuffer) {
 127                return -ENOMEM;
 128        }
 129        pport = pp->pdev->port;
 130        mode = pport->ieee1284.mode & ~(IEEE1284_DEVICEID | IEEE1284_ADDR);
 131
 132        parport_set_timeout (pp->pdev,
 133                             (file->f_flags & O_NONBLOCK) ?
 134                             PARPORT_INACTIVITY_O_NONBLOCK :
 135                             pp->default_inactivity);
 136
 137        while (bytes_read == 0) {
 138                ssize_t need = min_t(unsigned long, count, PP_BUFFER_SIZE);
 139
 140                if (mode == IEEE1284_MODE_EPP) {
 141                        /* various specials for EPP mode */
 142                        int flags = 0;
 143                        size_t (*fn)(struct parport *, void *, size_t, int);
 144
 145                        if (pp->flags & PP_W91284PIC) {
 146                                flags |= PARPORT_W91284PIC;
 147                        }
 148                        if (pp->flags & PP_FASTREAD) {
 149                                flags |= PARPORT_EPP_FAST;
 150                        }
 151                        if (pport->ieee1284.mode & IEEE1284_ADDR) {
 152                                fn = pport->ops->epp_read_addr;
 153                        } else {
 154                                fn = pport->ops->epp_read_data;
 155                        }
 156                        bytes_read = (*fn)(pport, kbuffer, need, flags);
 157                } else {
 158                        bytes_read = parport_read (pport, kbuffer, need);
 159                }
 160
 161                if (bytes_read != 0)
 162                        break;
 163
 164                if (file->f_flags & O_NONBLOCK) {
 165                        bytes_read = -EAGAIN;
 166                        break;
 167                }
 168
 169                if (signal_pending (current)) {
 170                        bytes_read = -ERESTARTSYS;
 171                        break;
 172                }
 173
 174                cond_resched();
 175        }
 176
 177        parport_set_timeout (pp->pdev, pp->default_inactivity);
 178
 179        if (bytes_read > 0 && copy_to_user (buf, kbuffer, bytes_read))
 180                bytes_read = -EFAULT;
 181
 182        kfree (kbuffer);
 183        pp_enable_irq (pp);
 184        return bytes_read;
 185}
 186
 187static ssize_t pp_write (struct file * file, const char __user * buf,
 188                         size_t count, loff_t * ppos)
 189{
 190        unsigned int minor = iminor(file->f_path.dentry->d_inode);
 191        struct pp_struct *pp = file->private_data;
 192        char * kbuffer;
 193        ssize_t bytes_written = 0;
 194        ssize_t wrote;
 195        int mode;
 196        struct parport *pport;
 197
 198        if (!(pp->flags & PP_CLAIMED)) {
 199                /* Don't have the port claimed */
 200                pr_debug(CHRDEV "%x: claim the port first\n", minor);
 201                return -EINVAL;
 202        }
 203
 204        kbuffer = kmalloc(min_t(size_t, count, PP_BUFFER_SIZE), GFP_KERNEL);
 205        if (!kbuffer) {
 206                return -ENOMEM;
 207        }
 208        pport = pp->pdev->port;
 209        mode = pport->ieee1284.mode & ~(IEEE1284_DEVICEID | IEEE1284_ADDR);
 210
 211        parport_set_timeout (pp->pdev,
 212                             (file->f_flags & O_NONBLOCK) ?
 213                             PARPORT_INACTIVITY_O_NONBLOCK :
 214                             pp->default_inactivity);
 215
 216        while (bytes_written < count) {
 217                ssize_t n = min_t(unsigned long, count - bytes_written, PP_BUFFER_SIZE);
 218
 219                if (copy_from_user (kbuffer, buf + bytes_written, n)) {
 220                        bytes_written = -EFAULT;
 221                        break;
 222                }
 223
 224                if ((pp->flags & PP_FASTWRITE) && (mode == IEEE1284_MODE_EPP)) {
 225                        /* do a fast EPP write */
 226                        if (pport->ieee1284.mode & IEEE1284_ADDR) {
 227                                wrote = pport->ops->epp_write_addr (pport,
 228                                        kbuffer, n, PARPORT_EPP_FAST);
 229                        } else {
 230                                wrote = pport->ops->epp_write_data (pport,
 231                                        kbuffer, n, PARPORT_EPP_FAST);
 232                        }
 233                } else {
 234                        wrote = parport_write (pp->pdev->port, kbuffer, n);
 235                }
 236
 237                if (wrote <= 0) {
 238                        if (!bytes_written) {
 239                                bytes_written = wrote;
 240                        }
 241                        break;
 242                }
 243
 244                bytes_written += wrote;
 245
 246                if (file->f_flags & O_NONBLOCK) {
 247                        if (!bytes_written)
 248                                bytes_written = -EAGAIN;
 249                        break;
 250                }
 251
 252                if (signal_pending (current)) {
 253                        if (!bytes_written) {
 254                                bytes_written = -EINTR;
 255                        }
 256                        break;
 257                }
 258
 259                cond_resched();
 260        }
 261
 262        parport_set_timeout (pp->pdev, pp->default_inactivity);
 263
 264        kfree (kbuffer);
 265        pp_enable_irq (pp);
 266        return bytes_written;
 267}
 268
 269static void pp_irq (void *private)
 270{
 271        struct pp_struct *pp = private;
 272
 273        if (pp->irqresponse) {
 274                parport_write_control (pp->pdev->port, pp->irqctl);
 275                pp->irqresponse = 0;
 276        }
 277
 278        atomic_inc (&pp->irqc);
 279        wake_up_interruptible (&pp->irq_wait);
 280}
 281
 282static int register_device (int minor, struct pp_struct *pp)
 283{
 284        struct parport *port;
 285        struct pardevice * pdev = NULL;
 286        char *name;
 287        int fl;
 288
 289        name = kmalloc (strlen (CHRDEV) + 3, GFP_KERNEL);
 290        if (name == NULL)
 291                return -ENOMEM;
 292
 293        sprintf (name, CHRDEV "%x", minor);
 294
 295        port = parport_find_number (minor);
 296        if (!port) {
 297                printk (KERN_WARNING "%s: no associated port!\n", name);
 298                kfree (name);
 299                return -ENXIO;
 300        }
 301
 302        fl = (pp->flags & PP_EXCL) ? PARPORT_FLAG_EXCL : 0;
 303        pdev = parport_register_device (port, name, NULL,
 304                                        NULL, pp_irq, fl, pp);
 305        parport_put_port (port);
 306
 307        if (!pdev) {
 308                printk (KERN_WARNING "%s: failed to register device!\n", name);
 309                kfree (name);
 310                return -ENXIO;
 311        }
 312
 313        pp->pdev = pdev;
 314        pr_debug("%s: registered pardevice\n", name);
 315        return 0;
 316}
 317
 318static enum ieee1284_phase init_phase (int mode)
 319{
 320        switch (mode & ~(IEEE1284_DEVICEID
 321                         | IEEE1284_ADDR)) {
 322        case IEEE1284_MODE_NIBBLE:
 323        case IEEE1284_MODE_BYTE:
 324                return IEEE1284_PH_REV_IDLE;
 325        }
 326        return IEEE1284_PH_FWD_IDLE;
 327}
 328
 329static int pp_do_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
 330{
 331        unsigned int minor = iminor(file->f_path.dentry->d_inode);
 332        struct pp_struct *pp = file->private_data;
 333        struct parport * port;
 334        void __user *argp = (void __user *)arg;
 335
 336        /* First handle the cases that don't take arguments. */
 337        switch (cmd) {
 338        case PPCLAIM:
 339            {
 340                struct ieee1284_info *info;
 341                int ret;
 342
 343                if (pp->flags & PP_CLAIMED) {
 344                        pr_debug(CHRDEV "%x: you've already got it!\n", minor);
 345                        return -EINVAL;
 346                }
 347
 348                /* Deferred device registration. */
 349                if (!pp->pdev) {
 350                        int err = register_device (minor, pp);
 351                        if (err) {
 352                                return err;
 353                        }
 354                }
 355
 356                ret = parport_claim_or_block (pp->pdev);
 357                if (ret < 0)
 358                        return ret;
 359
 360                pp->flags |= PP_CLAIMED;
 361
 362                /* For interrupt-reporting to work, we need to be
 363                 * informed of each interrupt. */
 364                pp_enable_irq (pp);
 365
 366                /* We may need to fix up the state machine. */
 367                info = &pp->pdev->port->ieee1284;
 368                pp->saved_state.mode = info->mode;
 369                pp->saved_state.phase = info->phase;
 370                info->mode = pp->state.mode;
 371                info->phase = pp->state.phase;
 372                pp->default_inactivity = parport_set_timeout (pp->pdev, 0);
 373                parport_set_timeout (pp->pdev, pp->default_inactivity);
 374
 375                return 0;
 376            }
 377        case PPEXCL:
 378                if (pp->pdev) {
 379                        pr_debug(CHRDEV "%x: too late for PPEXCL; "
 380                                "already registered\n", minor);
 381                        if (pp->flags & PP_EXCL)
 382                                /* But it's not really an error. */
 383                                return 0;
 384                        /* There's no chance of making the driver happy. */
 385                        return -EINVAL;
 386                }
 387
 388                /* Just remember to register the device exclusively
 389                 * when we finally do the registration. */
 390                pp->flags |= PP_EXCL;
 391                return 0;
 392        case PPSETMODE:
 393            {
 394                int mode;
 395                if (copy_from_user (&mode, argp, sizeof (mode)))
 396                        return -EFAULT;
 397                /* FIXME: validate mode */
 398                pp->state.mode = mode;
 399                pp->state.phase = init_phase (mode);
 400
 401                if (pp->flags & PP_CLAIMED) {
 402                        pp->pdev->port->ieee1284.mode = mode;
 403                        pp->pdev->port->ieee1284.phase = pp->state.phase;
 404                }
 405
 406                return 0;
 407            }
 408        case PPGETMODE:
 409            {
 410                int mode;
 411
 412                if (pp->flags & PP_CLAIMED) {
 413                        mode = pp->pdev->port->ieee1284.mode;
 414                } else {
 415                        mode = pp->state.mode;
 416                }
 417                if (copy_to_user (argp, &mode, sizeof (mode))) {
 418                        return -EFAULT;
 419                }
 420                return 0;
 421            }
 422        case PPSETPHASE:
 423            {
 424                int phase;
 425                if (copy_from_user (&phase, argp, sizeof (phase))) {
 426                        return -EFAULT;
 427                }
 428                /* FIXME: validate phase */
 429                pp->state.phase = phase;
 430
 431                if (pp->flags & PP_CLAIMED) {
 432                        pp->pdev->port->ieee1284.phase = phase;
 433                }
 434
 435                return 0;
 436            }
 437        case PPGETPHASE:
 438            {
 439                int phase;
 440
 441                if (pp->flags & PP_CLAIMED) {
 442                        phase = pp->pdev->port->ieee1284.phase;
 443                } else {
 444                        phase = pp->state.phase;
 445                }
 446                if (copy_to_user (argp, &phase, sizeof (phase))) {
 447                        return -EFAULT;
 448                }
 449                return 0;
 450            }
 451        case PPGETMODES:
 452            {
 453                unsigned int modes;
 454
 455                port = parport_find_number (minor);
 456                if (!port)
 457                        return -ENODEV;
 458
 459                modes = port->modes;
 460                if (copy_to_user (argp, &modes, sizeof (modes))) {
 461                        return -EFAULT;
 462                }
 463                return 0;
 464            }
 465        case PPSETFLAGS:
 466            {
 467                int uflags;
 468
 469                if (copy_from_user (&uflags, argp, sizeof (uflags))) {
 470                        return -EFAULT;
 471                }
 472                pp->flags &= ~PP_FLAGMASK;
 473                pp->flags |= (uflags & PP_FLAGMASK);
 474                return 0;
 475            }
 476        case PPGETFLAGS:
 477            {
 478                int uflags;
 479
 480                uflags = pp->flags & PP_FLAGMASK;
 481                if (copy_to_user (argp, &uflags, sizeof (uflags))) {
 482                        return -EFAULT;
 483                }
 484                return 0;
 485            }
 486        }       /* end switch() */
 487
 488        /* Everything else requires the port to be claimed, so check
 489         * that now. */
 490        if ((pp->flags & PP_CLAIMED) == 0) {
 491                pr_debug(CHRDEV "%x: claim the port first\n", minor);
 492                return -EINVAL;
 493        }
 494
 495        port = pp->pdev->port;
 496        switch (cmd) {
 497                struct ieee1284_info *info;
 498                unsigned char reg;
 499                unsigned char mask;
 500                int mode;
 501                int ret;
 502                struct timeval par_timeout;
 503                long to_jiffies;
 504
 505        case PPRSTATUS:
 506                reg = parport_read_status (port);
 507                if (copy_to_user (argp, &reg, sizeof (reg)))
 508                        return -EFAULT;
 509                return 0;
 510        case PPRDATA:
 511                reg = parport_read_data (port);
 512                if (copy_to_user (argp, &reg, sizeof (reg)))
 513                        return -EFAULT;
 514                return 0;
 515        case PPRCONTROL:
 516                reg = parport_read_control (port);
 517                if (copy_to_user (argp, &reg, sizeof (reg)))
 518                        return -EFAULT;
 519                return 0;
 520        case PPYIELD:
 521                parport_yield_blocking (pp->pdev);
 522                return 0;
 523
 524        case PPRELEASE:
 525                /* Save the state machine's state. */
 526                info = &pp->pdev->port->ieee1284;
 527                pp->state.mode = info->mode;
 528                pp->state.phase = info->phase;
 529                info->mode = pp->saved_state.mode;
 530                info->phase = pp->saved_state.phase;
 531                parport_release (pp->pdev);
 532                pp->flags &= ~PP_CLAIMED;
 533                return 0;
 534
 535        case PPWCONTROL:
 536                if (copy_from_user (&reg, argp, sizeof (reg)))
 537                        return -EFAULT;
 538                parport_write_control (port, reg);
 539                return 0;
 540
 541        case PPWDATA:
 542                if (copy_from_user (&reg, argp, sizeof (reg)))
 543                        return -EFAULT;
 544                parport_write_data (port, reg);
 545                return 0;
 546
 547        case PPFCONTROL:
 548                if (copy_from_user (&mask, argp,
 549                                    sizeof (mask)))
 550                        return -EFAULT;
 551                if (copy_from_user (&reg, 1 + (unsigned char __user *) arg,
 552                                    sizeof (reg)))
 553                        return -EFAULT;
 554                parport_frob_control (port, mask, reg);
 555                return 0;
 556
 557        case PPDATADIR:
 558                if (copy_from_user (&mode, argp, sizeof (mode)))
 559                        return -EFAULT;
 560                if (mode)
 561                        port->ops->data_reverse (port);
 562                else
 563                        port->ops->data_forward (port);
 564                return 0;
 565
 566        case PPNEGOT:
 567                if (copy_from_user (&mode, argp, sizeof (mode)))
 568                        return -EFAULT;
 569                switch ((ret = parport_negotiate (port, mode))) {
 570                case 0: break;
 571                case -1: /* handshake failed, peripheral not IEEE 1284 */
 572                        ret = -EIO;
 573                        break;
 574                case 1:  /* handshake succeeded, peripheral rejected mode */
 575                        ret = -ENXIO;
 576                        break;
 577                }
 578                pp_enable_irq (pp);
 579                return ret;
 580
 581        case PPWCTLONIRQ:
 582                if (copy_from_user (&reg, argp, sizeof (reg)))
 583                        return -EFAULT;
 584
 585                /* Remember what to set the control lines to, for next
 586                 * time we get an interrupt. */
 587                pp->irqctl = reg;
 588                pp->irqresponse = 1;
 589                return 0;
 590
 591        case PPCLRIRQ:
 592                ret = atomic_read (&pp->irqc);
 593                if (copy_to_user (argp, &ret, sizeof (ret)))
 594                        return -EFAULT;
 595                atomic_sub (ret, &pp->irqc);
 596                return 0;
 597
 598        case PPSETTIME:
 599                if (copy_from_user (&par_timeout, argp, sizeof(struct timeval))) {
 600                        return -EFAULT;
 601                }
 602                /* Convert to jiffies, place in pp->pdev->timeout */
 603                if ((par_timeout.tv_sec < 0) || (par_timeout.tv_usec < 0)) {
 604                        return -EINVAL;
 605                }
 606                to_jiffies = ROUND_UP(par_timeout.tv_usec, 1000000/HZ);
 607                to_jiffies += par_timeout.tv_sec * (long)HZ;
 608                if (to_jiffies <= 0) {
 609                        return -EINVAL;
 610                }
 611                pp->pdev->timeout = to_jiffies;
 612                return 0;
 613
 614        case PPGETTIME:
 615                to_jiffies = pp->pdev->timeout;
 616                par_timeout.tv_sec = to_jiffies / HZ;
 617                par_timeout.tv_usec = (to_jiffies % (long)HZ) * (1000000/HZ);
 618                if (copy_to_user (argp, &par_timeout, sizeof(struct timeval)))
 619                        return -EFAULT;
 620                return 0;
 621
 622        default:
 623                pr_debug(CHRDEV "%x: What? (cmd=0x%x)\n", minor, cmd);
 624                return -EINVAL;
 625        }
 626
 627        /* Keep the compiler happy */
 628        return 0;
 629}
 630
 631static long pp_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
 632{
 633        long ret;
 634        lock_kernel();
 635        ret = pp_do_ioctl(file, cmd, arg);
 636        unlock_kernel();
 637        return ret;
 638}
 639
 640static int pp_open (struct inode * inode, struct file * file)
 641{
 642        unsigned int minor = iminor(inode);
 643        struct pp_struct *pp;
 644
 645        cycle_kernel_lock();
 646        if (minor >= PARPORT_MAX)
 647                return -ENXIO;
 648
 649        pp = kmalloc (sizeof (struct pp_struct), GFP_KERNEL);
 650        if (!pp)
 651                return -ENOMEM;
 652
 653        pp->state.mode = IEEE1284_MODE_COMPAT;
 654        pp->state.phase = init_phase (pp->state.mode);
 655        pp->flags = 0;
 656        pp->irqresponse = 0;
 657        atomic_set (&pp->irqc, 0);
 658        init_waitqueue_head (&pp->irq_wait);
 659
 660        /* Defer the actual device registration until the first claim.
 661         * That way, we know whether or not the driver wants to have
 662         * exclusive access to the port (PPEXCL).
 663         */
 664        pp->pdev = NULL;
 665        file->private_data = pp;
 666
 667        return 0;
 668}
 669
 670static int pp_release (struct inode * inode, struct file * file)
 671{
 672        unsigned int minor = iminor(inode);
 673        struct pp_struct *pp = file->private_data;
 674        int compat_negot;
 675
 676        compat_negot = 0;
 677        if (!(pp->flags & PP_CLAIMED) && pp->pdev &&
 678            (pp->state.mode != IEEE1284_MODE_COMPAT)) {
 679                struct ieee1284_info *info;
 680
 681                /* parport released, but not in compatibility mode */
 682                parport_claim_or_block (pp->pdev);
 683                pp->flags |= PP_CLAIMED;
 684                info = &pp->pdev->port->ieee1284;
 685                pp->saved_state.mode = info->mode;
 686                pp->saved_state.phase = info->phase;
 687                info->mode = pp->state.mode;
 688                info->phase = pp->state.phase;
 689                compat_negot = 1;
 690        } else if ((pp->flags & PP_CLAIMED) && pp->pdev &&
 691            (pp->pdev->port->ieee1284.mode != IEEE1284_MODE_COMPAT)) {
 692                compat_negot = 2;
 693        }
 694        if (compat_negot) {
 695                parport_negotiate (pp->pdev->port, IEEE1284_MODE_COMPAT);
 696                pr_debug(CHRDEV "%x: negotiated back to compatibility "
 697                        "mode because user-space forgot\n", minor);
 698        }
 699
 700        if (pp->flags & PP_CLAIMED) {
 701                struct ieee1284_info *info;
 702
 703                info = &pp->pdev->port->ieee1284;
 704                pp->state.mode = info->mode;
 705                pp->state.phase = info->phase;
 706                info->mode = pp->saved_state.mode;
 707                info->phase = pp->saved_state.phase;
 708                parport_release (pp->pdev);
 709                if (compat_negot != 1) {
 710                        pr_debug(CHRDEV "%x: released pardevice "
 711                                "because user-space forgot\n", minor);
 712                }
 713        }
 714
 715        if (pp->pdev) {
 716                const char *name = pp->pdev->name;
 717                parport_unregister_device (pp->pdev);
 718                kfree (name);
 719                pp->pdev = NULL;
 720                pr_debug(CHRDEV "%x: unregistered pardevice\n", minor);
 721        }
 722
 723        kfree (pp);
 724
 725        return 0;
 726}
 727
 728/* No kernel lock held - fine */
 729static unsigned int pp_poll (struct file * file, poll_table * wait)
 730{
 731        struct pp_struct *pp = file->private_data;
 732        unsigned int mask = 0;
 733
 734        poll_wait (file, &pp->irq_wait, wait);
 735        if (atomic_read (&pp->irqc))
 736                mask |= POLLIN | POLLRDNORM;
 737
 738        return mask;
 739}
 740
 741static struct class *ppdev_class;
 742
 743static const struct file_operations pp_fops = {
 744        .owner          = THIS_MODULE,
 745        .llseek         = no_llseek,
 746        .read           = pp_read,
 747        .write          = pp_write,
 748        .poll           = pp_poll,
 749        .unlocked_ioctl = pp_ioctl,
 750        .open           = pp_open,
 751        .release        = pp_release,
 752};
 753
 754static void pp_attach(struct parport *port)
 755{
 756        device_create(ppdev_class, port->dev, MKDEV(PP_MAJOR, port->number),
 757                      NULL, "parport%d", port->number);
 758}
 759
 760static void pp_detach(struct parport *port)
 761{
 762        device_destroy(ppdev_class, MKDEV(PP_MAJOR, port->number));
 763}
 764
 765static struct parport_driver pp_driver = {
 766        .name           = CHRDEV,
 767        .attach         = pp_attach,
 768        .detach         = pp_detach,
 769};
 770
 771static int __init ppdev_init (void)
 772{
 773        int err = 0;
 774
 775        if (register_chrdev (PP_MAJOR, CHRDEV, &pp_fops)) {
 776                printk (KERN_WARNING CHRDEV ": unable to get major %d\n",
 777                        PP_MAJOR);
 778                return -EIO;
 779        }
 780        ppdev_class = class_create(THIS_MODULE, CHRDEV);
 781        if (IS_ERR(ppdev_class)) {
 782                err = PTR_ERR(ppdev_class);
 783                goto out_chrdev;
 784        }
 785        if (parport_register_driver(&pp_driver)) {
 786                printk (KERN_WARNING CHRDEV ": unable to register with parport\n");
 787                goto out_class;
 788        }
 789
 790        printk (KERN_INFO PP_VERSION "\n");
 791        goto out;
 792
 793out_class:
 794        class_destroy(ppdev_class);
 795out_chrdev:
 796        unregister_chrdev(PP_MAJOR, CHRDEV);
 797out:
 798        return err;
 799}
 800
 801static void __exit ppdev_cleanup (void)
 802{
 803        /* Clean up all parport stuff */
 804        parport_unregister_driver(&pp_driver);
 805        class_destroy(ppdev_class);
 806        unregister_chrdev (PP_MAJOR, CHRDEV);
 807}
 808
 809module_init(ppdev_init);
 810module_exit(ppdev_cleanup);
 811
 812MODULE_LICENSE("GPL");
 813MODULE_ALIAS_CHARDEV_MAJOR(PP_MAJOR);
 814