| |
| CDU31A/CDU33A Driver Info |
| ------------------------- |
| |
| Information on the Sony CDU31A/CDU33A CDROM driver for the Linux |
| kernel. |
| |
| Corey Minyard (minyard@metronet.com) |
| |
| Colossians 3:17 |
| |
| Crude Table of Contents |
| ----------------------- |
| |
| Setting Up the Hardware |
| Configuring the Kernel |
| Configuring as a Module |
| Driver Special Features |
| |
| |
| This device driver handles Sony CDU31A/CDU33A CDROM drives and |
| provides a complete block-level interface as well as an ioctl() |
| interface as specified in include/linux/cdrom.h). With this |
| interface, CDROMs can be accessed, standard audio CDs can be played |
| back normally, and CD audio information can be read off the drive. |
| |
| Note that this will only work for CDU31A/CDU33A drives. Some vendors |
| market their drives as CDU31A compatible. They lie. Their drives are |
| really CDU31A hardware interface compatible (they can plug into the |
| same card). They are not software compatible. |
| |
| Setting Up the Hardware |
| ----------------------- |
| |
| The CDU31A driver is unable to safely tell if an interface card is |
| present that it can use because the interface card does not announce |
| its presence in any way besides placing 4 I/O locations in memory. It |
| used to just probe memory and attempt commands, but Linus wisely asked |
| me to remove that because it could really screw up other hardware in |
| the system. |
| |
| Because of this, you must tell the kernel where the drive interface |
| is, what interrupts are used, and possibly if you are on a PAS-16 |
| soundcard. |
| |
| If you have the Sony CDU31A/CDU33A drive interface card, the following |
| diagram will help you set it up. If you have another card, you are on |
| your own. You need to make sure that the I/O address and interrupt is |
| not used by another card in the system. You will need to know the I/O |
| address and interrupt you have set. Note that use of interrupts is |
| highly recommended, if possible, it really cuts down on CPU used. |
| Unfortunately, most soundcards do not support interrupts for their |
| CDROM interfaces. By default, the Sony interface card comes with |
| interrupts disabled. |
| |
| +----------+-----------------+----------------------+ |
| | JP1 | 34 Pin Conn | | |
| | JP2 +-----------------+ | |
| | JP3 | |
| | JP4 | |
| | +--+ |
| | | +-+ |
| | | | | External |
| | | | | Connector |
| | | | | |
| | | +-+ |
| | +--+ |
| | | |
| | +--------+ |
| | | |
| +------------------------------------------+ |
| |
| JP1 sets the Base Address, using the following settings: |
| |
| Address Pin 1 Pin 2 |
| ------- ----- ----- |
| 0x320 Short Short |
| 0x330 Short Open |
| 0x340 Open Short |
| 0x360 Open Open |
| |
| JP2 and JP3 configure the DMA channel; they must be set the same. |
| |
| DMA Pin 1 Pin 2 Pin 3 |
| --- ----- ----- ----- |
| 1 On Off On |
| 2 Off On Off |
| 3 Off Off On |
| |
| JP4 Configures the IRQ: |
| |
| IRQ Pin 1 Pin 2 Pin 3 Pin 4 |
| --- ----- ----- ----- ----- |
| 3 Off Off On Off |
| 4 Off Off* Off On |
| 5 On Off Off Off |
| 6 Off On Off Off |
| |
| The documentation states to set this for interrupt |
| 4, but I think that is a mistake. |
| |
| Note that if you have another interface card, you will need to look at |
| the documentation to find the I/O base address. This is specified to |
| the SLCD.SYS driver for DOS with the /B: parameter, so you can look at |
| you DOS driver setup to find the address, if necessary. |
| |
| Configuring the Kernel |
| ---------------------- |
| |
| You must tell the kernel where the drive is at boot time. This can be |
| done at the Linux boot prompt, by using LILO, or by using Bootlin. |
| Note that this is no substitute for HOWTOs and LILO documentation, if |
| you are confused please read those for info on bootline configuration |
| and LILO. |
| |
| At the linux boot prompt, press the ALT key and add the following line |
| after the boot name (you can let the kernel boot, it will tell you the |
| default boot name while booting): |
| |
| cdu31a=<base address>,<interrupt>[,PAS] |
| |
| The base address needs to have "0x" in front of it, since it is in |
| hex. For instance, to configure a drive at address 320 on interrupt 5, |
| use the following: |
| |
| cdu31a=0x320,5 |
| |
| I use the following boot line: |
| |
| cdu31a=0x1f88,0,PAS |
| |
| because I have a PAS-16 which does not support interrupt for the |
| CDU31A interface. |
| |
| Adding this as an append line at the beginning of the /etc/lilo.conf |
| file will set it for lilo configurations. I have the following as the |
| first line in my lilo.conf file: |
| |
| append="cdu31a=0x1f88,0" |
| |
| I'm not sure how to set up Bootlin (I have never used it), if someone |
| would like to fill in this section please do. |
| |
| |
| Configuring as a Module |
| ----------------------- |
| |
| The driver supports loading as a module. However, you must specify |
| the boot address and interrupt on the boot line to insmod. You can't |
| use modprobe to load it, since modprobe doesn't support setting |
| variables. |
| |
| Anyway, I use the following line to load my driver as a module |
| |
| /sbin/insmod /lib/modules/`uname -r`/misc/cdu31a.o cdu31a_port=0x1f88 |
| |
| You can set the following variables in the driver: |
| |
| cdu31a_port=<I/O address> - sets the base I/O. If hex, put 0x in |
| front of it. This must be specified. |
| |
| cdu31a_irq=<interrupt> - Sets the interrupt number. Leaving this |
| off will turn interrupts off. |
| |
| |
| Driver Special Features |
| ----------------------- |
| |
| This section describes features beyond the normal audio and CD-ROM |
| functions of the drive. |
| |
| 2048 byte buffer mode |
| |
| If a disk is mounted with -o block=2048, data is copied straight from |
| the drive data port to the buffer. Otherwise, the readahead buffer |
| must be involved to hold the other 1K of data when a 1K block |
| operation is done. Note that with 2048 byte blocks you cannot execute |
| files from the CD. |
| |
| XA compatibility |
| |
| The driver should support XA disks for both the CDU31A and CDU33A. It |
| does this transparently, the using program doesn't need to set it. |
| |
| Multi-Session |
| |
| A multi-session disk looks just like a normal disk to the user. Just |
| mount one normally, and all the data should be there. A special |
| thanks to Koen for help with this! |
| |
| Raw sector I/O |
| |
| Using the CDROMREADAUDIO it is possible to read raw audio and data |
| tracks. Both operations return 2352 bytes per sector. On the data |
| tracks, the first 12 bytes is not returned by the drive and the value |
| of that data is indeterminate. |