hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
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
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
/* SPDX-License-Identifier: GPL-2.0-only */
#ifndef __sis7019_h__
#define __sis7019_h__
 
/*
 *  Definitions for SiS7019 Audio Accelerator
 *
 *  Copyright (C) 2004-2007, David Dillow
 *  Written by David Dillow <dave@thedillows.org>
 *  Inspired by the Trident 4D-WaveDX/NX driver.
 *
 *  All rights reserved.
 */
 
 
/* General Control Register */
#define SIS_GCR        0x00
#define        SIS_GCR_MACRO_POWER_DOWN        0x80000000
#define        SIS_GCR_MODEM_ENABLE            0x00010000
#define        SIS_GCR_SOFTWARE_RESET            0x00000001
 
/* General Interrupt Enable Register */
#define SIS_GIER    0x04
#define        SIS_GIER_MODEM_TIMER_IRQ_ENABLE        0x00100000
#define        SIS_GIER_MODEM_RX_DMA_IRQ_ENABLE    0x00080000
#define        SIS_GIER_MODEM_TX_DMA_IRQ_ENABLE    0x00040000
#define        SIS_GIER_AC97_GPIO1_IRQ_ENABLE        0x00020000
#define        SIS_GIER_AC97_GPIO0_IRQ_ENABLE        0x00010000
#define        SIS_GIER_AC97_SAMPLE_TIMER_IRQ_ENABLE    0x00000010
#define        SIS_GIER_AUDIO_GLOBAL_TIMER_IRQ_ENABLE    0x00000008
#define        SIS_GIER_AUDIO_RECORD_DMA_IRQ_ENABLE    0x00000004
#define        SIS_GIER_AUDIO_PLAY_DMA_IRQ_ENABLE    0x00000002
#define        SIS_GIER_AUDIO_WAVE_ENGINE_IRQ_ENABLE    0x00000001
 
/* General Interrupt Status Register */
#define SIS_GISR    0x08
#define        SIS_GISR_MODEM_TIMER_IRQ_STATUS        0x00100000
#define        SIS_GISR_MODEM_RX_DMA_IRQ_STATUS    0x00080000
#define        SIS_GISR_MODEM_TX_DMA_IRQ_STATUS    0x00040000
#define        SIS_GISR_AC97_GPIO1_IRQ_STATUS        0x00020000
#define        SIS_GISR_AC97_GPIO0_IRQ_STATUS        0x00010000
#define        SIS_GISR_AC97_SAMPLE_TIMER_IRQ_STATUS    0x00000010
#define        SIS_GISR_AUDIO_GLOBAL_TIMER_IRQ_STATUS    0x00000008
#define        SIS_GISR_AUDIO_RECORD_DMA_IRQ_STATUS    0x00000004
#define        SIS_GISR_AUDIO_PLAY_DMA_IRQ_STATUS    0x00000002
#define        SIS_GISR_AUDIO_WAVE_ENGINE_IRQ_STATUS    0x00000001
 
/* DMA Control Register */
#define SIS_DMA_CSR    0x10
#define        SIS_DMA_CSR_PCI_SETTINGS        0x0000001d
#define        SIS_DMA_CSR_CONCURRENT_ENABLE        0x00000200
#define        SIS_DMA_CSR_PIPELINE_ENABLE        0x00000100
#define        SIS_DMA_CSR_RX_DRAIN_ENABLE        0x00000010
#define        SIS_DMA_CSR_RX_FILL_ENABLE        0x00000008
#define        SIS_DMA_CSR_TX_DRAIN_ENABLE        0x00000004
#define        SIS_DMA_CSR_TX_LOWPRI_FILL_ENABLE    0x00000002
#define        SIS_DMA_CSR_TX_HIPRI_FILL_ENABLE    0x00000001
 
/* Playback Channel Start Registers */
#define SIS_PLAY_START_A_REG    0x14
#define SIS_PLAY_START_B_REG    0x18
 
/* Playback Channel Stop Registers */
#define SIS_PLAY_STOP_A_REG    0x1c
#define SIS_PLAY_STOP_B_REG    0x20
 
/* Recording Channel Start Register */
#define SIS_RECORD_START_REG    0x24
 
/* Recording Channel Stop Register */
#define SIS_RECORD_STOP_REG    0x28
 
/* Playback Interrupt Status Registers */
#define SIS_PISR_A    0x2c
#define SIS_PISR_B    0x30
 
/* Recording Interrupt Status Register */
#define SIS_RISR    0x34
 
