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
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
|
#ifndef __SOUND_EMU10K1_H
#define __SOUND_EMU10K1_H
#include <stdint.h>
#define EMU10K1_CARD_CREATIVE 0x00000000
#define EMU10K1_CARD_EMUAPS 0x00000001
#define EMU10K1_FX8010_PCM_COUNT 8
#define iMAC0 0x00
#define iMAC1 0x01
#define iMAC2 0x02
#define iMAC3 0x03
#define iMACINT0 0x04
#define iMACINT1 0x05
#define iACC3 0x06
#define iMACMV 0x07
#define iANDXOR 0x08
#define iTSTNEG 0x09
#define iLIMITGE 0x0a
#define iLIMITLT 0x0b
#define iLOG 0x0c
#define iEXP 0x0d
#define iINTERP 0x0e
#define iSKIP 0x0f
#define FXBUS(x) (0x00 + (x))
#define EXTIN(x) (0x10 + (x))
#define EXTOUT(x) (0x20 + (x))
#define C_00000000 0x40
#define C_00000001 0x41
#define C_00000002 0x42
#define C_00000003 0x43
#define C_00000004 0x44
#define C_00000008 0x45
#define C_00000010 0x46
#define C_00000020 0x47
#define C_00000100 0x48
#define C_00010000 0x49
#define C_00080000 0x4a
#define C_10000000 0x4b
#define C_20000000 0x4c
#define C_40000000 0x4d
#define C_80000000 0x4e
#define C_7fffffff 0x4f
#define C_ffffffff 0x50
#define C_fffffffe 0x51
#define C_c0000000 0x52
#define C_4f1bbcdc 0x53
#define C_5a7ef9db 0x54
#define C_00100000 0x55
#define GPR_ACCU 0x56
#define GPR_COND 0x57
#define GPR_NOISE0 0x58
#define GPR_NOISE1 0x59
#define GPR_IRQ 0x5a
#define GPR_DBAC 0x5b
#define GPR(x) (FXGPREGBASE + (x))
#define ITRAM_DATA(x) (TANKMEMDATAREGBASE + 0x00 + (x))
#define ETRAM_DATA(x) (TANKMEMDATAREGBASE + 0x80 + (x))
#define ITRAM_ADDR(x) (TANKMEMADDRREGBASE + 0x00 + (x))
#define ETRAM_ADDR(x) (TANKMEMADDRREGBASE + 0x80 + (x))
#define A_FXBUS(x) (0x00 + (x))
#define A_EXTIN(x) (0x40 + (x))
#define A_EXTOUT(x) (0x60 + (x))
#define A_GPR(x) (A_FXGPREGBASE + (x))
#define CC_REG_NORMALIZED C_00000001
#define CC_REG_BORROW C_00000002
#define CC_REG_MINUS C_00000004
#define CC_REG_ZERO C_00000008
#define CC_REG_SATURATE C_00000010
#define CC_REG_NONZERO C_00000100
#define FXBUS_PCM_LEFT 0x00
#define FXBUS_PCM_RIGHT 0x01
#define FXBUS_PCM_LEFT_REAR 0x02
#define FXBUS_PCM_RIGHT_REAR 0x03
#define FXBUS_MIDI_LEFT 0x04
#define FXBUS_MIDI_RIGHT 0x05
#define FXBUS_PCM_CENTER 0x06
#define FXBUS_PCM_LFE 0x07
#define FXBUS_PCM_LEFT_FRONT 0x08
#define FXBUS_PCM_RIGHT_FRONT 0x09
#define FXBUS_MIDI_REVERB 0x0c
#define FXBUS_MIDI_CHORUS 0x0d
#define FXBUS_PCM_LEFT_SIDE 0x0e
#define FXBUS_PCM_RIGHT_SIDE 0x0f
#define FXBUS_PT_LEFT 0x14
#define FXBUS_PT_RIGHT 0x15
#define EXTIN_AC97_L 0x00
#define EXTIN_AC97_R 0x01
#define EXTIN_SPDIF_CD_L 0x02
#define EXTIN_SPDIF_CD_R 0x03
#define EXTIN_ZOOM_L 0x04
#define EXTIN_ZOOM_R 0x05
#define EXTIN_TOSLINK_L 0x06
#define EXTIN_TOSLINK_R 0x07
#define EXTIN_LINE1_L 0x08
#define EXTIN_LINE1_R 0x09
#define EXTIN_COAX_SPDIF_L 0x0a
#define EXTIN_COAX_SPDIF_R 0x0b
#define EXTIN_LINE2_L 0x0c
#define EXTIN_LINE2_R 0x0d
#define EXTOUT_AC97_L 0x00
#define EXTOUT_AC97_R 0x01
#define EXTOUT_TOSLINK_L 0x02
#define EXTOUT_TOSLINK_R 0x03
#define EXTOUT_AC97_CENTER 0x04
#define EXTOUT_AC97_LFE 0x05
#define EXTOUT_HEADPHONE_L 0x06
#define EXTOUT_HEADPHONE_R 0x07
#define EXTOUT_REAR_L 0x08
#define EXTOUT_REAR_R 0x09
#define EXTOUT_ADC_CAP_L 0x0a
#define EXTOUT_ADC_CAP_R 0x0b
#define EXTOUT_MIC_CAP 0x0c
#define EXTOUT_AC97_REAR_L 0x0d
#define EXTOUT_AC97_REAR_R 0x0e
#define EXTOUT_ACENTER 0x11
#define EXTOUT_ALFE 0x12
#define A_EXTIN_AC97_L 0x00
#define A_EXTIN_AC97_R 0x01
#define A_EXTIN_SPDIF_CD_L 0x02
#define A_EXTIN_SPDIF_CD_R 0x03
#define A_EXTIN_OPT_SPDIF_L 0x04
#define A_EXTIN_OPT_SPDIF_R 0x05
#define A_EXTIN_LINE2_L 0x08
#define A_EXTIN_LINE2_R 0x09
#define A_EXTIN_ADC_L 0x0a
#define A_EXTIN_ADC_R 0x0b
#define A_EXTIN_AUX2_L 0x0c
#define A_EXTIN_AUX2_R 0x0d
#define A_EXTOUT_FRONT_L 0x00
#define A_EXTOUT_FRONT_R 0x01
#define A_EXTOUT_CENTER 0x02
#define A_EXTOUT_LFE 0x03
#define A_EXTOUT_HEADPHONE_L 0x04
#define A_EXTOUT_HEADPHONE_R 0x05
#define A_EXTOUT_REAR_L 0x06
#define A_EXTOUT_REAR_R 0x07
#define A_EXTOUT_AFRONT_L 0x08
#define A_EXTOUT_AFRONT_R 0x09
#define A_EXTOUT_ACENTER 0x0a
#define A_EXTOUT_ALFE 0x0b
#define A_EXTOUT_ASIDE_L 0x0c
#define A_EXTOUT_ASIDE_R 0x0d
#define A_EXTOUT_AREAR_L 0x0e
#define A_EXTOUT_AREAR_R 0x0f
#define A_EXTOUT_AC97_L 0x10
#define A_EXTOUT_AC97_R 0x11
#define A_EXTOUT_ADC_CAP_L 0x16
#define A_EXTOUT_ADC_CAP_R 0x17
#define A_EXTOUT_MIC_CAP 0x18
#define A_C_00000000 0xc0
#define A_C_00000001 0xc1
#define A_C_00000002 0xc2
#define A_C_00000003 0xc3
#define A_C_00000004 0xc4
#define A_C_00000008 0xc5
#define A_C_00000010 0xc6
#define A_C_00000020 0xc7
#define A_C_00000100 0xc8
#define A_C_00010000 0xc9
#define A_C_00000800 0xca
#define A_C_10000000 0xcb
#define A_C_20000000 0xcc
#define A_C_40000000 0xcd
#define A_C_80000000 0xce
#define A_C_7fffffff 0xcf
#define A_C_ffffffff 0xd0
#define A_C_fffffffe 0xd1
#define A_C_c0000000 0xd2
#define A_C_4f1bbcdc 0xd3
#define A_C_5a7ef9db 0xd4
#define A_C_00100000 0xd5
#define A_GPR_ACCU 0xd6
#define A_GPR_COND 0xd7
#define A_GPR_NOISE0 0xd8
#define A_GPR_NOISE1 0xd9
#define A_GPR_IRQ 0xda
#define A_GPR_DBAC 0xdb
#define A_GPR_DBACE 0xde
#define EMU10K1_DBG_ZC 0x80000000
#define EMU10K1_DBG_SATURATION_OCCURED 0x02000000
#define EMU10K1_DBG_SATURATION_ADDR 0x01ff0000
#define EMU10K1_DBG_SINGLE_STEP 0x00008000
#define EMU10K1_DBG_STEP 0x00004000
#define EMU10K1_DBG_CONDITION_CODE 0x00003e00
#define EMU10K1_DBG_SINGLE_STEP_ADDR 0x000001ff
#ifndef __KERNEL__
#define TANKMEMADDRREG_ADDR_MASK 0x000fffff
#define TANKMEMADDRREG_CLEAR 0x00800000
#define TANKMEMADDRREG_ALIGN 0x00400000
#define TANKMEMADDRREG_WRITE 0x00200000
#define TANKMEMADDRREG_READ 0x00100000
#endif
typedef struct {
unsigned int internal_tram_size;
unsigned int external_tram_size;
char fxbus_names[16][32];
char extin_names[16][32];
char extout_names[32][32];
unsigned int gpr_controls;
} emu10k1_fx8010_info_t;
#define EMU10K1_GPR_TRANSLATION_NONE 0
#define EMU10K1_GPR_TRANSLATION_TABLE100 1
#define EMU10K1_GPR_TRANSLATION_BASS 2
#define EMU10K1_GPR_TRANSLATION_TREBLE 3
#define EMU10K1_GPR_TRANSLATION_ONOFF 4
enum emu10k1_ctl_elem_iface {
EMU10K1_CTL_ELEM_IFACE_MIXER = 2,
EMU10K1_CTL_ELEM_IFACE_PCM = 3,
};
typedef struct {
unsigned int pad;
int iface;
unsigned int device;
unsigned int subdevice;
unsigned char name[44];
unsigned int index;
} emu10k1_ctl_elem_id_t;
typedef struct {
emu10k1_ctl_elem_id_t id;
unsigned int vcount;
unsigned int count;
unsigned short gpr[32];
unsigned int value[32];
unsigned int min;
unsigned int max;
unsigned int translation;
unsigned int *tlv;
} emu10k1_fx8010_control_gpr_t;
typedef struct {
char name[128];
unsigned long gpr_valid[0x200/(sizeof(unsigned long)*8)];
uint32_t *gpr_map;
unsigned int gpr_add_control_count;
emu10k1_fx8010_control_gpr_t *gpr_add_controls;
unsigned int gpr_del_control_count;
emu10k1_ctl_elem_id_t *gpr_del_controls;
unsigned int gpr_list_control_count;
unsigned int gpr_list_control_total;
emu10k1_fx8010_control_gpr_t *gpr_list_controls;
unsigned long tram_valid[0x100/(sizeof(unsigned long)*8)];
uint32_t *tram_data_map;
uint32_t *tram_addr_map;
unsigned long code_valid[1024/(sizeof(unsigned long)*8)];
uint32_t *code;
} emu10k1_fx8010_code_t;
typedef struct {
unsigned int address;
unsigned int size;
unsigned int *samples;
} emu10k1_fx8010_tram_t;
typedef struct {
unsigned int substream;
unsigned int res1;
unsigned int channels;
unsigned int tram_start;
unsigned int buffer_size;
unsigned short gpr_size;
unsigned short gpr_ptr;
unsigned short gpr_count;
unsigned short gpr_tmpcount;
unsigned short gpr_trigger;
unsigned short gpr_running;
unsigned char pad;
unsigned char etram[32];
unsigned int res2;
} emu10k1_fx8010_pcm_t;
#define SNDRV_EMU10K1_IOCTL_INFO _IOR ('H', 0x10, emu10k1_fx8010_info_t)
#define SNDRV_EMU10K1_IOCTL_CODE_POKE _IOW ('H', 0x11, emu10k1_fx8010_code_t)
#define SNDRV_EMU10K1_IOCTL_CODE_PEEK _IOWR('H', 0x12, emu10k1_fx8010_code_t)
#define SNDRV_EMU10K1_IOCTL_TRAM_SETUP _IOW ('H', 0x20, int)
#define SNDRV_EMU10K1_IOCTL_TRAM_POKE _IOW ('H', 0x21, emu10k1_fx8010_tram_t)
#define SNDRV_EMU10K1_IOCTL_TRAM_PEEK _IOWR('H', 0x22, emu10k1_fx8010_tram_t)
#define SNDRV_EMU10K1_IOCTL_PCM_POKE _IOW ('H', 0x30, emu10k1_fx8010_pcm_t)
#define SNDRV_EMU10K1_IOCTL_PCM_PEEK _IOWR('H', 0x31, emu10k1_fx8010_pcm_t)
#define SNDRV_EMU10K1_IOCTL_PVERSION _IOR ('H', 0x40, int)
#define SNDRV_EMU10K1_IOCTL_STOP _IO ('H', 0x80)
#define SNDRV_EMU10K1_IOCTL_CONTINUE _IO ('H', 0x81)
#define SNDRV_EMU10K1_IOCTL_ZERO_TRAM_COUNTER _IO ('H', 0x82)
#define SNDRV_EMU10K1_IOCTL_SINGLE_STEP _IOW ('H', 0x83, int)
#define SNDRV_EMU10K1_IOCTL_DBG_READ _IOR ('H', 0x84, int)
#endif
|