linux/Documentation/parport-lowlevel.txt
<<
>>
Prefs
   1===============================
   2PARPORT interface documentation
   3===============================
   4
   5:Time-stamp: <2000-02-24 13:30:20 twaugh>
   6
   7Described here are the following functions:
   8
   9Global functions::
  10  parport_register_driver
  11  parport_unregister_driver
  12  parport_enumerate
  13  parport_register_device
  14  parport_unregister_device
  15  parport_claim
  16  parport_claim_or_block
  17  parport_release
  18  parport_yield
  19  parport_yield_blocking
  20  parport_wait_peripheral
  21  parport_poll_peripheral
  22  parport_wait_event
  23  parport_negotiate
  24  parport_read
  25  parport_write
  26  parport_open
  27  parport_close
  28  parport_device_id
  29  parport_device_coords
  30  parport_find_class
  31  parport_find_device
  32  parport_set_timeout
  33
  34Port functions (can be overridden by low-level drivers):
  35
  36  SPP::
  37    port->ops->read_data
  38    port->ops->write_data
  39    port->ops->read_status
  40    port->ops->read_control
  41    port->ops->write_control
  42    port->ops->frob_control
  43    port->ops->enable_irq
  44    port->ops->disable_irq
  45    port->ops->data_forward
  46    port->ops->data_reverse
  47
  48  EPP::
  49    port->ops->epp_write_data
  50    port->ops->epp_read_data
  51    port->ops->epp_write_addr
  52    port->ops->epp_read_addr
  53
  54  ECP::
  55    port->ops->ecp_write_data
  56    port->ops->ecp_read_data
  57    port->ops->ecp_write_addr
  58
  59  Other::
  60    port->ops->nibble_read_data
  61    port->ops->byte_read_data
  62    port->ops->compat_write_data
  63
  64The parport subsystem comprises ``parport`` (the core port-sharing
  65code), and a variety of low-level drivers that actually do the port
  66accesses.  Each low-level driver handles a particular style of port
  67(PC, Amiga, and so on).
  68
  69The parport interface to the device driver author can be broken down
  70into global functions and port functions.
  71
  72The global functions are mostly for communicating between the device
  73driver and the parport subsystem: acquiring a list of available ports,
  74claiming a port for exclusive use, and so on.  They also include
  75``generic`` functions for doing standard things that will work on any
  76IEEE 1284-capable architecture.
  77
  78The port functions are provided by the low-level drivers, although the
  79core parport module provides generic ``defaults`` for some routines.
  80The port functions can be split into three groups: SPP, EPP, and ECP.
  81
  82SPP (Standard Parallel Port) functions modify so-called ``SPP``
  83registers: data, status, and control.  The hardware may not actually
  84have registers exactly like that, but the PC does and this interface is
  85modelled after common PC implementations.  Other low-level drivers may
  86be able to emulate most of the functionality.
  87
  88EPP (Enhanced Parallel Port) functions are provided for reading and
  89writing in IEEE 1284 EPP mode, and ECP (Extended Capabilities Port)
  90functions are used for IEEE 1284 ECP mode. (What about BECP? Does
  91anyone care?)
  92
  93Hardware assistance for EPP and/or ECP transfers may or may not be
  94available, and if it is available it may or may not be used.  If
  95hardware is not used, the transfer will be software-driven.  In order
  96to cope with peripherals that only tenuously support IEEE 1284, a
  97low-level driver specific function is provided, for altering 'fudge
  98factors'.
  99
 100Global functions
 101================
 102
 103parport_register_driver - register a device driver with parport
 104---------------------------------------------------------------
 105
 106SYNOPSIS
 107^^^^^^^^
 108
 109::
 110
 111        #include <linux/parport.h>
 112
 113        struct parport_driver {
 114                const char *name;
 115                void (*attach) (struct parport *);
 116                void (*detach) (struct parport *);
 117                struct parport_driver *next;
 118        };
 119        int parport_register_driver (struct parport_driver *driver);
 120
 121DESCRIPTION
 122^^^^^^^^^^^
 123
 124In order to be notified about parallel ports when they are detected,
 125parport_register_driver should be called.  Your driver will
 126immediately be notified of all ports that have already been detected,
 127and of each new port as low-level drivers are loaded.
 128
 129A ``struct parport_driver`` contains the textual name of your driver,
 130a pointer to a function to handle new ports, and a pointer to a
 131function to handle ports going away due to a low-level driver
 132unloading.  Ports will only be detached if they are not being used
 133(i.e. there are no devices registered on them).
 134
 135The visible parts of the ``struct parport *`` argument given to
 136attach/detach are::
 137
 138        struct parport
 139        {
 140                struct parport *next; /* next parport in list */
 141                const char *name;     /* port's name */
 142                unsigned int modes;   /* bitfield of hardware modes */
 143                struct parport_device_info probe_info;
 144                                /* IEEE1284 info */
 145                int number;           /* parport index */
 146                struct parport_operations *ops;
 147                ...
 148        };
 149
 150There are other members of the structure, but they should not be
 151touched.
 152
 153The ``modes`` member summarises the capabilities of the underlying
 154hardware.  It consists of flags which may be bitwise-ored together:
 155
 156  ============================= ===============================================
 157  PARPORT_MODE_PCSPP            IBM PC registers are available,
 158                                i.e. functions that act on data,
 159                                control and status registers are
 160                                probably writing directly to the
 161                                hardware.
 162  PARPORT_MODE_TRISTATE         The data drivers may be turned off.
 163                                This allows the data lines to be used
 164                                for reverse (peripheral to host)
 165                                transfers.
 166  PARPORT_MODE_COMPAT           The hardware can assist with
 167                                compatibility-mode (printer)
 168                                transfers, i.e. compat_write_block.
 169  PARPORT_MODE_EPP              The hardware can assist with EPP
 170                                transfers.
 171  PARPORT_MODE_ECP              The hardware can assist with ECP
 172                                transfers.
 173  PARPORT_MODE_DMA              The hardware can use DMA, so you might
 174                                want to pass ISA DMA-able memory
 175                                (i.e. memory allocated using the
 176                                GFP_DMA flag with kmalloc) to the
 177                                low-level driver in order to take
 178                                advantage of it.
 179  ============================= ===============================================
 180
 181There may be other flags in ``modes`` as well.
 182
 183The contents of ``modes`` is advisory only.  For example, if the
 184hardware is capable of DMA, and PARPORT_MODE_DMA is in ``modes``, it
 185doesn't necessarily mean that DMA will always be used when possible.
 186Similarly, hardware that is capable of assisting ECP transfers won't
 187necessarily be used.
 188
 189RETURN VALUE
 190^^^^^^^^^^^^
 191
 192Zero on success, otherwise an error code.
 193
 194ERRORS
 195^^^^^^
 196
 197None. (Can it fail? Why return int?)
 198
 199EXAMPLE
 200^^^^^^^
 201
 202::
 203
 204        static void lp_attach (struct parport *port)
 205        {
 206                ...
 207                private = kmalloc (...);
 208                dev[count++] = parport_register_device (...);
 209                ...
 210        }
 211
 212        static void lp_detach (struct parport *port)
 213        {
 214                ...
 215        }
 216
 217        static struct parport_driver lp_driver = {
 218                "lp",
 219                lp_attach,
 220                lp_detach,
 221                NULL /* always put NULL here */
 222        };
 223
 224        int lp_init (void)
 225        {
 226                ...
 227                if (parport_register_driver (&lp_driver)) {
 228                        /* Failed; nothing we can do. */
 229                        return -EIO;
 230                }
 231                ...
 232        }
 233
 234
 235SEE ALSO
 236^^^^^^^^
 237
 238parport_unregister_driver, parport_register_device, parport_enumerate
 239
 240
 241
 242parport_unregister_driver - tell parport to forget about this driver
 243--------------------------------------------------------------------
 244
 245SYNOPSIS
 246^^^^^^^^
 247
 248::
 249
 250        #include <linux/parport.h>
 251
 252        struct parport_driver {
 253                const char *name;
 254                void (*attach) (struct parport *);
 255                void (*detach) (struct parport *);
 256                struct parport_driver *next;
 257        };
 258        void parport_unregister_driver (struct parport_driver *driver);
 259
 260DESCRIPTION
 261^^^^^^^^^^^
 262
 263This tells parport not to notify the device driver of new ports or of
 264ports going away.  Registered devices belonging to that driver are NOT
 265unregistered: parport_unregister_device must be used for each one.
 266
 267EXAMPLE
 268^^^^^^^
 269
 270::
 271
 272        void cleanup_module (void)
 273        {
 274                ...
 275                /* Stop notifications. */
 276                parport_unregister_driver (&lp_driver);
 277
 278                /* Unregister devices. */
 279                for (i = 0; i < NUM_DEVS; i++)
 280                        parport_unregister_device (dev[i]);
 281                ...
 282        }
 283
 284SEE ALSO
 285^^^^^^^^
 286
 287parport_register_driver, parport_enumerate
 288
 289
 290
 291parport_enumerate - retrieve a list of parallel ports (DEPRECATED)
 292------------------------------------------------------------------
 293
 294SYNOPSIS
 295^^^^^^^^
 296
 297::
 298
 299        #include <linux/parport.h>
 300
 301        struct parport *parport_enumerate (void);
 302
 303DESCRIPTION
 304^^^^^^^^^^^
 305
 306Retrieve the first of a list of valid parallel ports for this machine.
 307Successive parallel ports can be found using the ``struct parport
 308*next`` element of the ``struct parport *`` that is returned.  If ``next``
 309is NULL, there are no more parallel ports in the list.  The number of
 310ports in the list will not exceed PARPORT_MAX.
 311
 312RETURN VALUE
 313^^^^^^^^^^^^
 314
 315A ``struct parport *`` describing a valid parallel port for the machine,
 316or NULL if there are none.
 317
 318ERRORS
 319^^^^^^
 320
 321This function can return NULL to indicate that there are no parallel
 322ports to use.
 323
 324EXAMPLE
 325^^^^^^^
 326
 327::
 328
 329        int detect_device (void)
 330        {
 331                struct parport *port;
 332
 333                for (port = parport_enumerate ();
 334                port != NULL;
 335                port = port->next) {
 336                        /* Try to detect a device on the port... */
 337                        ...
 338                }
 339                }
 340
 341                ...
 342        }
 343
 344NOTES
 345^^^^^
 346
 347parport_enumerate is deprecated; parport_register_driver should be
 348used instead.
 349
 350SEE ALSO
 351^^^^^^^^
 352
 353parport_register_driver, parport_unregister_driver
 354
 355
 356
 357parport_register_device - register to use a port
 358------------------------------------------------
 359
 360SYNOPSIS
 361^^^^^^^^
 362
 363::
 364
 365        #include <linux/parport.h>
 366
 367        typedef int (*preempt_func) (void *handle);
 368        typedef void (*wakeup_func) (void *handle);
 369        typedef int (*irq_func) (int irq, void *handle, struct pt_regs *);
 370
 371        struct pardevice *parport_register_device(struct parport *port,
 372                                                  const char *name,
 373                                                  preempt_func preempt,
 374                                                  wakeup_func wakeup,
 375                                                  irq_func irq,
 376                                                  int flags,
 377                                                  void *handle);
 378
 379DESCRIPTION
 380^^^^^^^^^^^
 381
 382Use this function to register your device driver on a parallel port
 383(``port``).  Once you have done that, you will be able to use
 384parport_claim and parport_release in order to use the port.
 385
 386The (``name``) argument is the name of the device that appears in /proc
 387filesystem. The string must be valid for the whole lifetime of the
 388device (until parport_unregister_device is called).
 389
 390This function will register three callbacks into your driver:
 391``preempt``, ``wakeup`` and ``irq``.  Each of these may be NULL in order to
 392indicate that you do not want a callback.
 393
 394When the ``preempt`` function is called, it is because another driver
 395wishes to use the parallel port.  The ``preempt`` function should return
 396non-zero if the parallel port cannot be released yet -- if zero is
 397returned, the port is lost to another driver and the port must be
 398re-claimed before use.
 399
 400The ``wakeup`` function is called once another driver has released the
 401port and no other driver has yet claimed it.  You can claim the
 402parallel port from within the ``wakeup`` function (in which case the
 403claim is guaranteed to succeed), or choose not to if you don't need it
 404now.
 405
 406If an interrupt occurs on the parallel port your driver has claimed,
 407the ``irq`` function will be called. (Write something about shared
 408interrupts here.)
 409
 410The ``handle`` is a pointer to driver-specific data, and is passed to
 411the callback functions.
 412
 413``flags`` may be a bitwise combination of the following flags:
 414
 415  ===================== =================================================
 416        Flag            Meaning
 417  ===================== =================================================
 418  PARPORT_DEV_EXCL      The device cannot share the parallel port at all.
 419                        Use this only when absolutely necessary.
 420  ===================== =================================================
 421
 422The typedefs are not actually defined -- they are only shown in order
 423to make the function prototype more readable.
 424
 425The visible parts of the returned ``struct pardevice`` are::
 426
 427        struct pardevice {
 428                struct parport *port;   /* Associated port */
 429                void *private;          /* Device driver's 'handle' */
 430                ...
 431        };
 432
 433RETURN VALUE
 434^^^^^^^^^^^^
 435
 436A ``struct pardevice *``: a handle to the registered parallel port
 437device that can be used for parport_claim, parport_release, etc.
 438
 439ERRORS
 440^^^^^^
 441
 442A return value of NULL indicates that there was a problem registering
 443a device on that port.
 444
 445EXAMPLE
 446^^^^^^^
 447
 448::
 449
 450        static int preempt (void *handle)
 451        {
 452                if (busy_right_now)
 453                        return 1;
 454
 455                must_reclaim_port = 1;
 456                return 0;
 457        }
 458
 459        static void wakeup (void *handle)
 460        {
 461                struct toaster *private = handle;
 462                struct pardevice *dev = private->dev;
 463                if (!dev) return; /* avoid races */
 464
 465                if (want_port)
 466                        parport_claim (dev);
 467        }
 468
 469        static int toaster_detect (struct toaster *private, struct parport *port)
 470        {
 471                private->dev = parport_register_device (port, "toaster", preempt,
 472                                                        wakeup, NULL, 0,
 473                                                        private);
 474                if (!private->dev)
 475                        /* Couldn't register with parport. */
 476                        return -EIO;
 477
 478                must_reclaim_port = 0;
 479                busy_right_now = 1;
 480                parport_claim_or_block (private->dev);
 481                ...
 482                /* Don't need the port while the toaster warms up. */
 483                busy_right_now = 0;
 484                ...
 485                busy_right_now = 1;
 486                if (must_reclaim_port) {
 487                        parport_claim_or_block (private->dev);
 488                        must_reclaim_port = 0;
 489                }
 490                ...
 491        }
 492
 493SEE ALSO
 494^^^^^^^^
 495
 496parport_unregister_device, parport_claim
 497
 498
 499
 500parport_unregister_device - finish using a port
 501-----------------------------------------------
 502
 503SYNPOPSIS
 504
 505::
 506
 507        #include <linux/parport.h>
 508
 509        void parport_unregister_device (struct pardevice *dev);
 510
 511DESCRIPTION
 512^^^^^^^^^^^
 513
 514This function is the opposite of parport_register_device.  After using
 515parport_unregister_device, ``dev`` is no longer a valid device handle.
 516
 517You should not unregister a device that is currently claimed, although
 518if you do it will be released automatically.
 519
 520EXAMPLE
 521^^^^^^^
 522
 523::
 524
 525        ...
 526        kfree (dev->private); /* before we lose the pointer */
 527        parport_unregister_device (dev);
 528        ...
 529
 530SEE ALSO
 531^^^^^^^^
 532
 533
 534parport_unregister_driver
 535
 536parport_claim, parport_claim_or_block - claim the parallel port for a device
 537----------------------------------------------------------------------------
 538
 539SYNOPSIS
 540^^^^^^^^
 541
 542::
 543
 544        #include <linux/parport.h>
 545
 546        int parport_claim (struct pardevice *dev);
 547        int parport_claim_or_block (struct pardevice *dev);
 548
 549DESCRIPTION
 550^^^^^^^^^^^
 551
 552These functions attempt to gain control of the parallel port on which
 553``dev`` is registered.  ``parport_claim`` does not block, but
 554``parport_claim_or_block`` may do. (Put something here about blocking
 555interruptibly or non-interruptibly.)
 556
 557You should not try to claim a port that you have already claimed.
 558
 559RETURN VALUE
 560^^^^^^^^^^^^
 561
 562A return value of zero indicates that the port was successfully
 563claimed, and the caller now has possession of the parallel port.
 564
 565If ``parport_claim_or_block`` blocks before returning successfully, the
 566return value is positive.
 567
 568ERRORS
 569^^^^^^
 570
 571========== ==========================================================
 572  -EAGAIN  The port is unavailable at the moment, but another attempt
 573           to claim it may succeed.
 574========== ==========================================================
 575
 576SEE ALSO
 577^^^^^^^^
 578
 579
 580parport_release
 581
 582parport_release - release the parallel port
 583-------------------------------------------
 584
 585SYNOPSIS
 586^^^^^^^^
 587
 588::
 589
 590        #include <linux/parport.h>
 591
 592        void parport_release (struct pardevice *dev);
 593
 594DESCRIPTION
 595^^^^^^^^^^^
 596
 597Once a parallel port device has been claimed, it can be released using
 598``parport_release``.  It cannot fail, but you should not release a
 599device that you do not have possession of.
 600
 601EXAMPLE
 602^^^^^^^
 603
 604::
 605
 606        static size_t write (struct pardevice *dev, const void *buf,
 607                        size_t len)
 608        {
 609                ...
 610                written = dev->port->ops->write_ecp_data (dev->port, buf,
 611                                                        len);
 612                parport_release (dev);
 613                ...
 614        }
 615
 616
 617SEE ALSO
 618^^^^^^^^
 619
 620change_mode, parport_claim, parport_claim_or_block, parport_yield
 621
 622
 623
 624parport_yield, parport_yield_blocking - temporarily release a parallel port
 625---------------------------------------------------------------------------
 626
 627SYNOPSIS
 628^^^^^^^^
 629
 630::
 631
 632        #include <linux/parport.h>
 633
 634        int parport_yield (struct pardevice *dev)
 635        int parport_yield_blocking (struct pardevice *dev);
 636
 637DESCRIPTION
 638^^^^^^^^^^^
 639
 640When a driver has control of a parallel port, it may allow another
 641driver to temporarily ``borrow`` it.  ``parport_yield`` does not block;
 642``parport_yield_blocking`` may do.
 643
 644RETURN VALUE
 645^^^^^^^^^^^^
 646
 647A return value of zero indicates that the caller still owns the port
 648and the call did not block.
 649
 650A positive return value from ``parport_yield_blocking`` indicates that
 651the caller still owns the port and the call blocked.
 652
 653A return value of -EAGAIN indicates that the caller no longer owns the
 654port, and it must be re-claimed before use.
 655
 656ERRORS
 657^^^^^^
 658
 659========= ==========================================================
 660  -EAGAIN  Ownership of the parallel port was given away.
 661========= ==========================================================
 662
 663SEE ALSO
 664^^^^^^^^
 665
 666parport_release
 667
 668
 669
 670parport_wait_peripheral - wait for status lines, up to 35ms
 671-----------------------------------------------------------
 672
 673SYNOPSIS
 674^^^^^^^^
 675
 676::
 677
 678        #include <linux/parport.h>
 679
 680        int parport_wait_peripheral (struct parport *port,
 681                                     unsigned char mask,
 682                                     unsigned char val);
 683
 684DESCRIPTION
 685^^^^^^^^^^^
 686
 687Wait for the status lines in mask to match the values in val.
 688
 689RETURN VALUE
 690^^^^^^^^^^^^
 691
 692======== ==========================================================
 693 -EINTR  a signal is pending
 694      0  the status lines in mask have values in val
 695      1  timed out while waiting (35ms elapsed)
 696======== ==========================================================
 697
 698SEE ALSO
 699^^^^^^^^
 700
 701parport_poll_peripheral
 702
 703
 704
 705parport_poll_peripheral - wait for status lines, in usec
 706--------------------------------------------------------
 707
 708SYNOPSIS
 709^^^^^^^^
 710
 711::
 712
 713        #include <linux/parport.h>
 714
 715        int parport_poll_peripheral (struct parport *port,
 716                                     unsigned char mask,
 717                                     unsigned char val,
 718                                     int usec);
 719
 720DESCRIPTION
 721^^^^^^^^^^^
 722
 723Wait for the status lines in mask to match the values in val.
 724
 725RETURN VALUE
 726^^^^^^^^^^^^
 727
 728======== ==========================================================
 729 -EINTR  a signal is pending
 730      0  the status lines in mask have values in val
 731      1  timed out while waiting (usec microseconds have elapsed)
 732======== ==========================================================
 733
 734SEE ALSO
 735^^^^^^^^
 736
 737parport_wait_peripheral
 738
 739
 740
 741parport_wait_event - wait for an event on a port
 742------------------------------------------------
 743
 744SYNOPSIS
 745^^^^^^^^
 746
 747::
 748
 749        #include <linux/parport.h>
 750
 751        int parport_wait_event (struct parport *port, signed long timeout)
 752
 753DESCRIPTION
 754^^^^^^^^^^^
 755
 756Wait for an event (e.g. interrupt) on a port.  The timeout is in
 757jiffies.
 758
 759RETURN VALUE
 760^^^^^^^^^^^^
 761
 762======= ==========================================================
 763      0  success
 764     <0  error (exit as soon as possible)
 765     >0  timed out
 766======= ==========================================================
 767
 768parport_negotiate - perform IEEE 1284 negotiation
 769-------------------------------------------------
 770
 771SYNOPSIS
 772^^^^^^^^
 773
 774::
 775
 776        #include <linux/parport.h>
 777
 778        int parport_negotiate (struct parport *, int mode);
 779
 780DESCRIPTION
 781^^^^^^^^^^^
 782
 783Perform IEEE 1284 negotiation.
 784
 785RETURN VALUE
 786^^^^^^^^^^^^
 787
 788======= ==========================================================
 789     0  handshake OK; IEEE 1284 peripheral and mode available
 790    -1  handshake failed; peripheral not compliant (or none present)
 791     1  handshake OK; IEEE 1284 peripheral present but mode not
 792        available
 793======= ==========================================================
 794
 795SEE ALSO
 796^^^^^^^^
 797
 798parport_read, parport_write
 799
 800
 801
 802parport_read - read data from device
 803------------------------------------
 804
 805SYNOPSIS
 806^^^^^^^^
 807
 808::
 809
 810        #include <linux/parport.h>
 811
 812        ssize_t parport_read (struct parport *, void *buf, size_t len);
 813
 814DESCRIPTION
 815^^^^^^^^^^^
 816
 817Read data from device in current IEEE 1284 transfer mode.  This only
 818works for modes that support reverse data transfer.
 819
 820RETURN VALUE
 821^^^^^^^^^^^^
 822
 823If negative, an error code; otherwise the number of bytes transferred.
 824
 825SEE ALSO
 826^^^^^^^^
 827
 828parport_write, parport_negotiate
 829
 830
 831
 832parport_write - write data to device
 833------------------------------------
 834
 835SYNOPSIS
 836^^^^^^^^
 837
 838::
 839
 840        #include <linux/parport.h>
 841
 842        ssize_t parport_write (struct parport *, const void *buf, size_t len);
 843
 844DESCRIPTION
 845^^^^^^^^^^^
 846
 847Write data to device in current IEEE 1284 transfer mode.  This only
 848works for modes that support forward data transfer.
 849
 850RETURN VALUE
 851^^^^^^^^^^^^
 852
 853If negative, an error code; otherwise the number of bytes transferred.
 854
 855SEE ALSO
 856^^^^^^^^
 857
 858parport_read, parport_negotiate
 859
 860
 861
 862parport_open - register device for particular device number
 863-----------------------------------------------------------
 864
 865SYNOPSIS
 866^^^^^^^^
 867
 868::
 869
 870        #include <linux/parport.h>
 871
 872        struct pardevice *parport_open (int devnum, const char *name,
 873                                        int (*pf) (void *),
 874                                        void (*kf) (void *),
 875                                        void (*irqf) (int, void *,
 876                                                      struct pt_regs *),
 877                                        int flags, void *handle);
 878
 879DESCRIPTION
 880^^^^^^^^^^^
 881
 882This is like parport_register_device but takes a device number instead
 883of a pointer to a struct parport.
 884
 885RETURN VALUE
 886^^^^^^^^^^^^
 887
 888See parport_register_device.  If no device is associated with devnum,
 889NULL is returned.
 890
 891SEE ALSO
 892^^^^^^^^
 893
 894parport_register_device
 895
 896
 897
 898parport_close - unregister device for particular device number
 899--------------------------------------------------------------
 900
 901SYNOPSIS
 902^^^^^^^^
 903
 904::
 905
 906        #include <linux/parport.h>
 907
 908        void parport_close (struct pardevice *dev);
 909
 910DESCRIPTION
 911^^^^^^^^^^^
 912
 913This is the equivalent of parport_unregister_device for parport_open.
 914
 915SEE ALSO
 916^^^^^^^^
 917
 918parport_unregister_device, parport_open
 919
 920
 921
 922parport_device_id - obtain IEEE 1284 Device ID
 923----------------------------------------------
 924
 925SYNOPSIS
 926^^^^^^^^
 927
 928::
 929
 930        #include <linux/parport.h>
 931
 932        ssize_t parport_device_id (int devnum, char *buffer, size_t len);
 933
 934DESCRIPTION
 935^^^^^^^^^^^
 936
 937Obtains the IEEE 1284 Device ID associated with a given device.
 938
 939RETURN VALUE
 940^^^^^^^^^^^^
 941
 942If negative, an error code; otherwise, the number of bytes of buffer
 943that contain the device ID.  The format of the device ID is as
 944follows::
 945
 946        [length][ID]
 947
 948The first two bytes indicate the inclusive length of the entire Device
 949ID, and are in big-endian order.  The ID is a sequence of pairs of the
 950form::
 951
 952        key:value;
 953
 954NOTES
 955^^^^^
 956
 957Many devices have ill-formed IEEE 1284 Device IDs.
 958
 959SEE ALSO
 960^^^^^^^^
 961
 962parport_find_class, parport_find_device
 963
 964
 965
 966parport_device_coords - convert device number to device coordinates
 967-------------------------------------------------------------------
 968
 969SYNOPSIS
 970^^^^^^^^
 971
 972::
 973
 974        #include <linux/parport.h>
 975
 976        int parport_device_coords (int devnum, int *parport, int *mux,
 977                                   int *daisy);
 978
 979DESCRIPTION
 980^^^^^^^^^^^
 981
 982Convert between device number (zero-based) and device coordinates
 983(port, multiplexor, daisy chain address).
 984
 985RETURN VALUE
 986^^^^^^^^^^^^
 987
 988Zero on success, in which case the coordinates are (``*parport``, ``*mux``,
 989``*daisy``).
 990
 991SEE ALSO
 992^^^^^^^^
 993
 994parport_open, parport_device_id
 995
 996
 997
 998parport_find_class - find a device by its class
 999-----------------------------------------------
