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