This is the readme file for the driver for the Philips/LMS cdrom drive
cm206 in combination with the cm260 host adapter card. 

				(c) 1995 David A. van Leeuwen
   
Changes since version 0.99
--------------------------
- Interfacing to the kernel is routed though an extra interface layer, 
  cdrom.c. This allows runtime-configurable `behavior' of the cdrom-drive, 
  independent of the driver. 

Features since version 0.33
---------------------------
- Full audio support, that is, both  workman, workbone and cdp work
  now reasonably. Reading TOC still takes some time. xmcd has been
  reported to run successfully. 
- Made auto-probe code a little better, I hope

Features since version 0.28
---------------------------
- Full speed transfer rate (300 kB/s).
- Minimum kernel memory usage for buffering (less than 3 kB).
- Multisession support.
- Tray locking.
- Statistics of driver accessible to the user.
- Module support.
- Auto-probing of adapter card's base port and irq line,
  also configurable at boot time or module load time.


Decide how you are going to use the driver. There are two
options:

   (a) installing the driver as a resident part of the kernel
   (b) compiling the driver as a loadable module

   Further, you must decide if you are going to specify the base port
   address and the interrupt request line of the adapter card cm260 as
   boot options for (a), module parameters for (b), use automatic
   probing of these values, or hard-wire your adaptor card's settings
   into the source code. If you don't care, you can choose 
   autoprobing, which is the default. In that case you can move on to
   the next step.

Compiling the kernel
--------------------
1) move to /usr/src/linux and do a 

	make config

   If you have chosen option (a), answer yes to CONFIG_CM206 and
   CONFIG_ISO9660_FS.

   If you have chosen option (b), answer yes to CONFIG_MODVERSIONS
   and no (!) to CONFIG_CM206 and CONFIG_ISO9660_FS. 

2) then do a 
	
	make clean; make zImage; make modules

3) do the usual things to install a new image (backup the old one, run
   `rdev -R zImage 1', copy the new image in place, run lilo).  Might
   be `make zlilo'.

Using the driver as a module
----------------------------
If you will only occasionally use the cd-rom driver, you can choose
option (b), install as a loadable module. You may have to re-compile
the module when you upgrade the kernel to a new version. 

Since version 0.96, much of the functionality has been transferred to
a generic cdrom interface in the file cdrom.c. The module cm206.o
depends on cdrom.o. If the latter is not compiled into the kernel,
you must explicitly load it before cm206.o:

	 insmod /usr/src/linux/modules/cdrom.o

To install the module, you use the command, as root

	insmod /usr/src/linux/modules/cm206.o

You can specify the base address on the command line as well as the irq 
line to be used, e.g.

	insmod /usr/src/linux/modules/cm206.o cm206=0x300,11

The order of base port and irq line doesn't matter; if you specify only
one, the other will have the value of the compiled-in default.  You
may also have to install the file-system module `iso9660.o', if you
didn't compile that into the kernel. 


Using the driver as part of the kernel
--------------------------------------
If you have chosen option (a), you can specify the base-port
address and irq on the lilo boot command line, e.g.:

	LILO: linux cm206=0x340,11

This assumes that your linux kernel image keyword is `linux'. 
If you specify either IRQ (3--11) or base port (0x300--0x370),
auto probing is turned off for both settings, thus setting the 
other value to the compiled-in default.

Note that you can also put these parameters in the lilo configuration file:

# linux config
image = /vmlinuz
   root = /dev/hda1
   label = Linux
   append = "cm206=0x340,11"
   read-only


If module parameters and LILO config options don't work
-------------------------------------------------------
If autoprobing does not work, you can hard-wire the default values
of the base port address (CM206_BASE) and interrupt request line
(CM206_IRQ) into the file /usr/src/linux/drivers/cdrom/cm206.h. Change
the defines of CM206_IRQ and CM206_BASE.


Mounting the cdrom
------------------
1) Make sure that the right device is installed in /dev.

  	mknod /dev/cm206cd b 32 0

2) Make sure there is a mount point, e.g., /cdrom 

	mkdir /cdrom

3) mount using a command like this (run as root):

	mount -rt iso9660 /dev/cm206cd /cdrom

4) For user-mounts, add a line in /etc/fstab

	/dev/cm206cd      /cdrom     iso9660 	ro,noauto,user

   This will allow users to give the commands

	mount /cdrom
	umount /cdrom

If things don't work
--------------------

- Try to do a `dmesg' to find out if the driver said anything about
  what is going wrong during the initialization.

- Try to do a `dd if=/dev/cm206cd | od -tc | less' to read from the
  CD.

- Look in the /proc directory to see if `cm206' shows up under one of
  `interrupts', `ioports', `devices' or `modules' (if applicable).


DISCLAIMER 
---------- 
I cannot guarantee that this driver works, or that the hardware will
not be harmed, although I consider it most unlikely. 

I hope that you'll find this driver in some way useful. 

					David van Leeuwen
					david@tm.tno.nl

Note for Linux CDROM vendors
-----------------------------
You are encouraged to include this driver on your Linux CDROM. If
you do, you might consider sending me a free copy of that cd-rom.
You can contact me through my e-mail address, david@tm.tno.nl. 
If this driver is compiled into a kernel to boot off a cdrom, 
you should actually send me a free copy of that cd-rom. 

Copyright
---------
The copyright of the cm206 driver for Linux is 

    (c) 1995 David A. van Leeuwen

The driver is released under the conditions of the GNU general public
license, which can be found in the file COPYING in the root of this
source tree.
