cdu31a
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:7k
- 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.