19d85025bSMauro Carvalho ChehabParport 29d85025bSMauro Carvalho Chehab+++++++ 39d85025bSMauro Carvalho Chehab 49d85025bSMauro Carvalho ChehabThe ``parport`` code provides parallel-port support under Linux. This 59d85025bSMauro Carvalho Chehabincludes the ability to share one port between multiple device 69d85025bSMauro Carvalho Chehabdrivers. 79d85025bSMauro Carvalho Chehab 89d85025bSMauro Carvalho ChehabYou can pass parameters to the ``parport`` code to override its automatic 99d85025bSMauro Carvalho Chehabdetection of your hardware. This is particularly useful if you want 109d85025bSMauro Carvalho Chehabto use IRQs, since in general these can't be autoprobed successfully. 119d85025bSMauro Carvalho ChehabBy default IRQs are not used even if they **can** be probed. This is 129d85025bSMauro Carvalho Chehabbecause there are a lot of people using the same IRQ for their 139d85025bSMauro Carvalho Chehabparallel port and a sound card or network card. 149d85025bSMauro Carvalho Chehab 159d85025bSMauro Carvalho ChehabThe ``parport`` code is split into two parts: generic (which deals with 169d85025bSMauro Carvalho Chehabport-sharing) and architecture-dependent (which deals with actually 179d85025bSMauro Carvalho Chehabusing the port). 189d85025bSMauro Carvalho Chehab 199d85025bSMauro Carvalho Chehab 209d85025bSMauro Carvalho ChehabParport as modules 219d85025bSMauro Carvalho Chehab================== 229d85025bSMauro Carvalho Chehab 239d85025bSMauro Carvalho ChehabIf you load the `parport`` code as a module, say:: 249d85025bSMauro Carvalho Chehab 259d85025bSMauro Carvalho Chehab # insmod parport 269d85025bSMauro Carvalho Chehab 279d85025bSMauro Carvalho Chehabto load the generic ``parport`` code. You then must load the 289d85025bSMauro Carvalho Chehabarchitecture-dependent code with (for example):: 299d85025bSMauro Carvalho Chehab 309d85025bSMauro Carvalho Chehab # insmod parport_pc io=0x3bc,0x378,0x278 irq=none,7,auto 319d85025bSMauro Carvalho Chehab 329d85025bSMauro Carvalho Chehabto tell the ``parport`` code that you want three PC-style ports, one at 339d85025bSMauro Carvalho Chehab0x3bc with no IRQ, one at 0x378 using IRQ 7, and one at 0x278 with an 349d85025bSMauro Carvalho Chehabauto-detected IRQ. Currently, PC-style (``parport_pc``), Sun ``bpp``, 359d85025bSMauro Carvalho ChehabAmiga, Atari, and MFC3 hardware is supported. 369d85025bSMauro Carvalho Chehab 379d85025bSMauro Carvalho ChehabPCI parallel I/O card support comes from ``parport_pc``. Base I/O 389d85025bSMauro Carvalho Chehabaddresses should not be specified for supported PCI cards since they 399d85025bSMauro Carvalho Chehabare automatically detected. 409d85025bSMauro Carvalho Chehab 419d85025bSMauro Carvalho Chehab 429d85025bSMauro Carvalho Chehabmodprobe 439d85025bSMauro Carvalho Chehab-------- 449d85025bSMauro Carvalho Chehab 459d85025bSMauro Carvalho ChehabIf you use modprobe , you will find it useful to add lines as below to a 469d85025bSMauro Carvalho Chehabconfiguration file in /etc/modprobe.d/ directory:: 479d85025bSMauro Carvalho Chehab 489d85025bSMauro Carvalho Chehab alias parport_lowlevel parport_pc 499d85025bSMauro Carvalho Chehab options parport_pc io=0x378,0x278 irq=7,auto 509d85025bSMauro Carvalho Chehab 519d85025bSMauro Carvalho Chehabmodprobe will load ``parport_pc`` (with the options ``io=0x378,0x278 irq=7,auto``) 529d85025bSMauro Carvalho Chehabwhenever a parallel port device driver (such as ``lp``) is loaded. 539d85025bSMauro Carvalho Chehab 549d85025bSMauro Carvalho ChehabNote that these are example lines only! You shouldn't in general need 559d85025bSMauro Carvalho Chehabto specify any options to ``parport_pc`` in order to be able to use a 569d85025bSMauro Carvalho Chehabparallel port. 579d85025bSMauro Carvalho Chehab 589d85025bSMauro Carvalho Chehab 599d85025bSMauro Carvalho ChehabParport probe [optional] 609d85025bSMauro Carvalho Chehab------------------------ 619d85025bSMauro Carvalho Chehab 629d85025bSMauro Carvalho ChehabIn 2.2 kernels there was a module called ``parport_probe``, which was used 639d85025bSMauro Carvalho Chehabfor collecting IEEE 1284 device ID information. This has now been 649d85025bSMauro Carvalho Chehabenhanced and now lives with the IEEE 1284 support. When a parallel 659d85025bSMauro Carvalho Chehabport is detected, the devices that are connected to it are analysed, 669d85025bSMauro Carvalho Chehaband information is logged like this:: 679d85025bSMauro Carvalho Chehab 689d85025bSMauro Carvalho Chehab parport0: Printer, BJC-210 (Canon) 699d85025bSMauro Carvalho Chehab 709d85025bSMauro Carvalho ChehabThe probe information is available from files in ``/proc/sys/dev/parport/``. 719d85025bSMauro Carvalho Chehab 729d85025bSMauro Carvalho Chehab 739d85025bSMauro Carvalho ChehabParport linked into the kernel statically 749d85025bSMauro Carvalho Chehab========================================= 759d85025bSMauro Carvalho Chehab 769d85025bSMauro Carvalho ChehabIf you compile the ``parport`` code into the kernel, then you can use 779d85025bSMauro Carvalho Chehabkernel boot parameters to get the same effect. Add something like the 789d85025bSMauro Carvalho Chehabfollowing to your LILO command line:: 799d85025bSMauro Carvalho Chehab 809d85025bSMauro Carvalho Chehab parport=0x3bc parport=0x378,7 parport=0x278,auto,nofifo 819d85025bSMauro Carvalho Chehab 829d85025bSMauro Carvalho ChehabYou can have many ``parport=...`` statements, one for each port you want 839d85025bSMauro Carvalho Chehabto add. Adding ``parport=0`` to the kernel command-line will disable 849d85025bSMauro Carvalho Chehabparport support entirely. Adding ``parport=auto`` to the kernel 859d85025bSMauro Carvalho Chehabcommand-line will make ``parport`` use any IRQ lines or DMA channels that 869d85025bSMauro Carvalho Chehabit auto-detects. 879d85025bSMauro Carvalho Chehab 889d85025bSMauro Carvalho Chehab 899d85025bSMauro Carvalho ChehabFiles in /proc 909d85025bSMauro Carvalho Chehab============== 919d85025bSMauro Carvalho Chehab 929d85025bSMauro Carvalho ChehabIf you have configured the ``/proc`` filesystem into your kernel, you will 939d85025bSMauro Carvalho Chehabsee a new directory entry: ``/proc/sys/dev/parport``. In there will be a 949d85025bSMauro Carvalho Chehabdirectory entry for each parallel port for which parport is 959d85025bSMauro Carvalho Chehabconfigured. In each of those directories are a collection of files 969d85025bSMauro Carvalho Chehabdescribing that parallel port. 979d85025bSMauro Carvalho Chehab 989d85025bSMauro Carvalho ChehabThe ``/proc/sys/dev/parport`` directory tree looks like:: 999d85025bSMauro Carvalho Chehab 1009d85025bSMauro Carvalho Chehab parport 1019d85025bSMauro Carvalho Chehab |-- default 1029d85025bSMauro Carvalho Chehab | |-- spintime 1039d85025bSMauro Carvalho Chehab | `-- timeslice 1049d85025bSMauro Carvalho Chehab |-- parport0 1059d85025bSMauro Carvalho Chehab | |-- autoprobe 1069d85025bSMauro Carvalho Chehab | |-- autoprobe0 1079d85025bSMauro Carvalho Chehab | |-- autoprobe1 1089d85025bSMauro Carvalho Chehab | |-- autoprobe2 1099d85025bSMauro Carvalho Chehab | |-- autoprobe3 1109d85025bSMauro Carvalho Chehab | |-- devices 1119d85025bSMauro Carvalho Chehab | | |-- active 1129d85025bSMauro Carvalho Chehab | | `-- lp 1139d85025bSMauro Carvalho Chehab | | `-- timeslice 1149d85025bSMauro Carvalho Chehab | |-- base-addr 1159d85025bSMauro Carvalho Chehab | |-- irq 1169d85025bSMauro Carvalho Chehab | |-- dma 1179d85025bSMauro Carvalho Chehab | |-- modes 1189d85025bSMauro Carvalho Chehab | `-- spintime 1199d85025bSMauro Carvalho Chehab `-- parport1 1209d85025bSMauro Carvalho Chehab |-- autoprobe 1219d85025bSMauro Carvalho Chehab |-- autoprobe0 1229d85025bSMauro Carvalho Chehab |-- autoprobe1 1239d85025bSMauro Carvalho Chehab |-- autoprobe2 1249d85025bSMauro Carvalho Chehab |-- autoprobe3 1259d85025bSMauro Carvalho Chehab |-- devices 1269d85025bSMauro Carvalho Chehab | |-- active 1279d85025bSMauro Carvalho Chehab | `-- ppa 1289d85025bSMauro Carvalho Chehab | `-- timeslice 1299d85025bSMauro Carvalho Chehab |-- base-addr 1309d85025bSMauro Carvalho Chehab |-- irq 1319d85025bSMauro Carvalho Chehab |-- dma 1329d85025bSMauro Carvalho Chehab |-- modes 1339d85025bSMauro Carvalho Chehab `-- spintime 1349d85025bSMauro Carvalho Chehab 1359d85025bSMauro Carvalho Chehab.. tabularcolumns:: |p{4.0cm}|p{13.5cm}| 1369d85025bSMauro Carvalho Chehab 1379d85025bSMauro Carvalho Chehab======================= ======================================================= 1389d85025bSMauro Carvalho ChehabFile Contents 1399d85025bSMauro Carvalho Chehab======================= ======================================================= 1409d85025bSMauro Carvalho Chehab``devices/active`` A list of the device drivers using that port. A "+" 1419d85025bSMauro Carvalho Chehab will appear by the name of the device currently using 1429d85025bSMauro Carvalho Chehab the port (it might not appear against any). The 1439d85025bSMauro Carvalho Chehab string "none" means that there are no device drivers 1449d85025bSMauro Carvalho Chehab using that port. 1459d85025bSMauro Carvalho Chehab 1469d85025bSMauro Carvalho Chehab``base-addr`` Parallel port's base address, or addresses if the port 1479d85025bSMauro Carvalho Chehab has more than one in which case they are separated 1489d85025bSMauro Carvalho Chehab with tabs. These values might not have any sensible 1499d85025bSMauro Carvalho Chehab meaning for some ports. 1509d85025bSMauro Carvalho Chehab 1519d85025bSMauro Carvalho Chehab``irq`` Parallel port's IRQ, or -1 if none is being used. 1529d85025bSMauro Carvalho Chehab 1539d85025bSMauro Carvalho Chehab``dma`` Parallel port's DMA channel, or -1 if none is being 1549d85025bSMauro Carvalho Chehab used. 1559d85025bSMauro Carvalho Chehab 1569d85025bSMauro Carvalho Chehab``modes`` Parallel port's hardware modes, comma-separated, 1579d85025bSMauro Carvalho Chehab meaning: 1589d85025bSMauro Carvalho Chehab 1599d85025bSMauro Carvalho Chehab - PCSPP 1609d85025bSMauro Carvalho Chehab PC-style SPP registers are available. 1619d85025bSMauro Carvalho Chehab 1629d85025bSMauro Carvalho Chehab - TRISTATE 1639d85025bSMauro Carvalho Chehab Port is bidirectional. 1649d85025bSMauro Carvalho Chehab 1659d85025bSMauro Carvalho Chehab - COMPAT 1669d85025bSMauro Carvalho Chehab Hardware acceleration for printers is 1679d85025bSMauro Carvalho Chehab available and will be used. 1689d85025bSMauro Carvalho Chehab 1699d85025bSMauro Carvalho Chehab - EPP 1709d85025bSMauro Carvalho Chehab Hardware acceleration for EPP protocol 1719d85025bSMauro Carvalho Chehab is available and will be used. 1729d85025bSMauro Carvalho Chehab 1739d85025bSMauro Carvalho Chehab - ECP 1749d85025bSMauro Carvalho Chehab Hardware acceleration for ECP protocol 1759d85025bSMauro Carvalho Chehab is available and will be used. 1769d85025bSMauro Carvalho Chehab 1779d85025bSMauro Carvalho Chehab - DMA 1789d85025bSMauro Carvalho Chehab DMA is available and will be used. 1799d85025bSMauro Carvalho Chehab 1809d85025bSMauro Carvalho Chehab Note that the current implementation will only take 1819d85025bSMauro Carvalho Chehab advantage of COMPAT and ECP modes if it has an IRQ 1829d85025bSMauro Carvalho Chehab line to use. 1839d85025bSMauro Carvalho Chehab 1849d85025bSMauro Carvalho Chehab``autoprobe`` Any IEEE-1284 device ID information that has been 1859d85025bSMauro Carvalho Chehab acquired from the (non-IEEE 1284.3) device. 1869d85025bSMauro Carvalho Chehab 1879d85025bSMauro Carvalho Chehab``autoprobe[0-3]`` IEEE 1284 device ID information retrieved from 1889d85025bSMauro Carvalho Chehab daisy-chain devices that conform to IEEE 1284.3. 1899d85025bSMauro Carvalho Chehab 1909d85025bSMauro Carvalho Chehab``spintime`` The number of microseconds to busy-loop while waiting 1919d85025bSMauro Carvalho Chehab for the peripheral to respond. You might find that 1929d85025bSMauro Carvalho Chehab adjusting this improves performance, depending on your 1939d85025bSMauro Carvalho Chehab peripherals. This is a port-wide setting, i.e. it 1949d85025bSMauro Carvalho Chehab applies to all devices on a particular port. 1959d85025bSMauro Carvalho Chehab 1969d85025bSMauro Carvalho Chehab``timeslice`` The number of milliseconds that a device driver is 1979d85025bSMauro Carvalho Chehab allowed to keep a port claimed for. This is advisory, 1989d85025bSMauro Carvalho Chehab and driver can ignore it if it must. 1999d85025bSMauro Carvalho Chehab 2009d85025bSMauro Carvalho Chehab``default/*`` The defaults for spintime and timeslice. When a new 2019d85025bSMauro Carvalho Chehab port is registered, it picks up the default spintime. 2029d85025bSMauro Carvalho Chehab When a new device is registered, it picks up the 2039d85025bSMauro Carvalho Chehab default timeslice. 2049d85025bSMauro Carvalho Chehab======================= ======================================================= 2059d85025bSMauro Carvalho Chehab 2069d85025bSMauro Carvalho ChehabDevice drivers 2079d85025bSMauro Carvalho Chehab============== 2089d85025bSMauro Carvalho Chehab 2099d85025bSMauro Carvalho ChehabOnce the parport code is initialised, you can attach device drivers to 2109d85025bSMauro Carvalho Chehabspecific ports. Normally this happens automatically; if the lp driver 2119d85025bSMauro Carvalho Chehabis loaded it will create one lp device for each port found. You can 2129d85025bSMauro Carvalho Chehaboverride this, though, by using parameters either when you load the lp 2139d85025bSMauro Carvalho Chehabdriver:: 2149d85025bSMauro Carvalho Chehab 2159d85025bSMauro Carvalho Chehab # insmod lp parport=0,2 2169d85025bSMauro Carvalho Chehab 2179d85025bSMauro Carvalho Chehabor on the LILO command line:: 2189d85025bSMauro Carvalho Chehab 2199d85025bSMauro Carvalho Chehab lp=parport0 lp=parport2 2209d85025bSMauro Carvalho Chehab 2219d85025bSMauro Carvalho ChehabBoth the above examples would inform lp that you want ``/dev/lp0`` to be 2229d85025bSMauro Carvalho Chehabthe first parallel port, and /dev/lp1 to be the **third** parallel port, 2239d85025bSMauro Carvalho Chehabwith no lp device associated with the second port (parport1). Note 2249d85025bSMauro Carvalho Chehabthat this is different to the way older kernels worked; there used to 2259d85025bSMauro Carvalho Chehabbe a static association between the I/O port address and the device 2269d85025bSMauro Carvalho Chehabname, so ``/dev/lp0`` was always the port at 0x3bc. This is no longer the 2279d85025bSMauro Carvalho Chehabcase - if you only have one port, it will default to being ``/dev/lp0``, 2289d85025bSMauro Carvalho Chehabregardless of base address. 2299d85025bSMauro Carvalho Chehab 2309d85025bSMauro Carvalho ChehabAlso: 2319d85025bSMauro Carvalho Chehab 2329d85025bSMauro Carvalho Chehab * If you selected the IEEE 1284 support at compile time, you can say 2339d85025bSMauro Carvalho Chehab ``lp=auto`` on the kernel command line, and lp will create devices 2349d85025bSMauro Carvalho Chehab only for those ports that seem to have printers attached. 2359d85025bSMauro Carvalho Chehab 2369d85025bSMauro Carvalho Chehab * If you give PLIP the ``timid`` parameter, either with ``plip=timid`` on 2379d85025bSMauro Carvalho Chehab the command line, or with ``insmod plip timid=1`` when using modules, 2389d85025bSMauro Carvalho Chehab it will avoid any ports that seem to be in use by other devices. 2399d85025bSMauro Carvalho Chehab 2409d85025bSMauro Carvalho Chehab * IRQ autoprobing works only for a few port types at the moment. 2419d85025bSMauro Carvalho Chehab 2429d85025bSMauro Carvalho ChehabReporting printer problems with parport 2439d85025bSMauro Carvalho Chehab======================================= 2449d85025bSMauro Carvalho Chehab 2459d85025bSMauro Carvalho ChehabIf you are having problems printing, please go through these steps to 2469d85025bSMauro Carvalho Chehabtry to narrow down where the problem area is. 2479d85025bSMauro Carvalho Chehab 2489d85025bSMauro Carvalho ChehabWhen reporting problems with parport, really you need to give all of 2499d85025bSMauro Carvalho Chehabthe messages that ``parport_pc`` spits out when it initialises. There are 2509d85025bSMauro Carvalho Chehabseveral code paths: 2519d85025bSMauro Carvalho Chehab 2529d85025bSMauro Carvalho Chehab- polling 2539d85025bSMauro Carvalho Chehab- interrupt-driven, protocol in software 2549d85025bSMauro Carvalho Chehab- interrupt-driven, protocol in hardware using PIO 2559d85025bSMauro Carvalho Chehab- interrupt-driven, protocol in hardware using DMA 2569d85025bSMauro Carvalho Chehab 2579d85025bSMauro Carvalho ChehabThe kernel messages that ``parport_pc`` logs give an indication of which 2589d85025bSMauro Carvalho Chehabcode path is being used. (They could be a lot better actually..) 2599d85025bSMauro Carvalho Chehab 2609d85025bSMauro Carvalho ChehabFor normal printer protocol, having IEEE 1284 modes enabled or not 2619d85025bSMauro Carvalho Chehabshould not make a difference. 2629d85025bSMauro Carvalho Chehab 2639d85025bSMauro Carvalho ChehabTo turn off the 'protocol in hardware' code paths, disable 2649d85025bSMauro Carvalho Chehab``CONFIG_PARPORT_PC_FIFO``. Note that when they are enabled they are not 2659d85025bSMauro Carvalho Chehabnecessarily **used**; it depends on whether the hardware is available, 2669d85025bSMauro Carvalho Chehabenabled by the BIOS, and detected by the driver. 2679d85025bSMauro Carvalho Chehab 2689d85025bSMauro Carvalho ChehabSo, to start with, disable ``CONFIG_PARPORT_PC_FIFO``, and load ``parport_pc`` 2699d85025bSMauro Carvalho Chehabwith ``irq=none``. See if printing works then. It really should, 2709d85025bSMauro Carvalho Chehabbecause this is the simplest code path. 2719d85025bSMauro Carvalho Chehab 2729d85025bSMauro Carvalho ChehabIf that works fine, try with ``io=0x378 irq=7`` (adjust for your 2739d85025bSMauro Carvalho Chehabhardware), to make it use interrupt-driven in-software protocol. 2749d85025bSMauro Carvalho Chehab 2759d85025bSMauro Carvalho ChehabIf **that** works fine, then one of the hardware modes isn't working 2769d85025bSMauro Carvalho Chehabright. Enable ``CONFIG_FIFO`` (no, it isn't a module option, 2779d85025bSMauro Carvalho Chehaband yes, it should be), set the port to ECP mode in the BIOS and note 2789d85025bSMauro Carvalho Chehabthe DMA channel, and try with:: 2799d85025bSMauro Carvalho Chehab 2809d85025bSMauro Carvalho Chehab io=0x378 irq=7 dma=none (for PIO) 2819d85025bSMauro Carvalho Chehab io=0x378 irq=7 dma=3 (for DMA) 2829d85025bSMauro Carvalho Chehab 2839d85025bSMauro Carvalho Chehab---------- 2849d85025bSMauro Carvalho Chehab 2859d85025bSMauro Carvalho Chehabphilb@gnu.org 2869d85025bSMauro Carvalho Chehabtim@cyberelk.net 287