1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
|
/*
* Copyright (c) 2001 Orion Hodson <O.Hodson@cs.ucl.ac.uk>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $FreeBSD$
*/
/* ------------------------------------------------------------------------- */
/* PCI Configuration Register Offsets */
#define SV_PCI_COMPAT 0x10
#define SV_PCI_ENHANCED 0x14
#define SV_PCI_FMSYNTH 0x18
#define SV_PCI_MIDI 0x1c
#define SV_PCI_GAMES 0x20
#define SV_PCI_DMAA 0x40
#define SV_PCI_DMAC 0x48
#define SV_PCI_DMAA_SIZE 0x10
#define SV_PCI_DMAA_ALIGN 0x10
#define SV_PCI_DMAC_SIZE 0x10
#define SV_PCI_DMAC_ALIGN 0x10
#define SV_PCI_ENHANCED_SIZE 0x08
#define SV_PCI_DMA_ENABLE 0x00000001
#define SV_PCI_DMA_EXTENDED 0x00000008
/* ------------------------------------------------------------------------- */
/* DMA Configuration Registers */
#define SV_DMA_ADDR 0x00
#define SV_DMA_COUNT 0x04
#define SV_DMA_MODE 0x0B
#define SV_DMA_MODE_AUTO 0x10
#define SV_DMA_MODE_RD 0x04
#define SV_DMA_MODE_WR 0x08
/* ------------------------------------------------------------------------- */
/* Enhanced Mode Configuration Registers */
#define SV_CM_CONTROL 0x00
#define SV_CM_CONTROL_ENHANCED 0x01
#define SV_CM_CONTROL_TEST 0x02
#define SV_CM_CONTROL_REVERB 0x04
#define SV_CM_CONTROL_PWS 0x08
#define SV_CM_CONTROL_INTA 0x20
#define SV_CM_CONTROL_RESET 0x80
#define SV_CM_IMR 0x01
#define SV_CM_IMR_AMSK 0x01
#define SV_CM_IMR_CMSK 0x04
#define SV_CM_IMR_SMSK 0x08
#define SV_CM_IMR_UDM 0x40
#define SV_CM_IMR_MIDM 0x80
#define SV_CM_STATUS 0x02
#define SV_CM_STATUS_AINT 0x01
#define SV_CM_STATUS_CINT 0x04
#define SV_CM_STATUS_SINT 0x08
#define SV_CM_STATUS_UDI 0x40
#define SV_CM_STATUS_MI 0x80
#define SV_CM_INDEX 0x04
#define SV_CM_INDEX_MASK 0x3f
#define SV_CM_INDEX_MCE 0x40
#define SV_CM_INDEX_TRD 0x80
#define SV_CM_DATA 0x05
/* ------------------------------------------------------------------------- */
/* Indexed Codec/Mixer Registers (left channels were applicable) */
#define SV_REG_ADC_INPUT 0x00
#define SV_INPUT_GAIN_MASK 0x0f
#define SV_INPUT_MICGAIN 0x10
#define SV_INPUT_CD 0x20
#define SV_INPUT_DAC 0x40
#define SV_INPUT_AUX2 0x60
#define SV_INPUT_LINE 0x80
#define SV_INPUT_AUX1 0xa0
#define SV_INPUT_MIC 0xc0
#define SV_INPUT_MIXOUT 0xe0
#define SV_REG_AUX1 0x02
#define SV_REG_CD 0x04
#define SV_REG_LINE 0x06
#define SV_REG_MIC 0x08
#define SV_REG_SYNTH 0x0a
#define SV_REG_AUX2 0x0c
#define SV_REG_MIX 0x0e
#define SV_REG_PCM 0x10
#define SV_DEFAULT_MAX 0x1f
#define SV_ADC_MAX 0x0f
#define SV_MIC_MAX 0x0f
#define SV_PCM_MAX 0x3f
#define SV_MUTE 0x80
#define SV_REG_FORMAT 0x12
#define SV_AFMT_MONO 0x00
#define SV_AFMT_STEREO 0x01
#define SV_AFMT_S16 0x02
#define SV_AFMT_U8 0x00
#define SV_AFMT_DMAA(x) (x)
#define SV_AFMT_DMAA_MSK 0x03
#define SV_AFMT_DMAC(x) ((x) << 4)
#define SV_AFMT_DMAC_MSK 0x30
#define SV_REG_ENABLE 0x13
#define SV_PLAY_ENABLE 0x01
#define SV_RECORD_ENABLE 0x02
#define SV_PLAYBACK_PAUSE 0x04
#define SV_REG_REVISION 0x15
#define SV_REG_LOOPBACK 0x16
#define SV_LOOPBACK_ENABLE 0x01
#define SV_LOOPBACK_MAX 0x3f
#define SV_LOOPBACK_LEVEL(x) ((x) << 2)
#define SV_REG_DMAA_COUNT_HI 0x18
#define SV_REG_DMAA_COUNT_LO 0x19
#define SV_REG_DMAC_COUNT_HI 0x1c
#define SV_REG_DMAC_COUNT_LO 0x1d
#define SV_REG_PCM_SAMPLING_LO 0x1e
#define SV_REG_PCM_SAMPLING_HI 0x1f
#define SV_REG_SYN_SAMPLING_LO 0x20
#define SV_REG_SYN_SAMPLING_HI 0x21
#define SV_REG_CLOCK_SOURCE 0x22
#define SV_CLOCK_ALTERNATE 0x10
#define SV_REG_ALT_RATE 0x23
#define SV_REG_ADC_PLLM 0x24
#define SV_REG_ADC_PLLN 0x25
#define SV_ADC_PLLN(x) ((x) & 0x1f)
#define SV_ADC_PLLR(x) ((x) << 5)
#define SV_REG_SYNTH_PLLM 0x26
#define SV_REG_SYNTH_PLLN 0x27
#define SV_SYNTH_PLLN(x) ((x) & 0x1f)
#define SV_SYNTH_PLLR(x) ((x) << 5)
#define SV_REG_SRS_SPACE 0x2c
#define SV_SRS_SPACE_100 0x00
#define SV_SRS_SPACE_75 0x01
#define SV_SRS_SPACE_50 0x02
#define SV_SRS_SPACE_25 0x03
#define SV_SRS_SPACE_0 0x04
#define SV_SRS_DISABLED 0x80
#define SV_REG_SRS_CENTER 0x2d
#define SV_SRS_CENTER_100 0x00
#define SV_SRS_CENTER_75 0x01
#define SV_SRS_CENTER_50 0x02
#define SV_SRS_CENTER_25 0x03
#define SV_SRS_CENTER_0 0x04
#define SV_REG_ANALOG_PWR 0x30
#define SV_ANALOG_OFF_DAC 0x01
#define SV_ANALOG_OFF_ADC 0x08
#define SV_ANALOG_OFF_MIX 0x10
#define SV_ANALOG_OFF_SRS 0x20
#define SV_ANALOG_OFF_SPLL 0x40
#define SV_ANALOG_OFF_APLL 0x80
#define SV_ANALOG_OFF 0xf9
#define SV_REG_DIGITAL_PWR 0x31
#define SV_DIGITAL_OFF_SYN 0x01
#define SV_DIGITAL_OFF_MU 0x02
#define SV_DIGITAL_OFF_GP 0x04
#define SV_DIGITAL_OFF_BI 0x08
#define SV_DIGITAL_OFF 0x0f
/* ------------------------------------------------------------------------- */
/* ADC PLL constants */
#define SV_F_SCALE 512
#define SV_F_REF 24576000
|