/* AC97 AC-link Playback Source Register */
#define SIS_AC97_PSR    0x40
#define        SIS_AC97_PSR_MODEM_HEADSET_SRC_MIXER    0x0f000000
#define        SIS_AC97_PSR_MODEM_LINE2_SRC_MIXER    0x00f00000
#define        SIS_AC97_PSR_MODEM_LINE1_SRC_MIXER    0x000f0000
#define        SIS_AC97_PSR_PCM_LFR_SRC_MIXER        0x0000f000
#define        SIS_AC97_PSR_PCM_SURROUND_SRC_MIXER    0x00000f00
#define        SIS_AC97_PSR_PCM_CENTER_SRC_MIXER    0x000000f0
#define        SIS_AC97_PSR_PCM_LR_SRC_MIXER        0x0000000f
 
/* AC97 AC-link Command Register */
#define SIS_AC97_CMD    0x50
#define     SIS_AC97_CMD_DATA_MASK            0xffff0000
#define        SIS_AC97_CMD_REG_MASK            0x0000ff00
#define        SIS_AC97_CMD_CODEC3_READ        0x0000000d
#define        SIS_AC97_CMD_CODEC3_WRITE        0x0000000c
#define        SIS_AC97_CMD_CODEC2_READ        0x0000000b
#define        SIS_AC97_CMD_CODEC2_WRITE        0x0000000a
#define        SIS_AC97_CMD_CODEC_READ            0x00000009
#define        SIS_AC97_CMD_CODEC_WRITE        0x00000008
#define        SIS_AC97_CMD_CODEC_WARM_RESET        0x00000005
#define        SIS_AC97_CMD_CODEC_COLD_RESET        0x00000004
#define        SIS_AC97_CMD_DONE            0x00000000
 
/* AC97 AC-link Semaphore Register */
#define SIS_AC97_SEMA    0x54
#define        SIS_AC97_SEMA_BUSY            0x00000001
#define        SIS_AC97_SEMA_RELEASE            0x00000000
 
/* AC97 AC-link Status Register */
#define SIS_AC97_STATUS    0x58
#define        SIS_AC97_STATUS_AUDIO_D2_INACT_SECS    0x03f00000
#define        SIS_AC97_STATUS_MODEM_ALIVE        0x00002000
#define        SIS_AC97_STATUS_AUDIO_ALIVE        0x00001000
#define        SIS_AC97_STATUS_CODEC3_READY        0x00000400
#define        SIS_AC97_STATUS_CODEC2_READY        0x00000200
#define        SIS_AC97_STATUS_CODEC_READY        0x00000100
#define        SIS_AC97_STATUS_WARM_RESET        0x00000080
#define        SIS_AC97_STATUS_COLD_RESET        0x00000040
#define        SIS_AC97_STATUS_POWERED_DOWN        0x00000020
#define        SIS_AC97_STATUS_NORMAL            0x00000010
#define        SIS_AC97_STATUS_READ_EXPIRED        0x00000004
#define        SIS_AC97_STATUS_SEMAPHORE        0x00000002
#define        SIS_AC97_STATUS_BUSY            0x00000001
 
/* AC97 AC-link Audio Configuration Register */
#define SIS_AC97_CONF    0x5c
#define        SIS_AC97_CONF_AUDIO_ALIVE        0x80000000
#define        SIS_AC97_CONF_WARM_RESET_ENABLE        0x40000000
#define        SIS_AC97_CONF_PR6_ENABLE        0x20000000
#define        SIS_AC97_CONF_PR5_ENABLE        0x10000000
#define        SIS_AC97_CONF_PR4_ENABLE        0x08000000
#define        SIS_AC97_CONF_PR3_ENABLE        0x04000000
#define        SIS_AC97_CONF_PR2_PR7_ENABLE        0x02000000
#define        SIS_AC97_CONF_PR0_PR1_ENABLE        0x01000000
#define        SIS_AC97_CONF_AUTO_PM_ENABLE        0x00800000
#define        SIS_AC97_CONF_PCM_LFE_ENABLE        0x00080000
#define        SIS_AC97_CONF_PCM_SURROUND_ENABLE    0x00040000
#define        SIS_AC97_CONF_PCM_CENTER_ENABLE        0x00020000
#define        SIS_AC97_CONF_PCM_LR_ENABLE        0x00010000
#define        SIS_AC97_CONF_PCM_CAP_MIC_ENABLE    0x00002000
#define        SIS_AC97_CONF_PCM_CAP_LR_ENABLE        0x00001000
#define        SIS_AC97_CONF_PCM_CAP_MIC_FROM_CODEC3    0x00000200
#define        SIS_AC97_CONF_PCM_CAP_LR_FROM_CODEC3    0x00000100
#define        SIS_AC97_CONF_CODEC3_PM_VRM        0x00000080
#define        SIS_AC97_CONF_CODEC_PM_VRM        0x00000040
#define        SIS_AC97_CONF_CODEC3_VRA_ENABLE        0x00000020
#define        SIS_AC97_CONF_CODEC_VRA_ENABLE        0x00000010
#define        SIS_AC97_CONF_CODEC3_PM_EAC        0x00000008
#define        SIS_AC97_CONF_CODEC_PM_EAC        0x00000004
#define        SIS_AC97_CONF_CODEC3_EXISTS        0x00000002
#define        SIS_AC97_CONF_CODEC_EXISTS        0x00000001
 
