Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | |
| 2 | Linux and parallel port IDE devices |
| 3 | |
| 4 | PARIDE v1.03 (c) 1997-8 Grant Guenther <grant@torque.net> |
| 5 | |
| 6 | 1. Introduction |
| 7 | |
| 8 | Owing to the simplicity and near universality of the parallel port interface |
| 9 | to personal computers, many external devices such as portable hard-disk, |
| 10 | CD-ROM, LS-120 and tape drives use the parallel port to connect to their |
| 11 | host computer. While some devices (notably scanners) use ad-hoc methods |
| 12 | to pass commands and data through the parallel port interface, most |
| 13 | external devices are actually identical to an internal model, but with |
| 14 | a parallel-port adapter chip added in. Some of the original parallel port |
| 15 | adapters were little more than mechanisms for multiplexing a SCSI bus. |
| 16 | (The Iomega PPA-3 adapter used in the ZIP drives is an example of this |
| 17 | approach). Most current designs, however, take a different approach. |
| 18 | The adapter chip reproduces a small ISA or IDE bus in the external device |
| 19 | and the communication protocol provides operations for reading and writing |
| 20 | device registers, as well as data block transfer functions. Sometimes, |
| 21 | the device being addressed via the parallel cable is a standard SCSI |
| 22 | controller like an NCR 5380. The "ditto" family of external tape |
| 23 | drives use the ISA replicator to interface a floppy disk controller, |
| 24 | which is then connected to a floppy-tape mechanism. The vast majority |
| 25 | of external parallel port devices, however, are now based on standard |
| 26 | IDE type devices, which require no intermediate controller. If one |
| 27 | were to open up a parallel port CD-ROM drive, for instance, one would |
| 28 | find a standard ATAPI CD-ROM drive, a power supply, and a single adapter |
| 29 | that interconnected a standard PC parallel port cable and a standard |
| 30 | IDE cable. It is usually possible to exchange the CD-ROM device with |
| 31 | any other device using the IDE interface. |
| 32 | |
| 33 | The document describes the support in Linux for parallel port IDE |
| 34 | devices. It does not cover parallel port SCSI devices, "ditto" tape |
| 35 | drives or scanners. Many different devices are supported by the |
| 36 | parallel port IDE subsystem, including: |
| 37 | |
| 38 | MicroSolutions backpack CD-ROM |
| 39 | MicroSolutions backpack PD/CD |
| 40 | MicroSolutions backpack hard-drives |
| 41 | MicroSolutions backpack 8000t tape drive |
| 42 | SyQuest EZ-135, EZ-230 & SparQ drives |
| 43 | Avatar Shark |
| 44 | Imation Superdisk LS-120 |
| 45 | Maxell Superdisk LS-120 |
| 46 | FreeCom Power CD |
| 47 | Hewlett-Packard 5GB and 8GB tape drives |
| 48 | Hewlett-Packard 7100 and 7200 CD-RW drives |
| 49 | |
| 50 | as well as most of the clone and no-name products on the market. |
| 51 | |
| 52 | To support such a wide range of devices, PARIDE, the parallel port IDE |
| 53 | subsystem, is actually structured in three parts. There is a base |
| 54 | paride module which provides a registry and some common methods for |
| 55 | accessing the parallel ports. The second component is a set of |
| 56 | high-level drivers for each of the different types of supported devices: |
| 57 | |
| 58 | pd IDE disk |
| 59 | pcd ATAPI CD-ROM |
| 60 | pf ATAPI disk |
| 61 | pt ATAPI tape |
| 62 | pg ATAPI generic |
| 63 | |
| 64 | (Currently, the pg driver is only used with CD-R drives). |
| 65 | |
| 66 | The high-level drivers function according to the relevant standards. |
| 67 | The third component of PARIDE is a set of low-level protocol drivers |
| 68 | for each of the parallel port IDE adapter chips. Thanks to the interest |
| 69 | and encouragement of Linux users from many parts of the world, |
| 70 | support is available for almost all known adapter protocols: |
| 71 | |
| 72 | aten ATEN EH-100 (HK) |
| 73 | bpck Microsolutions backpack (US) |
| 74 | comm DataStor (old-type) "commuter" adapter (TW) |
| 75 | dstr DataStor EP-2000 (TW) |
| 76 | epat Shuttle EPAT (UK) |
| 77 | epia Shuttle EPIA (UK) |
| 78 | fit2 FIT TD-2000 (US) |
| 79 | fit3 FIT TD-3000 (US) |
| 80 | friq Freecom IQ cable (DE) |
| 81 | frpw Freecom Power (DE) |
| 82 | kbic KingByte KBIC-951A and KBIC-971A (TW) |
| 83 | ktti KT Technology PHd adapter (SG) |
| 84 | on20 OnSpec 90c20 (US) |
| 85 | on26 OnSpec 90c26 (US) |
| 86 | |
| 87 | |
| 88 | 2. Using the PARIDE subsystem |
| 89 | |
| 90 | While configuring the Linux kernel, you may choose either to build |
| 91 | the PARIDE drivers into your kernel, or to build them as modules. |
| 92 | |
| 93 | In either case, you will need to select "Parallel port IDE device support" |
| 94 | as well as at least one of the high-level drivers and at least one |
| 95 | of the parallel port communication protocols. If you do not know |
| 96 | what kind of parallel port adapter is used in your drive, you could |
| 97 | begin by checking the file names and any text files on your DOS |
| 98 | installation floppy. Alternatively, you can look at the markings on |
| 99 | the adapter chip itself. That's usually sufficient to identify the |
| 100 | correct device. |
| 101 | |
| 102 | You can actually select all the protocol modules, and allow the PARIDE |
| 103 | subsystem to try them all for you. |
| 104 | |
| 105 | For the "brand-name" products listed above, here are the protocol |
| 106 | and high-level drivers that you would use: |
| 107 | |
| 108 | Manufacturer Model Driver Protocol |
| 109 | |
| 110 | MicroSolutions CD-ROM pcd bpck |
| 111 | MicroSolutions PD drive pf bpck |
| 112 | MicroSolutions hard-drive pd bpck |
| 113 | MicroSolutions 8000t tape pt bpck |
| 114 | SyQuest EZ, SparQ pd epat |
| 115 | Imation Superdisk pf epat |
| 116 | Maxell Superdisk pf friq |
| 117 | Avatar Shark pd epat |
| 118 | FreeCom CD-ROM pcd frpw |
| 119 | Hewlett-Packard 5GB Tape pt epat |
| 120 | Hewlett-Packard 7200e (CD) pcd epat |
| 121 | Hewlett-Packard 7200e (CD-R) pg epat |
| 122 | |
| 123 | 2.1 Configuring built-in drivers |
| 124 | |
| 125 | We recommend that you get to know how the drivers work and how to |
| 126 | configure them as loadable modules, before attempting to compile a |
| 127 | kernel with the drivers built-in. |
| 128 | |
| 129 | If you built all of your PARIDE support directly into your kernel, |
| 130 | and you have just a single parallel port IDE device, your kernel should |
| 131 | locate it automatically for you. If you have more than one device, |
| 132 | you may need to give some command line options to your bootloader |
| 133 | (eg: LILO), how to do that is beyond the scope of this document. |
| 134 | |
| 135 | The high-level drivers accept a number of command line parameters, all |
| 136 | of which are documented in the source files in linux/drivers/block/paride. |
| 137 | By default, each driver will automatically try all parallel ports it |
| 138 | can find, and all protocol types that have been installed, until it finds |
| 139 | a parallel port IDE adapter. Once it finds one, the probe stops. So, |
| 140 | if you have more than one device, you will need to tell the drivers |
| 141 | how to identify them. This requires specifying the port address, the |
| 142 | protocol identification number and, for some devices, the drive's |
| 143 | chain ID. While your system is booting, a number of messages are |
| 144 | displayed on the console. Like all such messages, they can be |
| 145 | reviewed with the 'dmesg' command. Among those messages will be |
| 146 | some lines like: |
| 147 | |
| 148 | paride: bpck registered as protocol 0 |
| 149 | paride: epat registered as protocol 1 |
| 150 | |
| 151 | The numbers will always be the same until you build a new kernel with |
| 152 | different protocol selections. You should note these numbers as you |
| 153 | will need them to identify the devices. |
| 154 | |
| 155 | If you happen to be using a MicroSolutions backpack device, you will |
| 156 | also need to know the unit ID number for each drive. This is usually |
| 157 | the last two digits of the drive's serial number (but read MicroSolutions' |
| 158 | documentation about this). |
| 159 | |
| 160 | As an example, let's assume that you have a MicroSolutions PD/CD drive |
| 161 | with unit ID number 36 connected to the parallel port at 0x378, a SyQuest |
| 162 | EZ-135 connected to the chained port on the PD/CD drive and also an |
| 163 | Imation Superdisk connected to port 0x278. You could give the following |
| 164 | options on your boot command: |
| 165 | |
| 166 | pd.drive0=0x378,1 pf.drive0=0x278,1 pf.drive1=0x378,0,36 |
| 167 | |
| 168 | In the last option, pf.drive1 configures device /dev/pf1, the 0x378 |
| 169 | is the parallel port base address, the 0 is the protocol registration |
| 170 | number and 36 is the chain ID. |
| 171 | |
| 172 | Please note: while PARIDE will work both with and without the |
| 173 | PARPORT parallel port sharing system that is included by the |
| 174 | "Parallel port support" option, PARPORT must be included and enabled |
| 175 | if you want to use chains of devices on the same parallel port. |
| 176 | |
| 177 | 2.2 Loading and configuring PARIDE as modules |
| 178 | |
| 179 | It is much faster and simpler to get to understand the PARIDE drivers |
| 180 | if you use them as loadable kernel modules. |
| 181 | |
| 182 | Note 1: using these drivers with the "kerneld" automatic module loading |
| 183 | system is not recommended for beginners, and is not documented here. |
| 184 | |
| 185 | Note 2: if you build PARPORT support as a loadable module, PARIDE must |
| 186 | also be built as loadable modules, and PARPORT must be loaded before the |
| 187 | PARIDE modules. |
| 188 | |
| 189 | To use PARIDE, you must begin by |
| 190 | |
| 191 | insmod paride |
| 192 | |
| 193 | this loads a base module which provides a registry for the protocols, |
| 194 | among other tasks. |
| 195 | |
| 196 | Then, load as many of the protocol modules as you think you might need. |
| 197 | As you load each module, it will register the protocols that it supports, |
| 198 | and print a log message to your kernel log file and your console. For |
| 199 | example: |
| 200 | |
| 201 | # insmod epat |
| 202 | paride: epat registered as protocol 0 |
| 203 | # insmod kbic |
| 204 | paride: k951 registered as protocol 1 |
| 205 | paride: k971 registered as protocol 2 |
| 206 | |
| 207 | Finally, you can load high-level drivers for each kind of device that |
| 208 | you have connected. By default, each driver will autoprobe for a single |
| 209 | device, but you can support up to four similar devices by giving their |
| 210 | individual co-ordinates when you load the driver. |
| 211 | |
| 212 | For example, if you had two no-name CD-ROM drives both using the |
| 213 | KingByte KBIC-951A adapter, one on port 0x378 and the other on 0x3bc |
| 214 | you could give the following command: |
| 215 | |
| 216 | # insmod pcd drive0=0x378,1 drive1=0x3bc,1 |
| 217 | |
| 218 | For most adapters, giving a port address and protocol number is sufficient, |
| 219 | but check the source files in linux/drivers/block/paride for more |
| 220 | information. (Hopefully someone will write some man pages one day !). |
| 221 | |
| 222 | As another example, here's what happens when PARPORT is installed, and |
| 223 | a SyQuest EZ-135 is attached to port 0x378: |
| 224 | |
| 225 | # insmod paride |
| 226 | paride: version 1.0 installed |
| 227 | # insmod epat |
| 228 | paride: epat registered as protocol 0 |
| 229 | # insmod pd |
| 230 | pd: pd version 1.0, major 45, cluster 64, nice 0 |
| 231 | pda: Sharing parport1 at 0x378 |
| 232 | pda: epat 1.0, Shuttle EPAT chip c3 at 0x378, mode 5 (EPP-32), delay 1 |
| 233 | pda: SyQuest EZ135A, 262144 blocks [128M], (512/16/32), removable media |
| 234 | pda: pda1 |
| 235 | |
| 236 | Note that the last line is the output from the generic partition table |
| 237 | scanner - in this case it reports that it has found a disk with one partition. |
| 238 | |
| 239 | 2.3 Using a PARIDE device |
| 240 | |
| 241 | Once the drivers have been loaded, you can access PARIDE devices in the |
| 242 | same way as their traditional counterparts. You will probably need to |
| 243 | create the device "special files". Here is a simple script that you can |
| 244 | cut to a file and execute: |
| 245 | |
| 246 | #!/bin/bash |
| 247 | # |
| 248 | # mkd -- a script to create the device special files for the PARIDE subsystem |
| 249 | # |
| 250 | function mkdev { |
| 251 | mknod $1 $2 $3 $4 ; chmod 0660 $1 ; chown root:disk $1 |
| 252 | } |
| 253 | # |
| 254 | function pd { |
| 255 | D=$( printf \\$( printf "x%03x" $[ $1 + 97 ] ) ) |
| 256 | mkdev pd$D b 45 $[ $1 * 16 ] |
| 257 | for P in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
| 258 | do mkdev pd$D$P b 45 $[ $1 * 16 + $P ] |
| 259 | done |
| 260 | } |
| 261 | # |
| 262 | cd /dev |
| 263 | # |
| 264 | for u in 0 1 2 3 ; do pd $u ; done |
| 265 | for u in 0 1 2 3 ; do mkdev pcd$u b 46 $u ; done |
| 266 | for u in 0 1 2 3 ; do mkdev pf$u b 47 $u ; done |
| 267 | for u in 0 1 2 3 ; do mkdev pt$u c 96 $u ; done |
| 268 | for u in 0 1 2 3 ; do mkdev npt$u c 96 $[ $u + 128 ] ; done |
| 269 | for u in 0 1 2 3 ; do mkdev pg$u c 97 $u ; done |
| 270 | # |
| 271 | # end of mkd |
| 272 | |
| 273 | With the device files and drivers in place, you can access PARIDE devices |
| 274 | like any other Linux device. For example, to mount a CD-ROM in pcd0, use: |
| 275 | |
| 276 | mount /dev/pcd0 /cdrom |
| 277 | |
| 278 | If you have a fresh Avatar Shark cartridge, and the drive is pda, you |
| 279 | might do something like: |
| 280 | |
| 281 | fdisk /dev/pda -- make a new partition table with |
| 282 | partition 1 of type 83 |
| 283 | |
| 284 | mke2fs /dev/pda1 -- to build the file system |
| 285 | |
| 286 | mkdir /shark -- make a place to mount the disk |
| 287 | |
| 288 | mount /dev/pda1 /shark |
| 289 | |
| 290 | Devices like the Imation superdisk work in the same way, except that |
| 291 | they do not have a partition table. For example to make a 120MB |
| 292 | floppy that you could share with a DOS system: |
| 293 | |
| 294 | mkdosfs /dev/pf0 |
| 295 | mount /dev/pf0 /mnt |
| 296 | |
| 297 | |
| 298 | 2.4 The pf driver |
| 299 | |
| 300 | The pf driver is intended for use with parallel port ATAPI disk |
| 301 | devices. The most common devices in this category are PD drives |
| 302 | and LS-120 drives. Traditionally, media for these devices are not |
| 303 | partitioned. Consequently, the pf driver does not support partitioned |
| 304 | media. This may be changed in a future version of the driver. |
| 305 | |
| 306 | 2.5 Using the pt driver |
| 307 | |
| 308 | The pt driver for parallel port ATAPI tape drives is a minimal driver. |
| 309 | It does not yet support many of the standard tape ioctl operations. |
| 310 | For best performance, a block size of 32KB should be used. You will |
| 311 | probably want to set the parallel port delay to 0, if you can. |
| 312 | |
| 313 | 2.6 Using the pg driver |
| 314 | |
| 315 | The pg driver can be used in conjunction with the cdrecord program |
| 316 | to create CD-ROMs. Please get cdrecord version 1.6.1 or later |
| 317 | from ftp://ftp.fokus.gmd.de/pub/unix/cdrecord/ . To record CD-R media |
| 318 | your parallel port should ideally be set to EPP mode, and the "port delay" |
| 319 | should be set to 0. With those settings it is possible to record at 2x |
| 320 | speed without any buffer underruns. If you cannot get the driver to work |
| 321 | in EPP mode, try to use "bidirectional" or "PS/2" mode and 1x speeds only. |
| 322 | |
| 323 | |
| 324 | 3. Troubleshooting |
| 325 | |
| 326 | 3.1 Use EPP mode if you can |
| 327 | |
| 328 | The most common problems that people report with the PARIDE drivers |
| 329 | concern the parallel port CMOS settings. At this time, none of the |
| 330 | PARIDE protocol modules support ECP mode, or any ECP combination modes. |
| 331 | If you are able to do so, please set your parallel port into EPP mode |
| 332 | using your CMOS setup procedure. |
| 333 | |
| 334 | 3.2 Check the port delay |
| 335 | |
| 336 | Some parallel ports cannot reliably transfer data at full speed. To |
| 337 | offset the errors, the PARIDE protocol modules introduce a "port |
| 338 | delay" between each access to the i/o ports. Each protocol sets |
| 339 | a default value for this delay. In most cases, the user can override |
| 340 | the default and set it to 0 - resulting in somewhat higher transfer |
| 341 | rates. In some rare cases (especially with older 486 systems) the |
| 342 | default delays are not long enough. if you experience corrupt data |
| 343 | transfers, or unexpected failures, you may wish to increase the |
| 344 | port delay. The delay can be programmed using the "driveN" parameters |
| 345 | to each of the high-level drivers. Please see the notes above, or |
| 346 | read the comments at the beginning of the driver source files in |
| 347 | linux/drivers/block/paride. |
| 348 | |
| 349 | 3.3 Some drives need a printer reset |
| 350 | |
| 351 | There appear to be a number of "noname" external drives on the market |
| 352 | that do not always power up correctly. We have noticed this with some |
| 353 | drives based on OnSpec and older Freecom adapters. In these rare cases, |
| 354 | the adapter can often be reinitialised by issuing a "printer reset" on |
| 355 | the parallel port. As the reset operation is potentially disruptive in |
| 356 | multiple device environments, the PARIDE drivers will not do it |
| 357 | automatically. You can however, force a printer reset by doing: |
| 358 | |
| 359 | insmod lp reset=1 |
| 360 | rmmod lp |
| 361 | |
| 362 | If you have one of these marginal cases, you should probably build |
| 363 | your paride drivers as modules, and arrange to do the printer reset |
| 364 | before loading the PARIDE drivers. |
| 365 | |
| 366 | 3.4 Use the verbose option and dmesg if you need help |
| 367 | |
| 368 | While a lot of testing has gone into these drivers to make them work |
| 369 | as smoothly as possible, problems will arise. If you do have problems, |
| 370 | please check all the obvious things first: does the drive work in |
| 371 | DOS with the manufacturer's drivers ? If that doesn't yield any useful |
| 372 | clues, then please make sure that only one drive is hooked to your system, |
| 373 | and that either (a) PARPORT is enabled or (b) no other device driver |
| 374 | is using your parallel port (check in /proc/ioports). Then, load the |
| 375 | appropriate drivers (you can load several protocol modules if you want) |
| 376 | as in: |
| 377 | |
| 378 | # insmod paride |
| 379 | # insmod epat |
| 380 | # insmod bpck |
| 381 | # insmod kbic |
| 382 | ... |
| 383 | # insmod pd verbose=1 |
| 384 | |
| 385 | (using the correct driver for the type of device you have, of course). |
| 386 | The verbose=1 parameter will cause the drivers to log a trace of their |
| 387 | activity as they attempt to locate your drive. |
| 388 | |
| 389 | Use 'dmesg' to capture a log of all the PARIDE messages (any messages |
| 390 | beginning with paride:, a protocol module's name or a driver's name) and |
| 391 | include that with your bug report. You can submit a bug report in one |
| 392 | of two ways. Either send it directly to the author of the PARIDE suite, |
| 393 | by e-mail to grant@torque.net, or join the linux-parport mailing list |
| 394 | and post your report there. |
| 395 | |
| 396 | 3.5 For more information or help |
| 397 | |
| 398 | You can join the linux-parport mailing list by sending a mail message |
| 399 | to |
| 400 | linux-parport-request@torque.net |
| 401 | |
| 402 | with the single word |
| 403 | |
| 404 | subscribe |
| 405 | |
| 406 | in the body of the mail message (not in the subject line). Please be |
| 407 | sure that your mail program is correctly set up when you do this, as |
| 408 | the list manager is a robot that will subscribe you using the reply |
| 409 | address in your mail headers. REMOVE any anti-spam gimmicks you may |
| 410 | have in your mail headers, when sending mail to the list server. |
| 411 | |
| 412 | You might also find some useful information on the linux-parport |
| 413 | web pages (although they are not always up to date) at |
| 414 | |
| 415 | http://www.torque.net/parport/ |
| 416 | |
| 417 | |