123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286 |
- Parport
- +++++++
- The ``parport`` code provides parallel-port support under Linux. This
- includes the ability to share one port between multiple device
- drivers.
- You can pass parameters to the ``parport`` code to override its automatic
- detection of your hardware. This is particularly useful if you want
- to use IRQs, since in general these can't be autoprobed successfully.
- By default IRQs are not used even if they **can** be probed. This is
- because there are a lot of people using the same IRQ for their
- parallel port and a sound card or network card.
- The ``parport`` code is split into two parts: generic (which deals with
- port-sharing) and architecture-dependent (which deals with actually
- using the port).
- Parport as modules
- ==================
- If you load the `parport`` code as a module, say::
- # insmod parport
- to load the generic ``parport`` code. You then must load the
- architecture-dependent code with (for example)::
- # insmod parport_pc io=0x3bc,0x378,0x278 irq=none,7,auto
- to tell the ``parport`` code that you want three PC-style ports, one at
- 0x3bc with no IRQ, one at 0x378 using IRQ 7, and one at 0x278 with an
- auto-detected IRQ. Currently, PC-style (``parport_pc``), Sun ``bpp``,
- Amiga, Atari, and MFC3 hardware is supported.
- PCI parallel I/O card support comes from ``parport_pc``. Base I/O
- addresses should not be specified for supported PCI cards since they
- are automatically detected.
- modprobe
- --------
- If you use modprobe , you will find it useful to add lines as below to a
- configuration file in /etc/modprobe.d/ directory::
- alias parport_lowlevel parport_pc
- options parport_pc io=0x378,0x278 irq=7,auto
- modprobe will load ``parport_pc`` (with the options ``io=0x378,0x278 irq=7,auto``)
- whenever a parallel port device driver (such as ``lp``) is loaded.
- Note that these are example lines only! You shouldn't in general need
- to specify any options to ``parport_pc`` in order to be able to use a
- parallel port.
- Parport probe [optional]
- ------------------------
- In 2.2 kernels there was a module called ``parport_probe``, which was used
- for collecting IEEE 1284 device ID information. This has now been
- enhanced and now lives with the IEEE 1284 support. When a parallel
- port is detected, the devices that are connected to it are analysed,
- and information is logged like this::
- parport0: Printer, BJC-210 (Canon)
- The probe information is available from files in ``/proc/sys/dev/parport/``.
- Parport linked into the kernel statically
- =========================================
- If you compile the ``parport`` code into the kernel, then you can use
- kernel boot parameters to get the same effect. Add something like the
- following to your LILO command line::
- parport=0x3bc parport=0x378,7 parport=0x278,auto,nofifo
- You can have many ``parport=...`` statements, one for each port you want
- to add. Adding ``parport=0`` to the kernel command-line will disable
- parport support entirely. Adding ``parport=auto`` to the kernel
- command-line will make ``parport`` use any IRQ lines or DMA channels that
- it auto-detects.
- Files in /proc
- ==============
- If you have configured the ``/proc`` filesystem into your kernel, you will
- see a new directory entry: ``/proc/sys/dev/parport``. In there will be a
- directory entry for each parallel port for which parport is
- configured. In each of those directories are a collection of files
- describing that parallel port.
- The ``/proc/sys/dev/parport`` directory tree looks like::
- parport
- |-- default
- | |-- spintime
- | `-- timeslice
- |-- parport0
- | |-- autoprobe
- | |-- autoprobe0
- | |-- autoprobe1
- | |-- autoprobe2
- | |-- autoprobe3
- | |-- devices
- | | |-- active
- | | `-- lp
- | | `-- timeslice
- | |-- base-addr
- | |-- irq
- | |-- dma
- | |-- modes
- | `-- spintime
- `-- parport1
- |-- autoprobe
- |-- autoprobe0
- |-- autoprobe1
- |-- autoprobe2
- |-- autoprobe3
- |-- devices
- | |-- active
- | `-- ppa
- | `-- timeslice
- |-- base-addr
- |-- irq
- |-- dma
- |-- modes
- `-- spintime
- .. tabularcolumns:: |p{4.0cm}|p{13.5cm}|
- ======================= =======================================================
- File Contents
- ======================= =======================================================
- ``devices/active`` A list of the device drivers using that port. A "+"
- will appear by the name of the device currently using
- the port (it might not appear against any). The
- string "none" means that there are no device drivers
- using that port.
- ``base-addr`` Parallel port's base address, or addresses if the port
- has more than one in which case they are separated
- with tabs. These values might not have any sensible
- meaning for some ports.
- ``irq`` Parallel port's IRQ, or -1 if none is being used.
- ``dma`` Parallel port's DMA channel, or -1 if none is being
- used.
- ``modes`` Parallel port's hardware modes, comma-separated,
- meaning:
- - PCSPP
- PC-style SPP registers are available.
- - TRISTATE
- Port is bidirectional.
- - COMPAT
- Hardware acceleration for printers is
- available and will be used.
- - EPP
- Hardware acceleration for EPP protocol
- is available and will be used.
- - ECP
- Hardware acceleration for ECP protocol
- is available and will be used.
- - DMA
- DMA is available and will be used.
- Note that the current implementation will only take
- advantage of COMPAT and ECP modes if it has an IRQ
- line to use.
- ``autoprobe`` Any IEEE-1284 device ID information that has been
- acquired from the (non-IEEE 1284.3) device.
- ``autoprobe[0-3]`` IEEE 1284 device ID information retrieved from
- daisy-chain devices that conform to IEEE 1284.3.
- ``spintime`` The number of microseconds to busy-loop while waiting
- for the peripheral to respond. You might find that
- adjusting this improves performance, depending on your
- peripherals. This is a port-wide setting, i.e. it
- applies to all devices on a particular port.
- ``timeslice`` The number of milliseconds that a device driver is
- allowed to keep a port claimed for. This is advisory,
- and driver can ignore it if it must.
- ``default/*`` The defaults for spintime and timeslice. When a new
- port is registered, it picks up the default spintime.
- When a new device is registered, it picks up the
- default timeslice.
- ======================= =======================================================
- Device drivers
- ==============
- Once the parport code is initialised, you can attach device drivers to
- specific ports. Normally this happens automatically; if the lp driver
- is loaded it will create one lp device for each port found. You can
- override this, though, by using parameters either when you load the lp
- driver::
- # insmod lp parport=0,2
- or on the LILO command line::
- lp=parport0 lp=parport2
- Both the above examples would inform lp that you want ``/dev/lp0`` to be
- the first parallel port, and /dev/lp1 to be the **third** parallel port,
- with no lp device associated with the second port (parport1). Note
- that this is different to the way older kernels worked; there used to
- be a static association between the I/O port address and the device
- name, so ``/dev/lp0`` was always the port at 0x3bc. This is no longer the
- case - if you only have one port, it will default to being ``/dev/lp0``,
- regardless of base address.
- Also:
- * If you selected the IEEE 1284 support at compile time, you can say
- ``lp=auto`` on the kernel command line, and lp will create devices
- only for those ports that seem to have printers attached.
- * If you give PLIP the ``timid`` parameter, either with ``plip=timid`` on
- the command line, or with ``insmod plip timid=1`` when using modules,
- it will avoid any ports that seem to be in use by other devices.
- * IRQ autoprobing works only for a few port types at the moment.
- Reporting printer problems with parport
- =======================================
- If you are having problems printing, please go through these steps to
- try to narrow down where the problem area is.
- When reporting problems with parport, really you need to give all of
- the messages that ``parport_pc`` spits out when it initialises. There are
- several code paths:
- - polling
- - interrupt-driven, protocol in software
- - interrupt-driven, protocol in hardware using PIO
- - interrupt-driven, protocol in hardware using DMA
- The kernel messages that ``parport_pc`` logs give an indication of which
- code path is being used. (They could be a lot better actually..)
- For normal printer protocol, having IEEE 1284 modes enabled or not
- should not make a difference.
- To turn off the 'protocol in hardware' code paths, disable
- ``CONFIG_PARPORT_PC_FIFO``. Note that when they are enabled they are not
- necessarily **used**; it depends on whether the hardware is available,
- enabled by the BIOS, and detected by the driver.
- So, to start with, disable ``CONFIG_PARPORT_PC_FIFO``, and load ``parport_pc``
- with ``irq=none``. See if printing works then. It really should,
- because this is the simplest code path.
- If that works fine, try with ``io=0x378 irq=7`` (adjust for your
- hardware), to make it use interrupt-driven in-software protocol.
- If **that** works fine, then one of the hardware modes isn't working
- right. Enable ``CONFIG_FIFO`` (no, it isn't a module option,
- and yes, it should be), set the port to ECP mode in the BIOS and note
- the DMA channel, and try with::
- io=0x378 irq=7 dma=none (for PIO)
- io=0x378 irq=7 dma=3 (for DMA)
- ----------
- philb@gnu.org
- tim@cyberelk.net
|