/* Playback Channel Sync Group registers */
#define SIS_PLAY_SYNC_GROUP_A    0x80
#define SIS_PLAY_SYNC_GROUP_B    0x84
#define SIS_PLAY_SYNC_GROUP_C    0x88
#define SIS_PLAY_SYNC_GROUP_D    0x8c
#define SIS_MIXER_SYNC_GROUP    0x90
 
/* Wave Engine Config and Control Register */
#define SIS_WECCR    0xa0
#define        SIS_WECCR_TESTMODE_MASK            0x00300000
#define            SIS_WECCR_TESTMODE_NORMAL        0x00000000
#define            SIS_WECCR_TESTMODE_BYPASS_NSO_ALPHA    0x00100000
#define            SIS_WECCR_TESTMODE_BYPASS_FC        0x00200000
#define            SIS_WECCR_TESTMODE_BYPASS_WOL        0x00300000
#define        SIS_WECCR_RESONANCE_DELAY_MASK        0x00060000
#define            SIS_WECCR_RESONANCE_DELAY_NONE        0x00000000
#define            SIS_WECCR_RESONANCE_DELAY_FC_1F00    0x00020000
#define            SIS_WECCR_RESONANCE_DELAY_FC_1E00    0x00040000
#define            SIS_WECCR_RESONANCE_DELAY_FC_1C00    0x00060000
#define        SIS_WECCR_IGNORE_CHANNEL_PARMS        0x00010000
#define        SIS_WECCR_COMMAND_CHANNEL_ID_MASK    0x0003ff00
#define        SIS_WECCR_COMMAND_MASK            0x00000007
#define            SIS_WECCR_COMMAND_NONE            0x00000000
#define            SIS_WECCR_COMMAND_DONE            0x00000000
#define            SIS_WECCR_COMMAND_PAUSE            0x00000001
#define            SIS_WECCR_COMMAND_TOGGLE_VEG        0x00000002
#define            SIS_WECCR_COMMAND_TOGGLE_MEG        0x00000003
#define            SIS_WECCR_COMMAND_TOGGLE_VEG_MEG    0x00000004
 
/* Wave Engine Volume Control Register */
#define SIS_WEVCR    0xa4
#define        SIS_WEVCR_LEFT_MUSIC_ATTENUATION_MASK    0xff000000
#define        SIS_WEVCR_RIGHT_MUSIC_ATTENUATION_MASK    0x00ff0000
#define        SIS_WEVCR_LEFT_WAVE_ATTENUATION_MASK    0x0000ff00
#define        SIS_WEVCR_RIGHT_WAVE_ATTENUATION_MASK    0x000000ff
 
/* Wave Engine Interrupt Status Registers */
#define SIS_WEISR_A    0xa8
#define SIS_WEISR_B    0xac
 
 
/* Playback DMA parameters (parameter RAM) */
#define SIS_PLAY_DMA_OFFSET    0x0000
#define SIS_PLAY_DMA_SIZE    0x10
#define SIS_PLAY_DMA_ADDR(addr, num) \
   ((num * SIS_PLAY_DMA_SIZE) + (addr) + SIS_PLAY_DMA_OFFSET)
 
