linux/Documentation/parport.txt
<<
>>
Prefs
   1The `parport' code provides parallel-port support under Linux.  This
   2includes the ability to share one port between multiple device
   3drivers.
   4
   5You can pass parameters to the parport code to override its automatic
   6detection of your hardware.  This is particularly useful if you want
   7to use IRQs, since in general these can't be autoprobed successfully.
   8By default IRQs are not used even if they _can_ be probed.  This is
   9because there are a lot of people using the same IRQ for their
  10parallel port and a sound card or network card.
  11
  12The parport code is split into two parts: generic (which deals with
  13port-sharing) and architecture-dependent (which deals with actually
  14using the port).
  15
  16
  17Parport as modules
  18==================
  19
  20If you load the parport code as a module, say
  21
  22        # insmod parport
  23
  24to load the generic parport code.  You then must load the
  25architecture-dependent code with (for example):
  26
  27        # insmod parport_pc io=0x3bc,0x378,0x278 irq=none,7,auto
  28
  29to tell the parport code that you want three PC-style ports, one at
  300x3bc with no IRQ, one at 0x378 using IRQ 7, and one at 0x278 with an
  31auto-detected IRQ.  Currently, PC-style (parport_pc), Sun `bpp',
  32Amiga, Atari, and MFC3 hardware is supported.
  33
  34PCI parallel I/O card support comes from parport_pc.  Base I/O
  35addresses should not be specified for supported PCI cards since they
  36are automatically detected.
  37
  38
  39KMod
  40----
  41
  42If you use kmod, you will find it useful to edit /etc/modprobe.conf.
  43Here is an example of the lines that need to be added:
  44
  45        alias parport_lowlevel parport_pc
  46        options parport_pc io=0x378,0x278 irq=7,auto
  47
  48KMod will then automatically load parport_pc (with the options
  49"io=0x378,0x278 irq=7,auto") whenever a parallel port device driver
  50(such as lp) is loaded.
  51
  52Note that these are example lines only!  You shouldn't in general need
  53to specify any options to parport_pc in order to be able to use a
  54parallel port.
  55
  56
  57Parport probe [optional]
  58-------------
  59
  60In 2.2 kernels there was a module called parport_probe, which was used
  61for collecting IEEE 1284 device ID information.  This has now been
  62enhanced and now lives with the IEEE 1284 support.  When a parallel
  63port is detected, the devices that are connected to it are analysed,
  64and information is logged like this:
  65
  66        parport0: Printer, BJC-210 (Canon)
  67
  68The probe information is available from files in /proc/sys/dev/parport/.
  69
  70
  71Parport linked into the kernel statically
  72=========================================
  73
  74If you compile the parport code into the kernel, then you can use
  75kernel boot parameters to get the same effect.  Add something like the
  76following to your LILO command line:
  77
  78        parport=0x3bc parport=0x378,7 parport=0x278,auto,nofifo
  79
  80You can have many `parport=...' statements, one for each port you want
  81to add.  Adding `parport=0' to the kernel command-line will disable
  82parport support entirely.  Adding `parport=auto' to the kernel
  83command-line will make parport use any IRQ lines or DMA channels that
  84it auto-detects.
  85
  86
  87Files in /proc
  88==============
  89
  90If you have configured the /proc filesystem into your kernel, you will
  91see a new directory entry: /proc/sys/dev/parport.  In there will be a
  92directory entry for each parallel port for which parport is
  93configured.  In each of those directories are a collection of files
  94describing that parallel port.
  95
  96The /proc/sys/dev/parport directory tree looks like:
  97
  98parport
  99|-- default
 100|   |-- spintime
 101|   `-- timeslice
 102|-- parport0
 103|   |-- autoprobe
 104|   |-- autoprobe0
 105|   |-- autoprobe1
 106|   |-- autoprobe2
 107|   |-- autoprobe3
 108|   |-- devices
 109|   |   |-- active
 110|   |   `-- lp
 111|   |       `-- timeslice
 112|   |-- base-addr
 113|   |-- irq
 114|   |-- dma
 115|   |-- modes
 116|   `-- spintime
 117`-- parport1
 118    |-- autoprobe
 119    |-- autoprobe0
 120    |-- autoprobe1
 121    |-- autoprobe2
 122    |-- autoprobe3
 123    |-- devices
 124    |   |-- active
 125    |   `-- ppa
 126    |       `-- timeslice
 127    |-- base-addr
 128    |-- irq
 129    |-- dma
 130    |-- modes
 131    `-- spintime
 132
 133
 134File:           Contents:
 135
 136devices/active  A list of the device drivers using that port.  A "+"
 137                will appear by the name of the device currently using
 138                the port (it might not appear against any).  The
 139                string "none" means that there are no device drivers
 140                using that port.
 141
 142base-addr       Parallel port's base address, or addresses if the port
 143                has more than one in which case they are separated
 144                with tabs.  These values might not have any sensible
 145                meaning for some ports.
 146
 147irq             Parallel port's IRQ, or -1 if none is being used.
 148
 149dma             Parallel port's DMA channel, or -1 if none is being
 150                used.
 151
 152modes           Parallel port's hardware modes, comma-separated,
 153                meaning:
 154
 155                PCSPP           PC-style SPP registers are available.
 156                TRISTATE        Port is bidirectional.
 157                COMPAT          Hardware acceleration for printers is
 158                                available and will be used.
 159                EPP             Hardware acceleration for EPP protocol
 160                                is available and will be used.
 161                ECP             Hardware acceleration for ECP protocol
 162                                is available and will be used.
 163                DMA             DMA is available and will be used.
 164
 165                Note that the current implementation will only take
 166                advantage of COMPAT and ECP modes if it has an IRQ
 167                line to use.
 168
 169autoprobe       Any IEEE-1284 device ID information that has been
 170                acquired from the (non-IEEE 1284.3) device.
 171
 172autoprobe[0-3]  IEEE 1284 device ID information retrieved from
 173                daisy-chain devices that conform to IEEE 1284.3.
 174
 175spintime        The number of microseconds to busy-loop while waiting
 176                for the peripheral to respond.  You might find that
 177                adjusting this improves performance, depending on your
 178                peripherals.  This is a port-wide setting, i.e. it
 179                applies to all devices on a particular port.
 180
 181timeslice       The number of milliseconds that a device driver is
 182                allowed to keep a port claimed for.  This is advisory,
 183                and driver can ignore it if it must.
 184
 185default/*       The defaults for spintime and timeslice. When a new
 186                port is registered, it picks up the default spintime.
 187                When a new device is registered, it picks up the
 188                default timeslice.
 189
 190Device drivers
 191==============
 192
 193Once the parport code is initialised, you can attach device drivers to
 194specific ports.  Normally this happens automatically; if the lp driver
 195is loaded it will create one lp device for each port found.  You can
 196override this, though, by using parameters either when you load the lp
 197driver:
 198
 199        # insmod lp parport=0,2
 200
 201or on the LILO command line:
 202
 203        lp=parport0 lp=parport2
 204
 205Both the above examples would inform lp that you want /dev/lp0 to be
 206the first parallel port, and /dev/lp1 to be the _third_ parallel port,
 207with no lp device associated with the second port (parport1).  Note
 208that this is different to the way older kernels worked; there used to
 209be a static association between the I/O port address and the device
 210name, so /dev/lp0 was always the port at 0x3bc.  This is no longer the
 211case - if you only have one port, it will default to being /dev/lp0,
 212regardless of base address.
 213
 214Also:
 215
 216 * If you selected the IEEE 1284 support at compile time, you can say
 217   `lp=auto' on the kernel command line, and lp will create devices
 218   only for those ports that seem to have printers attached.
 219
 220 * If you give PLIP the `timid' parameter, either with `plip=timid' on
 221   the command line, or with `insmod plip timid=1' when using modules,
 222   it will avoid any ports that seem to be in use by other devices.
 223
 224 * IRQ autoprobing works only for a few port types at the moment.
 225
 226Reporting printer problems with parport
 227=======================================
 228
 229If you are having problems printing, please go through these steps to
 230try to narrow down where the problem area is.
 231
 232When reporting problems with parport, really you need to give all of
 233the messages that parport_pc spits out when it initialises.  There are
 234several code paths:
 235
 236o polling
 237o interrupt-driven, protocol in software
 238o interrupt-driven, protocol in hardware using PIO
 239o interrupt-driven, protocol in hardware using DMA
 240
 241The kernel messages that parport_pc logs give an indication of which
 242code path is being used. (They could be a lot better actually..)
 243
 244For normal printer protocol, having IEEE 1284 modes enabled or not
 245should not make a difference.
 246
 247To turn off the 'protocol in hardware' code paths, disable
 248CONFIG_PARPORT_PC_FIFO.  Note that when they are enabled they are not
 249necessarily _used_; it depends on whether the hardware is available,
 250enabled by the BIOS, and detected by the driver.
 251
 252So, to start with, disable CONFIG_PARPORT_PC_FIFO, and load parport_pc
 253with 'irq=none'. See if printing works then.  It really should,
 254because this is the simplest code path.
 255
 256If that works fine, try with 'io=0x378 irq=7' (adjust for your
 257hardware), to make it use interrupt-driven in-software protocol.
 258
 259If _that_ works fine, then one of the hardware modes isn't working
 260right.  Enable CONFIG_PARPORT_PC_FIFO (no, it isn't a module option,
 261and yes, it should be), set the port to ECP mode in the BIOS and note
 262the DMA channel, and try with:
 263
 264    io=0x378 irq=7 dma=none (for PIO)
 265    io=0x378 irq=7 dma=3 (for DMA)
 266--
 267philb@gnu.org
 268tim@cyberelk.net
 269