essreg.h revision 1.2 1 1.1 augustss /*
2 1.1 augustss * Copyright 1997
3 1.1 augustss * Digital Equipment Corporation. All rights reserved.
4 1.1 augustss *
5 1.1 augustss * This software is furnished under license and may be used and
6 1.1 augustss * copied only in accordance with the following terms and conditions.
7 1.1 augustss * Subject to these conditions, you may download, copy, install,
8 1.1 augustss * use, modify and distribute this software in source and/or binary
9 1.1 augustss * form. No title or ownership is transferred hereby.
10 1.1 augustss *
11 1.1 augustss * 1) Any source code used, modified or distributed must reproduce
12 1.1 augustss * and retain this copyright notice and list of conditions as
13 1.1 augustss * they appear in the source file.
14 1.1 augustss *
15 1.1 augustss * 2) No right is granted to use any trade name, trademark, or logo of
16 1.1 augustss * Digital Equipment Corporation. Neither the "Digital Equipment
17 1.1 augustss * Corporation" name nor any trademark or logo of Digital Equipment
18 1.1 augustss * Corporation may be used to endorse or promote products derived
19 1.1 augustss * from this software without the prior written permission of
20 1.1 augustss * Digital Equipment Corporation.
21 1.1 augustss *
22 1.1 augustss * 3) This software is provided "AS-IS" and any express or implied
23 1.1 augustss * warranties, including but not limited to, any implied warranties
24 1.1 augustss * of merchantability, fitness for a particular purpose, or
25 1.1 augustss * non-infringement are disclaimed. In no event shall DIGITAL be
26 1.1 augustss * liable for any damages whatsoever, and in particular, DIGITAL
27 1.1 augustss * shall not be liable for special, indirect, consequential, or
28 1.1 augustss * incidental damages or damages for lost profits, loss of
29 1.1 augustss * revenue or loss of use, whether such damages arise in contract,
30 1.1 augustss * negligence, tort, under statute, in equity, at law or otherwise,
31 1.1 augustss * even if advised of the possibility of such damage.
32 1.1 augustss */
33 1.1 augustss
34 1.1 augustss /*
35 1.2 augustss ** @(#) $RCSfile: essreg.h,v $ $Revision: 1.2 $ (SHARK) $Date: 1998/07/31 15:17:18 $
36 1.1 augustss **
37 1.1 augustss **++
38 1.1 augustss **
39 1.1 augustss ** essreg.h
40 1.1 augustss **
41 1.1 augustss ** FACILITY:
42 1.1 augustss **
43 1.1 augustss ** DIGITAL Network Appliance Reference Design (DNARD)
44 1.1 augustss **
45 1.1 augustss ** MODULE DESCRIPTION:
46 1.1 augustss **
47 1.1 augustss ** This module contains the constant definitions for the device
48 1.1 augustss ** registers on the ESS Technologies 1888/1887/888 sound chip.
49 1.1 augustss **
50 1.1 augustss ** AUTHORS:
51 1.1 augustss **
52 1.1 augustss ** Blair Fidler Software Engineering Australia
53 1.1 augustss ** Gold Coast, Australia.
54 1.1 augustss **
55 1.1 augustss ** CREATION DATE:
56 1.1 augustss **
57 1.1 augustss ** March 10, 1997.
58 1.1 augustss **
59 1.1 augustss ** MODIFICATION HISTORY:
60 1.1 augustss **
61 1.1 augustss **--
62 1.1 augustss */
63 1.1 augustss
64 1.1 augustss /*
65 1.1 augustss * DSP commands. This unit handles MIDI and audio capabilities.
66 1.1 augustss * The DSP can be reset, data/commands can be read or written to it,
67 1.1 augustss * and it can generate interrupts. Interrupts are generated for MIDI
68 1.1 augustss * input or DMA completion. They seem to have neglected the fact
69 1.1 augustss * that it would be nice to have a MIDI transmission complete interrupt.
70 1.1 augustss * Worse, the DMA engine is half-duplex. This means you need to do
71 1.1 augustss * (timed) programmed I/O to be able to record and play simulataneously.
72 1.1 augustss */
73 1.1 augustss #define ESS_ACMD_DAC8WRITE 0x10 /* direct-mode 8-bit DAC write */
74 1.1 augustss #define ESS_ACMD_DAC16WRITE 0x11 /* direct-mode 16-bit DAC write */
75 1.1 augustss #define ESS_ACMD_DMA8OUT 0x14 /* 8-bit linear DMA output */
76 1.1 augustss #define ESS_ACMD_DMA16OUT 0x15 /* 16-bit linear DMA output */
77 1.1 augustss #define ESS_ACMD_AUTODMA8OUT 0x1C /* auto-init 8-bit linear DMA output */
78 1.1 augustss #define ESS_ACMD_AUTODMA16OUT 0x1D /* auto-init 16-bit linear DMA output */
79 1.1 augustss #define ESS_ACMD_ADC8READ 0x20 /* direct-mode 8-bit ADC read */
80 1.1 augustss #define ESS_ACMD_ADC16READ 0x21 /* direct-mode 16-bit ADC read */
81 1.1 augustss #define ESS_ACMD_DMA8IN 0x24 /* 8-bit linear DMA input */
82 1.1 augustss #define ESS_ACMD_DMA16IN 0x25 /* 16-bit linear DMA input */
83 1.1 augustss #define ESS_ACMD_AUTODMA8IN 0x2C /* auto-init 8-bit linear DMA input */
84 1.1 augustss #define ESS_ACMD_AUTODMA16IN 0x2D /* auto-init 16-bit linear DMA input */
85 1.1 augustss #define ESS_ACMD_SETTIMECONST1 0x40 /* set time constant (1MHz base) */
86 1.1 augustss #define ESS_ACMD_SETTIMECONST15 0x41 /* set time constant (1.5MHz base) */
87 1.1 augustss #define ESS_ACMD_SETFILTER 0x42 /* set filter clock independently */
88 1.1 augustss #define ESS_ACMD_BLOCKSIZE 0x48 /* set blk size for high speed xfer */
89 1.1 augustss
90 1.1 augustss #define ESS_ACMD_DMA4OUT 0x74 /* 4-bit ADPCM DMA output */
91 1.1 augustss #define ESS_ACMD_DMA4OUTREF 0x75 /* 4-bit ADPCM DMA output with ref */
92 1.1 augustss #define ESS_ACMD_DMA2_6OUT 0x76 /* 2.6-bit ADPCM DMA output */
93 1.1 augustss #define ESS_ACMD_DMA2_6OUTREF 0x77 /* 2.6-bit ADPCM DMA output with ref */
94 1.1 augustss #define ESS_ACMD_DMA2OUT 0x7A /* 2-bit ADPCM DMA output */
95 1.1 augustss #define ESS_ACMD_DMA2OUTREF 0x7B /* 2-bit ADPCM DMA output with ref */
96 1.1 augustss #define ESS_ACMD_SILENCEOUT 0x80 /* output a block of silence */
97 1.1 augustss #define ESS_ACMD_START_AUTO_OUT 0x90 /* start auto-init 8-bit DMA output */
98 1.1 augustss #define ESS_ACMD_START_OUT 0x91 /* start 8-bit DMA output */
99 1.1 augustss #define ESS_ACMD_START_AUTO_IN 0x98 /* start auto-init 8-bit DMA input */
100 1.1 augustss #define ESS_ACMD_START_IN 0x99 /* start 8-bit DMA input */
101 1.1 augustss
102 1.1 augustss #define ESS_XCMD_SAMPLE_RATE 0xA1 /* sample rate for Audio1 channel */
103 1.1 augustss #define ESS_XCMD_FILTER_CLOCK 0xA2 /* filter clock for Audio1 channel*/
104 1.1 augustss #define ESS_XCMD_XFER_COUNTLO 0xA4 /* */
105 1.1 augustss #define ESS_XCMD_XFER_COUNTHI 0xA5 /* */
106 1.1 augustss #define ESS_XCMD_AUDIO_CTRL 0xA8 /* */
107 1.1 augustss #define ESS_AUDIO_CTRL_MONITOR 0x08 /* 0=disable/1=enable */
108 1.1 augustss #define ESS_AUDIO_CTRL_MONO 0x02 /* 0=disable/1=enable */
109 1.1 augustss #define ESS_AUDIO_CTRL_STEREO 0x01 /* 0=disable/1=enable */
110 1.1 augustss #define ESS_XCMD_PREAMP_CTRL 0xA9 /* */
111 1.1 augustss #define ESS_PREAMP_CTRL_ENABLE 0x04
112 1.1 augustss
113 1.1 augustss #define ESS_XCMD_IRQ_CTRL 0xB1 /* legacy audio interrupt control */
114 1.2 augustss #define ESS_IRQ_CTRL_INTRA 0x00
115 1.2 augustss #define ESS_IRQ_CTRL_INTRB 0x04
116 1.2 augustss #define ESS_IRQ_CTRL_INTRC 0x08
117 1.2 augustss #define ESS_IRQ_CTRL_INTRD 0x0C
118 1.2 augustss #define ESS_IRQ_CTRL_MASK 0x10
119 1.2 augustss #define ESS_IRQ_CTRL_EXT 0x40
120 1.1 augustss #define ESS_XCMD_DRQ_CTRL 0xB2 /* audio DRQ control */
121 1.2 augustss #define ESS_DRQ_CTRL_DRQA 0x04
122 1.2 augustss #define ESS_DRQ_CTRL_DRQB 0x08
123 1.2 augustss #define ESS_DRQ_CTRL_DRQC 0x0C
124 1.2 augustss #define ESS_DRQ_CTRL_PU 0x10
125 1.2 augustss #define ESS_DRQ_CTRL_EXT 0x40
126 1.1 augustss #define ESS_XCMD_VOLIN_CTRL 0xB4 /* stereo input volume control */
127 1.1 augustss #define ESS_XCMD_AUDIO1_CTRL1 0xB7 /* */
128 1.1 augustss #define ESS_AUDIO1_CTRL1_FIFO_SIGNED 0x20 /* 0=unsigned/1=signed */
129 1.1 augustss #define ESS_AUDIO1_CTRL1_FIFO_SIZE 0x04 /* 0=8-bit/1=16-bit */
130 1.1 augustss #define ESS_XCMD_AUDIO1_CTRL2 0xB8 /* */
131 1.1 augustss #define ESS_AUDIO1_CTRL2_FIFO_ENABLE 0x01 /* 0=disable/1=enable */
132 1.1 augustss #define ESS_AUDIO1_CTRL2_DMA_READ 0x02 /* 0=DMA write/1=DMA read */
133 1.1 augustss #define ESS_AUDIO1_CTRL2_ADC_ENABLE 0x08 /* 0=DAC mode/1=ADC mode */
134 1.1 augustss #define ESS_XCMD_DEMAND_CTRL 0xB9 /* */
135 1.1 augustss
136 1.1 augustss #define ESS_ACMD_ENABLE_EXT 0xC6 /* enable ESS extension commands */
137 1.1 augustss #define ESS_ACMD_DISABLE_EXT 0xC7 /* enable ESS extension commands */
138 1.1 augustss
139 1.1 augustss #define ESS_ACMD_PAUSE_DMA 0xD0 /* pause DMA */
140 1.1 augustss #define ESS_ACMD_ENABLE_SPKR 0xD1 /* enable Audio1 DAC input to mixer */
141 1.1 augustss #define ESS_ACMD_DISABLE_SPKR 0xD3 /* disable Audio1 DAC input to mixer */
142 1.1 augustss #define ESS_ACMD_CONT_DMA 0xD4 /* continue paused DMA */
143 1.1 augustss #define ESS_ACMD_SPKR_STATUS 0xD8 /* return Audio1 DAC status: */
144 1.1 augustss #define ESS_SPKR_OFF 0x00
145 1.1 augustss #define ESS_SPKR_ON 0xFF
146 1.1 augustss #define ESS_ACMD_VERSION 0xE1 /* get version number */
147 1.1 augustss #define ESS_ACMD_LEGACY_ID 0xE7 /* get legacy ES688/ES1688 ID bytes */
148 1.1 augustss
149 1.1 augustss #define ESS_MINRATE 5000 /* XXX */
150 1.1 augustss #define ESS_MAXRATE 50000 /* XXX */
151 1.1 augustss
152 1.1 augustss /*
153 1.1 augustss * Macros to detect valid hardware configuration data.
154 1.1 augustss */
155 1.2 augustss #define ESS_IRQ1_VALID(irq) ((irq) == 5 || (irq) == 7 || (irq) == 9 || (irq) == 10)
156 1.1 augustss
157 1.2 augustss #define ESS_IRQ2_VALID(irq) ((irq) == 15)
158 1.1 augustss
159 1.2 augustss #define ESS_IRQ12_VALID(irq) ((irq) == 5 || (irq) == 7 || (irq) == 9 || (irq) == 10 || (irq) == 15)
160 1.2 augustss
161 1.2 augustss #define ESS_DRQ1_VALID(chan) ((chan) == 0 || (chan) == 1 || (chan) == 3)
162 1.1 augustss
163 1.1 augustss #define ESS_DRQ2_VALID(chan, model) (((model) != ESS_1887) ? ((chan) == 5) : ((chan) == 0 || (chan) == 1 || (chan) == 3 || (chan) == 5))
164 1.1 augustss
165 1.1 augustss #define ESS_BASE_VALID(base) ((base) == 0x220 || (base) == 0x230 || (base) == 0x240 || (base) == 0x250)
166 1.1 augustss
167 1.1 augustss /*
168 1.1 augustss * Macros to manipulate gain values
169 1.1 augustss */
170 1.1 augustss #define ESS_4BIT_GAIN(x) ((x) & 0xf0)
171 1.1 augustss #define ESS_3BIT_GAIN(x) (((x) & 0xe0) >> 1)
172 1.1 augustss #define ESS_STEREO_GAIN(l, r) ((l) | ((r) >> 4))
173 1.1 augustss #define ESS_MONO_GAIN(x) ((x) >> 4)
174 1.1 augustss
175 1.1 augustss #ifdef ESS_AMODE_LOW
176 1.1 augustss /*
177 1.1 augustss * Registers used to configure ESS chip via Read Key Sequence
178 1.1 augustss */
179 1.1 augustss #define ESS_CONFIG_KEY_BASE 0x229
180 1.1 augustss #define ESS_CONFIG_KEY_PORTS 3
181 1.1 augustss #else
182 1.1 augustss /*
183 1.1 augustss * Registers used to configure ESS chip via System Control Register (SCR)
184 1.1 augustss */
185 1.1 augustss #define ESS_SCR_ACCESS_BASE 0xF9
186 1.1 augustss #define ESS_SCR_ACCESS_PORTS 3
187 1.1 augustss #define ESS_SCR_LOCK 0
188 1.1 augustss #define ESS_SCR_UNLOCK 2
189 1.1 augustss
190 1.1 augustss #define ESS_SCR_BASE 0xE0
191 1.1 augustss #define ESS_SCR_PORTS 2
192 1.1 augustss #define ESS_SCR_INDEX 0
193 1.1 augustss #define ESS_SCR_DATA 1
194 1.1 augustss
195 1.1 augustss /*
196 1.1 augustss * Bit definitions for SCR
197 1.1 augustss */
198 1.1 augustss #define ESS_SCR_AUDIO_ENABLE 0x04
199 1.1 augustss #define ESS_SCR_AUDIO_220 0x00
200 1.1 augustss #define ESS_SCR_AUDIO_230 0x01
201 1.1 augustss #define ESS_SCR_AUDIO_240 0x02
202 1.1 augustss #define ESS_SCR_AUDIO_250 0x03
203 1.1 augustss #endif
204 1.1 augustss
205 1.1 augustss /*****************************************************************************/
206 1.1 augustss /* DSP Timeout Definitions */
207 1.1 augustss /*****************************************************************************/
208 1.2 augustss #define ESS_READ_TIMEOUT 5000 /* number of times to try a read, 5ms*/
209 1.2 augustss #define ESS_WRITE_TIMEOUT 5000 /* number of times to try a write, 5ms */
210 1.1 augustss
211 1.1 augustss
212 1.1 augustss #define ESS_NPORT 16
213 1.1 augustss #define ESS_DSP_RESET 0x06
214 1.2 augustss #define ESS_RESET_EXT 0x03 /* reset and use second DMA */
215 1.2 augustss #define ESS_MAGIC 0xAA /* response to successful reset */
216 1.1 augustss
217 1.1 augustss #define ESS_DSP_READ 0x0A
218 1.1 augustss #define ESS_DSP_WRITE 0x0C
219 1.1 augustss
220 1.1 augustss #define ESS_DSP_RW_STATUS 0x0C
221 1.1 augustss #define ESS_CLEAR_INTR 0x0E
222 1.1 augustss
223 1.1 augustss #define ESS_DSP_READ_STATUS 0x0C
224 1.1 augustss #define ESS_DSP_READ_MASK 0x40
225 1.1 augustss #define ESS_DSP_READ_READY 0x40
226 1.1 augustss
227 1.1 augustss #define ESS_DSP_WRITE_STATUS 0x0C
228 1.1 augustss #define ESS_DSP_WRITE_MASK 0x80
229 1.1 augustss #define ESS_DSP_WRITE_READY 0x00
230 1.1 augustss
231 1.1 augustss
232 1.1 augustss #define ESS_MIX_REG_SELECT 0x04
233 1.1 augustss #define ESS_MIX_REG_DATA 0x05
234 1.1 augustss #define ESS_MIX_RESET 0x00 /* mixer reset port and value */
235 1.1 augustss
236 1.1 augustss
237 1.1 augustss /*
238 1.1 augustss * ESS Mixer registers
239 1.1 augustss */
240 1.1 augustss #define ESS_MREG_SAMPLE_RATE 0x70 /* sample rate for Audio2 channel */
241 1.1 augustss #define ESS_MREG_FILTER_CLOCK 0x72 /* filter clock for Audio2 channel */
242 1.1 augustss #define ESS_MREG_XFER_COUNTLO 0x74 /* low-byte of DMA transfer size */
243 1.1 augustss #define ESS_MREG_XFER_COUNTHI 0x76 /* high-byte of DMA transfer size */
244 1.1 augustss #define ESS_MREG_AUDIO2_CTRL1 0x78 /* control register 1 for Audio2: */
245 1.1 augustss #define ESS_AUDIO2_CTRL1_XFER_SIZE 0x20 /* 0=8-bit/1=16-bit */
246 1.1 augustss #define ESS_AUDIO2_CTRL1_FIFO_ENABLE 0x02 /* 0=disable/1=enable */
247 1.1 augustss #define ESS_AUDIO2_CTRL1_DAC_ENABLE 0x01 /* 0=disable/1=enable */
248 1.1 augustss #define ESS_MREG_AUDIO2_CTRL2 0x7A /* control register 2 for Audio2: */
249 1.1 augustss #define ESS_AUDIO2_CTRL2_FIFO_SIZE 0x01 /* 0=8-bit/1=16-bit */
250 1.1 augustss #define ESS_AUDIO2_CTRL2_CHANNELS 0x02 /* 0=mono/1=stereo */
251 1.1 augustss #define ESS_AUDIO2_CTRL2_FIFO_SIGNED 0x04 /* 0=unsigned/1=signed */
252 1.1 augustss #define ESS_AUDIO2_CTRL2_DMA_ENABLE 0x20 /* 0=disable/1=enable */
253 1.2 augustss #define ESS_AUDIO2_CTRL2_IRQ2_ENABLE 0x40
254 1.2 augustss #define ESS_AUDIO2_CTRL2_IRQ_LATCH 0x80
255 1.2 augustss #define ESS_MREG_AUDIO2_CTRL3 0x7D
256 1.2 augustss #define ESS_AUDIO2_CTRL3_DRQA 0x00
257 1.2 augustss #define ESS_AUDIO2_CTRL3_DRQB 0x01
258 1.2 augustss #define ESS_AUDIO2_CTRL3_DRQC 0x02
259 1.2 augustss #define ESS_AUDIO2_CTRL3_DRQD 0x03
260 1.2 augustss #define ESS_AUDIO2_CTRL3_DRQ_PD 0x04
261 1.2 augustss #define ESS_MREG_INTR_ST 0x7F
262 1.2 augustss #define ESS_IS_SELECT_IRQ 0x01
263 1.2 augustss #define ESS_IS_ES1888 0x00
264 1.2 augustss #define ESS_IS_INTRA 0x02
265 1.2 augustss #define ESS_IS_INTRB 0x04
266 1.2 augustss #define ESS_IS_INTRC 0x06
267 1.2 augustss #define ESS_IS_INTRD 0x08
268 1.2 augustss #define ESS_IS_INTRE 0x0A
269