2
* Purpose: Common definitions for the Envy24 driver
6
* This file is part of Open Sound System.
8
* Copyright (C) 4Front Technologies 1996-2008.
10
* This this source file is released under GPL v2 license (no other versions).
11
* See the COPYING file included in the main directory of this source
12
* distribution for the license terms and conditions.
17
#define DEV_BUFSIZE (64*1024) /* Buffer size per channel */
19
#define HW_PLAYBUFFSIZE (10*2048)
20
#define HW_RECBUFFSIZE (12*2048)
21
#define HW_ALLOCSIZE (24*1024) /* Must be bigger or equal than HW_PLAYBUFFSIZE and HW_RECBUFFSIZE */
23
typedef struct envy24_auxdrv envy24_auxdrv_t;
29
int nr_outs, nr_ins; /* # of analog channels */
31
#define MF_MAUDIO 0x00000001 /* Made by M Audio */
32
#define MF_MIDI1 0x00000002 /* Has MIDI 1 port */
33
#define MF_SPDIF 0x00000004 /* Has S/PDIF */
34
#define MF_AKMCODEC 0x00000008 /* Has AKM codecs */
35
#define MF_WCLOCK 0x00000010 /* Has World clock input */
36
#define MF_SPDSELECT 0x00000020 /* Optical+coax S/PDIF */
37
#define MF_EWS88 0x00000040 /* Terratec EWS88MT */
38
#define MF_AP 0x00000080 /* M Audio Audiophile family */
39
#define MF_MIDI2 0x00000100 /* Has MIDI 2 port */
40
#define MF_EWX2496 0x00000200 /* Terratec EWX 24/96 */
41
#define MF_CONSUMER 0x00000400 /* Force consumer AC97 codec detection */
42
#define MF_HOONTECH 0x00000800
43
#define MF_D410 0x00001000 /* Delta 410 */
44
#define MF_MEEPROM 0x00002000 /* M Audio EEPROM interface */
45
#define MF_AC97 0x00004000 /* Consumer AC97 codec */
46
envy24_auxdrv_t *auxdrv;
47
unsigned char *eeprom_data;
51
#define ICENSEMBLE_VENDOR_ID 0x1412
52
#define ICENSEMBLE_ENVY24_ID 0x1712
58
extern int options_data;
76
#define PORTC_SPDOUT 0x00000001
77
#define PORTC_SPDIN 0x00000002
81
#define DIR_INPUT ADEV_NOOUTPUT
82
#define DIR_OUTPUT ADEV_NOINPUT
88
volatile int is_active;
89
volatile int trigger_bits;
93
riaa_t riaa_parms[12];
99
* Hoontech specific structure
106
unsigned int darear:1;
108
unsigned int clock0:1;
115
unsigned int clock1:1;
119
unsigned int midiin:1;
120
unsigned int midi1:1;
122
unsigned int clock2:1;
125
unsigned int midi2:1;
127
unsigned int insel:1;
129
unsigned int clock3:1;
148
#define _adsp devc->adsp
151
typedef struct envy24d_portc
165
int mpu1_attached, mpu2_attached;
166
oss_native_word ccs_base, mt_base;
168
card_spec *model_data;
169
envy24_auxdrv_t *auxdrv;
170
int skipdevs; /* envy24_skipdevs option */
172
unsigned char eeprom[32];
181
* Consumer (AC97) mixer
185
int consumer_mixer_dev;
186
int consumer_ac97_present;
188
int nr_outdevs, nr_indevs;
189
int curr_outch, curr_inch;
190
int inportmask, outportmask;
191
envy24_portc play_portc[MAX_ODEV];
192
envy24_portc rec_portc[MAX_IDEV];
193
envy24d_portc direct_portc_in, direct_portc_out;
194
int direct_audio_opened;
196
int rec_bufsize, play_bufsize;
198
unsigned char *playbuf, *recbuf;
199
int playbuffsize, recbuffsize;
200
oss_native_word playbuf_phys, recbuf_phys;
201
oss_dma_handle_t playbuf_dma_handle, recbuf_dma_handle;
202
int hw_rfragsize, hw_pfragsize, hw_fragsamples, hw_nfrags;
203
volatile int hw_playfrag, hw_recfrag;
204
volatile int active_inputs, active_outputs;
205
volatile int open_inputs, open_outputs;
206
volatile int playback_started, recording_started;
207
volatile int playback_prepared, recording_prepared;
208
int speed, pending_speed_sel, speedbits;
211
#define SYNC_INTERNAL 0
213
#define SYNC_WCLOCK 2
215
int play_channel_mask, rec_channel_mask;
216
int nr_play_channels, nr_rec_channels;
222
/* Spdif parameters */
224
unsigned char spdif_cbits[24];
228
short akm_gains[0xff];
229
ADSP adsp; /* Hoontech only */
230
uart401_devc uart401devc1;
231
uart401_devc uart401devc2;
239
void (*card_init) (envy24_devc * devc);
240
int (*mixer_init) (envy24_devc * devc, int dev, int group);
241
void (*spdif_init) (envy24_devc * devc);
242
void (*spdif_set) (envy24_devc * devc, int ctrl0);
243
int (*spdif_ioctl) (envy24_devc * devc, int dev, unsigned int cmd,
245
int (*spdif_read_reg) (envy24_devc * devc, int reg);
246
void (*spdif_write_reg) (envy24_devc * devc, int reg, int val);
247
void (*set_rate) (envy24_devc * devc);
248
int (*get_locked_status) (envy24_devc * devc);
249
int (*spdif_mixer_init) (envy24_devc * devc, int dev, int group);
250
void (*card_uninit) (envy24_devc * devc);
255
int speed, speedbits;
258
/* extern struct speed_sel speed_tab[]; */
260
void envy24d_install (envy24_devc * devc);
261
void envy24d_playintr (envy24_devc * devc);
262
void envy24d_recintr (envy24_devc * devc);
263
void envy24_prepare_play_engine (envy24_devc * devc);
264
void envy24_launch_play_engine (envy24_devc * devc);
265
void envy24_stop_playback (envy24_devc * devc);
266
void envy24_start_recording (envy24_devc * devc);
267
void envy24_launch_recording (envy24_devc * devc);
268
void envy24_stop_recording (envy24_devc * devc);
270
void envy24_write_cci (envy24_devc * devc, int pos, int data);
271
int envy24_read_cci (envy24_devc * devc, int pos);
272
extern int cs8427_spdif_ioctl (envy24_devc * devc, int dev, unsigned int cmd,
274
extern void init_cs8427_spdif (envy24_devc * devc);
275
extern int cs8427_spdif_mixer_init (envy24_devc * devc, int dev, int group);
276
void WriteGPIObit (envy24_devc * devc, int sel, int what);
277
int ReadGPIObit (envy24_devc * devc, int sel);
278
void write_cs8427_spdif (envy24_devc * devc, int d);
279
extern void envy24_set_enum_mask (int dev, int ctl, oss_native_word mask);