#define SIS_PLAY_DMA_FORMAT_CSO    0x00
#define        SIS_PLAY_DMA_FORMAT_UNSIGNED    0x00080000
#define        SIS_PLAY_DMA_FORMAT_8BIT    0x00040000
#define        SIS_PLAY_DMA_FORMAT_MONO    0x00020000
#define        SIS_PLAY_DMA_CSO_MASK        0x0000ffff
#define SIS_PLAY_DMA_BASE    0x04
#define SIS_PLAY_DMA_CONTROL    0x08
#define        SIS_PLAY_DMA_STOP_AT_SSO    0x04000000
#define        SIS_PLAY_DMA_RELEASE        0x02000000
#define        SIS_PLAY_DMA_LOOP        0x01000000
#define        SIS_PLAY_DMA_INTR_AT_SSO    0x00080000
#define        SIS_PLAY_DMA_INTR_AT_ESO    0x00040000
#define        SIS_PLAY_DMA_INTR_AT_LEO    0x00020000
#define        SIS_PLAY_DMA_INTR_AT_MLP    0x00010000
#define        SIS_PLAY_DMA_LEO_MASK        0x0000ffff
#define SIS_PLAY_DMA_SSO_ESO    0x0c
#define        SIS_PLAY_DMA_SSO_MASK        0xffff0000
#define        SIS_PLAY_DMA_ESO_MASK        0x0000ffff
 
/* Capture DMA parameters (parameter RAM) */
#define SIS_CAPTURE_DMA_OFFSET    0x0800
#define SIS_CAPTURE_DMA_SIZE    0x10
#define SIS_CAPTURE_DMA_ADDR(addr, num) \
   ((num * SIS_CAPTURE_DMA_SIZE) + (addr) + SIS_CAPTURE_DMA_OFFSET)
 
#define    SIS_CAPTURE_CHAN_MIXER_ROUTE_BACK_0    0
#define    SIS_CAPTURE_CHAN_MIXER_ROUTE_BACK_1    1
#define    SIS_CAPTURE_CHAN_MIXER_ROUTE_BACK_2    2
#define    SIS_CAPTURE_CHAN_MIXER_ROUTE_BACK_3    3
#define    SIS_CAPTURE_CHAN_MIXER_ROUTE_BACK_4    4
#define    SIS_CAPTURE_CHAN_MIXER_ROUTE_BACK_5    5
#define    SIS_CAPTURE_CHAN_MIXER_ROUTE_BACK_6    6
#define    SIS_CAPTURE_CHAN_MIXER_ROUTE_BACK_7    7
#define    SIS_CAPTURE_CHAN_MIXER_ROUTE_BACK_8    8
#define    SIS_CAPTURE_CHAN_MIXER_ROUTE_BACK_9    9
#define    SIS_CAPTURE_CHAN_MIXER_ROUTE_BACK_10    10
#define    SIS_CAPTURE_CHAN_MIXER_ROUTE_BACK_11    11
#define    SIS_CAPTURE_CHAN_MIXER_ROUTE_BACK_12    12
#define    SIS_CAPTURE_CHAN_MIXER_ROUTE_BACK_13    13
#define    SIS_CAPTURE_CHAN_MIXER_ROUTE_BACK_14    14
#define    SIS_CAPTURE_CHAN_MIXER_ROUTE_BACK_15    15
#define    SIS_CAPTURE_CHAN_AC97_PCM_IN        16
#define    SIS_CAPTURE_CHAN_AC97_MIC_IN        17
#define    SIS_CAPTURE_CHAN_AC97_LINE1_IN        18
#define    SIS_CAPTURE_CHAN_AC97_LINE2_IN        19
#define    SIS_CAPTURE_CHAN_AC97_HANDSE_IN        20
 
#define SIS_CAPTURE_DMA_FORMAT_CSO    0x00
#define        SIS_CAPTURE_DMA_MONO_MODE_MASK    0xc0000000
#define        SIS_CAPTURE_DMA_MONO_MODE_AVG    0x00000000
#define        SIS_CAPTURE_DMA_MONO_MODE_LEFT    0x40000000
#define        SIS_CAPTURE_DMA_MONO_MODE_RIGHT    0x80000000
#define        SIS_CAPTURE_DMA_FORMAT_UNSIGNED    0x00080000
#define        SIS_CAPTURE_DMA_FORMAT_8BIT    0x00040000
#define        SIS_CAPTURE_DMA_FORMAT_MONO    0x00020000
#define        SIS_CAPTURE_DMA_CSO_MASK        0x0000ffff
#define SIS_CAPTURE_DMA_BASE        0x04
#define SIS_CAPTURE_DMA_CONTROL        0x08
#define        SIS_CAPTURE_DMA_STOP_AT_SSO    0x04000000
#define        SIS_CAPTURE_DMA_RELEASE        0x02000000
#define        SIS_CAPTURE_DMA_LOOP        0x01000000
#define        SIS_CAPTURE_DMA_INTR_AT_LEO    0x00020000
#define        SIS_CAPTURE_DMA_INTR_AT_MLP    0x00010000
#define        SIS_CAPTURE_DMA_LEO_MASK        0x0000ffff
#define SIS_CAPTURE_DMA_RESERVED    0x0c
 
 
/* Mixer routing list start pointer (parameter RAM) */
#define SIS_MIXER_START_OFFSET    0x1000
#define SIS_MIXER_START_SIZE    0x04
#define SIS_MIXER_START_ADDR(addr, num) \
   ((num * SIS_MIXER_START_SIZE) + (addr) + SIS_MIXER_START_OFFSET)
 
