440 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			440 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
| ===================================
 | |
| Linux and parallel port IDE devices
 | |
| ===================================
 | |
| 
 | |
| PARIDE v1.03   (c) 1997-8  Grant Guenther <grant@torque.net>
 | |
| 
 | |
| 1. Introduction
 | |
| ===============
 | |
| 
 | |
| Owing to the simplicity and near universality of the parallel port interface
 | |
| to personal computers, many external devices such as portable hard-disk,
 | |
| CD-ROM, LS-120 and tape drives use the parallel port to connect to their
 | |
| host computer.  While some devices (notably scanners) use ad-hoc methods
 | |
| to pass commands and data through the parallel port interface, most
 | |
| external devices are actually identical to an internal model, but with
 | |
| a parallel-port adapter chip added in.  Some of the original parallel port
 | |
| adapters were little more than mechanisms for multiplexing a SCSI bus.
 | |
| (The Iomega PPA-3 adapter used in the ZIP drives is an example of this
 | |
| approach).  Most current designs, however, take a different approach.
 | |
| The adapter chip reproduces a small ISA or IDE bus in the external device
 | |
| and the communication protocol provides operations for reading and writing
 | |
| device registers, as well as data block transfer functions.  Sometimes,
 | |
| the device being addressed via the parallel cable is a standard SCSI
 | |
| controller like an NCR 5380.  The "ditto" family of external tape
 | |
| drives use the ISA replicator to interface a floppy disk controller,
 | |
| which is then connected to a floppy-tape mechanism.  The vast majority
 | |
| of external parallel port devices, however, are now based on standard
 | |
| IDE type devices, which require no intermediate controller.  If one
 | |
| were to open up a parallel port CD-ROM drive, for instance, one would
 | |
| find a standard ATAPI CD-ROM drive, a power supply, and a single adapter
 | |
| that interconnected a standard PC parallel port cable and a standard
 | |
| IDE cable.  It is usually possible to exchange the CD-ROM device with
 | |
| any other device using the IDE interface.
 | |
| 
 | |
| The document describes the support in Linux for parallel port IDE
 | |
| devices.  It does not cover parallel port SCSI devices, "ditto" tape
 | |
| drives or scanners.  Many different devices are supported by the
 | |
| parallel port IDE subsystem, including:
 | |
| 
 | |
| 	- MicroSolutions backpack CD-ROM
 | |
| 	- MicroSolutions backpack PD/CD
 | |
| 	- MicroSolutions backpack hard-drives
 | |
| 	- MicroSolutions backpack 8000t tape drive
 | |
| 	- SyQuest EZ-135, EZ-230 & SparQ drives
 | |
| 	- Avatar Shark
 | |
| 	- Imation Superdisk LS-120
 | |
| 	- Maxell Superdisk LS-120
 | |
| 	- FreeCom Power CD
 | |
| 	- Hewlett-Packard 5GB and 8GB tape drives
 | |
| 	- Hewlett-Packard 7100 and 7200 CD-RW drives
 | |
| 
 | |
| as well as most of the clone and no-name products on the market.
 | |
| 
 | |
| To support such a wide range of devices, PARIDE, the parallel port IDE
 | |
| subsystem, is actually structured in three parts.   There is a base
 | |
| paride module which provides a registry and some common methods for
 | |
| accessing the parallel ports.  The second component is a set of
 | |
| high-level drivers for each of the different types of supported devices:
 | |
| 
 | |
| 	===	=============
 | |
| 	pd	IDE disk
 | |
| 	pcd	ATAPI CD-ROM
 | |
| 	pf	ATAPI disk
 | |
| 	pt	ATAPI tape
 | |
| 	pg	ATAPI generic
 | |
| 	===	=============
 | |
| 
 | |
| (Currently, the pg driver is only used with CD-R drives).
 | |
| 
 | |
| The high-level drivers function according to the relevant standards.
 | |
| The third component of PARIDE is a set of low-level protocol drivers
 | |
| for each of the parallel port IDE adapter chips.  Thanks to the interest
 | |
| and encouragement of Linux users from many parts of the world,
 | |
| support is available for almost all known adapter protocols:
 | |
| 
 | |
| 	====    ====================================== ====
 | |
|         aten    ATEN EH-100                            (HK)
 | |
|         bpck    Microsolutions backpack                (US)
 | |
|         comm    DataStor (old-type) "commuter" adapter (TW)
 | |
|         dstr    DataStor EP-2000                       (TW)
 | |
|         epat    Shuttle EPAT                           (UK)
 | |
