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