1000
1001SYNOPSIS
1002^^^^^^^^
1003
1004::
1005
1006        #include <linux/parport.h>
1007
1008        typedef enum {
1009                PARPORT_CLASS_LEGACY = 0,       /* Non-IEEE1284 device */
1010                PARPORT_CLASS_PRINTER,
1011                PARPORT_CLASS_MODEM,
1012                PARPORT_CLASS_NET,
1013                PARPORT_CLASS_HDC,              /* Hard disk controller */
1014                PARPORT_CLASS_PCMCIA,
1015                PARPORT_CLASS_MEDIA,            /* Multimedia device */
1016                PARPORT_CLASS_FDC,              /* Floppy disk controller */
1017                PARPORT_CLASS_PORTS,
1018                PARPORT_CLASS_SCANNER,
1019                PARPORT_CLASS_DIGCAM,
1020                PARPORT_CLASS_OTHER,            /* Anything else */
1021                PARPORT_CLASS_UNSPEC,           /* No CLS field in ID */
1022                PARPORT_CLASS_SCSIADAPTER
1023        } parport_device_class;
1024
1025        int parport_find_class (parport_device_class cls, int from);
1026
1027DESCRIPTION
1028^^^^^^^^^^^
1029
1030Find a device by class.  The search starts from device number from+1.
1031
1032RETURN VALUE
1033^^^^^^^^^^^^
1034
1035The device number of the next device in that class, or -1 if no such
1036device exists.
1037
1038NOTES
1039^^^^^
1040
1041Example usage::
1042
1043        int devnum = -1;
1044        while ((devnum = parport_find_class (PARPORT_CLASS_DIGCAM, devnum)) != -1) {
1045                struct pardevice *dev = parport_open (devnum, ...);
1046                ...
1047        }
1048
1049SEE ALSO
1050^^^^^^^^
1051
1052parport_find_device, parport_open, parport_device_id
1053
1054
1055
1056parport_find_device - find a device by its class
1057------------------------------------------------
1058
1059SYNOPSIS
1060^^^^^^^^
1061
1062::
1063
1064        #include <linux/parport.h>
1065
1066        int parport_find_device (const char *mfg, const char *mdl, int from);
1067
1068DESCRIPTION
1069^^^^^^^^^^^
1070
1071Find a device by vendor and model.  The search starts from device
1072number from+1.
1073
1074RETURN VALUE
1075^^^^^^^^^^^^
1076
1077The device number of the next device matching the specifications, or
1078-1 if no such device exists.
1079
1080NOTES
1081^^^^^
1082
1083Example usage::
1084
1085        int devnum = -1;
1086        while ((devnum = parport_find_device ("IOMEGA", "ZIP+", devnum)) != -1) {
1087                struct pardevice *dev = parport_open (devnum, ...);
1088                ...
1089        }
1090
1091SEE ALSO
1092^^^^^^^^
1093
1094parport_find_class, parport_open, parport_device_id
1095
1096
1097
1098parport_set_timeout - set the inactivity timeout
1099------------------------------------------------
1100
1101SYNOPSIS
1102^^^^^^^^
1103
1104::
1105
1106        #include <linux/parport.h>
1107
1108        long parport_set_timeout (struct pardevice *dev, long inactivity);
1109
1110DESCRIPTION
1111^^^^^^^^^^^
1112
1113Set the inactivity timeout, in jiffies, for a registered device.  The
1114previous timeout is returned.
1115
1116RETURN VALUE
1117^^^^^^^^^^^^
1118
1119The previous timeout, in jiffies.
1120
1121NOTES
1122^^^^^
1123
1124Some of the port->ops functions for a parport may take time, owing to
1125delays at the peripheral.  After the peripheral has not responded for
1126``inactivity`` jiffies, a timeout will occur and the blocking function
1127will return.
1128
1129A timeout of 0 jiffies is a special case: the function must do as much
1130as it can without blocking or leaving the hardware in an unknown
1131state.  If port operations are performed from within an interrupt
1132handler, for instance, a timeout of 0 jiffies should be used.
1133
1134Once set for a registered device, the timeout will remain at the set
1135value until set again.
1136
1137SEE ALSO
1138^^^^^^^^
1139
1140port->ops->xxx_read/write_yyy
1141
1142
1143
1144
1145PORT FUNCTIONS
1146==============
1147
1148The functions in the port->ops structure (struct parport_operations)
1149are provided by the low-level driver responsible for that port.
1150
1151port->ops->read_data - read the data register
1152---------------------------------------------
1153
1154SYNOPSIS
1155^^^^^^^^
1156
1157::
1158
1159        #include <linux/parport.h>
1160
1161        struct parport_operations {
1162                ...
1163                unsigned char (*read_data) (struct parport *port);
1164                ...
1165        };
1166
1167DESCRIPTION
1168^^^^^^^^^^^
1169
1170If port->modes contains the PARPORT_MODE_TRISTATE flag and the
1171PARPORT_CONTROL_DIRECTION bit in the control register is set, this
1172returns the value on the data pins.  If port->modes contains the
1173PARPORT_MODE_TRISTATE flag and the PARPORT_CONTROL_DIRECTION bit is
1174not set, the return value _may_ be the last value written to the data
1175register.  Otherwise the return value is undefined.
1176
1177SEE ALSO
1178^^^^^^^^
1179
1180write_data, read_status, write_control
1181
1182
1183
1184port->ops->write_data - write the data register
1185-----------------------------------------------
1186
1187SYNOPSIS
1188^^^^^^^^
1189
1190::
1191
1192        #include <linux/parport.h>
1193
1194        struct parport_operations {
1195                ...
1196                void (*write_data) (struct parport *port, unsigned char d);
1197                ...
1198        };
1199
1200DESCRIPTION
1201^^^^^^^^^^^
1202
1203Writes to the data register.  May have side-effects (a STROBE pulse,
1204for instance).
1205
1206SEE ALSO
1207^^^^^^^^
1208
1209read_data, read_status, write_control
1210
1211
1212
1213port->ops->read_status - read the status register
1214-------------------------------------------------
1215
1216SYNOPSIS
1217^^^^^^^^
1218
1219::
1220
1221        #include <linux/parport.h>
1222
1223        struct parport_operations {
1224                ...
1225                unsigned char (*read_status) (struct parport *port);
1226                ...
1227        };
1228
1229DESCRIPTION
1230^^^^^^^^^^^
1231
1232Reads from the status register.  This is a bitmask:
1233
1234- PARPORT_STATUS_ERROR (printer fault, "nFault")
1235- PARPORT_STATUS_SELECT (on-line, "Select")
1236- PARPORT_STATUS_PAPEROUT (no paper, "PError")
1237- PARPORT_STATUS_ACK (handshake, "nAck")
1238- PARPORT_STATUS_BUSY (busy, "Busy")
1239
1240There may be other bits set.
1241
1242SEE ALSO
1243^^^^^^^^
1244
1245read_data, write_data, write_control
1246
1247
1248
1249port->ops->read_control - read the control register
1250---------------------------------------------------
1251
1252SYNOPSIS
1253^^^^^^^^
1254
1255::
1256
1257        #include <linux/parport.h>
1258
1259        struct parport_operations {
1260                ...
1261                unsigned char (*read_control) (struct parport *port);
1262                ...
1263        };
1264
1265DESCRIPTION
1266^^^^^^^^^^^
1267
1268Returns the last value written to the control register (either from
1269write_control or frob_control).  No port access is performed.
1270
1271SEE ALSO
1272^^^^^^^^
1273
1274read_data, write_data, read_status, write_control
1275
1276
1277
1278port->ops->write_control - write the control register
1279-----------------------------------------------------
1280
1281SYNOPSIS
1282^^^^^^^^
1283
1284::
1285
1286        #include <linux/parport.h>
1287
1288        struct parport_operations {
1289                ...
1290                void (*write_control) (struct parport *port, unsigned char s);
1291                ...
1292        };
1293
1294DESCRIPTION
1295^^^^^^^^^^^
1296
1297Writes to the control register. This is a bitmask::
1298
1299                                  _______
1300        - PARPORT_CONTROL_STROBE (nStrobe)
1301                                  _______
1302        - PARPORT_CONTROL_AUTOFD (nAutoFd)
1303                                _____
1304        - PARPORT_CONTROL_INIT (nInit)
1305                                  _________
1306        - PARPORT_CONTROL_SELECT (nSelectIn)
1307
1308SEE ALSO
1309^^^^^^^^
1310
1311read_data, write_data, read_status, frob_control
1312
1313
1314
1315port->ops->frob_control - write control register bits
1316-----------------------------------------------------
1317
1318SYNOPSIS
1319^^^^^^^^
1320
1321::
1322
1323        #include <linux/parport.h>
1324
1325        struct parport_operations {
1326                ...
1327                unsigned char (*frob_control) (struct parport *port,
1328                                        unsigned char mask,
1329                                        unsigned char val);
1330                ...
1331        };
1332
1333DESCRIPTION
1334^^^^^^^^^^^
1335
1336This is equivalent to reading from the control register, masking out
1337the bits in mask, exclusive-or'ing with the bits in val, and writing
1338the result to the control register.
1339
1340As some ports don't allow reads from the control port, a software copy
1341of its contents is maintained, so frob_control is in fact only one
1342port access.
1343
1344SEE ALSO
1345^^^^^^^^
1346
1347read_data, write_data, read_status, write_control
1348
1349
1350
1351port->ops->enable_irq - enable interrupt generation
1352---------------------------------------------------
1353
1354SYNOPSIS
1355^^^^^^^^
1356
1357::
1358
1359        #include <linux/parport.h>
1360
1361        struct parport_operations {
1362                ...
1363                void (*enable_irq) (struct parport *port);
1364                ...
1365        };
1366
1367DESCRIPTION
1368^^^^^^^^^^^
1369
1370The parallel port hardware is instructed to generate interrupts at
1371appropriate moments, although those moments are
1372architecture-specific.  For the PC architecture, interrupts are
1373commonly generated on the rising edge of nAck.
1374
1375SEE ALSO
1376^^^^^^^^
1377
1378disable_irq
1379
1380
1381
1382port->ops->disable_irq - disable interrupt generation
1383-----------------------------------------------------
1384
1385SYNOPSIS
1386^^^^^^^^
1387
1388::
1389
1390        #include <linux/parport.h>
1391
1392        struct parport_operations {
1393                ...
1394                void (*disable_irq) (struct parport *port);
1395                ...
1396        };
1397
1398DESCRIPTION
1399^^^^^^^^^^^
1400
1401The parallel port hardware is instructed not to generate interrupts.
1402The interrupt itself is not masked.
1403
1404SEE ALSO
1405^^^^^^^^
1406
1407enable_irq
1408
1409
1410
1411port->ops->data_forward - enable data drivers
1412---------------------------------------------
1413
1414SYNOPSIS
1415^^^^^^^^
1416
1417::
1418
1419        #include <linux/parport.h>
1420
1421        struct parport_operations {
1422                ...
1423                void (*data_forward) (struct parport *port);
1424                ...
1425        };
1426
1427DESCRIPTION
1428^^^^^^^^^^^
1429
1430Enables the data line drivers, for 8-bit host-to-peripheral
1431communications.
1432
1433SEE ALSO
1434^^^^^^^^
1435
1436data_reverse
1437
1438
1439
1440port->ops->data_reverse - tristate the buffer
1441---------------------------------------------
1442
1443SYNOPSIS
1444^^^^^^^^
1445
1446::
1447
1448        #include <linux/parport.h>
1449
1450        struct parport_operations {
1451                ...
1452                void (*data_reverse) (struct parport *port);
1453                ...
1454        };
1455
1456DESCRIPTION
1457^^^^^^^^^^^
1458
1459Places the data bus in a high impedance state, if port->modes has the
1460PARPORT_MODE_TRISTATE bit set.
1461
1462SEE ALSO
1463^^^^^^^^
1464
1465data_forward
1466
1467
1468
1469port->ops->epp_write_data - write EPP data
1470------------------------------------------
1471
1472SYNOPSIS
1473^^^^^^^^
1474
1475::
1476
1477        #include <linux/parport.h>
1478
1479        struct parport_operations {
1480                ...
1481                size_t (*epp_write_data) (struct parport *port, const void *buf,
1482                                        size_t len, int flags);
1483                ...
1484        };
1485
1486DESCRIPTION
1487^^^^^^^^^^^
1488
1489Writes data in EPP mode, and returns the number of bytes written.
1490
1491The ``flags`` parameter may be one or more of the following,
1492bitwise-or'ed together:
1493
1494======================= =================================================
1495PARPORT_EPP_FAST        Use fast transfers. Some chips provide 16-bit and
1496                        32-bit registers.  However, if a transfer
1497                        times out, the return value may be unreliable.
1498======================= =================================================
1499
1500SEE ALSO
1501^^^^^^^^
1502
1503epp_read_data, epp_write_addr, epp_read_addr
1504
1505
1506
1507port->ops->epp_read_data - read EPP data
1508----------------------------------------
1509
1510SYNOPSIS
1511^^^^^^^^
1512
1513::
1514
1515        #include <linux/parport.h>
1516
1517        struct parport_operations {
1518                ...
1519                size_t (*epp_read_data) (struct parport *port, void *buf,
1520                                        size_t len, int flags);
1521                ...
1522        };
1523
1524DESCRIPTION
1525^^^^^^^^^^^
1526
1527Reads data in EPP mode, and returns the number of bytes read.
1528
1529The ``flags`` parameter may be one or more of the following,
1530bitwise-or'ed together:
1531
1532======================= =================================================
1533PARPORT_EPP_FAST        Use fast transfers. Some chips provide 16-bit and
1534                        32-bit registers.  However, if a transfer
1535                        times out, the return value may be unreliable.
1536======================= =================================================
1537
1538SEE ALSO
1539^^^^^^^^
1540
1541epp_write_data, epp_write_addr, epp_read_addr
1542
1543
1544
1545port->ops->epp_write_addr - write EPP address
1546---------------------------------------------
1547
1548SYNOPSIS
1549^^^^^^^^
1550
1551::
1552
1553        #include <linux/parport.h>
1554
1555        struct parport_operations {
1556                ...
1557                size_t (*epp_write_addr) (struct parport *port,
1558                                        const void *buf, size_t len, int flags);
1559                ...
1560        };
1561
1562DESCRIPTION
1563^^^^^^^^^^^
1564
1565Writes EPP addresses (8 bits each), and returns the number written.
1566
1567The ``flags`` parameter may be one or more of the following,
1568bitwise-or'ed together:
1569
1570======================= =================================================
1571PARPORT_EPP_FAST        Use fast transfers. Some chips provide 16-bit and
1572                        32-bit registers.  However, if a transfer
1573                        times out, the return value may be unreliable.
1574======================= =================================================
1575
1576(Does PARPORT_EPP_FAST make sense for this function?)
1577
1578SEE ALSO
1579^^^^^^^^
1580
1581epp_write_data, epp_read_data, epp_read_addr
1582
1583
1584
1585port->ops->epp_read_addr - read EPP address
1586-------------------------------------------
1587
1588SYNOPSIS
1589^^^^^^^^
1590
1591::
1592
1593        #include <linux/parport.h>
1594
1595        struct parport_operations {
1596                ...
1597                size_t (*epp_read_addr) (struct parport *port, void *buf,
1598                                        size_t len, int flags);
1599                ...
1600        };
1601
1602DESCRIPTION
1603^^^^^^^^^^^
1604
1605Reads EPP addresses (8 bits each), and returns the number read.
1606
1607The ``flags`` parameter may be one or more of the following,
1608bitwise-or'ed together:
1609
1610======================= =================================================
1611PARPORT_EPP_FAST        Use fast transfers. Some chips provide 16-bit and
1612                        32-bit registers.  However, if a transfer
1613                        times out, the return value may be unreliable.
1614======================= =================================================
1615
1616(Does PARPORT_EPP_FAST make sense for this function?)
1617
1618SEE ALSO
1619^^^^^^^^
1620
1621epp_write_data, epp_read_data, epp_write_addr
1622
1623
1624
1625port->ops->ecp_write_data - write a block of ECP data
1626-----------------------------------------------------
1627
1628SYNOPSIS
1629^^^^^^^^
1630
1631::
1632
1633        #include <linux/parport.h>
1634
1635        struct parport_operations {
1636                ...
1637                size_t (*ecp_write_data) (struct parport *port,
1638                                        const void *buf, size_t len, int flags);
1639                ...
1640        };
1641
1642DESCRIPTION
1643^^^^^^^^^^^
1644
1645Writes a block of ECP data.  The ``flags`` parameter is ignored.
1646
1647RETURN VALUE
1648^^^^^^^^^^^^
1649
1650The number of bytes written.
1651
1652SEE ALSO
1653^^^^^^^^
1654
1655ecp_read_data, ecp_write_addr
1656
1657
1658
1659port->ops->ecp_read_data - read a block of ECP data
1660---------------------------------------------------
1661
1662SYNOPSIS
1663^^^^^^^^
1664
1665::
1666
1667        #include <linux/parport.h>
1668
1669        struct parport_operations {
1670                ...
1671                size_t (*ecp_read_data) (struct parport *port,
1672                                        void *buf, size_t len, int flags);
1673                ...
1674        };
1675
1676DESCRIPTION
1677^^^^^^^^^^^
1678
1679Reads a block of ECP data.  The ``flags`` parameter is ignored.
1680
1681RETURN VALUE
1682^^^^^^^^^^^^
1683
1684The number of bytes read.  NB. There may be more unread data in a
1685FIFO.  Is there a way of stunning the FIFO to prevent this?
1686
1687SEE ALSO
1688^^^^^^^^
1689
1690ecp_write_block, ecp_write_addr
1691
1692
1693
1694port->ops->ecp_write_addr - write a block of ECP addresses
1695----------------------------------------------------------
1696
1697SYNOPSIS
1698^^^^^^^^
1699
1700::
1701
1702        #include <linux/parport.h>
1703
1704        struct parport_operations {
1705                ...
1706                size_t (*ecp_write_addr) (struct parport *port,
1707                                        const void *buf, size_t len, int flags);
1708                ...
1709        };
1710
1711DESCRIPTION
1712^^^^^^^^^^^
1713
1714Writes a block of ECP addresses.  The ``flags`` parameter is ignored.
1715
1716RETURN VALUE
1717^^^^^^^^^^^^
1718
1719The number of bytes written.
1720
1721NOTES
1722^^^^^
1723
1724This may use a FIFO, and if so shall not return until the FIFO is empty.
1725
1726SEE ALSO
1727^^^^^^^^
1728
1729ecp_read_data, ecp_write_data
1730
1731
1732
1733port->ops->nibble_read_data - read a block of data in nibble mode
1734-----------------------------------------------------------------
1735
1736SYNOPSIS
1737^^^^^^^^
1738
1739::
1740
1741        #include <linux/parport.h>
1742
1743        struct parport_operations {
1744                ...
1745                size_t (*nibble_read_data) (struct parport *port,
1746                                        void *buf, size_t len, int flags);
1747                ...
1748        };
1749
1750DESCRIPTION
1751^^^^^^^^^^^
1752
1753Reads a block of data in nibble mode.  The ``flags`` parameter is ignored.
1754
1755RETURN VALUE
1756^^^^^^^^^^^^
1757
1758The number of whole bytes read.
1759
1760SEE ALSO
1761^^^^^^^^
1762
1763byte_read_data, compat_write_data
1764
1765
1766
1767port->ops->byte_read_data - read a block of data in byte mode
1768-------------------------------------------------------------
1769
1770SYNOPSIS
1771^^^^^^^^
1772
1773::
1774
1775        #include <linux/parport.h>
1776
1777        struct parport_operations {
1778                ...
1779                size_t (*byte_read_data) (struct parport *port,
1780                                        void *buf, size_t len, int flags);
1781                ...
1782        };
1783
1784DESCRIPTION
1785^^^^^^^^^^^
1786
1787Reads a block of data in byte mode.  The ``flags`` parameter is ignored.
1788
1789RETURN VALUE
1790^^^^^^^^^^^^
1791
1792The number of bytes read.
1793
1794SEE ALSO
1795^^^^^^^^
1796
1797nibble_read_data, compat_write_data
1798
1799
1800
1801port->ops->compat_write_data - write a block of data in compatibility mode
1802--------------------------------------------------------------------------
1803
1804SYNOPSIS
1805^^^^^^^^
1806
1807::
1808
1809        #include <linux/parport.h>
1810
1811        struct parport_operations {
1812                ...
1813                size_t (*compat_write_data) (struct parport *port,
1814                                        const void *buf, size_t len, int flags);
1815                ...
1816        };
1817
1818DESCRIPTION
1819^^^^^^^^^^^
1820
1821Writes a block of data in compatibility mode.  The ``flags`` parameter
1822is ignored.
1823
1824RETURN VALUE
1825^^^^^^^^^^^^
1826
1827The number of bytes written.
1828
1829SEE ALSO
1830^^^^^^^^
1831
1832nibble_read_data, byte_read_data
1833