|         epia    Shuttle EPIA                           (UK)
 | |
| 	fit2    FIT TD-2000			       (US)
 | |
| 	fit3    FIT TD-3000			       (US)
 | |
| 	friq    Freecom IQ cable                       (DE)
 | |
|         frpw    Freecom Power                          (DE)
 | |
|         kbic    KingByte KBIC-951A and KBIC-971A       (TW)
 | |
| 	ktti    KT Technology PHd adapter              (SG)
 | |
|         on20    OnSpec 90c20                           (US)
 | |
|         on26    OnSpec 90c26                           (US)
 | |
| 	====    ====================================== ====
 | |
| 
 | |
| 
 | |
| 2. Using the PARIDE subsystem
 | |
| =============================
 | |
| 
 | |
| While configuring the Linux kernel, you may choose either to build
 | |
| the PARIDE drivers into your kernel, or to build them as modules.
 | |
| 
 | |
| In either case, you will need to select "Parallel port IDE device support"
 | |
| as well as at least one of the high-level drivers and at least one
 | |
| of the parallel port communication protocols.  If you do not know
 | |
| what kind of parallel port adapter is used in your drive, you could
 | |
| begin by checking the file names and any text files on your DOS
 | |
| installation floppy.  Alternatively, you can look at the markings on
 | |
| the adapter chip itself.  That's usually sufficient to identify the
 | |
| correct device.
 | |
| 
 | |
| You can actually select all the protocol modules, and allow the PARIDE
 | |
| subsystem to try them all for you.
 | |
| 
 | |
| For the "brand-name" products listed above, here are the protocol
 | |
| and high-level drivers that you would use:
 | |
| 
 | |
| 	================	============	======	========
 | |
| 	Manufacturer		Model		Driver	Protocol
 | |
| 	================	============	======	========
 | |
| 	MicroSolutions		CD-ROM		pcd	bpck
 | |
| 	MicroSolutions		PD drive	pf	bpck
 | |
| 	MicroSolutions		hard-drive	pd	bpck
 | |
| 	MicroSolutions          8000t tape      pt      bpck
 | |
| 	SyQuest			EZ, SparQ	pd	epat
 | |
| 	Imation			Superdisk	pf	epat
 | |
| 	Maxell                  Superdisk       pf      friq
 | |
| 	Avatar			Shark		pd	epat
 | |
| 	FreeCom			CD-ROM		pcd	frpw
 | |
| 	Hewlett-Packard		5GB Tape	pt	epat
 | |
| 	Hewlett-Packard		7200e (CD)	pcd	epat
 | |
| 	Hewlett-Packard		7200e (CD-R)	pg	epat
 | |
| 	================	============	======	========
 | |
| 
 | |
| 2.1  Configuring built-in drivers
 | |
| ---------------------------------
 | |
| 
 | |
| We recommend that you get to know how the drivers work and how to
 | |
| configure them as loadable modules, before attempting to compile a
 | |
| kernel with the drivers built-in.
 | |
| 
 | |
| If you built all of your PARIDE support directly into your kernel,
 | |
| and you have just a single parallel port IDE device, your kernel should
 | |
| locate it automatically for you.  If you have more than one device,
 | |
| you may need to give some command line options to your bootloader
 | |
| (eg: LILO), how to do that is beyond the scope of this document.
 | |
| 
 | |
| The high-level drivers accept a number of command line parameters, all
 | |
| of which are documented in the source files in linux/drivers/block/paride.
 | |
| By default, each driver will automatically try all parallel ports it
 | |
| can find, and all protocol types that have been installed, until it finds
 | |
| a parallel port IDE adapter.  Once it finds one, the probe stops.  So,
 | |
| if you have more than one device, you will need to tell the drivers
 | |
| how to identify them.  This requires specifying the port address, the
 | |
| protocol identification number and, for some devices, the drive's
 | |
| chain ID.  While your system is booting, a number of messages are
 | |
| displayed on the console.  Like all such messages, they can be
 | |
| reviewed with the 'dmesg' command.  Among those messages will be
 | |
| some lines like::
 | |
| 
 | |
| 	paride: bpck registered as protocol 0
 | |
| 	paride: epat registered as protocol 1
 | |
| 
 | |
| The numbers will always be the same until you build a new kernel with
 | |
| different protocol selections.  You should note these numbers as you
 | |
| will need them to identify the devices.
 | |
| 
 | |
| If you happen to be using a MicroSolutions backpack device, you will
 | |
| also need to know the unit ID number for each drive.  This is usually
 | |
