1
by Tim Gardner, Andy Whitcroft, Tim Gardner
[ Andy Whitcroft ] |
1 |
The `parport' code provides parallel-port support under Linux. This |
2 |
includes the ability to share one port between multiple device |
|
3 |
drivers. |
|
4 |
||
5 |
You can pass parameters to the parport code to override its automatic |
|
6 |
detection of your hardware. This is particularly useful if you want |
|
7 |
to use IRQs, since in general these can't be autoprobed successfully. |
|
8 |
By default IRQs are not used even if they _can_ be probed. This is |
|
9 |
because there are a lot of people using the same IRQ for their |
|
10 |
parallel port and a sound card or network card. |
|
11 |
||
12 |
The parport code is split into two parts: generic (which deals with |
|
13 |
port-sharing) and architecture-dependent (which deals with actually |
|
14 |
using the port). |
|
15 |
||
16 |
||
17 |
Parport as modules |
|
18 |
================== |
|
19 |
||
20 |
If you load the parport code as a module, say |
|
21 |
||
22 |
# insmod parport |
|
23 |
||
24 |
to load the generic parport code. You then must load the |
|
25 |
architecture-dependent code with (for example): |
|
26 |
||
27 |
# insmod parport_pc io=0x3bc,0x378,0x278 irq=none,7,auto |
|
28 |
||
29 |
to tell the parport code that you want three PC-style ports, one at |
|
30 |
0x3bc with no IRQ, one at 0x378 using IRQ 7, and one at 0x278 with an |
|
31 |
auto-detected IRQ. Currently, PC-style (parport_pc), Sun `bpp', |
|
32 |
Amiga, Atari, and MFC3 hardware is supported. |
|
33 |
||
34 |
PCI parallel I/O card support comes from parport_pc. Base I/O |
|
35 |
addresses should not be specified for supported PCI cards since they |
|
36 |
are automatically detected. |
|
37 |
||
38 |
||
39 |
KMod |
|
40 |
---- |
|
41 |
||
42 |
If you use kmod, you will find it useful to edit /etc/modprobe.conf. |
|
43 |
Here 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 |
||
48 |
KMod 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 |
||
52 |
Note that these are example lines only! You shouldn't in general need |
|
53 |
to specify any options to parport_pc in order to be able to use a |
|
54 |
parallel port. |
|
55 |
||
56 |
||
57 |
Parport probe [optional] |
|
58 |
------------- |
|
59 |
||
60 |
In 2.2 kernels there was a module called parport_probe, which was used |
|
61 |
for collecting IEEE 1284 device ID information. This has now been |
|
62 |
enhanced and now lives with the IEEE 1284 support. When a parallel |
|
63 |
port is detected, the devices that are connected to it are analysed, |
|
64 |
and information is logged like this: |
|
65 |
||
66 |
parport0: Printer, BJC-210 (Canon) |
|
67 |
||
68 |
The probe information is available from files in /proc/sys/dev/parport/. |
|
69 |
||
70 |
||
71 |
Parport linked into the kernel statically |
|
72 |
========================================= |
|
73 |
||
74 |
If you compile the parport code into the kernel, then you can use |
|
75 |
kernel boot parameters to get the same effect. Add something like the |
|
76 |
following to your LILO command line: |
|
77 |
||
78 |
parport=0x3bc parport=0x378,7 parport=0x278,auto,nofifo |
|
79 |
||
80 |
You can have many `parport=...' statements, one for each port you want |
|
81 |
to add. Adding `parport=0' to the kernel command-line will disable |
|
82 |
parport support entirely. Adding `parport=auto' to the kernel |
|
83 |
command-line will make parport use any IRQ lines or DMA channels that |
|
84 |
it auto-detects. |
|
85 |
||
86 |
||
87 |
Files in /proc |
|
88 |
============== |
|
89 |
||
90 |
If you have configured the /proc filesystem into your kernel, you will |
|
91 |
see a new directory entry: /proc/sys/dev/parport. In there will be a |
|
92 |
directory entry for each parallel port for which parport is |
|
93 |
configured. In each of those directories are a collection of files |
|
94 |
describing that parallel port. |
|
95 |
||
96 |
The /proc/sys/dev/parport directory tree looks like: |
|
97 |
||
98 |
parport |
|
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 |
||
134 |
File: Contents: |
|
135 |
||
136 |
devices/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 |
||
142 |
base-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 |
||
147 |
irq Parallel port's IRQ, or -1 if none is being used. |
|
148 |
||
149 |
dma Parallel port's DMA channel, or -1 if none is being |
|
150 |
used. |
|
151 |
||
152 |
modes 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 |
||
169 |
autoprobe Any IEEE-1284 device ID information that has been |
|
170 |
acquired from the (non-IEEE 1284.3) device. |
|
171 |
||
172 |
autoprobe[0-3] IEEE 1284 device ID information retrieved from |
|
173 |
daisy-chain devices that conform to IEEE 1284.3. |
|
174 |
||
175 |
spintime 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 |
||
181 |
timeslice 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 |
||
185 |
default/* 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 |
||
190 |
Device drivers |
|
191 |
============== |
|
192 |
||
193 |
Once the parport code is initialised, you can attach device drivers to |
|
194 |
specific ports. Normally this happens automatically; if the lp driver |
|
195 |
is loaded it will create one lp device for each port found. You can |
|
196 |
override this, though, by using parameters either when you load the lp |
|
197 |
driver: |
|
198 |
||
199 |
# insmod lp parport=0,2 |
|
200 |
||
201 |
or on the LILO command line: |
|
202 |
||
203 |
lp=parport0 lp=parport2 |
|
204 |
||
205 |
Both the above examples would inform lp that you want /dev/lp0 to be |
|
206 |
the first parallel port, and /dev/lp1 to be the _third_ parallel port, |
|
207 |
with no lp device associated with the second port (parport1). Note |
|
208 |
that this is different to the way older kernels worked; there used to |
|
209 |
be a static association between the I/O port address and the device |
|
210 |
name, so /dev/lp0 was always the port at 0x3bc. This is no longer the |
|
211 |
case - if you only have one port, it will default to being /dev/lp0, |
|
212 |
regardless of base address. |
|
213 |
||
214 |
Also: |
|
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 |
||
226 |
Reporting printer problems with parport |
|
227 |
======================================= |
|
228 |
||
229 |
If you are having problems printing, please go through these steps to |
|
230 |
try to narrow down where the problem area is. |
|
231 |
||
232 |
When reporting problems with parport, really you need to give all of |
|
233 |
the messages that parport_pc spits out when it initialises. There are |
|
234 |
several code paths: |
|
235 |
||
236 |
o polling |
|
237 |
o interrupt-driven, protocol in software |
|
238 |
o interrupt-driven, protocol in hardware using PIO |
|
239 |
o interrupt-driven, protocol in hardware using DMA |
|
240 |
||
241 |
The kernel messages that parport_pc logs give an indication of which |
|
242 |
code path is being used. (They could be a lot better actually..) |
|
243 |
||
244 |
For normal printer protocol, having IEEE 1284 modes enabled or not |
|
245 |
should not make a difference. |
|
246 |
||
247 |
To turn off the 'protocol in hardware' code paths, disable |
|
248 |
CONFIG_PARPORT_PC_FIFO. Note that when they are enabled they are not |
|
249 |
necessarily _used_; it depends on whether the hardware is available, |
|
250 |
enabled by the BIOS, and detected by the driver. |
|
251 |
||
252 |
So, to start with, disable CONFIG_PARPORT_PC_FIFO, and load parport_pc |
|
253 |
with 'irq=none'. See if printing works then. It really should, |
|
254 |
because this is the simplest code path. |
|
255 |
||
256 |
If that works fine, try with 'io=0x378 irq=7' (adjust for your |
|
257 |
hardware), to make it use interrupt-driven in-software protocol. |
|
258 |
||
259 |
If _that_ works fine, then one of the hardware modes isn't working |
|
260 |
right. Enable CONFIG_PARPORT_PC_FIFO (no, it isn't a module option, |
|
261 |
and yes, it should be), set the port to ECP mode in the BIOS and note |
|
262 |
the 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 |
-- |
|
267 |
philb@gnu.org |
|
268 |
tim@cyberelk.net |