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