NAME

     lp - line printer devices


SYNOPSIS

     #include <linux/lp.h>


CONFIGURATION

     lp[02] are character devices for the parallel line printers;
     they  have  major  number  6 and minor number 02.  The minor
     numbers  correspond  to  the  printer  port  base  addresses
     0x03bc,  0x0378  and 0x0278.  Usually they have mode 220 and
     are owned by root and group lp.  You can use  printer  ports
     either  with  polling  or  with  interrupts.  Interrupts are
     recommended when high traffic is expected,  e.g.  for  laser
     printers.   For  usual dot matrix printers polling will usu-
     ally be enough.  The default is polling.


DESCRIPTION

     The following ioctl(2) calls are supported:

     int ioctl(int fd, LPTIME, int arg))
          Sets the amount of time that the driver  sleeps  before
          rechecking   the  printer  when  the  printer's  buffer
          appears to be filled  to  arg.   If  you  have  a  fast
          printer,  decrease  this  number;  if  you  have a slow
          printer then increase it.  This is in hundredths  of  a
          second,  the  default  2  being  0.02 seconds.  It only
          influences the polling driver.

     int ioctl(int fd, LPCHAR, int arg))
          Sets the maximum number of busy-wait  iterations  which
          the  polling  driver does while waiting for the printer
          to get ready for receiving  a  character  to  arg.   If
          printing is too slow, increase this number; if the sys-
          tem gets too slow, decrease this number.   The  default
          is 1000.  It only influences the polling driver.

     int ioctl(int fd, LPABORT, int arg))
          If arg is 0, the printer driver will retry  on  errors,
          otherwise it will abort.  The default is 0.

     int ioctl(int fd, LPABORTOPEN, int arg))
          If arg is 0, open(2) will be aborted on  error,  other-
          wise  error  will be ignored.  The default is to ignore
          it.

     int ioctl(int fd, LPCAREFUL, int arg))
          If arg is 0, then the out-of-paper, offline  and  error
          signals  are required to be false on all writes, other-
          wise they are ignored.  The default is to ignore them.

     int ioctl(int fd, LPWAIT, int arg))
          Sets the number of  busy  waiting  iterations  to  wait
          before  strobing  the  printer to accept a just-written
          character, and the number of iterations to wait  before
          turning  the  strobe off again, to arg.  The specifica-
          tion says this time should  be  0.5  microseconds,  but
          experience  has  shown  the delay caused by the code is
          already enough.  For that reason, the default value  is
          0.  This is used for both the polling and the interrupt
          driver.

     int ioctl(int fd, LPSETIRQ, int arg))
          This ioctl() requires superuser privileges.   It  takes
          an  int  containing the new IRQ as argument.  As a side
          effect, the printer will be reset.  When arg is 0,  the
          polling driver will be used, which is also default.

     int ioctl(int fd, LPGETIRQ, int *arg))
          Stores the currently used IRQ in arg.

     int ioctl(int fd, LPGETSTATUS, int *arg))
          Stores the value of the status port in arg.   The  bits
          have the following meaning:

          l  l.   LP_PBUSY  inverted  busy  input,  active   high
          LP_PACK   unchanged   acknowledge   input,  active  low
          LP_POUTPA unchanged  out-of-paper  input,  active  high
          LP_PSELECD     unchanged  selected  input,  active high
          LP_PERRORP     unchanged error input, active low

          Refer to your printer manual for  the  meaning  of  the
          signals.   Note that undocumented bits may also be set,
          depending on your printer.

     int ioctl(int fd, LPRESET)
          Resets the printer.  No argument is used.


FILES

     /dev/lp*


AUTHORS

     The printer driver was originally written by Jim Weigand and
     Linus Torvalds.  It was further improved by Michael K. John-
     son.  The interrupt code was written by Nigel Gamble.   Alan
     Cox  modularised  it.   LPCAREFUL, LPABORT, LPGETSTATUS were
     added by Chris Metcalf.


SEE ALSO

     mknod(1), chown(1), chmod(1),