mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-11-01 09:13:37 +00:00 
			
		
		
		
	Initial git repository build. I'm not bothering with the full history, even though we have it. We can create a separate "historical" git archive of that later if we want to, and in the meantime it's about 3.2GB when imported into git - space that would just make the early git days unnecessarily complicated, when we don't have a lot of good infrastructure for it. Let it rip!
		
			
				
	
	
		
			268 lines
		
	
	
	
		
			8.8 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			268 lines
		
	
	
	
		
			8.8 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
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.
 | 
						|
 | 
						|
 | 
						|
KMod
 | 
						|
----
 | 
						|
 | 
						|
If you use kmod, you will find it useful to edit /etc/modprobe.conf.
 | 
						|
Here is an example of the lines that need to be added:
 | 
						|
 | 
						|
	alias parport_lowlevel parport_pc
 | 
						|
	options parport_pc io=0x378,0x278 irq=7,auto
 | 
						|
 | 
						|
KMod will then automatically 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
 | 
						|
 | 
						|
 | 
						|
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:
 | 
						|
 | 
						|
o polling
 | 
						|
o interrupt-driven, protocol in software
 | 
						|
o interrupt-driven, protocol in hardware using PIO
 | 
						|
o 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_PARPORT_PC_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
 |