| the last two digits of the drive's serial number (but read MicroSolutions'
 | |
| documentation about this).
 | |
| 
 | |
| As an example, let's assume that you have a MicroSolutions PD/CD drive
 | |
| with unit ID number 36 connected to the parallel port at 0x378, a SyQuest
 | |
| EZ-135 connected to the chained port on the PD/CD drive and also an
 | |
| Imation Superdisk connected to port 0x278.  You could give the following
 | |
| options on your boot command::
 | |
| 
 | |
| 	pd.drive0=0x378,1 pf.drive0=0x278,1 pf.drive1=0x378,0,36
 | |
| 
 | |
| In the last option, pf.drive1 configures device /dev/pf1, the 0x378
 | |
| is the parallel port base address, the 0 is the protocol registration
 | |
| number and 36 is the chain ID.
 | |
| 
 | |
| Please note:  while PARIDE will work both with and without the
 | |
| PARPORT parallel port sharing system that is included by the
 | |
| "Parallel port support" option, PARPORT must be included and enabled
 | |
| if you want to use chains of devices on the same parallel port.
 | |
| 
 | |
| 2.2  Loading and configuring PARIDE as modules
 | |
| ----------------------------------------------
 | |
| 
 | |
| It is much faster and simpler to get to understand the PARIDE drivers
 | |
| if you use them as loadable kernel modules.
 | |
| 
 | |
| Note 1:
 | |
| 	using these drivers with the "kerneld" automatic module loading
 | |
| 	system is not recommended for beginners, and is not documented here.
 | |
| 
 | |
| Note 2:
 | |
| 	if you build PARPORT support as a loadable module, PARIDE must
 | |
| 	also be built as loadable modules, and PARPORT must be loaded before
 | |
| 	the PARIDE modules.
 | |
| 
 | |
| To use PARIDE, you must begin by::
 | |
| 
 | |
| 	insmod paride
 | |
| 
 | |
| this loads a base module which provides a registry for the protocols,
 | |
| among other tasks.
 | |
| 
 | |
| Then, load as many of the protocol modules as you think you might need.
 | |
| As you load each module, it will register the protocols that it supports,
 | |
| and print a log message to your kernel log file and your console. For
 | |
| example::
 | |
| 
 | |
| 	# insmod epat
 | |
| 	paride: epat registered as protocol 0
 | |
| 	# insmod kbic
 | |
| 	paride: k951 registered as protocol 1
 | |
|         paride: k971 registered as protocol 2
 | |
| 
 | |
| Finally, you can load high-level drivers for each kind of device that
 | |
| you have connected.  By default, each driver will autoprobe for a single
 | |
| device, but you can support up to four similar devices by giving their
 | |
| individual coordinates when you load the driver.
 | |
| 
 | |
| For example, if you had two no-name CD-ROM drives both using the
 | |
| KingByte KBIC-951A adapter, one on port 0x378 and the other on 0x3bc
 | |
| you could give the following command::
 | |
| 
 | |
| 	# insmod pcd drive0=0x378,1 drive1=0x3bc,1
 | |
| 
 | |
| For most adapters, giving a port address and protocol number is sufficient,
 | |
| but check the source files in linux/drivers/block/paride for more
 | |
| information.  (Hopefully someone will write some man pages one day !).
 | |
| 
 | |
| As another example, here's what happens when PARPORT is installed, and
 | |
| a SyQuest EZ-135 is attached to port 0x378::
 | |
| 
 | |
| 	# insmod paride
 | |
| 	paride: version 1.0 installed
 | |
| 	# insmod epat
 | |
| 	paride: epat registered as protocol 0
 | |
| 	# insmod pd
 | |
| 	pd: pd version 1.0, major 45, cluster 64, nice 0
 | |
| 	pda: Sharing parport1 at 0x378
 | |
| 	pda: epat 1.0, Shuttle EPAT chip c3 at 0x378, mode 5 (EPP-32), delay 1
 | |
| 	pda: SyQuest EZ135A, 262144 blocks [128M], (512/16/32), removable media
 | |
| 	 pda: pda1
 | |
| 
 | |
| Note that the last line is the output from the generic partition table
 | |
| scanner - in this case it reports that it has found a disk with one partition.
 | |
| 
 | |
| 2.3  Using a PARIDE device
 | |
| --------------------------
 | |
| 
 | |
| Once the drivers have been loaded, you can access PARIDE devices in the
 | |
| same way as their traditional counterparts.  You will probably need to
 | |
