1#ifndef __SOUND_EMU10K1_H
2#define __SOUND_EMU10K1_H
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26#ifdef __KERNEL__
27
28#include <sound/pcm.h>
29#include <sound/rawmidi.h>
30#include <sound/hwdep.h>
31#include <sound/ac97_codec.h>
32#include <sound/util_mem.h>
33#include <sound/pcm-indirect.h>
34#include <sound/timer.h>
35#include <linux/interrupt.h>
36#include <linux/mutex.h>
37#include <asm/io.h>
38
39
40
41#define EMUPAGESIZE 4096
42#define MAXREQVOICES 8
43#define MAXPAGES 8192
44#define RESERVED 0
45#define NUM_MIDI 16
46#define NUM_G 64
47#define NUM_FXSENDS 4
48#define NUM_EFX_PLAYBACK 16
49
50
51#define EMU10K1_DMA_MASK 0x7fffffffUL
52#define AUDIGY_DMA_MASK 0x7fffffffUL
53
54
55#define TMEMSIZE 256*1024
56#define TMEMSIZEREG 4
57
58#define IP_TO_CP(ip) ((ip == 0) ? 0 : (((0x00001000uL | (ip & 0x00000FFFL)) << (((ip >> 12) & 0x000FL) + 4)) & 0xFFFF0000uL))
59
60
61
62
63
64
65
66#define PTR 0x00
67
68
69#define PTR_CHANNELNUM_MASK 0x0000003f
70
71
72
73#define PTR_ADDRESS_MASK 0x07ff0000
74#define A_PTR_ADDRESS_MASK 0x0fff0000
75
76#define DATA 0x04
77
78#define IPR 0x08
79
80
81#define IPR_P16V 0x80000000
82
83#define IPR_GPIOMSG 0x20000000
84
85
86
87#define IPR_A_MIDITRANSBUFEMPTY2 0x10000000
88#define IPR_A_MIDIRECVBUFEMPTY2 0x08000000
89
90#define IPR_SPDIFBUFFULL 0x04000000
91#define IPR_SPDIFBUFHALFFULL 0x02000000
92
93#define IPR_SAMPLERATETRACKER 0x01000000
94#define IPR_FXDSP 0x00800000
95#define IPR_FORCEINT 0x00400000
96#define IPR_PCIERROR 0x00200000
97#define IPR_VOLINCR 0x00100000
98#define IPR_VOLDECR 0x00080000
99#define IPR_MUTE 0x00040000
100#define IPR_MICBUFFULL 0x00020000
101#define IPR_MICBUFHALFFULL 0x00010000
102#define IPR_ADCBUFFULL 0x00008000
103#define IPR_ADCBUFHALFFULL 0x00004000
104#define IPR_EFXBUFFULL 0x00002000
105#define IPR_EFXBUFHALFFULL 0x00001000
106#define IPR_GPSPDIFSTATUSCHANGE 0x00000800
107#define IPR_CDROMSTATUSCHANGE 0x00000400
108#define IPR_INTERVALTIMER 0x00000200
109#define IPR_MIDITRANSBUFEMPTY 0x00000100
110#define IPR_MIDIRECVBUFEMPTY 0x00000080
111#define IPR_CHANNELLOOP 0x00000040
112#define IPR_CHANNELNUMBERMASK 0x0000003f
113
114
115
116
117
118#define INTE 0x0c
119#define INTE_VIRTUALSB_MASK 0xc0000000
120#define INTE_VIRTUALSB_220 0x00000000
121#define INTE_VIRTUALSB_240 0x40000000
122#define INTE_VIRTUALSB_260 0x80000000
123#define INTE_VIRTUALSB_280 0xc0000000
124#define INTE_VIRTUALMPU_MASK 0x30000000
125#define INTE_VIRTUALMPU_300 0x00000000
126#define INTE_VIRTUALMPU_310 0x10000000
127#define INTE_VIRTUALMPU_320 0x20000000
128#define INTE_VIRTUALMPU_330 0x30000000
129#define INTE_MASTERDMAENABLE 0x08000000
130#define INTE_SLAVEDMAENABLE 0x04000000
131#define INTE_MASTERPICENABLE 0x02000000
132#define INTE_SLAVEPICENABLE 0x01000000
133#define INTE_VSBENABLE 0x00800000
134#define INTE_ADLIBENABLE 0x00400000
135#define INTE_MPUENABLE 0x00200000
136#define INTE_FORCEINT 0x00100000
137
138#define INTE_MRHANDENABLE 0x00080000
139
140
141
142
143
144
145#define INTE_A_MIDITXENABLE2 0x00020000
146#define INTE_A_MIDIRXENABLE2 0x00010000
147
148
149#define INTE_SAMPLERATETRACKER 0x00002000
150
151#define INTE_FXDSPENABLE 0x00001000
152#define INTE_PCIERRORENABLE 0x00000800
153#define INTE_VOLINCRENABLE 0x00000400
154#define INTE_VOLDECRENABLE 0x00000200
155#define INTE_MUTEENABLE 0x00000100
156#define INTE_MICBUFENABLE 0x00000080
157#define INTE_ADCBUFENABLE 0x00000040
158#define INTE_EFXBUFENABLE 0x00000020
159#define INTE_GPSPDIFENABLE 0x00000010
160#define INTE_CDSPDIFENABLE 0x00000008
161#define INTE_INTERVALTIMERENB 0x00000004
162#define INTE_MIDITXENABLE 0x00000002
163#define INTE_MIDIRXENABLE 0x00000001
164
165#define WC 0x10
166#define WC_SAMPLECOUNTER_MASK 0x03FFFFC0
167#define WC_SAMPLECOUNTER 0x14060010
168#define WC_CURRENTCHANNEL 0x0000003F
169
170
171
172#define HCFG 0x14
173
174
175
176
177#define HCFG_LEGACYFUNC_MASK 0xe0000000
178#define HCFG_LEGACYFUNC_MPU 0x00000000
179#define HCFG_LEGACYFUNC_SB 0x40000000
180#define HCFG_LEGACYFUNC_AD 0x60000000
181#define HCFG_LEGACYFUNC_MPIC 0x80000000
182#define HCFG_LEGACYFUNC_MDMA 0xa0000000
183#define HCFG_LEGACYFUNC_SPCI 0xc0000000
184#define HCFG_LEGACYFUNC_SDMA 0xe0000000
185#define HCFG_IOCAPTUREADDR 0x1f000000
186#define HCFG_LEGACYWRITE 0x00800000
187#define HCFG_LEGACYWORD 0x00400000
188#define HCFG_LEGACYINT 0x00200000
189
190
191#define HCFG_PUSH_BUTTON_ENABLE 0x00100000
192#define HCFG_BAUD_RATE 0x00080000
193#define HCFG_EXPANDED_MEM 0x00040000
194#define HCFG_CODECFORMAT_MASK 0x00030000
195
196
197#define HCFG_CODECFORMAT_AC97_1 0x00000000
198#define HCFG_CODECFORMAT_AC97_2 0x00010000
199#define HCFG_AUTOMUTE_ASYNC 0x00008000
200
201
202
203#define HCFG_AUTOMUTE_SPDIF 0x00004000
204
205
206#define HCFG_EMU32_SLAVE 0x00002000
207#define HCFG_SLOW_RAMP 0x00001000
208
209#define HCFG_PHASE_TRACK_MASK 0x00000700
210
211
212#define HCFG_I2S_ASRC_ENABLE 0x00000070
213
214
215
216
217
218
219
220#define HCFG_CODECFORMAT_AC97 0x00000000
221#define HCFG_CODECFORMAT_I2S 0x00010000
222#define HCFG_GPINPUT0 0x00004000
223#define HCFG_GPINPUT1 0x00002000
224#define HCFG_GPOUTPUT_MASK 0x00001c00
225#define HCFG_GPOUT0 0x00001000
226#define HCFG_GPOUT1 0x00000800
227#define HCFG_GPOUT2 0x00000400
228#define HCFG_JOYENABLE 0x00000200
229#define HCFG_PHASETRACKENABLE 0x00000100
230
231
232#define HCFG_AC3ENABLE_MASK 0x000000e0
233#define HCFG_AC3ENABLE_ZVIDEO 0x00000080
234#define HCFG_AC3ENABLE_CDSPDIF 0x00000040
235#define HCFG_AC3ENABLE_GPSPDIF 0x00000020
236#define HCFG_AUTOMUTE 0x00000010
237
238
239
240#define HCFG_LOCKSOUNDCACHE 0x00000008
241
242#define HCFG_LOCKTANKCACHE_MASK 0x00000004
243
244#define HCFG_LOCKTANKCACHE 0x01020014
245#define HCFG_MUTEBUTTONENABLE 0x00000002
246
247
248
249
250
251#define HCFG_AUDIOENABLE 0x00000001
252
253
254
255
256
257#define MUDATA 0x18
258
259#define MUCMD 0x19
260#define MUCMD_RESET 0xff
261#define MUCMD_ENTERUARTMODE 0x3f
262
263
264#define MUSTAT MUCMD
265#define MUSTAT_IRDYN 0x80
266#define MUSTAT_ORDYN 0x40
267
268#define A_IOCFG 0x18
269#define A_GPINPUT_MASK 0xff00
270#define A_GPOUTPUT_MASK 0x00ff
271
272
273#define A_IOCFG_GPOUT0 0x0044
274#define A_IOCFG_DISABLE_ANALOG 0x0040
275#define A_IOCFG_ENABLE_DIGITAL 0x0004
276#define A_IOCFG_ENABLE_DIGITAL_AUDIGY4 0x0080
277#define A_IOCFG_UNKNOWN_20 0x0020
278#define A_IOCFG_DISABLE_AC97_FRONT 0x0080
279#define A_IOCFG_GPOUT1 0x0002
280#define A_IOCFG_GPOUT2 0x0001
281#define A_IOCFG_MULTIPURPOSE_JACK 0x2000
282
283#define A_IOCFG_DIGITAL_JACK 0x1000
284#define A_IOCFG_FRONT_JACK 0x4000
285#define A_IOCFG_REAR_JACK 0x8000
286#define A_IOCFG_PHONES_JACK 0x0100
287
288
289
290
291
292
293
294#define TIMER 0x1a
295
296
297
298#define TIMER_RATE_MASK 0x000003ff
299
300#define TIMER_RATE 0x0a00001a
301
302#define AC97DATA 0x1c
303
304#define AC97ADDRESS 0x1e
305#define AC97ADDRESS_READY 0x80
306#define AC97ADDRESS_ADDRESS 0x7f
307
308
309#define PTR2 0x20
310#define DATA2 0x24
311#define IPR2 0x28
312#define IPR2_PLAYBACK_CH_0_LOOP 0x00001000
313#define IPR2_PLAYBACK_CH_0_HALF_LOOP 0x00000100
314#define IPR2_CAPTURE_CH_0_LOOP 0x00100000
315#define IPR2_CAPTURE_CH_0_HALF_LOOP 0x00010000
316
317
318
319#define INTE2 0x2c
320#define INTE2_PLAYBACK_CH_0_LOOP 0x00001000
321#define INTE2_PLAYBACK_CH_0_HALF_LOOP 0x00000100
322#define INTE2_PLAYBACK_CH_1_LOOP 0x00002000
323#define INTE2_PLAYBACK_CH_1_HALF_LOOP 0x00000200
324#define INTE2_PLAYBACK_CH_2_LOOP 0x00004000
325#define INTE2_PLAYBACK_CH_2_HALF_LOOP 0x00000400
326#define INTE2_PLAYBACK_CH_3_LOOP 0x00008000
327#define INTE2_PLAYBACK_CH_3_HALF_LOOP 0x00000800
328#define INTE2_CAPTURE_CH_0_LOOP 0x00100000
329#define INTE2_CAPTURE_CH_0_HALF_LOOP 0x00010000
330#define HCFG2 0x34
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346#define IPR3 0x38
347#define INTE3 0x3c
348
349
350
351
352#define JOYSTICK1 0x00
353#define JOYSTICK2 0x01
354#define JOYSTICK3 0x02
355#define JOYSTICK4 0x03
356#define JOYSTICK5 0x04
357#define JOYSTICK6 0x05
358#define JOYSTICK7 0x06
359#define JOYSTICK8 0x07
360
361
362
363#define JOYSTICK_BUTTONS 0x0f
364#define JOYSTICK_COMPARATOR 0xf0
365
366
367
368
369
370
371#define CPF 0x00
372#define CPF_CURRENTPITCH_MASK 0xffff0000
373#define CPF_CURRENTPITCH 0x10100000
374#define CPF_STEREO_MASK 0x00008000
375#define CPF_STOP_MASK 0x00004000
376#define CPF_FRACADDRESS_MASK 0x00003fff
377
378#define PTRX 0x01
379#define PTRX_PITCHTARGET_MASK 0xffff0000
380#define PTRX_PITCHTARGET 0x10100001
381#define PTRX_FXSENDAMOUNT_A_MASK 0x0000ff00
382#define PTRX_FXSENDAMOUNT_A 0x08080001
383#define PTRX_FXSENDAMOUNT_B_MASK 0x000000ff
384#define PTRX_FXSENDAMOUNT_B 0x08000001
385
386#define CVCF 0x02
387#define CVCF_CURRENTVOL_MASK 0xffff0000
388#define CVCF_CURRENTVOL 0x10100002
389#define CVCF_CURRENTFILTER_MASK 0x0000ffff
390#define CVCF_CURRENTFILTER 0x10000002
391
392#define VTFT 0x03
393#define VTFT_VOLUMETARGET_MASK 0xffff0000
394#define VTFT_VOLUMETARGET 0x10100003
395#define VTFT_FILTERTARGET_MASK 0x0000ffff
396#define VTFT_FILTERTARGET 0x10000003
397
398#define Z1 0x05
399
400#define Z2 0x04
401
402#define PSST 0x06
403#define PSST_FXSENDAMOUNT_C_MASK 0xff000000
404
405#define PSST_FXSENDAMOUNT_C 0x08180006
406
407#define PSST_LOOPSTARTADDR_MASK 0x00ffffff
408#define PSST_LOOPSTARTADDR 0x18000006
409
410#define DSL 0x07
411#define DSL_FXSENDAMOUNT_D_MASK 0xff000000
412
413#define DSL_FXSENDAMOUNT_D 0x08180007
414
415#define DSL_LOOPENDADDR_MASK 0x00ffffff
416#define DSL_LOOPENDADDR 0x18000007
417
418#define CCCA 0x08
419#define CCCA_RESONANCE 0xf0000000
420#define CCCA_INTERPROMMASK 0x0e000000
421
422
423
424
425
426#define CCCA_INTERPROM_0 0x00000000
427#define CCCA_INTERPROM_1 0x02000000
428#define CCCA_INTERPROM_2 0x04000000
429#define CCCA_INTERPROM_3 0x06000000
430#define CCCA_INTERPROM_4 0x08000000
431#define CCCA_INTERPROM_5 0x0a000000
432#define CCCA_INTERPROM_6 0x0c000000
433#define CCCA_INTERPROM_7 0x0e000000
434#define CCCA_8BITSELECT 0x01000000
435#define CCCA_CURRADDR_MASK 0x00ffffff
436#define CCCA_CURRADDR 0x18000008
437
438#define CCR 0x09
439#define CCR_CACHEINVALIDSIZE 0x07190009
440#define CCR_CACHEINVALIDSIZE_MASK 0xfe000000
441#define CCR_CACHELOOPFLAG 0x01000000
442#define CCR_INTERLEAVEDSAMPLES 0x00800000
443#define CCR_WORDSIZEDSAMPLES 0x00400000
444#define CCR_READADDRESS 0x06100009
445#define CCR_READADDRESS_MASK 0x003f0000
446#define CCR_LOOPINVALSIZE 0x0000fe00
447
448#define CCR_LOOPFLAG 0x00000100
449#define CCR_CACHELOOPADDRHI 0x000000ff
450
451#define CLP 0x0a
452
453#define CLP_CACHELOOPADDR 0x0000ffff
454
455#define FXRT 0x0b
456
457
458#define FXRT_CHANNELA 0x000f0000
459#define FXRT_CHANNELB 0x00f00000
460#define FXRT_CHANNELC 0x0f000000
461#define FXRT_CHANNELD 0xf0000000
462
463#define A_HR 0x0b
464#define MAPA 0x0c
465
466#define MAPB 0x0d
467
468#define MAP_PTE_MASK 0xffffe000
469#define MAP_PTI_MASK 0x00001fff
470
471
472
473#define ENVVOL 0x10
474#define ENVVOL_MASK 0x0000ffff
475
476
477#define ATKHLDV 0x11
478#define ATKHLDV_PHASE0 0x00008000
479#define ATKHLDV_HOLDTIME_MASK 0x00007f00
480#define ATKHLDV_ATTACKTIME_MASK 0x0000007f
481
482
483#define DCYSUSV 0x12
484#define DCYSUSV_PHASE1_MASK 0x00008000
485#define DCYSUSV_SUSTAINLEVEL_MASK 0x00007f00
486#define DCYSUSV_CHANNELENABLE_MASK 0x00000080
487
488
489#define DCYSUSV_DECAYTIME_MASK 0x0000007f
490
491
492#define LFOVAL1 0x13
493#define LFOVAL_MASK 0x0000ffff
494
495
496#define ENVVAL 0x14
497#define ENVVAL_MASK 0x0000ffff
498
499
500#define ATKHLDM 0x15
501#define ATKHLDM_PHASE0 0x00008000
502#define ATKHLDM_HOLDTIME 0x00007f00
503#define ATKHLDM_ATTACKTIME 0x0000007f
504
505
506#define DCYSUSM 0x16
507#define DCYSUSM_PHASE1_MASK 0x00008000
508#define DCYSUSM_SUSTAINLEVEL_MASK 0x00007f00
509#define DCYSUSM_DECAYTIME_MASK 0x0000007f
510
511
512#define LFOVAL2 0x17
513#define LFOVAL2_MASK 0x0000ffff
514
515
516#define IP 0x18
517#define IP_MASK 0x0000ffff
518
519#define IP_UNITY 0x0000e000
520
521#define IFATN 0x19
522#define IFATN_FILTERCUTOFF_MASK 0x0000ff00
523
524
525#define IFATN_FILTERCUTOFF 0x08080019
526#define IFATN_ATTENUATION_MASK 0x000000ff
527#define IFATN_ATTENUATION 0x08000019
528
529
530#define PEFE 0x1a
531#define PEFE_PITCHAMOUNT_MASK 0x0000ff00
532
533#define PEFE_PITCHAMOUNT 0x0808001a
534#define PEFE_FILTERAMOUNT_MASK 0x000000ff
535
536#define PEFE_FILTERAMOUNT 0x0800001a
537#define FMMOD 0x1b
538#define FMMOD_MODVIBRATO 0x0000ff00
539
540#define FMMOD_MOFILTER 0x000000ff
541
542
543
544#define TREMFRQ 0x1c
545#define TREMFRQ_DEPTH 0x0000ff00
546
547
548#define TREMFRQ_FREQUENCY 0x000000ff
549
550#define FM2FRQ2 0x1d
551#define FM2FRQ2_DEPTH 0x0000ff00
552
553#define FM2FRQ2_FREQUENCY 0x000000ff
554
555
556#define TEMPENV 0x1e
557#define TEMPENV_MASK 0x0000ffff
558
559
560
561
562
563#define CD0 0x20
564#define CD1 0x21
565#define CD2 0x22
566#define CD3 0x23
567#define CD4 0x24
568#define CD5 0x25
569#define CD6 0x26
570#define CD7 0x27
571#define CD8 0x28
572#define CD9 0x29
573#define CDA 0x2a
574#define CDB 0x2b
575#define CDC 0x2c
576#define CDD 0x2d
577#define CDE 0x2e
578#define CDF 0x2f
579
580
581
582#define PTB 0x40
583#define PTB_MASK 0xfffff000
584
585#define TCB 0x41
586#define TCB_MASK 0xfffff000
587
588#define ADCCR 0x42
589#define ADCCR_RCHANENABLE 0x00000010
590#define ADCCR_LCHANENABLE 0x00000008
591
592
593#define A_ADCCR_RCHANENABLE 0x00000020
594#define A_ADCCR_LCHANENABLE 0x00000010
595
596#define A_ADCCR_SAMPLERATE_MASK 0x0000000F
597#define ADCCR_SAMPLERATE_MASK 0x00000007
598#define ADCCR_SAMPLERATE_48 0x00000000
599#define ADCCR_SAMPLERATE_44 0x00000001
600#define ADCCR_SAMPLERATE_32 0x00000002
601#define ADCCR_SAMPLERATE_24 0x00000003
602#define ADCCR_SAMPLERATE_22 0x00000004
603#define ADCCR_SAMPLERATE_16 0x00000005
604#define ADCCR_SAMPLERATE_11 0x00000006
605#define ADCCR_SAMPLERATE_8 0x00000007
606#define A_ADCCR_SAMPLERATE_12 0x00000006
607#define A_ADCCR_SAMPLERATE_11 0x00000007
608#define A_ADCCR_SAMPLERATE_8 0x00000008
609
610#define FXWC 0x43
611
612
613
614
615
616
617#define FXWC_DEFAULTROUTE_C (1<<0)
618#define FXWC_DEFAULTROUTE_B (1<<1)
619#define FXWC_DEFAULTROUTE_A (1<<12)
620#define FXWC_DEFAULTROUTE_D (1<<13)
621#define FXWC_ADCLEFT (1<<18)
622#define FXWC_CDROMSPDIFLEFT (1<<18)
623#define FXWC_ADCRIGHT (1<<19)
624#define FXWC_CDROMSPDIFRIGHT (1<<19)
625#define FXWC_MIC (1<<20)
626#define FXWC_ZOOMLEFT (1<<20)
627#define FXWC_ZOOMRIGHT (1<<21)
628#define FXWC_SPDIFLEFT (1<<22)
629#define FXWC_SPDIFRIGHT (1<<23)
630
631#define A_TBLSZ 0x43
632
633#define TCBS 0x44
634#define TCBS_MASK 0x00000007
635#define TCBS_BUFFSIZE_16K 0x00000000
636#define TCBS_BUFFSIZE_32K 0x00000001
637#define TCBS_BUFFSIZE_64K 0x00000002
638#define TCBS_BUFFSIZE_128K 0x00000003
639#define TCBS_BUFFSIZE_256K 0x00000004
640#define TCBS_BUFFSIZE_512K 0x00000005
641#define TCBS_BUFFSIZE_1024K 0x00000006
642#define TCBS_BUFFSIZE_2048K 0x00000007
643
644#define MICBA 0x45
645#define MICBA_MASK 0xfffff000
646
647#define ADCBA 0x46
648#define ADCBA_MASK 0xfffff000
649
650#define FXBA 0x47
651#define FXBA_MASK 0xfffff000
652
653#define A_HWM 0x48
654
655#define MICBS 0x49
656
657#define ADCBS 0x4a
658
659#define FXBS 0x4b
660
661
662
663
664#define ADCBS_BUFSIZE_NONE 0x00000000
665#define ADCBS_BUFSIZE_384 0x00000001
666#define ADCBS_BUFSIZE_448 0x00000002
667#define ADCBS_BUFSIZE_512 0x00000003
668#define ADCBS_BUFSIZE_640 0x00000004
669#define ADCBS_BUFSIZE_768 0x00000005
670#define ADCBS_BUFSIZE_896 0x00000006
671#define ADCBS_BUFSIZE_1024 0x00000007
672#define ADCBS_BUFSIZE_1280 0x00000008
673#define ADCBS_BUFSIZE_1536 0x00000009
674#define ADCBS_BUFSIZE_1792 0x0000000a
675#define ADCBS_BUFSIZE_2048 0x0000000b
676#define ADCBS_BUFSIZE_2560 0x0000000c
677#define ADCBS_BUFSIZE_3072 0x0000000d
678#define ADCBS_BUFSIZE_3584 0x0000000e
679#define ADCBS_BUFSIZE_4096 0x0000000f
680#define ADCBS_BUFSIZE_5120 0x00000010
681#define ADCBS_BUFSIZE_6144 0x00000011
682#define ADCBS_BUFSIZE_7168 0x00000012
683#define ADCBS_BUFSIZE_8192 0x00000013
684#define ADCBS_BUFSIZE_10240 0x00000014
685#define ADCBS_BUFSIZE_12288 0x00000015
686#define ADCBS_BUFSIZE_14366 0x00000016
687#define ADCBS_BUFSIZE_16384 0x00000017
688#define ADCBS_BUFSIZE_20480 0x00000018
689#define ADCBS_BUFSIZE_24576 0x00000019
690#define ADCBS_BUFSIZE_28672 0x0000001a
691#define ADCBS_BUFSIZE_32768 0x0000001b
692#define ADCBS_BUFSIZE_40960 0x0000001c
693#define ADCBS_BUFSIZE_49152 0x0000001d
694#define ADCBS_BUFSIZE_57344 0x0000001e
695#define ADCBS_BUFSIZE_65536 0x0000001f
696
697
698#define A_CSBA 0x4c
699
700
701#define A_CSDC 0x4d
702
703
704#define A_CSFE 0x4e
705
706
707#define A_CSHG 0x4f
708
709
710#define CDCS 0x50
711
712#define GPSCS 0x51
713
714#define DBG 0x52
715
716
717#define A_SPSC 0x52
718
719#define REG53 0x53
720
721#define A_DBG 0x53
722#define A_DBG_SINGLE_STEP 0x00020000
723#define A_DBG_ZC 0x40000000
724#define A_DBG_STEP_ADDR 0x000003ff
725#define A_DBG_SATURATION_OCCURED 0x20000000
726#define A_DBG_SATURATION_ADDR 0x0ffc0000
727
728
729#define SPCS0 0x54
730
731#define SPCS1 0x55
732
733#define SPCS2 0x56
734
735#define SPCS_CLKACCYMASK 0x30000000
736#define SPCS_CLKACCY_1000PPM 0x00000000
737#define SPCS_CLKACCY_50PPM 0x10000000
738#define SPCS_CLKACCY_VARIABLE 0x20000000
739#define SPCS_SAMPLERATEMASK 0x0f000000
740#define SPCS_SAMPLERATE_44 0x00000000
741#define SPCS_SAMPLERATE_48 0x02000000
742#define SPCS_SAMPLERATE_32 0x03000000
743#define SPCS_CHANNELNUMMASK 0x00f00000
744#define SPCS_CHANNELNUM_UNSPEC 0x00000000
745#define SPCS_CHANNELNUM_LEFT 0x00100000
746#define SPCS_CHANNELNUM_RIGHT 0x00200000
747#define SPCS_SOURCENUMMASK 0x000f0000
748#define SPCS_SOURCENUM_UNSPEC 0x00000000
749#define SPCS_GENERATIONSTATUS 0x00008000
750#define SPCS_CATEGORYCODEMASK 0x00007f00
751#define SPCS_MODEMASK 0x000000c0
752#define SPCS_EMPHASISMASK 0x00000038
753#define SPCS_EMPHASIS_NONE 0x00000000
754#define SPCS_EMPHASIS_50_15 0x00000008
755#define SPCS_COPYRIGHT 0x00000004
756#define SPCS_NOTAUDIODATA 0x00000002
757#define SPCS_PROFESSIONAL 0x00000001
758
759
760
761
762#define CLIEL 0x58
763
764#define CLIEH 0x59
765
766#define CLIPL 0x5a
767
768#define CLIPH 0x5b
769
770#define SOLEL 0x5c
771
772#define SOLEH 0x5d
773
774#define SPBYPASS 0x5e
775#define SPBYPASS_SPDIF0_MASK 0x00000003
776#define SPBYPASS_SPDIF1_MASK 0x0000000c
777
778#define SPBYPASS_FORMAT 0x00000f00
779
780#define AC97SLOT 0x5f
781#define AC97SLOT_REAR_RIGHT 0x01
782#define AC97SLOT_REAR_LEFT 0x02
783#define AC97SLOT_CNTR 0x10
784#define AC97SLOT_LFE 0x20
785
786
787#define A_PCB 0x5f
788
789
790#define CDSRCS 0x60
791
792#define GPSRCS 0x61
793
794#define ZVSRCS 0x62
795
796
797
798
799#define SRCS_SPDIFVALID 0x04000000
800#define SRCS_SPDIFLOCKED 0x02000000
801#define SRCS_RATELOCKED 0x01000000
802#define SRCS_ESTSAMPLERATE 0x0007ffff
803
804
805#define SRCS_SPDIFRATE_44 0x0003acd9
806#define SRCS_SPDIFRATE_48 0x00040000
807#define SRCS_SPDIFRATE_96 0x00080000
808
809#define MICIDX 0x63
810#define MICIDX_MASK 0x0000ffff
811#define MICIDX_IDX 0x10000063
812
813#define ADCIDX 0x64
814#define ADCIDX_MASK 0x0000ffff
815#define ADCIDX_IDX 0x10000064
816
817#define A_ADCIDX 0x63
818#define A_ADCIDX_IDX 0x10000063
819
820#define A_MICIDX 0x64
821#define A_MICIDX_IDX 0x10000064
822
823#define FXIDX 0x65
824#define FXIDX_MASK 0x0000ffff
825#define FXIDX_IDX 0x10000065
826
827
828#define HLIEL 0x66
829
830#define HLIEH 0x67
831
832#define HLIPL 0x68
833
834#define HLIPH 0x69
835
836
837#define A_SPRI 0x6a
838
839#define A_SPRA 0x6b
840
841#define A_SPRC 0x6c
842
843#define A_DICE 0x6d
844
845#define A_TTB 0x6e
846
847#define A_TDOF 0x6f
848
849
850#define A_MUDATA1 0x70
851#define A_MUCMD1 0x71
852#define A_MUSTAT1 A_MUCMD1
853
854
855#define A_MUDATA2 0x72
856#define A_MUCMD2 0x73
857#define A_MUSTAT2 A_MUCMD2
858
859
860
861
862#define A_FXWC1 0x74
863#define A_FXWC2 0x75
864
865
866#define A_SPDIF_SAMPLERATE 0x76
867#define A_SAMPLE_RATE 0x76
868#define A_SAMPLE_RATE_NOT_USED 0x0ffc111e
869#define A_SAMPLE_RATE_UNKNOWN 0xf0030001
870#define A_SPDIF_RATE_MASK 0x000000e0
871#define A_SPDIF_48000 0x00000000
872#define A_SPDIF_192000 0x00000020
873#define A_SPDIF_96000 0x00000040
874#define A_SPDIF_44100 0x00000080
875
876#define A_I2S_CAPTURE_RATE_MASK 0x00000e00
877#define A_I2S_CAPTURE_48000 0x00000000
878#define A_I2S_CAPTURE_192000 0x00000200
879#define A_I2S_CAPTURE_96000 0x00000400
880#define A_I2S_CAPTURE_44100 0x00000800
881
882#define A_PCM_RATE_MASK 0x0000e000
883#define A_PCM_48000 0x00000000
884#define A_PCM_192000 0x00002000
885#define A_PCM_96000 0x00004000
886#define A_PCM_44100 0x00008000
887
888
889#define A_SRT3 0x77
890
891
892#define A_SRT4 0x78
893
894
895#define A_SRT5 0x79
896
897
898
899#define A_TTDA 0x7a
900
901#define A_TTDD 0x7b
902
903#define A_FXRT2 0x7c
904#define A_FXRT_CHANNELE 0x0000003f
905#define A_FXRT_CHANNELF 0x00003f00
906#define A_FXRT_CHANNELG 0x003f0000
907#define A_FXRT_CHANNELH 0x3f000000
908
909#define A_SENDAMOUNTS 0x7d
910#define A_FXSENDAMOUNT_E_MASK 0xFF000000
911#define A_FXSENDAMOUNT_F_MASK 0x00FF0000
912#define A_FXSENDAMOUNT_G_MASK 0x0000FF00
913#define A_FXSENDAMOUNT_H_MASK 0x000000FF
914
915
916
917#define A_FXRT1 0x7e
918#define A_FXRT_CHANNELA 0x0000003f
919#define A_FXRT_CHANNELB 0x00003f00
920#define A_FXRT_CHANNELC 0x003f0000
921#define A_FXRT_CHANNELD 0x3f000000
922
923
924
925#define FXGPREGBASE 0x100
926#define A_FXGPREGBASE 0x400
927
928#define A_TANKMEMCTLREGBASE 0x100
929#define A_TANKMEMCTLREG_MASK 0x1f
930
931
932
933
934#define TANKMEMDATAREGBASE 0x200
935#define TANKMEMDATAREG_MASK 0x000fffff
936
937
938#define TANKMEMADDRREGBASE 0x300
939#define TANKMEMADDRREG_ADDR_MASK 0x000fffff
940#define TANKMEMADDRREG_CLEAR 0x00800000
941#define TANKMEMADDRREG_ALIGN 0x00400000
942#define TANKMEMADDRREG_WRITE 0x00200000
943#define TANKMEMADDRREG_READ 0x00100000
944
945#define MICROCODEBASE 0x400
946
947
948
949#define LOWORD_OPX_MASK 0x000ffc00
950#define LOWORD_OPY_MASK 0x000003ff
951#define HIWORD_OPCODE_MASK 0x00f00000
952#define HIWORD_RESULT_MASK 0x000ffc00
953#define HIWORD_OPA_MASK 0x000003ff
954
955
956
957#define A_MICROCODEBASE 0x600
958#define A_LOWORD_OPY_MASK 0x000007ff
959#define A_LOWORD_OPX_MASK 0x007ff000
960#define A_HIWORD_OPCODE_MASK 0x0f000000
961#define A_HIWORD_RESULT_MASK 0x007ff000
962#define A_HIWORD_OPA_MASK 0x000007ff
963
964
965
966
967#define EMU_HANA_DESTHI 0x00
968#define EMU_HANA_DESTLO 0x01
969#define EMU_HANA_SRCHI 0x02
970#define EMU_HANA_SRCLO 0x03
971#define EMU_HANA_DOCK_PWR 0x04
972#define EMU_HANA_DOCK_PWR_ON 0x01
973#define EMU_HANA_WCLOCK 0x05
974
975
976#define EMU_HANA_WCLOCK_SRC_MASK 0x07
977#define EMU_HANA_WCLOCK_INT_48K 0x00
978#define EMU_HANA_WCLOCK_INT_44_1K 0x01
979#define EMU_HANA_WCLOCK_HANA_SPDIF_IN 0x02
980#define EMU_HANA_WCLOCK_HANA_ADAT_IN 0x03
981#define EMU_HANA_WCLOCK_SYNC_BNCN 0x04
982#define EMU_HANA_WCLOCK_2ND_HANA 0x05
983#define EMU_HANA_WCLOCK_SRC_RESERVED 0x06
984#define EMU_HANA_WCLOCK_OFF 0x07
985#define EMU_HANA_WCLOCK_MULT_MASK 0x18
986#define EMU_HANA_WCLOCK_1X 0x00
987#define EMU_HANA_WCLOCK_2X 0x08
988#define EMU_HANA_WCLOCK_4X 0x10
989#define EMU_HANA_WCLOCK_MULT_RESERVED 0x18
990
991#define EMU_HANA_DEFCLOCK 0x06
992#define EMU_HANA_DEFCLOCK_48K 0x00
993#define EMU_HANA_DEFCLOCK_44_1K 0x01
994
995#define EMU_HANA_UNMUTE 0x07
996#define EMU_MUTE 0x00
997#define EMU_UNMUTE 0x01
998
999#define EMU_HANA_FPGA_CONFIG 0x08
1000#define EMU_HANA_FPGA_CONFIG_AUDIODOCK 0x01
1001#define EMU_HANA_FPGA_CONFIG_HANA 0x02
1002
1003#define EMU_HANA_IRQ_ENABLE 0x09
1004#define EMU_HANA_IRQ_WCLK_CHANGED 0x01
1005#define EMU_HANA_IRQ_ADAT 0x02
1006#define EMU_HANA_IRQ_DOCK 0x04
1007#define EMU_HANA_IRQ_DOCK_LOST 0x08
1008
1009#define EMU_HANA_SPDIF_MODE 0x0a
1010#define EMU_HANA_SPDIF_MODE_TX_COMSUMER 0x00
1011#define EMU_HANA_SPDIF_MODE_TX_PRO 0x01
1012#define EMU_HANA_SPDIF_MODE_TX_NOCOPY 0x02
1013#define EMU_HANA_SPDIF_MODE_RX_COMSUMER 0x00
1014#define EMU_HANA_SPDIF_MODE_RX_PRO 0x04
1015#define EMU_HANA_SPDIF_MODE_RX_NOCOPY 0x08
1016#define EMU_HANA_SPDIF_MODE_RX_INVALID 0x10
1017
1018#define EMU_HANA_OPTICAL_TYPE 0x0b
1019#define EMU_HANA_OPTICAL_IN_SPDIF 0x00
1020#define EMU_HANA_OPTICAL_IN_ADAT 0x01
1021#define EMU_HANA_OPTICAL_OUT_SPDIF 0x00
1022#define EMU_HANA_OPTICAL_OUT_ADAT 0x02
1023
1024#define EMU_HANA_MIDI_IN 0x0c
1025#define EMU_HANA_MIDI_IN_FROM_HAMOA 0x00
1026#define EMU_HANA_MIDI_IN_FROM_DOCK 0x01
1027
1028#define EMU_HANA_DOCK_LEDS_1 0x0d
1029#define EMU_HANA_DOCK_LEDS_1_MIDI1 0x01
1030#define EMU_HANA_DOCK_LEDS_1_MIDI2 0x02
1031#define EMU_HANA_DOCK_LEDS_1_SMPTE_IN 0x04
1032#define EMU_HANA_DOCK_LEDS_1_SMPTE_OUT 0x08
1033
1034#define EMU_HANA_DOCK_LEDS_2 0x0e
1035#define EMU_HANA_DOCK_LEDS_2_44K 0x01
1036#define EMU_HANA_DOCK_LEDS_2_48K 0x02
1037#define EMU_HANA_DOCK_LEDS_2_96K 0x04
1038#define EMU_HANA_DOCK_LEDS_2_192K 0x08
1039#define EMU_HANA_DOCK_LEDS_2_LOCK 0x10
1040#define EMU_HANA_DOCK_LEDS_2_EXT 0x20
1041
1042#define EMU_HANA_DOCK_LEDS_3 0x0f
1043#define EMU_HANA_DOCK_LEDS_3_CLIP_A 0x01
1044#define EMU_HANA_DOCK_LEDS_3_CLIP_B 0x02
1045#define EMU_HANA_DOCK_LEDS_3_SIGNAL_A 0x04
1046#define EMU_HANA_DOCK_LEDS_3_SIGNAL_B 0x08
1047#define EMU_HANA_DOCK_LEDS_3_MANUAL_CLIP 0x10
1048#define EMU_HANA_DOCK_LEDS_3_MANUAL_SIGNAL 0x20
1049
1050#define EMU_HANA_ADC_PADS 0x10
1051#define EMU_HANA_DOCK_ADC_PAD1 0x01
1052#define EMU_HANA_DOCK_ADC_PAD2 0x02
1053#define EMU_HANA_DOCK_ADC_PAD3 0x04
1054#define EMU_HANA_0202_ADC_PAD1 0x08
1055
1056#define EMU_HANA_DOCK_MISC 0x11
1057#define EMU_HANA_DOCK_DAC1_MUTE 0x01
1058#define EMU_HANA_DOCK_DAC2_MUTE 0x02
1059#define EMU_HANA_DOCK_DAC3_MUTE 0x04
1060#define EMU_HANA_DOCK_DAC4_MUTE 0x08
1061#define EMU_HANA_DOCK_PHONES_192_DAC1 0x00
1062#define EMU_HANA_DOCK_PHONES_192_DAC2 0x10
1063#define EMU_HANA_DOCK_PHONES_192_DAC3 0x20
1064#define EMU_HANA_DOCK_PHONES_192_DAC4 0x30
1065
1066#define EMU_HANA_MIDI_OUT 0x12
1067#define EMU_HANA_MIDI_OUT_0202 0x01
1068#define EMU_HANA_MIDI_OUT_DOCK1 0x02
1069#define EMU_HANA_MIDI_OUT_DOCK2 0x04
1070#define EMU_HANA_MIDI_OUT_SYNC2 0x08
1071#define EMU_HANA_MIDI_OUT_LOOP 0x10
1072
1073#define EMU_HANA_DAC_PADS 0x13
1074#define EMU_HANA_DOCK_DAC_PAD1 0x01
1075#define EMU_HANA_DOCK_DAC_PAD2 0x02
1076#define EMU_HANA_DOCK_DAC_PAD3 0x04
1077#define EMU_HANA_DOCK_DAC_PAD4 0x08
1078#define EMU_HANA_0202_DAC_PAD1 0x10
1079
1080
1081#define EMU_HANA_IRQ_STATUS 0x20
1082#if 0
1083#define EMU_HANA_IRQ_WCLK_CHANGED 0x01
1084#define EMU_HANA_IRQ_ADAT 0x02
1085#define EMU_HANA_IRQ_DOCK 0x04
1086#define EMU_HANA_IRQ_DOCK_LOST 0x08
1087#endif
1088
1089#define EMU_HANA_OPTION_CARDS 0x21
1090#define EMU_HANA_OPTION_HAMOA 0x01
1091#define EMU_HANA_OPTION_SYNC 0x02
1092#define EMU_HANA_OPTION_DOCK_ONLINE 0x04
1093#define EMU_HANA_OPTION_DOCK_OFFLINE 0x08
1094
1095#define EMU_HANA_ID 0x22
1096
1097#define EMU_HANA_MAJOR_REV 0x23
1098#define EMU_HANA_MINOR_REV 0x24
1099
1100#define EMU_DOCK_MAJOR_REV 0x25
1101#define EMU_DOCK_MINOR_REV 0x26
1102
1103#define EMU_DOCK_BOARD_ID 0x27
1104#define EMU_DOCK_BOARD_ID0 0x00
1105#define EMU_DOCK_BOARD_ID1 0x03
1106
1107#define EMU_HANA_WC_SPDIF_HI 0x28
1108#define EMU_HANA_WC_SPDIF_LO 0x29
1109
1110#define EMU_HANA_WC_ADAT_HI 0x2a
1111#define EMU_HANA_WC_ADAT_LO 0x2b
1112
1113#define EMU_HANA_WC_BNC_LO 0x2c
1114#define EMU_HANA_WC_BNC_HI 0x2d
1115
1116#define EMU_HANA2_WC_SPDIF_HI 0x2e
1117#define EMU_HANA2_WC_SPDIF_LO 0x2f
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226#define EMU_DST_ALICE2_EMU32_0 0x000f
1227#define EMU_DST_ALICE2_EMU32_1 0x0000
1228#define EMU_DST_ALICE2_EMU32_2 0x0001
1229#define EMU_DST_ALICE2_EMU32_3 0x0002
1230#define EMU_DST_ALICE2_EMU32_4 0x0003
1231#define EMU_DST_ALICE2_EMU32_5 0x0004
1232#define EMU_DST_ALICE2_EMU32_6 0x0005
1233#define EMU_DST_ALICE2_EMU32_7 0x0006
1234#define EMU_DST_ALICE2_EMU32_8 0x0007
1235#define EMU_DST_ALICE2_EMU32_9 0x0008
1236#define EMU_DST_ALICE2_EMU32_A 0x0009
1237#define EMU_DST_ALICE2_EMU32_B 0x000a
1238#define EMU_DST_ALICE2_EMU32_C 0x000b
1239#define EMU_DST_ALICE2_EMU32_D 0x000c
1240#define EMU_DST_ALICE2_EMU32_E 0x000d
1241#define EMU_DST_ALICE2_EMU32_F 0x000e
1242#define EMU_DST_DOCK_DAC1_LEFT1 0x0100
1243#define EMU_DST_DOCK_DAC1_LEFT2 0x0101
1244#define EMU_DST_DOCK_DAC1_LEFT3 0x0102
1245#define EMU_DST_DOCK_DAC1_LEFT4 0x0103
1246#define EMU_DST_DOCK_DAC1_RIGHT1 0x0104
1247#define EMU_DST_DOCK_DAC1_RIGHT2 0x0105
1248#define EMU_DST_DOCK_DAC1_RIGHT3 0x0106
1249#define EMU_DST_DOCK_DAC1_RIGHT4 0x0107
1250#define EMU_DST_DOCK_DAC2_LEFT1 0x0108
1251#define EMU_DST_DOCK_DAC2_LEFT2 0x0109
1252#define EMU_DST_DOCK_DAC2_LEFT3 0x010a
1253#define EMU_DST_DOCK_DAC2_LEFT4 0x010b
1254#define EMU_DST_DOCK_DAC2_RIGHT1 0x010c
1255#define EMU_DST_DOCK_DAC2_RIGHT2 0x010d
1256#define EMU_DST_DOCK_DAC2_RIGHT3 0x010e
1257#define EMU_DST_DOCK_DAC2_RIGHT4 0x010f
1258#define EMU_DST_DOCK_DAC3_LEFT1 0x0110
1259#define EMU_DST_DOCK_DAC3_LEFT2 0x0111
1260#define EMU_DST_DOCK_DAC3_LEFT3 0x0112
1261#define EMU_DST_DOCK_DAC3_LEFT4 0x0113
1262#define EMU_DST_DOCK_PHONES_LEFT1 0x0112
1263#define EMU_DST_DOCK_PHONES_LEFT2 0x0113
1264#define EMU_DST_DOCK_DAC3_RIGHT1 0x0114
1265#define EMU_DST_DOCK_DAC3_RIGHT2 0x0115
1266#define EMU_DST_DOCK_DAC3_RIGHT3 0x0116
1267#define EMU_DST_DOCK_DAC3_RIGHT4 0x0117
1268#define EMU_DST_DOCK_PHONES_RIGHT1 0x0116
1269#define EMU_DST_DOCK_PHONES_RIGHT2 0x0117
1270#define EMU_DST_DOCK_DAC4_LEFT1 0x0118
1271#define EMU_DST_DOCK_DAC4_LEFT2 0x0119
1272#define EMU_DST_DOCK_DAC4_LEFT3 0x011a
1273#define EMU_DST_DOCK_DAC4_LEFT4 0x011b
1274#define EMU_DST_DOCK_SPDIF_LEFT1 0x011a
1275#define EMU_DST_DOCK_SPDIF_LEFT2 0x011b
1276#define EMU_DST_DOCK_DAC4_RIGHT1 0x011c
1277#define EMU_DST_DOCK_DAC4_RIGHT2 0x011d
1278#define EMU_DST_DOCK_DAC4_RIGHT3 0x011e
1279#define EMU_DST_DOCK_DAC4_RIGHT4 0x011f
1280#define EMU_DST_DOCK_SPDIF_RIGHT1 0x011e
1281#define EMU_DST_DOCK_SPDIF_RIGHT2 0x011f
1282#define EMU_DST_HANA_SPDIF_LEFT1 0x0200
1283#define EMU_DST_HANA_SPDIF_LEFT2 0x0202
1284#define EMU_DST_HANA_SPDIF_RIGHT1 0x0201
1285#define EMU_DST_HANA_SPDIF_RIGHT2 0x0203
1286#define EMU_DST_HAMOA_DAC_LEFT1 0x0300
1287#define EMU_DST_HAMOA_DAC_LEFT2 0x0302
1288#define EMU_DST_HAMOA_DAC_LEFT3 0x0304
1289#define EMU_DST_HAMOA_DAC_LEFT4 0x0306
1290#define EMU_DST_HAMOA_DAC_RIGHT1 0x0301
1291#define EMU_DST_HAMOA_DAC_RIGHT2 0x0303
1292#define EMU_DST_HAMOA_DAC_RIGHT3 0x0305
1293#define EMU_DST_HAMOA_DAC_RIGHT4 0x0307
1294#define EMU_DST_HANA_ADAT 0x0400
1295#define EMU_DST_ALICE_I2S0_LEFT 0x0500
1296#define EMU_DST_ALICE_I2S0_RIGHT 0x0501
1297#define EMU_DST_ALICE_I2S1_LEFT 0x0600
1298#define EMU_DST_ALICE_I2S1_RIGHT 0x0601
1299#define EMU_DST_ALICE_I2S2_LEFT 0x0700
1300#define EMU_DST_ALICE_I2S2_RIGHT 0x0701
1301
1302
1303
1304#define EMU_DST_MDOCK_SPDIF_LEFT1 0x0112
1305
1306#define EMU_DST_MDOCK_SPDIF_LEFT2 0x0113
1307
1308#define EMU_DST_MDOCK_SPDIF_RIGHT1 0x0116
1309
1310#define EMU_DST_MDOCK_SPDIF_RIGHT2 0x0117
1311
1312#define EMU_DST_MDOCK_ADAT 0x0118
1313
1314
1315#define EMU_DST_MANA_DAC_LEFT 0x0300
1316
1317#define EMU_DST_MANA_DAC_RIGHT 0x0301
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424#define EMU_SRC_SILENCE 0x0000
1425#define EMU_SRC_DOCK_MIC_A1 0x0100
1426#define EMU_SRC_DOCK_MIC_A2 0x0101
1427#define EMU_SRC_DOCK_MIC_A3 0x0102
1428#define EMU_SRC_DOCK_MIC_A4 0x0103
1429#define EMU_SRC_DOCK_MIC_B1 0x0104
1430#define EMU_SRC_DOCK_MIC_B2 0x0105
1431#define EMU_SRC_DOCK_MIC_B3 0x0106
1432#define EMU_SRC_DOCK_MIC_B4 0x0107
1433#define EMU_SRC_DOCK_ADC1_LEFT1 0x0108
1434#define EMU_SRC_DOCK_ADC1_LEFT2 0x0109
1435#define EMU_SRC_DOCK_ADC1_LEFT3 0x010a
1436#define EMU_SRC_DOCK_ADC1_LEFT4 0x010b
1437#define EMU_SRC_DOCK_ADC1_RIGHT1 0x010c
1438#define EMU_SRC_DOCK_ADC1_RIGHT2 0x010d
1439#define EMU_SRC_DOCK_ADC1_RIGHT3 0x010e
1440#define EMU_SRC_DOCK_ADC1_RIGHT4 0x010f
1441#define EMU_SRC_DOCK_ADC2_LEFT1 0x0110
1442#define EMU_SRC_DOCK_ADC2_LEFT2 0x0111
1443#define EMU_SRC_DOCK_ADC2_LEFT3 0x0112
1444#define EMU_SRC_DOCK_ADC2_LEFT4 0x0113
1445#define EMU_SRC_DOCK_ADC2_RIGHT1 0x0114
1446#define EMU_SRC_DOCK_ADC2_RIGHT2 0x0115
1447#define EMU_SRC_DOCK_ADC2_RIGHT3 0x0116
1448#define EMU_SRC_DOCK_ADC2_RIGHT4 0x0117
1449#define EMU_SRC_DOCK_ADC3_LEFT1 0x0118
1450#define EMU_SRC_DOCK_ADC3_LEFT2 0x0119
1451#define EMU_SRC_DOCK_ADC3_LEFT3 0x011a
1452#define EMU_SRC_DOCK_ADC3_LEFT4 0x011b
1453#define EMU_SRC_DOCK_ADC3_RIGHT1 0x011c
1454#define EMU_SRC_DOCK_ADC3_RIGHT2 0x011d
1455#define EMU_SRC_DOCK_ADC3_RIGHT3 0x011e
1456#define EMU_SRC_DOCK_ADC3_RIGHT4 0x011f
1457#define EMU_SRC_HAMOA_ADC_LEFT1 0x0200
1458#define EMU_SRC_HAMOA_ADC_LEFT2 0x0202
1459#define EMU_SRC_HAMOA_ADC_LEFT3 0x0204
1460#define EMU_SRC_HAMOA_ADC_LEFT4 0x0206
1461#define EMU_SRC_HAMOA_ADC_RIGHT1 0x0201
1462#define EMU_SRC_HAMOA_ADC_RIGHT2 0x0203
1463#define EMU_SRC_HAMOA_ADC_RIGHT3 0x0205
1464#define EMU_SRC_HAMOA_ADC_RIGHT4 0x0207
1465#define EMU_SRC_ALICE_EMU32A 0x0300
1466#define EMU_SRC_ALICE_EMU32B 0x0310
1467#define EMU_SRC_HANA_ADAT 0x0400
1468#define EMU_SRC_HANA_SPDIF_LEFT1 0x0500
1469#define EMU_SRC_HANA_SPDIF_LEFT2 0x0502
1470#define EMU_SRC_HANA_SPDIF_RIGHT1 0x0501
1471#define EMU_SRC_HANA_SPDIF_RIGHT2 0x0503
1472
1473
1474
1475#define EMU_SRC_MDOCK_SPDIF_LEFT1 0x0112
1476
1477#define EMU_SRC_MDOCK_SPDIF_LEFT2 0x0113
1478
1479#define EMU_SRC_MDOCK_SPDIF_RIGHT1 0x0116
1480
1481#define EMU_SRC_MDOCK_SPDIF_RIGHT2 0x0117
1482
1483#define EMU_SRC_MDOCK_ADAT 0x0118
1484
1485
1486
1487
1488
1489enum {
1490 EMU10K1_EFX,
1491 EMU10K1_PCM,
1492 EMU10K1_SYNTH,
1493 EMU10K1_MIDI
1494};
1495
1496struct snd_emu10k1;
1497
1498struct snd_emu10k1_voice {
1499 struct snd_emu10k1 *emu;
1500 int number;
1501 unsigned int use: 1,
1502 pcm: 1,
1503 efx: 1,
1504 synth: 1,
1505 midi: 1;
1506 void (*interrupt)(struct snd_emu10k1 *emu, struct snd_emu10k1_voice *pvoice);
1507
1508 struct snd_emu10k1_pcm *epcm;
1509};
1510
1511enum {
1512 PLAYBACK_EMUVOICE,
1513 PLAYBACK_EFX,
1514 CAPTURE_AC97ADC,
1515 CAPTURE_AC97MIC,
1516 CAPTURE_EFX
1517};
1518
1519struct snd_emu10k1_pcm {
1520 struct snd_emu10k1 *emu;
1521 int type;
1522 struct snd_pcm_substream *substream;
1523 struct snd_emu10k1_voice *voices[NUM_EFX_PLAYBACK];
1524 struct snd_emu10k1_voice *extra;
1525 unsigned short running;
1526 unsigned short first_ptr;
1527 struct snd_util_memblk *memblk;
1528 unsigned int start_addr;
1529 unsigned int ccca_start_addr;
1530 unsigned int capture_ipr;
1531 unsigned int capture_inte;
1532 unsigned int capture_ba_reg;
1533 unsigned int capture_bs_reg;
1534 unsigned int capture_idx_reg;
1535 unsigned int capture_cr_val;
1536 unsigned int capture_cr_val2;
1537 unsigned int capture_bs_val;
1538 unsigned int capture_bufsize;
1539};
1540
1541struct snd_emu10k1_pcm_mixer {
1542
1543 unsigned char send_routing[3][8];
1544 unsigned char send_volume[3][8];
1545 unsigned short attn[3];
1546 struct snd_emu10k1_pcm *epcm;
1547};
1548
1549#define snd_emu10k1_compose_send_routing(route) \
1550((route[0] | (route[1] << 4) | (route[2] << 8) | (route[3] << 12)) << 16)
1551
1552#define snd_emu10k1_compose_audigy_fxrt1(route) \
1553((unsigned int)route[0] | ((unsigned int)route[1] << 8) | ((unsigned int)route[2] << 16) | ((unsigned int)route[3] << 24))
1554
1555#define snd_emu10k1_compose_audigy_fxrt2(route) \
1556((unsigned int)route[4] | ((unsigned int)route[5] << 8) | ((unsigned int)route[6] << 16) | ((unsigned int)route[7] << 24))
1557
1558struct snd_emu10k1_memblk {
1559 struct snd_util_memblk mem;
1560
1561 int first_page, last_page, pages, mapped_page;
1562 unsigned int map_locked;
1563 struct list_head mapped_link;
1564 struct list_head mapped_order_link;
1565};
1566
1567#define snd_emu10k1_memblk_offset(blk) (((blk)->mapped_page << PAGE_SHIFT) | ((blk)->mem.offset & (PAGE_SIZE - 1)))
1568
1569#define EMU10K1_MAX_TRAM_BLOCKS_PER_CODE 16
1570
1571struct snd_emu10k1_fx8010_ctl {
1572 struct list_head list;
1573 unsigned int vcount;
1574 unsigned int count;
1575 unsigned short gpr[32];
1576 unsigned int value[32];
1577 unsigned int min;
1578 unsigned int max;
1579 unsigned int translation;
1580 struct snd_kcontrol *kcontrol;
1581};
1582
1583typedef void (snd_fx8010_irq_handler_t)(struct snd_emu10k1 *emu, void *private_data);
1584
1585struct snd_emu10k1_fx8010_irq {
1586 struct snd_emu10k1_fx8010_irq *next;
1587 snd_fx8010_irq_handler_t *handler;
1588 unsigned short gpr_running;
1589 void *private_data;
1590};
1591
1592struct snd_emu10k1_fx8010_pcm {
1593 unsigned int valid: 1,
1594 opened: 1,
1595 active: 1;
1596 unsigned int channels;
1597 unsigned int tram_start;
1598 unsigned int buffer_size;
1599 unsigned short gpr_size;
1600 unsigned short gpr_ptr;
1601 unsigned short gpr_count;
1602 unsigned short gpr_tmpcount;
1603 unsigned short gpr_trigger;
1604 unsigned short gpr_running;
1605 unsigned char etram[32];
1606 struct snd_pcm_indirect pcm_rec;
1607 unsigned int tram_pos;
1608 unsigned int tram_shift;
1609 struct snd_emu10k1_fx8010_irq *irq;
1610};
1611
1612struct snd_emu10k1_fx8010 {
1613 unsigned short fxbus_mask;
1614 unsigned short extin_mask;
1615 unsigned short extout_mask;
1616 unsigned short pad1;
1617 unsigned int itram_size;
1618 struct snd_dma_buffer etram_pages;
1619 unsigned int dbg;
1620 unsigned char name[128];
1621 int gpr_size;
1622 int gpr_count;
1623 struct list_head gpr_ctl;
1624 struct mutex lock;
1625 struct snd_emu10k1_fx8010_pcm pcm[8];
1626 spinlock_t irq_lock;
1627 struct snd_emu10k1_fx8010_irq *irq_handlers;
1628};
1629
1630struct snd_emu10k1_midi {
1631 struct snd_emu10k1 *emu;
1632 struct snd_rawmidi *rmidi;
1633 struct snd_rawmidi_substream *substream_input;
1634 struct snd_rawmidi_substream *substream_output;
1635 unsigned int midi_mode;
1636 spinlock_t input_lock;
1637 spinlock_t output_lock;
1638 spinlock_t open_lock;
1639 int tx_enable, rx_enable;
1640 int port;
1641 int ipr_tx, ipr_rx;
1642 void (*interrupt)(struct snd_emu10k1 *emu, unsigned int status);
1643};
1644
1645enum {
1646 EMU_MODEL_SB,
1647 EMU_MODEL_EMU1010,
1648 EMU_MODEL_EMU1010B,
1649 EMU_MODEL_EMU1616,
1650 EMU_MODEL_EMU0404,
1651};
1652
1653struct snd_emu_chip_details {
1654 u32 vendor;
1655 u32 device;
1656 u32 subsystem;
1657 unsigned char revision;
1658 unsigned char emu10k1_chip;
1659 unsigned char emu10k2_chip;
1660 unsigned char ca0102_chip;
1661 unsigned char ca0108_chip;
1662 unsigned char ca_cardbus_chip;
1663 unsigned char ca0151_chip;
1664 unsigned char spk71;
1665 unsigned char sblive51;
1666 unsigned char spdif_bug;
1667 unsigned char ac97_chip;
1668 unsigned char ecard;
1669 unsigned char emu_model;
1670 unsigned char spi_dac;
1671 unsigned char i2c_adc;
1672 unsigned char adc_1361t;
1673 unsigned char invert_shared_spdif;
1674 const char *driver;
1675 const char *name;
1676 const char *id;
1677};
1678
1679struct snd_emu1010 {
1680 unsigned int output_source[64];
1681 unsigned int input_source[64];
1682 unsigned int adc_pads;
1683 unsigned int dac_pads;
1684 unsigned int internal_clock;
1685 unsigned int optical_in;
1686 unsigned int optical_out;
1687 struct task_struct *firmware_thread;
1688};
1689
1690struct snd_emu10k1 {
1691 int irq;
1692
1693 unsigned long port;
1694 unsigned int tos_link: 1,
1695 rear_ac97: 1,
1696 enable_ir: 1;
1697 unsigned int support_tlv :1;
1698
1699 const struct snd_emu_chip_details *card_capabilities;
1700 unsigned int audigy;
1701 unsigned int revision;
1702 unsigned int serial;
1703 unsigned short model;
1704 unsigned int card_type;
1705 unsigned int ecard_ctrl;
1706 unsigned long dma_mask;
1707 int max_cache_pages;
1708 struct snd_dma_buffer silent_page;
1709 struct snd_dma_buffer ptb_pages;
1710 struct snd_dma_device p16v_dma_dev;
1711 struct snd_dma_buffer p16v_buffer;
1712
1713 struct snd_util_memhdr *memhdr;
1714 struct snd_emu10k1_memblk *reserved_page;
1715
1716 struct list_head mapped_link_head;
1717 struct list_head mapped_order_link_head;
1718 void **page_ptr_table;
1719 unsigned long *page_addr_table;
1720 spinlock_t memblk_lock;
1721
1722 unsigned int spdif_bits[3];
1723 unsigned int i2c_capture_source;
1724 u8 i2c_capture_volume[4][2];
1725
1726 struct snd_emu10k1_fx8010 fx8010;
1727 int gpr_base;
1728
1729 struct snd_ac97 *ac97;
1730
1731 struct pci_dev *pci;
1732 struct snd_card *card;
1733 struct snd_pcm *pcm;
1734 struct snd_pcm *pcm_mic;
1735 struct snd_pcm *pcm_efx;
1736 struct snd_pcm *pcm_multi;
1737 struct snd_pcm *pcm_p16v;
1738
1739 spinlock_t synth_lock;
1740 void *synth;
1741 int (*get_synth_voice)(struct snd_emu10k1 *emu);
1742
1743 spinlock_t reg_lock;
1744 spinlock_t emu_lock;
1745 spinlock_t voice_lock;
1746 spinlock_t spi_lock;
1747 spinlock_t i2c_lock;
1748
1749 struct snd_emu10k1_voice voices[NUM_G];
1750 struct snd_emu10k1_voice p16v_voices[4];
1751 struct snd_emu10k1_voice p16v_capture_voice;
1752 int p16v_device_offset;
1753 u32 p16v_capture_source;
1754 u32 p16v_capture_channel;
1755 struct snd_emu1010 emu1010;
1756 struct snd_emu10k1_pcm_mixer pcm_mixer[32];
1757 struct snd_emu10k1_pcm_mixer efx_pcm_mixer[NUM_EFX_PLAYBACK];
1758 struct snd_kcontrol *ctl_send_routing;
1759 struct snd_kcontrol *ctl_send_volume;
1760 struct snd_kcontrol *ctl_attn;
1761 struct snd_kcontrol *ctl_efx_send_routing;
1762 struct snd_kcontrol *ctl_efx_send_volume;
1763 struct snd_kcontrol *ctl_efx_attn;
1764
1765 void (*hwvol_interrupt)(struct snd_emu10k1 *emu, unsigned int status);
1766 void (*capture_interrupt)(struct snd_emu10k1 *emu, unsigned int status);
1767 void (*capture_mic_interrupt)(struct snd_emu10k1 *emu, unsigned int status);
1768 void (*capture_efx_interrupt)(struct snd_emu10k1 *emu, unsigned int status);
1769 void (*spdif_interrupt)(struct snd_emu10k1 *emu, unsigned int status);
1770 void (*dsp_interrupt)(struct snd_emu10k1 *emu);
1771
1772 struct snd_pcm_substream *pcm_capture_substream;
1773 struct snd_pcm_substream *pcm_capture_mic_substream;
1774 struct snd_pcm_substream *pcm_capture_efx_substream;
1775 struct snd_pcm_substream *pcm_playback_efx_substream;
1776
1777 struct snd_timer *timer;
1778
1779 struct snd_emu10k1_midi midi;
1780 struct snd_emu10k1_midi midi2;
1781
1782 unsigned int efx_voices_mask[2];
1783 unsigned int next_free_voice;
1784
1785#ifdef CONFIG_PM
1786 unsigned int *saved_ptr;
1787 unsigned int *saved_gpr;
1788 unsigned int *tram_val_saved;
1789 unsigned int *tram_addr_saved;
1790 unsigned int *saved_icode;
1791 unsigned int *p16v_saved;
1792 unsigned int saved_a_iocfg, saved_hcfg;
1793#endif
1794
1795};
1796
1797int snd_emu10k1_create(struct snd_card *card,
1798 struct pci_dev *pci,
1799 unsigned short extin_mask,
1800 unsigned short extout_mask,
1801 long max_cache_bytes,
1802 int enable_ir,
1803 uint subsystem,
1804 struct snd_emu10k1 ** remu);
1805
1806int snd_emu10k1_pcm(struct snd_emu10k1 * emu, int device, struct snd_pcm ** rpcm);
1807int snd_emu10k1_pcm_mic(struct snd_emu10k1 * emu, int device, struct snd_pcm ** rpcm);
1808int snd_emu10k1_pcm_efx(struct snd_emu10k1 * emu, int device, struct snd_pcm ** rpcm);
1809int snd_p16v_pcm(struct snd_emu10k1 * emu, int device, struct snd_pcm ** rpcm);
1810int snd_p16v_free(struct snd_emu10k1 * emu);
1811int snd_p16v_mixer(struct snd_emu10k1 * emu);
1812int snd_emu10k1_pcm_multi(struct snd_emu10k1 * emu, int device, struct snd_pcm ** rpcm);
1813int snd_emu10k1_fx8010_pcm(struct snd_emu10k1 * emu, int device, struct snd_pcm ** rpcm);
1814int snd_emu10k1_mixer(struct snd_emu10k1 * emu, int pcm_device, int multi_device);
1815int snd_emu10k1_timer(struct snd_emu10k1 * emu, int device);
1816int snd_emu10k1_fx8010_new(struct snd_emu10k1 *emu, int device, struct snd_hwdep ** rhwdep);
1817
1818irqreturn_t snd_emu10k1_interrupt(int irq, void *dev_id);
1819
1820void snd_emu10k1_voice_init(struct snd_emu10k1 * emu, int voice);
1821int snd_emu10k1_init_efx(struct snd_emu10k1 *emu);
1822void snd_emu10k1_free_efx(struct snd_emu10k1 *emu);
1823int snd_emu10k1_fx8010_tram_setup(struct snd_emu10k1 *emu, u32 size);
1824int snd_emu10k1_done(struct snd_emu10k1 * emu);
1825
1826
1827unsigned int snd_emu10k1_ptr_read(struct snd_emu10k1 * emu, unsigned int reg, unsigned int chn);
1828void snd_emu10k1_ptr_write(struct snd_emu10k1 *emu, unsigned int reg, unsigned int chn, unsigned int data);
1829unsigned int snd_emu10k1_ptr20_read(struct snd_emu10k1 * emu, unsigned int reg, unsigned int chn);
1830void snd_emu10k1_ptr20_write(struct snd_emu10k1 *emu, unsigned int reg, unsigned int chn, unsigned int data);
1831int snd_emu10k1_spi_write(struct snd_emu10k1 * emu, unsigned int data);
1832int snd_emu10k1_i2c_write(struct snd_emu10k1 *emu, u32 reg, u32 value);
1833int snd_emu1010_fpga_write(struct snd_emu10k1 * emu, u32 reg, u32 value);
1834int snd_emu1010_fpga_read(struct snd_emu10k1 * emu, u32 reg, u32 *value);
1835int snd_emu1010_fpga_link_dst_src_write(struct snd_emu10k1 * emu, u32 dst, u32 src);
1836unsigned int snd_emu10k1_efx_read(struct snd_emu10k1 *emu, unsigned int pc);
1837void snd_emu10k1_intr_enable(struct snd_emu10k1 *emu, unsigned int intrenb);
1838void snd_emu10k1_intr_disable(struct snd_emu10k1 *emu, unsigned int intrenb);
1839void snd_emu10k1_voice_intr_enable(struct snd_emu10k1 *emu, unsigned int voicenum);
1840void snd_emu10k1_voice_intr_disable(struct snd_emu10k1 *emu, unsigned int voicenum);
1841void snd_emu10k1_voice_intr_ack(struct snd_emu10k1 *emu, unsigned int voicenum);
1842void snd_emu10k1_voice_half_loop_intr_enable(struct snd_emu10k1 *emu, unsigned int voicenum);
1843void snd_emu10k1_voice_half_loop_intr_disable(struct snd_emu10k1 *emu, unsigned int voicenum);
1844void snd_emu10k1_voice_half_loop_intr_ack(struct snd_emu10k1 *emu, unsigned int voicenum);
1845void snd_emu10k1_voice_set_loop_stop(struct snd_emu10k1 *emu, unsigned int voicenum);
1846void snd_emu10k1_voice_clear_loop_stop(struct snd_emu10k1 *emu, unsigned int voicenum);
1847void snd_emu10k1_wait(struct snd_emu10k1 *emu, unsigned int wait);
1848static inline unsigned int snd_emu10k1_wc(struct snd_emu10k1 *emu) { return (inl(emu->port + WC) >> 6) & 0xfffff; }
1849unsigned short snd_emu10k1_ac97_read(struct snd_ac97 *ac97, unsigned short reg);
1850void snd_emu10k1_ac97_write(struct snd_ac97 *ac97, unsigned short reg, unsigned short data);
1851unsigned int snd_emu10k1_rate_to_pitch(unsigned int rate);
1852
1853#ifdef CONFIG_PM
1854void snd_emu10k1_suspend_regs(struct snd_emu10k1 *emu);
1855void snd_emu10k1_resume_init(struct snd_emu10k1 *emu);
1856void snd_emu10k1_resume_regs(struct snd_emu10k1 *emu);
1857int snd_emu10k1_efx_alloc_pm_buffer(struct snd_emu10k1 *emu);
1858void snd_emu10k1_efx_free_pm_buffer(struct snd_emu10k1 *emu);
1859void snd_emu10k1_efx_suspend(struct snd_emu10k1 *emu);
1860void snd_emu10k1_efx_resume(struct snd_emu10k1 *emu);
1861int snd_p16v_alloc_pm_buffer(struct snd_emu10k1 *emu);
1862void snd_p16v_free_pm_buffer(struct snd_emu10k1 *emu);
1863void snd_p16v_suspend(struct snd_emu10k1 *emu);
1864void snd_p16v_resume(struct snd_emu10k1 *emu);
1865#endif
1866
1867
1868struct snd_util_memblk *snd_emu10k1_alloc_pages(struct snd_emu10k1 *emu, struct snd_pcm_substream *substream);
1869int snd_emu10k1_free_pages(struct snd_emu10k1 *emu, struct snd_util_memblk *blk);
1870struct snd_util_memblk *snd_emu10k1_synth_alloc(struct snd_emu10k1 *emu, unsigned int size);
1871int snd_emu10k1_synth_free(struct snd_emu10k1 *emu, struct snd_util_memblk *blk);
1872int snd_emu10k1_synth_bzero(struct snd_emu10k1 *emu, struct snd_util_memblk *blk, int offset, int size);
1873int snd_emu10k1_synth_copy_from_user(struct snd_emu10k1 *emu, struct snd_util_memblk *blk, int offset, const char __user *data, int size);
1874int snd_emu10k1_memblk_map(struct snd_emu10k1 *emu, struct snd_emu10k1_memblk *blk);
1875
1876
1877int snd_emu10k1_voice_alloc(struct snd_emu10k1 *emu, int type, int pair, struct snd_emu10k1_voice **rvoice);
1878int snd_emu10k1_voice_free(struct snd_emu10k1 *emu, struct snd_emu10k1_voice *pvoice);
1879
1880
1881int snd_emu10k1_midi(struct snd_emu10k1 * emu);
1882int snd_emu10k1_audigy_midi(struct snd_emu10k1 * emu);
1883
1884
1885int snd_emu10k1_proc_init(struct snd_emu10k1 * emu);
1886
1887
1888int snd_emu10k1_fx8010_register_irq_handler(struct snd_emu10k1 *emu,
1889 snd_fx8010_irq_handler_t *handler,
1890 unsigned char gpr_running,
1891 void *private_data,
1892 struct snd_emu10k1_fx8010_irq **r_irq);
1893int snd_emu10k1_fx8010_unregister_irq_handler(struct snd_emu10k1 *emu,
1894 struct snd_emu10k1_fx8010_irq *irq);
1895
1896#endif
1897
1898
1899
1900
1901
1902#define EMU10K1_CARD_CREATIVE 0x00000000
1903#define EMU10K1_CARD_EMUAPS 0x00000001
1904
1905#define EMU10K1_FX8010_PCM_COUNT 8
1906
1907
1908#define iMAC0 0x00
1909#define iMAC1 0x01
1910#define iMAC2 0x02
1911#define iMAC3 0x03
1912#define iMACINT0 0x04
1913#define iMACINT1 0x05
1914#define iACC3 0x06
1915#define iMACMV 0x07
1916#define iANDXOR 0x08
1917#define iTSTNEG 0x09
1918#define iLIMITGE 0x0a
1919#define iLIMITLT 0x0b
1920#define iLOG 0x0c
1921#define iEXP 0x0d
1922#define iINTERP 0x0e
1923#define iSKIP 0x0f
1924
1925
1926#define FXBUS(x) (0x00 + (x))
1927#define EXTIN(x) (0x10 + (x))
1928#define EXTOUT(x) (0x20 + (x))
1929#define FXBUS2(x) (0x30 + (x))
1930
1931
1932#define C_00000000 0x40
1933#define C_00000001 0x41
1934#define C_00000002 0x42
1935#define C_00000003 0x43
1936#define C_00000004 0x44
1937#define C_00000008 0x45
1938#define C_00000010 0x46
1939#define C_00000020 0x47
1940#define C_00000100 0x48
1941#define C_00010000 0x49
1942#define C_00080000 0x4a
1943#define C_10000000 0x4b
1944#define C_20000000 0x4c
1945#define C_40000000 0x4d
1946#define C_80000000 0x4e
1947#define C_7fffffff 0x4f
1948#define C_ffffffff 0x50
1949#define C_fffffffe 0x51
1950#define C_c0000000 0x52
1951#define C_4f1bbcdc 0x53
1952#define C_5a7ef9db 0x54
1953#define C_00100000 0x55
1954#define GPR_ACCU 0x56
1955#define GPR_COND 0x57
1956#define GPR_NOISE0 0x58
1957#define GPR_NOISE1 0x59
1958#define GPR_IRQ 0x5a
1959#define GPR_DBAC 0x5b
1960#define GPR(x) (FXGPREGBASE + (x))
1961#define ITRAM_DATA(x) (TANKMEMDATAREGBASE + 0x00 + (x))
1962#define ETRAM_DATA(x) (TANKMEMDATAREGBASE + 0x80 + (x))
1963#define ITRAM_ADDR(x) (TANKMEMADDRREGBASE + 0x00 + (x))
1964#define ETRAM_ADDR(x) (TANKMEMADDRREGBASE + 0x80 + (x))
1965
1966#define A_ITRAM_DATA(x) (TANKMEMDATAREGBASE + 0x00 + (x))
1967#define A_ETRAM_DATA(x) (TANKMEMDATAREGBASE + 0xc0 + (x))
1968#define A_ITRAM_ADDR(x) (TANKMEMADDRREGBASE + 0x00 + (x))
1969#define A_ETRAM_ADDR(x) (TANKMEMADDRREGBASE + 0xc0 + (x))
1970#define A_ITRAM_CTL(x) (A_TANKMEMCTLREGBASE + 0x00 + (x))
1971#define A_ETRAM_CTL(x) (A_TANKMEMCTLREGBASE + 0xc0 + (x))
1972
1973#define A_FXBUS(x) (0x00 + (x))
1974#define A_EXTIN(x) (0x40 + (x))
1975#define A_P16VIN(x) (0x50 + (x))
1976#define A_EXTOUT(x) (0x60 + (x))
1977#define A_FXBUS2(x) (0x80 + (x))
1978#define A_EMU32OUTH(x) (0xa0 + (x))
1979#define A_EMU32OUTL(x) (0xb0 + (x))
1980#define A3_EMU32IN(x) (0x160 + (x))
1981#define A3_EMU32OUT(x) (0x1E0 + (x))
1982#define A_GPR(x) (A_FXGPREGBASE + (x))
1983
1984
1985#define CC_REG_NORMALIZED C_00000001
1986#define CC_REG_BORROW C_00000002
1987#define CC_REG_MINUS C_00000004
1988#define CC_REG_ZERO C_00000008
1989#define CC_REG_SATURATE C_00000010
1990#define CC_REG_NONZERO C_00000100
1991
1992
1993#define FXBUS_PCM_LEFT 0x00
1994#define FXBUS_PCM_RIGHT 0x01
1995#define FXBUS_PCM_LEFT_REAR 0x02
1996#define FXBUS_PCM_RIGHT_REAR 0x03
1997#define FXBUS_MIDI_LEFT 0x04
1998#define FXBUS_MIDI_RIGHT 0x05
1999#define FXBUS_PCM_CENTER 0x06
2000#define FXBUS_PCM_LFE 0x07
2001#define FXBUS_PCM_LEFT_FRONT 0x08
2002#define FXBUS_PCM_RIGHT_FRONT 0x09
2003#define FXBUS_MIDI_REVERB 0x0c
2004#define FXBUS_MIDI_CHORUS 0x0d
2005#define FXBUS_PCM_LEFT_SIDE 0x0e
2006#define FXBUS_PCM_RIGHT_SIDE 0x0f
2007#define FXBUS_PT_LEFT 0x14
2008#define FXBUS_PT_RIGHT 0x15
2009
2010
2011#define EXTIN_AC97_L 0x00
2012#define EXTIN_AC97_R 0x01
2013#define EXTIN_SPDIF_CD_L 0x02
2014#define EXTIN_SPDIF_CD_R 0x03
2015#define EXTIN_ZOOM_L 0x04
2016#define EXTIN_ZOOM_R 0x05
2017#define EXTIN_TOSLINK_L 0x06
2018#define EXTIN_TOSLINK_R 0x07
2019#define EXTIN_LINE1_L 0x08
2020#define EXTIN_LINE1_R 0x09
2021#define EXTIN_COAX_SPDIF_L 0x0a
2022#define EXTIN_COAX_SPDIF_R 0x0b
2023#define EXTIN_LINE2_L 0x0c
2024#define EXTIN_LINE2_R 0x0d
2025
2026
2027#define EXTOUT_AC97_L 0x00
2028#define EXTOUT_AC97_R 0x01
2029#define EXTOUT_TOSLINK_L 0x02
2030#define EXTOUT_TOSLINK_R 0x03
2031#define EXTOUT_AC97_CENTER 0x04
2032#define EXTOUT_AC97_LFE 0x05
2033#define EXTOUT_HEADPHONE_L 0x06
2034#define EXTOUT_HEADPHONE_R 0x07
2035#define EXTOUT_REAR_L 0x08
2036#define EXTOUT_REAR_R 0x09
2037#define EXTOUT_ADC_CAP_L 0x0a
2038#define EXTOUT_ADC_CAP_R 0x0b
2039#define EXTOUT_MIC_CAP 0x0c
2040#define EXTOUT_AC97_REAR_L 0x0d
2041#define EXTOUT_AC97_REAR_R 0x0e
2042#define EXTOUT_ACENTER 0x11
2043#define EXTOUT_ALFE 0x12
2044
2045
2046#define A_EXTIN_AC97_L 0x00
2047#define A_EXTIN_AC97_R 0x01
2048#define A_EXTIN_SPDIF_CD_L 0x02
2049#define A_EXTIN_SPDIF_CD_R 0x03
2050#define A_EXTIN_OPT_SPDIF_L 0x04
2051#define A_EXTIN_OPT_SPDIF_R 0x05
2052#define A_EXTIN_LINE2_L 0x08
2053#define A_EXTIN_LINE2_R 0x09
2054#define A_EXTIN_ADC_L 0x0a
2055#define A_EXTIN_ADC_R 0x0b
2056#define A_EXTIN_AUX2_L 0x0c
2057#define A_EXTIN_AUX2_R 0x0d
2058
2059
2060#define A_EXTOUT_FRONT_L 0x00
2061#define A_EXTOUT_FRONT_R 0x01
2062#define A_EXTOUT_CENTER 0x02
2063#define A_EXTOUT_LFE 0x03
2064#define A_EXTOUT_HEADPHONE_L 0x04
2065#define A_EXTOUT_HEADPHONE_R 0x05
2066#define A_EXTOUT_REAR_L 0x06
2067#define A_EXTOUT_REAR_R 0x07
2068#define A_EXTOUT_AFRONT_L 0x08
2069#define A_EXTOUT_AFRONT_R 0x09
2070#define A_EXTOUT_ACENTER 0x0a
2071#define A_EXTOUT_ALFE 0x0b
2072#define A_EXTOUT_ASIDE_L 0x0c
2073#define A_EXTOUT_ASIDE_R 0x0d
2074#define A_EXTOUT_AREAR_L 0x0e
2075#define A_EXTOUT_AREAR_R 0x0f
2076#define A_EXTOUT_AC97_L 0x10
2077#define A_EXTOUT_AC97_R 0x11
2078#define A_EXTOUT_ADC_CAP_L 0x16
2079#define A_EXTOUT_ADC_CAP_R 0x17
2080#define A_EXTOUT_MIC_CAP 0x18
2081
2082
2083#define A_C_00000000 0xc0
2084#define A_C_00000001 0xc1
2085#define A_C_00000002 0xc2
2086#define A_C_00000003 0xc3
2087#define A_C_00000004 0xc4
2088#define A_C_00000008 0xc5
2089#define A_C_00000010 0xc6
2090#define A_C_00000020 0xc7
2091#define A_C_00000100 0xc8
2092#define A_C_00010000 0xc9
2093#define A_C_00000800 0xca
2094#define A_C_10000000 0xcb
2095#define A_C_20000000 0xcc
2096#define A_C_40000000 0xcd
2097#define A_C_80000000 0xce
2098#define A_C_7fffffff 0xcf
2099#define A_C_ffffffff 0xd0
2100#define A_C_fffffffe 0xd1
2101#define A_C_c0000000 0xd2
2102#define A_C_4f1bbcdc 0xd3
2103#define A_C_5a7ef9db 0xd4
2104#define A_C_00100000 0xd5
2105#define A_GPR_ACCU 0xd6
2106#define A_GPR_COND 0xd7
2107#define A_GPR_NOISE0 0xd8
2108#define A_GPR_NOISE1 0xd9
2109#define A_GPR_IRQ 0xda
2110#define A_GPR_DBAC 0xdb
2111#define A_GPR_DBACE 0xde
2112
2113
2114#define EMU10K1_DBG_ZC 0x80000000
2115#define EMU10K1_DBG_SATURATION_OCCURED 0x02000000
2116#define EMU10K1_DBG_SATURATION_ADDR 0x01ff0000
2117#define EMU10K1_DBG_SINGLE_STEP 0x00008000
2118#define EMU10K1_DBG_STEP 0x00004000
2119#define EMU10K1_DBG_CONDITION_CODE 0x00003e00
2120#define EMU10K1_DBG_SINGLE_STEP_ADDR 0x000001ff
2121
2122
2123#ifndef __KERNEL__
2124#define TANKMEMADDRREG_ADDR_MASK 0x000fffff
2125#define TANKMEMADDRREG_CLEAR 0x00800000
2126#define TANKMEMADDRREG_ALIGN 0x00400000
2127#define TANKMEMADDRREG_WRITE 0x00200000
2128#define TANKMEMADDRREG_READ 0x00100000
2129#endif
2130
2131struct snd_emu10k1_fx8010_info {
2132 unsigned int internal_tram_size;
2133 unsigned int external_tram_size;
2134 char fxbus_names[16][32];
2135 char extin_names[16][32];
2136 char extout_names[32][32];
2137 unsigned int gpr_controls;
2138};
2139
2140#define EMU10K1_GPR_TRANSLATION_NONE 0
2141#define EMU10K1_GPR_TRANSLATION_TABLE100 1
2142#define EMU10K1_GPR_TRANSLATION_BASS 2
2143#define EMU10K1_GPR_TRANSLATION_TREBLE 3
2144#define EMU10K1_GPR_TRANSLATION_ONOFF 4
2145
2146struct snd_emu10k1_fx8010_control_gpr {
2147 struct snd_ctl_elem_id id;
2148 unsigned int vcount;
2149 unsigned int count;
2150 unsigned short gpr[32];
2151 unsigned int value[32];
2152 unsigned int min;
2153 unsigned int max;
2154 unsigned int translation;
2155 const unsigned int *tlv;
2156};
2157
2158
2159struct snd_emu10k1_fx8010_control_old_gpr {
2160 struct snd_ctl_elem_id id;
2161 unsigned int vcount;
2162 unsigned int count;
2163 unsigned short gpr[32];
2164 unsigned int value[32];
2165 unsigned int min;
2166 unsigned int max;
2167 unsigned int translation;
2168};
2169
2170struct snd_emu10k1_fx8010_code {
2171 char name[128];
2172
2173 DECLARE_BITMAP(gpr_valid, 0x200);
2174 u_int32_t __user *gpr_map;
2175
2176 unsigned int gpr_add_control_count;
2177 struct snd_emu10k1_fx8010_control_gpr __user *gpr_add_controls;
2178
2179 unsigned int gpr_del_control_count;
2180 struct snd_ctl_elem_id __user *gpr_del_controls;
2181
2182 unsigned int gpr_list_control_count;
2183 unsigned int gpr_list_control_total;
2184 struct snd_emu10k1_fx8010_control_gpr __user *gpr_list_controls;
2185
2186 DECLARE_BITMAP(tram_valid, 0x100);
2187 u_int32_t __user *tram_data_map;
2188 u_int32_t __user *tram_addr_map;
2189
2190 DECLARE_BITMAP(code_valid, 1024);
2191 u_int32_t __user *code;
2192};
2193
2194struct snd_emu10k1_fx8010_tram {
2195 unsigned int address;
2196 unsigned int size;
2197 unsigned int *samples;
2198
2199};
2200
2201struct snd_emu10k1_fx8010_pcm_rec {
2202 unsigned int substream;
2203 unsigned int res1;
2204 unsigned int channels;
2205 unsigned int tram_start;
2206 unsigned int buffer_size;
2207 unsigned short gpr_size;
2208 unsigned short gpr_ptr;
2209 unsigned short gpr_count;
2210 unsigned short gpr_tmpcount;
2211 unsigned short gpr_trigger;
2212 unsigned short gpr_running;
2213 unsigned char pad;
2214 unsigned char etram[32];
2215 unsigned int res2;
2216};
2217
2218#define SNDRV_EMU10K1_VERSION SNDRV_PROTOCOL_VERSION(1, 0, 1)
2219
2220#define SNDRV_EMU10K1_IOCTL_INFO _IOR ('H', 0x10, struct snd_emu10k1_fx8010_info)
2221#define SNDRV_EMU10K1_IOCTL_CODE_POKE _IOW ('H', 0x11, struct snd_emu10k1_fx8010_code)
2222#define SNDRV_EMU10K1_IOCTL_CODE_PEEK _IOWR('H', 0x12, struct snd_emu10k1_fx8010_code)
2223#define SNDRV_EMU10K1_IOCTL_TRAM_SETUP _IOW ('H', 0x20, int)
2224#define SNDRV_EMU10K1_IOCTL_TRAM_POKE _IOW ('H', 0x21, struct snd_emu10k1_fx8010_tram)
2225#define SNDRV_EMU10K1_IOCTL_TRAM_PEEK _IOWR('H', 0x22, struct snd_emu10k1_fx8010_tram)
2226#define SNDRV_EMU10K1_IOCTL_PCM_POKE _IOW ('H', 0x30, struct snd_emu10k1_fx8010_pcm_rec)
2227#define SNDRV_EMU10K1_IOCTL_PCM_PEEK _IOWR('H', 0x31, struct snd_emu10k1_fx8010_pcm_rec)
2228#define SNDRV_EMU10K1_IOCTL_PVERSION _IOR ('H', 0x40, int)
2229#define SNDRV_EMU10K1_IOCTL_STOP _IO ('H', 0x80)
2230#define SNDRV_EMU10K1_IOCTL_CONTINUE _IO ('H', 0x81)
2231#define SNDRV_EMU10K1_IOCTL_ZERO_TRAM_COUNTER _IO ('H', 0x82)
2232#define SNDRV_EMU10K1_IOCTL_SINGLE_STEP _IOW ('H', 0x83, int)
2233#define SNDRV_EMU10K1_IOCTL_DBG_READ _IOR ('H', 0x84, int)
2234
2235
2236typedef struct snd_emu10k1_fx8010_info emu10k1_fx8010_info_t;
2237typedef struct snd_emu10k1_fx8010_control_gpr emu10k1_fx8010_control_gpr_t;
2238typedef struct snd_emu10k1_fx8010_code emu10k1_fx8010_code_t;
2239typedef struct snd_emu10k1_fx8010_tram emu10k1_fx8010_tram_t;
2240typedef struct snd_emu10k1_fx8010_pcm_rec emu10k1_fx8010_pcm_t;
2241
2242#endif
2243