emu10k1.h
001: #ifndef __SOUND_EMU10K1_H
002: #define __SOUND_EMU10K1_H
003: 
004: #include <linux/types.h>
005: 
006: 
007: <perex@perex.cz>
008: 
009: 
010: 
011: 
012: 
013: 
014: 
015: 
016: 
017: 
018: 
019: 
020: 
021: 
022: 
023: 
024: 
025: 
026: 
027: 
028: 
029: 
030: 
031: 
032: 
033: #define EMU10K1_CARD_CREATIVE                   0x00000000
034: #define EMU10K1_CARD_EMUAPS                     0x00000001
035: 
036: #define EMU10K1_FX8010_PCM_COUNT                8
037: 
038: 
039: #define iMAC0    0x00   
040: #define iMAC1    0x01   
041: #define iMAC2    0x02   
042: #define iMAC3    0x03   
043: #define iMACINT0 0x04   
044: #define iMACINT1 0x05   
045: #define iACC3    0x06   
046: #define iMACMV   0x07   
047: #define iANDXOR  0x08   
048: #define iTSTNEG  0x09   
049: #define iLIMITGE 0x0a   
050: #define iLIMITLT 0x0b   
051: #define iLOG     0x0c   
052: #define iEXP     0x0d   
053: #define iINTERP  0x0e   
054: #define iSKIP    0x0f   
055: 
056: 
057: #define FXBUS(x)        (0x00 + (x))    
058: #define EXTIN(x)        (0x10 + (x))    
059: #define EXTOUT(x)       (0x20 + (x))    
060: #define FXBUS2(x)       (0x30 + (x))    
061:                                         
062: 
063: #define C_00000000      0x40
064: #define C_00000001      0x41
065: #define C_00000002      0x42
066: #define C_00000003      0x43
067: #define C_00000004      0x44
068: #define C_00000008      0x45
069: #define C_00000010      0x46
070: #define C_00000020      0x47
071: #define C_00000100      0x48
072: #define C_00010000      0x49
073: #define C_00080000      0x4a
074: #define C_10000000      0x4b
075: #define C_20000000      0x4c
076: #define C_40000000      0x4d
077: #define C_80000000      0x4e
078: #define C_7fffffff      0x4f
079: #define C_ffffffff      0x50
080: #define C_fffffffe      0x51
081: #define C_c0000000      0x52
082: #define C_4f1bbcdc      0x53
083: #define C_5a7ef9db      0x54
084: #define C_00100000      0x55            
085: #define GPR_ACCU        0x56            
086: #define GPR_COND        0x57            
087: #define GPR_NOISE0      0x58            
088: #define GPR_NOISE1      0x59            
089: #define GPR_IRQ         0x5a            
090: #define GPR_DBAC        0x5b            
091: #define GPR(x)          (FXGPREGBASE + (x)) 
092: #define ITRAM_DATA(x)   (TANKMEMDATAREGBASE + 0x00 + (x)) 
093: #define ETRAM_DATA(x)   (TANKMEMDATAREGBASE + 0x80 + (x)) 
094: #define ITRAM_ADDR(x)   (TANKMEMADDRREGBASE + 0x00 + (x)) 
095: #define ETRAM_ADDR(x)   (TANKMEMADDRREGBASE + 0x80 + (x)) 
096: 
097: #define A_ITRAM_DATA(x) (TANKMEMDATAREGBASE + 0x00 + (x)) 
098: #define A_ETRAM_DATA(x) (TANKMEMDATAREGBASE + 0xc0 + (x)) 
099: #define A_ITRAM_ADDR(x) (TANKMEMADDRREGBASE + 0x00 + (x)) 
100: #define A_ETRAM_ADDR(x) (TANKMEMADDRREGBASE + 0xc0 + (x)) 
101: #define A_ITRAM_CTL(x)  (A_TANKMEMCTLREGBASE + 0x00 + (x)) 
102: #define A_ETRAM_CTL(x)  (A_TANKMEMCTLREGBASE + 0xc0 + (x)) 
103: 
104: #define A_FXBUS(x)      (0x00 + (x))    
105: #define A_EXTIN(x)      (0x40 + (x))    
106: #define A_P16VIN(x)     (0x50 + (x))    
107: #define A_EXTOUT(x)     (0x60 + (x))    
108: #define A_FXBUS2(x)     (0x80 + (x))    
109: #define A_EMU32OUTH(x)  (0xa0 + (x))    
110: #define A_EMU32OUTL(x)  (0xb0 + (x))    
111: #define A3_EMU32IN(x)   (0x160 + (x))   
112: #define A3_EMU32OUT(x)  (0x1E0 + (x))   
113: #define A_GPR(x)        (A_FXGPREGBASE + (x))
114: 
115: 
116: #define CC_REG_NORMALIZED C_00000001
117: #define CC_REG_BORROW   C_00000002
118: #define CC_REG_MINUS    C_00000004
119: #define CC_REG_ZERO     C_00000008
120: #define CC_REG_SATURATE C_00000010
121: #define CC_REG_NONZERO  C_00000100
122: 
123: 
124: #define FXBUS_PCM_LEFT          0x00
125: #define FXBUS_PCM_RIGHT         0x01
126: #define FXBUS_PCM_LEFT_REAR     0x02
127: #define FXBUS_PCM_RIGHT_REAR    0x03
128: #define FXBUS_MIDI_LEFT         0x04
129: #define FXBUS_MIDI_RIGHT        0x05
130: #define FXBUS_PCM_CENTER        0x06
131: #define FXBUS_PCM_LFE           0x07
132: #define FXBUS_PCM_LEFT_FRONT    0x08
133: #define FXBUS_PCM_RIGHT_FRONT   0x09
134: #define FXBUS_MIDI_REVERB       0x0c
135: #define FXBUS_MIDI_CHORUS       0x0d
136: #define FXBUS_PCM_LEFT_SIDE     0x0e
137: #define FXBUS_PCM_RIGHT_SIDE    0x0f
138: #define FXBUS_PT_LEFT           0x14
139: #define FXBUS_PT_RIGHT          0x15
140: 
141: 
142: #define EXTIN_AC97_L       0x00 
143: #define EXTIN_AC97_R       0x01 
144: #define EXTIN_SPDIF_CD_L   0x02 
145: #define EXTIN_SPDIF_CD_R   0x03 
146: #define EXTIN_ZOOM_L       0x04 
147: #define EXTIN_ZOOM_R       0x05 
148: #define EXTIN_TOSLINK_L    0x06 
149: #define EXTIN_TOSLINK_R    0x07 
150: #define EXTIN_LINE1_L      0x08 
151: #define EXTIN_LINE1_R      0x09 
152: #define EXTIN_COAX_SPDIF_L 0x0a 
153: #define EXTIN_COAX_SPDIF_R 0x0b 
154: #define EXTIN_LINE2_L      0x0c 
155: #define EXTIN_LINE2_R      0x0d 
156: 
157: 
158: #define EXTOUT_AC97_L      0x00 
159: #define EXTOUT_AC97_R      0x01 
160: #define EXTOUT_TOSLINK_L   0x02 
161: #define EXTOUT_TOSLINK_R   0x03 
162: #define EXTOUT_AC97_CENTER 0x04 
163: #define EXTOUT_AC97_LFE    0x05 
164: #define EXTOUT_HEADPHONE_L 0x06 
165: #define EXTOUT_HEADPHONE_R 0x07 
166: #define EXTOUT_REAR_L      0x08 
167: #define EXTOUT_REAR_R      0x09 
168: #define EXTOUT_ADC_CAP_L   0x0a 
169: #define EXTOUT_ADC_CAP_R   0x0b 
170: #define EXTOUT_MIC_CAP     0x0c 
171: #define EXTOUT_AC97_REAR_L 0x0d 
172: #define EXTOUT_AC97_REAR_R 0x0e 
173: #define EXTOUT_ACENTER     0x11 
174: #define EXTOUT_ALFE        0x12 
175: 
176: 
177: #define A_EXTIN_AC97_L          0x00    
178: #define A_EXTIN_AC97_R          0x01    
179: #define A_EXTIN_SPDIF_CD_L      0x02    
180: #define A_EXTIN_SPDIF_CD_R      0x03    
181: #define A_EXTIN_OPT_SPDIF_L     0x04    
182: #define A_EXTIN_OPT_SPDIF_R     0x05     
183: #define A_EXTIN_LINE2_L         0x08    
184: #define A_EXTIN_LINE2_R         0x09    
185: #define A_EXTIN_ADC_L           0x0a    
186: #define A_EXTIN_ADC_R           0x0b    
187: #define A_EXTIN_AUX2_L          0x0c    
188: #define A_EXTIN_AUX2_R          0x0d    
189: 
190: 
191: #define A_EXTOUT_FRONT_L        0x00    
192: #define A_EXTOUT_FRONT_R        0x01    
193: #define A_EXTOUT_CENTER         0x02    
194: #define A_EXTOUT_LFE            0x03    
195: #define A_EXTOUT_HEADPHONE_L    0x04    
196: #define A_EXTOUT_HEADPHONE_R    0x05    
197: #define A_EXTOUT_REAR_L         0x06    
198: #define A_EXTOUT_REAR_R         0x07    
199: #define A_EXTOUT_AFRONT_L       0x08    
200: #define A_EXTOUT_AFRONT_R       0x09    
201: #define A_EXTOUT_ACENTER        0x0a    
202: #define A_EXTOUT_ALFE           0x0b    
203: #define A_EXTOUT_ASIDE_L        0x0c    
204: #define A_EXTOUT_ASIDE_R        0x0d    
205: #define A_EXTOUT_AREAR_L        0x0e    
206: #define A_EXTOUT_AREAR_R        0x0f    
207: #define A_EXTOUT_AC97_L         0x10    
208: #define A_EXTOUT_AC97_R         0x11    
209: #define A_EXTOUT_ADC_CAP_L      0x16    
210: #define A_EXTOUT_ADC_CAP_R      0x17    
211: #define A_EXTOUT_MIC_CAP        0x18    
212: 
213: 
214: #define A_C_00000000    0xc0
215: #define A_C_00000001    0xc1
216: #define A_C_00000002    0xc2
217: #define A_C_00000003    0xc3
218: #define A_C_00000004    0xc4
219: #define A_C_00000008    0xc5
220: #define A_C_00000010    0xc6
221: #define A_C_00000020    0xc7
222: #define A_C_00000100    0xc8
223: #define A_C_00010000    0xc9
224: #define A_C_00000800    0xca
225: #define A_C_10000000    0xcb
226: #define A_C_20000000    0xcc
227: #define A_C_40000000    0xcd
228: #define A_C_80000000    0xce
229: #define A_C_7fffffff    0xcf
230: #define A_C_ffffffff    0xd0
231: #define A_C_fffffffe    0xd1
232: #define A_C_c0000000    0xd2
233: #define A_C_4f1bbcdc    0xd3
234: #define A_C_5a7ef9db    0xd4
235: #define A_C_00100000    0xd5
236: #define A_GPR_ACCU      0xd6            
237: #define A_GPR_COND      0xd7            
238: #define A_GPR_NOISE0    0xd8            
239: #define A_GPR_NOISE1    0xd9            
240: #define A_GPR_IRQ       0xda            
241: #define A_GPR_DBAC      0xdb            
242: #define A_GPR_DBACE     0xde            
243: 
244: 
245: #define EMU10K1_DBG_ZC                  0x80000000      
246: #define EMU10K1_DBG_SATURATION_OCCURED  0x02000000      
247: #define EMU10K1_DBG_SATURATION_ADDR     0x01ff0000      
248: #define EMU10K1_DBG_SINGLE_STEP         0x00008000      
249: #define EMU10K1_DBG_STEP                0x00004000      
250: #define EMU10K1_DBG_CONDITION_CODE      0x00003e00      
251: #define EMU10K1_DBG_SINGLE_STEP_ADDR    0x000001ff      
252: 
253: 
254: #define TANKMEMADDRREG_ADDR_MASK 0x000fffff     
255: #define TANKMEMADDRREG_CLEAR     0x00800000     
256: #define TANKMEMADDRREG_ALIGN     0x00400000     
257: #define TANKMEMADDRREG_WRITE     0x00200000     
258: #define TANKMEMADDRREG_READ      0x00100000     
259: 
260: struct snd_emu10k1_fx8010_info {
261:         unsigned int internal_tram_size;        
262:         unsigned int external_tram_size;        
263:         char fxbus_names[16][32];               
264:         char extin_names[16][32];               
265:         char extout_names[32][32];              
266:         unsigned int gpr_controls;              
267: };
268: 
269: #define EMU10K1_GPR_TRANSLATION_NONE            0
270: #define EMU10K1_GPR_TRANSLATION_TABLE100        1
271: #define EMU10K1_GPR_TRANSLATION_BASS            2
272: #define EMU10K1_GPR_TRANSLATION_TREBLE          3
273: #define EMU10K1_GPR_TRANSLATION_ONOFF           4
274: 
275: struct snd_emu10k1_fx8010_control_gpr {
276:         struct snd_ctl_elem_id id;              
277:         unsigned int vcount;            
278:         unsigned int count;             
279:         unsigned short gpr[32];         
280:         unsigned int value[32];         
281:         unsigned int min;               
282:         unsigned int max;               
283:         unsigned int translation;       
284:         const unsigned int *tlv;
285: };
286: 
287: 
288: struct snd_emu10k1_fx8010_control_old_gpr {
289:         struct snd_ctl_elem_id id;
290:         unsigned int vcount;
291:         unsigned int count;
292:         unsigned short gpr[32];
293:         unsigned int value[32];
294:         unsigned int min;
295:         unsigned int max;
296:         unsigned int translation;
297: };
298: 
299: struct snd_emu10k1_fx8010_code {
300:         char name[128];
301: 
302:         DECLARE_BITMAP(gpr_valid, 0x200); 
303:         __u32 *gpr_map;         
304: 
305:         unsigned int gpr_add_control_count; 
306:         struct snd_emu10k1_fx8010_control_gpr *gpr_add_controls; 
307: 
308:         unsigned int gpr_del_control_count; 
309:         struct snd_ctl_elem_id *gpr_del_controls; 
310: 
311:         unsigned int gpr_list_control_count; 
312:         unsigned int gpr_list_control_total; 
313:         struct snd_emu10k1_fx8010_control_gpr *gpr_list_controls; 
314: 
315:         DECLARE_BITMAP(tram_valid, 0x100); 
316:         __u32 *tram_data_map;     
317:         __u32 *tram_addr_map;     
318: 
319:         DECLARE_BITMAP(code_valid, 1024); 
320:         __u32 *code;              
321: };
322: 
323: struct snd_emu10k1_fx8010_tram {
324:         unsigned int address;           
325:         unsigned int size;              
326:         unsigned int *samples;          
327:                                         
328: };
329: 
330: struct snd_emu10k1_fx8010_pcm_rec {
331:         unsigned int substream;         
332:         unsigned int res1;              
333:         unsigned int channels;          
334:         unsigned int tram_start;        
335:         unsigned int buffer_size;       
336:         unsigned short gpr_size;                
337:         unsigned short gpr_ptr;         
338:         unsigned short gpr_count;       
339:         unsigned short gpr_tmpcount;    
340:         unsigned short gpr_trigger;     
341:         unsigned short gpr_running;     
342:         unsigned char pad;              
343:         unsigned char etram[32];        
344:         unsigned int res2;              
345: };
346: 
347: #define SNDRV_EMU10K1_VERSION           SNDRV_PROTOCOL_VERSION(1, 0, 1)
348: 
349: #define SNDRV_EMU10K1_IOCTL_INFO        _IOR ('H', 0x10, struct snd_emu10k1_fx8010_info)
350: #define SNDRV_EMU10K1_IOCTL_CODE_POKE   _IOW ('H', 0x11, struct snd_emu10k1_fx8010_code)
351: #define SNDRV_EMU10K1_IOCTL_CODE_PEEK   _IOWR('H', 0x12, struct snd_emu10k1_fx8010_code)
352: #define SNDRV_EMU10K1_IOCTL_TRAM_SETUP  _IOW ('H', 0x20, int)
353: #define SNDRV_EMU10K1_IOCTL_TRAM_POKE   _IOW ('H', 0x21, struct snd_emu10k1_fx8010_tram)
354: #define SNDRV_EMU10K1_IOCTL_TRAM_PEEK   _IOWR('H', 0x22, struct snd_emu10k1_fx8010_tram)
355: #define SNDRV_EMU10K1_IOCTL_PCM_POKE    _IOW ('H', 0x30, struct snd_emu10k1_fx8010_pcm_rec)
356: #define SNDRV_EMU10K1_IOCTL_PCM_PEEK    _IOWR('H', 0x31, struct snd_emu10k1_fx8010_pcm_rec)
357: #define SNDRV_EMU10K1_IOCTL_PVERSION    _IOR ('H', 0x40, int)
358: #define SNDRV_EMU10K1_IOCTL_STOP        _IO  ('H', 0x80)
359: #define SNDRV_EMU10K1_IOCTL_CONTINUE    _IO  ('H', 0x81)
360: #define SNDRV_EMU10K1_IOCTL_ZERO_TRAM_COUNTER _IO ('H', 0x82)
361: #define SNDRV_EMU10K1_IOCTL_SINGLE_STEP _IOW ('H', 0x83, int)
362: #define SNDRV_EMU10K1_IOCTL_DBG_READ    _IOR ('H', 0x84, int)
363: 
364: 
365: typedef struct snd_emu10k1_fx8010_info emu10k1_fx8010_info_t;
366: typedef struct snd_emu10k1_fx8010_control_gpr emu10k1_fx8010_control_gpr_t;
367: typedef struct snd_emu10k1_fx8010_code emu10k1_fx8010_code_t;
368: typedef struct snd_emu10k1_fx8010_tram emu10k1_fx8010_tram_t;
369: typedef struct snd_emu10k1_fx8010_pcm_rec emu10k1_fx8010_pcm_t;
370: 
371: #endif  
372: 
      
      
      
      
   
      
      
         
            
            © Andrew Scott 2006 -
            2025, 
            All Rights Reserved