| create the device "special files".  Here is a simple script that you can
 | |
| cut to a file and execute::
 | |
| 
 | |
|   #!/bin/bash
 | |
|   #
 | |
|   # mkd -- a script to create the device special files for the PARIDE subsystem
 | |
|   #
 | |
|   function mkdev {
 | |
|     mknod $1 $2 $3 $4 ; chmod 0660 $1 ; chown root:disk $1
 | |
|   }
 | |
|   #
 | |
|   function pd {
 | |
|     D=$( printf \\$( printf "x%03x" $[ $1 + 97 ] ) )
 | |
|     mkdev pd$D b 45 $[ $1 * 16 ]
 | |
|     for P in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
 | |
|     do mkdev pd$D$P b 45 $[ $1 * 16 + $P ]
 | |
|     done
 | |
|   }
 | |
|   #
 | |
|   cd /dev
 | |
|   #
 | |
|   for u in 0 1 2 3 ; do pd $u ; done
 | |
|   for u in 0 1 2 3 ; do mkdev pcd$u b 46 $u ; done
 | |
|   for u in 0 1 2 3 ; do mkdev pf$u  b 47 $u ; done
 | |
|   for u in 0 1 2 3 ; do mkdev pt$u  c 96 $u ; done
 | |
|   for u in 0 1 2 3 ; do mkdev npt$u c 96 $[ $u + 128 ] ; done
 | |
|   for u in 0 1 2 3 ; do mkdev pg$u  c 97 $u ; done
 | |
|   #
 | |
|   # end of mkd
 | |
| 
 | |
| With the device files and drivers in place, you can access PARIDE devices
 | |
| like any other Linux device.   For example, to mount a CD-ROM in pcd0, use::
 | |
| 
 | |
| 	mount /dev/pcd0 /cdrom
 | |
| 
 | |
| If you have a fresh Avatar Shark cartridge, and the drive is pda, you
 | |
| might do something like::
 | |
| 
 | |
| 	fdisk /dev/pda		-- make a new partition table with
 | |
| 				   partition 1 of type 83
 | |
| 
 | |
| 	mke2fs /dev/pda1	-- to build the file system
 | |
| 
 | |
| 	mkdir /shark		-- make a place to mount the disk
 | |
| 
 | |
| 	mount /dev/pda1 /shark
 | |
| 
 | |
| Devices like the Imation superdisk work in the same way, except that
 | |
| they do not have a partition table.  For example to make a 120MB
 | |
| floppy that you could share with a DOS system::
 | |
| 
 | |
| 	mkdosfs /dev/pf0
 | |
| 	mount /dev/pf0 /mnt
 | |
| 
 | |
| 
 | |
| 2.4  The pf driver
 | |
| ------------------
 | |
| 
 | |
| The pf driver is intended for use with parallel port ATAPI disk
 | |
| devices.  The most common devices in this category are PD drives
 | |
| and LS-120 drives.  Traditionally, media for these devices are not
 | |
| partitioned.  Consequently, the pf driver does not support partitioned
 | |
| media.  This may be changed in a future version of the driver.
 | |
| 
 | |
| 2.5  Using the pt driver
 | |
| ------------------------
 | |
| 
 | |
| The pt driver for parallel port ATAPI tape drives is a minimal driver.
 | |
| It does not yet support many of the standard tape ioctl operations.
 | |
| For best performance, a block size of 32KB should be used.  You will
 | |
| probably want to set the parallel port delay to 0, if you can.
 | |
| 
 | |
| 2.6  Using the pg driver
 | |
| ------------------------
 | |
| 
 | |
| The pg driver can be used in conjunction with the cdrecord program
 | |
| to create CD-ROMs.  Please get cdrecord version 1.6.1 or later
 | |
| from ftp://ftp.fokus.gmd.de/pub/unix/cdrecord/ .  To record CD-R media
 | |
| your parallel port should ideally be set to EPP mode, and the "port delay"
 | |
| should be set to 0.  With those settings it is possible to record at 2x
 | |
| speed without any buffer underruns.  If you cannot get the driver to work
 | |
| in EPP mode, try to use "bidirectional" or "PS/2" mode and 1x speeds only.
 | |
| 
 | |
| 
 | |
| 3. Troubleshooting
 | |
| ==================
 | |
| 
 | |
| 3.1  Use EPP mode if you can
 | |
| ----------------------------
 | |
| 
 | |
| The most common problems that people report with the PARIDE drivers
 | |
| concern the parallel port CMOS settings.  At this time, none of the
 | |