#define SIS_MIXER_START_MASK    0x0000007f
 
/* Mixer routing table (parameter RAM) */
#define SIS_MIXER_OFFSET    0x1400
#define SIS_MIXER_SIZE        0x04
#define SIS_MIXER_ADDR(addr, num) \
   ((num * SIS_MIXER_SIZE) + (addr) + SIS_MIXER_OFFSET)
 
#define SIS_MIXER_RIGHT_ATTENUTATION_MASK    0xff000000
#define     SIS_MIXER_RIGHT_NO_ATTEN        0xff000000
#define SIS_MIXER_LEFT_ATTENUTATION_MASK    0x00ff0000
#define     SIS_MIXER_LEFT_NO_ATTEN            0x00ff0000
#define SIS_MIXER_NEXT_ENTRY_MASK        0x00007f00
#define     SIS_MIXER_NEXT_ENTRY_NONE        0x00000000
#define SIS_MIXER_DEST_MASK            0x0000007f
#define     SIS_MIXER_DEST_0            0x00000020
#define     SIS_MIXER_DEST_1            0x00000021
#define     SIS_MIXER_DEST_2            0x00000022
#define     SIS_MIXER_DEST_3            0x00000023
#define     SIS_MIXER_DEST_4            0x00000024
#define     SIS_MIXER_DEST_5            0x00000025
#define     SIS_MIXER_DEST_6            0x00000026
#define     SIS_MIXER_DEST_7            0x00000027
#define     SIS_MIXER_DEST_8            0x00000028
#define     SIS_MIXER_DEST_9            0x00000029
#define     SIS_MIXER_DEST_10            0x0000002a
#define     SIS_MIXER_DEST_11            0x0000002b
#define     SIS_MIXER_DEST_12            0x0000002c
#define     SIS_MIXER_DEST_13            0x0000002d
#define     SIS_MIXER_DEST_14            0x0000002e
#define     SIS_MIXER_DEST_15            0x0000002f
 
/* Wave Engine Control Parameters (parameter RAM) */
#define SIS_WAVE_OFFSET        0x2000
#define SIS_WAVE_SIZE        0x40
#define SIS_WAVE_ADDR(addr, num) \
   ((num * SIS_WAVE_SIZE) + (addr) + SIS_WAVE_OFFSET)
 
#define SIS_WAVE_GENERAL        0x00
#define        SIS_WAVE_GENERAL_WAVE_VOLUME            0x80000000
#define        SIS_WAVE_GENERAL_MUSIC_VOLUME            0x00000000
#define        SIS_WAVE_GENERAL_VOLUME_MASK            0x7f000000
#define SIS_WAVE_GENERAL_ARTICULATION    0x04
#define        SIS_WAVE_GENERAL_ARTICULATION_DELTA_MASK    0x3fff0000
#define SIS_WAVE_ARTICULATION        0x08
#define SIS_WAVE_TIMER            0x0c
#define SIS_WAVE_GENERATOR        0x10
#define SIS_WAVE_CHANNEL_CONTROL    0x14
#define        SIS_WAVE_CHANNEL_CONTROL_FIRST_SAMPLE        0x80000000
#define        SIS_WAVE_CHANNEL_CONTROL_AMP_ENABLE        0x40000000
#define        SIS_WAVE_CHANNEL_CONTROL_FILTER_ENABLE        0x20000000
#define        SIS_WAVE_CHANNEL_CONTROL_INTERPOLATE_ENABLE    0x10000000
#define SIS_WAVE_LFO_EG_CONTROL        0x18
#define SIS_WAVE_LFO_EG_CONTROL_2    0x1c
#define SIS_WAVE_LFO_EG_CONTROL_3    0x20
#define SIS_WAVE_LFO_EG_CONTROL_4    0x24
 
#endif /* __sis7019_h__ */