]>
Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | |
2 | CDU31A/CDU33A Driver Info | |
3 | ------------------------- | |
4 | ||
5 | Information on the Sony CDU31A/CDU33A CDROM driver for the Linux | |
6 | kernel. | |
7 | ||
8 | Corey Minyard (minyard@metronet.com) | |
9 | ||
10 | Colossians 3:17 | |
11 | ||
12 | Crude Table of Contents | |
13 | ----------------------- | |
14 | ||
15 | Setting Up the Hardware | |
16 | Configuring the Kernel | |
17 | Configuring as a Module | |
18 | Driver Special Features | |
19 | ||
20 | ||
21 | This device driver handles Sony CDU31A/CDU33A CDROM drives and | |
22 | provides a complete block-level interface as well as an ioctl() | |
23 | interface as specified in include/linux/cdrom.h). With this | |
24 | interface, CDROMs can be accessed, standard audio CDs can be played | |
25 | back normally, and CD audio information can be read off the drive. | |
26 | ||
27 | Note that this will only work for CDU31A/CDU33A drives. Some vendors | |
28 | market their drives as CDU31A compatible. They lie. Their drives are | |
29 | really CDU31A hardware interface compatible (they can plug into the | |
30 | same card). They are not software compatible. | |
31 | ||
32 | Setting Up the Hardware | |
33 | ----------------------- | |
34 | ||
35 | The CDU31A driver is unable to safely tell if an interface card is | |
36 | present that it can use because the interface card does not announce | |
37 | its presence in any way besides placing 4 I/O locations in memory. It | |
38 | used to just probe memory and attempt commands, but Linus wisely asked | |
39 | me to remove that because it could really screw up other hardware in | |
40 | the system. | |
41 | ||
42 | Because of this, you must tell the kernel where the drive interface | |
43 | is, what interrupts are used, and possibly if you are on a PAS-16 | |
44 | soundcard. | |
45 | ||
46 | If you have the Sony CDU31A/CDU33A drive interface card, the following | |
47 | diagram will help you set it up. If you have another card, you are on | |
48 | your own. You need to make sure that the I/O address and interrupt is | |
49 | not used by another card in the system. You will need to know the I/O | |
50 | address and interrupt you have set. Note that use of interrupts is | |
51 | highly recommended, if possible, it really cuts down on CPU used. | |
52 | Unfortunately, most soundcards do not support interrupts for their | |
53 | CDROM interfaces. By default, the Sony interface card comes with | |
54 | interrupts disabled. | |
55 | ||
56 | +----------+-----------------+----------------------+ | |
57 | | JP1 | 34 Pin Conn | | | |
58 | | JP2 +-----------------+ | | |
59 | | JP3 | | |
60 | | JP4 | | |
61 | | +--+ | |
62 | | | +-+ | |
63 | | | | | External | |
64 | | | | | Connector | |
65 | | | | | | |
66 | | | +-+ | |
67 | | +--+ | |
68 | | | | |
69 | | +--------+ | |
70 | | | | |
71 | +------------------------------------------+ | |
72 | ||
73 | JP1 sets the Base Address, using the following settings: | |
74 | ||
75 | Address Pin 1 Pin 2 | |
76 | ------- ----- ----- | |
77 | 0x320 Short Short | |
78 | 0x330 Short Open | |
79 | 0x340 Open Short | |
80 | 0x360 Open Open | |
81 | ||
82 | JP2 and JP3 configure the DMA channel; they must be set the same. | |
83 | ||
84 | DMA Pin 1 Pin 2 Pin 3 | |
85 | --- ----- ----- ----- | |
86 | 1 On Off On | |
87 | 2 Off On Off | |
88 | 3 Off Off On | |
89 | ||
90 | JP4 Configures the IRQ: | |
91 | ||
92 | IRQ Pin 1 Pin 2 Pin 3 Pin 4 | |
93 | --- ----- ----- ----- ----- | |
94 | 3 Off Off On Off | |
95 | 4 Off Off* Off On | |
96 | 5 On Off Off Off | |
97 | 6 Off On Off Off | |
98 | ||
99 | The documentation states to set this for interrupt | |
100 | 4, but I think that is a mistake. | |
101 | ||
102 | Note that if you have another interface card, you will need to look at | |
103 | the documentation to find the I/O base address. This is specified to | |
104 | the SLCD.SYS driver for DOS with the /B: parameter, so you can look at | |
105 | you DOS driver setup to find the address, if necessary. | |
106 | ||
107 | Configuring the Kernel | |
108 | ---------------------- | |
109 | ||
110 | You must tell the kernel where the drive is at boot time. This can be | |
111 | done at the Linux boot prompt, by using LILO, or by using Bootlin. | |
112 | Note that this is no substitute for HOWTOs and LILO documentation, if | |
113 | you are confused please read those for info on bootline configuration | |
114 | and LILO. | |
115 | ||
116 | At the linux boot prompt, press the ALT key and add the following line | |
117 | after the boot name (you can let the kernel boot, it will tell you the | |
118 | default boot name while booting): | |
119 | ||
120 | cdu31a=<base address>,<interrupt>[,PAS] | |
121 | ||
122 | The base address needs to have "0x" in front of it, since it is in | |
123 | hex. For instance, to configure a drive at address 320 on interrupt 5, | |
124 | use the following: | |
125 | ||
126 | cdu31a=0x320,5 | |
127 | ||
128 | I use the following boot line: | |
129 | ||
130 | cdu31a=0x1f88,0,PAS | |
131 | ||
132 | because I have a PAS-16 which does not support interrupt for the | |
133 | CDU31A interface. | |
134 | ||
135 | Adding this as an append line at the beginning of the /etc/lilo.conf | |
136 | file will set it for lilo configurations. I have the following as the | |
137 | first line in my lilo.conf file: | |
138 | ||
139 | append="cdu31a=0x1f88,0" | |
140 | ||
141 | I'm not sure how to set up Bootlin (I have never used it), if someone | |
142 | would like to fill in this section please do. | |
143 | ||
144 | ||
145 | Configuring as a Module | |
146 | ----------------------- | |
147 | ||
148 | The driver supports loading as a module. However, you must specify | |
149 | the boot address and interrupt on the boot line to insmod. You can't | |
150 | use modprobe to load it, since modprobe doesn't support setting | |
151 | variables. | |
152 | ||
153 | Anyway, I use the following line to load my driver as a module | |
154 | ||
155 | /sbin/insmod /lib/modules/`uname -r`/misc/cdu31a.o cdu31a_port=0x1f88 | |
156 | ||
157 | You can set the following variables in the driver: | |
158 | ||
159 | cdu31a_port=<I/O address> - sets the base I/O. If hex, put 0x in | |
160 | front of it. This must be specified. | |
161 | ||
162 | cdu31a_irq=<interrupt> - Sets the interrupt number. Leaving this | |
163 | off will turn interrupts off. | |
164 | ||
165 | ||
166 | Driver Special Features | |
167 | ----------------------- | |
168 | ||
169 | This section describes features beyond the normal audio and CD-ROM | |
170 | functions of the drive. | |
171 | ||
172 | 2048 byte buffer mode | |
173 | ||
174 | If a disk is mounted with -o block=2048, data is copied straight from | |
175 | the drive data port to the buffer. Otherwise, the readahead buffer | |
176 | must be involved to hold the other 1K of data when a 1K block | |
177 | operation is done. Note that with 2048 byte blocks you cannot execute | |
178 | files from the CD. | |
179 | ||
180 | XA compatibility | |
181 | ||
182 | The driver should support XA disks for both the CDU31A and CDU33A. It | |
183 | does this transparently, the using program doesn't need to set it. | |
184 | ||
185 | Multi-Session | |
186 | ||
187 | A multi-session disk looks just like a normal disk to the user. Just | |
188 | mount one normally, and all the data should be there. A special | |
189 | thanks to Koen for help with this! | |
190 | ||
191 | Raw sector I/O | |
192 | ||
193 | Using the CDROMREADAUDIO it is possible to read raw audio and data | |
194 | tracks. Both operations return 2352 bytes per sector. On the data | |
195 | tracks, the first 12 bytes is not returned by the drive and the value | |
196 | of that data is indeterminate. |