| PARIDE protocol modules support ECP mode, or any ECP combination modes.
 | |
| If you are able to do so, please set your parallel port into EPP mode
 | |
| using your CMOS setup procedure.
 | |
| 
 | |
| 3.2  Check the port delay
 | |
| -------------------------
 | |
| 
 | |
| Some parallel ports cannot reliably transfer data at full speed.  To
 | |
| offset the errors, the PARIDE protocol modules introduce a "port
 | |
| delay" between each access to the i/o ports.  Each protocol sets
 | |
| a default value for this delay.  In most cases, the user can override
 | |
| the default and set it to 0 - resulting in somewhat higher transfer
 | |
| rates.  In some rare cases (especially with older 486 systems) the
 | |
| default delays are not long enough.  if you experience corrupt data
 | |
| transfers, or unexpected failures, you may wish to increase the
 | |
| port delay.   The delay can be programmed using the "driveN" parameters
 | |
| to each of the high-level drivers.  Please see the notes above, or
 | |
| read the comments at the beginning of the driver source files in
 | |
| linux/drivers/block/paride.
 | |
| 
 | |
| 3.3  Some drives need a printer reset
 | |
| -------------------------------------
 | |
| 
 | |
| There appear to be a number of "noname" external drives on the market
 | |
| that do not always power up correctly.  We have noticed this with some
 | |
| drives based on OnSpec and older Freecom adapters.  In these rare cases,
 | |
| the adapter can often be reinitialised by issuing a "printer reset" on
 | |
| the parallel port.  As the reset operation is potentially disruptive in
 | |
| multiple device environments, the PARIDE drivers will not do it
 | |
| automatically.  You can however, force a printer reset by doing::
 | |
| 
 | |
| 	insmod lp reset=1
 | |
| 	rmmod lp
 | |
| 
 | |
| If you have one of these marginal cases, you should probably build
 | |
| your paride drivers as modules, and arrange to do the printer reset
 | |
| before loading the PARIDE drivers.
 | |
| 
 | |
| 3.4  Use the verbose option and dmesg if you need help
 | |
| ------------------------------------------------------
 | |
| 
 | |
| While a lot of testing has gone into these drivers to make them work
 | |
| as smoothly as possible, problems will arise.  If you do have problems,
 | |
| please check all the obvious things first:  does the drive work in
 | |
| DOS with the manufacturer's drivers ?  If that doesn't yield any useful
 | |
| clues, then please make sure that only one drive is hooked to your system,
 | |
| and that either (a) PARPORT is enabled or (b) no other device driver
 | |
| is using your parallel port (check in /proc/ioports).  Then, load the
 | |
| appropriate drivers (you can load several protocol modules if you want)
 | |
| as in::
 | |
| 
 | |
| 	# insmod paride
 | |
| 	# insmod epat
 | |
| 	# insmod bpck
 | |
| 	# insmod kbic
 | |
| 	...
 | |
| 	# insmod pd verbose=1
 | |
| 
 | |
| (using the correct driver for the type of device you have, of course).
 | |
| The verbose=1 parameter will cause the drivers to log a trace of their
 | |
| activity as they attempt to locate your drive.
 | |
| 
 | |
| Use 'dmesg' to capture a log of all the PARIDE messages (any messages
 | |
| beginning with paride:, a protocol module's name or a driver's name) and
 | |
| include that with your bug report.  You can submit a bug report in one
 | |
| of two ways.  Either send it directly to the author of the PARIDE suite,
 | |
| by e-mail to grant@torque.net, or join the linux-parport mailing list
 | |
| and post your report there.
 | |
| 
 | |
| 3.5  For more information or help
 | |
| ---------------------------------
 | |
| 
 | |
| You can join the linux-parport mailing list by sending a mail message
 | |
| to:
 | |
| 
 | |
| 		linux-parport-request@torque.net
 | |
| 
 | |
| with the single word::
 | |
| 
 | |
| 		subscribe
 | |
| 
 | |
| in the body of the mail message (not in the subject line).   Please be
 | |
| sure that your mail program is correctly set up when you do this,  as
 | |
| the list manager is a robot that will subscribe you using the reply
 | |
| address in your mail headers.  REMOVE any anti-spam gimmicks you may
 | |
| have in your mail headers, when sending mail to the list server.
 | |
| 
 | |
| You might also find some useful information on the linux-parport
 | |
| web pages (although they are not always up to date) at
 | |
| 
 | |
| 	http://web.archive.org/web/%2E/http://www.torque.net/parport/
 |