~ubuntu-branches/ubuntu/wily/oss4/wily

« back to all changes in this revision

Viewing changes to kernel/drv/oss_envy24/envy24.h

  • Committer: Bazaar Package Importer
  • Author(s): Romain Beauxis, Samuel Thibault, Romain Beauxis, Sebastien NOEL
  • Date: 2011-06-14 10:06:56 UTC
  • mfrom: (1.1.3 upstream)
  • Revision ID: james.westby@ubuntu.com-20110614100656-cx4oc7u426zn812z
Tags: 4.2-build2004-1
[ Samuel Thibault ]
* debian/control: Add liboss4-salsa2, liboss4-salsa-dev and
  liboss4-salsa-asound2 packages, equivalent to (and will replace) those from
  the oss-libsalsa package (Closes: #589127).
* debian/patches/liboss4-salsa.patch: New patch to rename libsalsa into
  liboss4-salsa to avoid conflicts in the archive for no good reason.
* debian/rules: Make in libOSSlib and libsalsa.
* debian/liboss4-salsa-dev.install, debian/liboss4-salsa2.install,
  debian/liboss4-salsa-asound2.links, debian/liboss4-salsa-dev.links:
  Install liboss4-salsa libraries like was done in the oss-libsalsa package.
* include-alsa: Add a copy of ALSA 1.0.5 headers: Cf ALSA_1.0.* symbols in
  libsalsa, this is the roughly supported version.
* debian/copyright: Update for new include-alsa files.
* alsa.pc: New file for compatibility with libasound-dev.
* debian/control:
  - Add Vcs-Browser and Vcs-Svn fields.
  - Use linux-any instead of the list of Linux archs (Closes: #604679).
  - Make dkms dependency linux-any only.
* debian/patches/hurd_iot.patch: New patch to fix soundcard.h usage in
  libsalsa on hurd-i386.
* debian/patches/libsalsa_fixes.patch: New patch to fix some printf usages
  and ioctl declaration in libsalsa.
* debian/patches/no_EBADE.patch: New patch to cope with hurd-i386 not having
  EBADE.
* debian/patches/CFLAGS.patch: New patch to make oss4 take debian/rules
  CFLAGS into account.
* debian/patches/snd_asoundlib_version.patch: New patch to add
  snd_asoundlib_version().
* debian/patches/generic_srccconf.patch: New patch to fix source
  configuration on unknown archs.

[ Romain Beauxis ]
* Fixed README.Debian to only mention dkms' modules.
* Switch to dpkg-source 3.0 (quilt) format
* Added DM-Upload-Allowed: yes

[ Sebastien NOEL ]
* New upstream release (Closes: #595298, #619272).
* Fix typo in initscript (Closes: #627149).
* debian/control: adjust linux-headers dependencies (Closes: #628879).

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Purpose: Common definitions for the Envy24 driver
 
3
 */
 
4
/*
 
5
 *
 
6
 * This file is part of Open Sound System.
 
7
 *
 
8
 * Copyright (C) 4Front Technologies 1996-2008.
 
9
 *
 
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.
 
13
 *
 
14
 */
 
15
#include "uart401.h"
 
16
 
 
17
#define DEV_BUFSIZE             (64*1024)       /* Buffer size per channel */
 
18
 
 
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 */
 
22
 
 
23
typedef struct envy24_auxdrv envy24_auxdrv_t;
 
24
 
 
25
typedef struct
 
26
{
 
27
  unsigned int svid;
 
28
  char *product;
 
29
  int nr_outs, nr_ins;          /* # of analog channels */
 
30
  int flags;
 
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;
 
48
}
 
49
card_spec;
 
50
 
 
51
#define ICENSEMBLE_VENDOR_ID    0x1412
 
52
#define ICENSEMBLE_ENVY24_ID    0x1712
 
53
 
 
54
#define AKM_A 0x40
 
55
#define AKM_B 0x80
 
56
 
 
57
#ifdef USE_LICENSING
 
58
extern int options_data;
 
59
#endif
 
60
 
 
61
#define MAX_ODEV 10
 
62
#define MAX_IDEV 12
 
63
 
 
64
#ifdef DO_RIAA
 
65
typedef struct
 
66
{
 
67
  int32_t x1, x2, x3;
 
68
  int32_t y1, y2, y3;
 
69
}
 
70
riaa_t;
 
71
#endif
 
72
 
 
73
typedef struct
 
74
{
 
75
  int flags;
 
76
#define PORTC_SPDOUT    0x00000001
 
77
#define PORTC_SPDIN     0x00000002
 
78
  int dev;
 
79
  int chnum;
 
80
  int direction;
 
81
#define DIR_INPUT       ADEV_NOOUTPUT
 
82
#define DIR_OUTPUT      ADEV_NOINPUT
 
83
  int open_mode;
 
84
 
 
85
  char name[16];
 
86
 
 
87
  int bits, channels;
 
88
  volatile int is_active;
 
89
  volatile int trigger_bits;
 
90
  int pcm_qlen;
 
91
  int riaa_filter;
 
92
#ifdef DO_RIAA
 
93
  riaa_t riaa_parms[12];
 
94
#endif
 
95
}
 
96
envy24_portc;
 
97
 
 
98
/*
 
99
 * Hoontech specific structure
 
100
 */
 
101
typedef union
 
102
{
 
103
  struct
 
104
  {
 
105
    unsigned int box:2;
 
106
    unsigned int darear:1;
 
107
    unsigned int id0:2;
 
108
    unsigned int clock0:1;
 
109
    unsigned int res0:2;
 
110
 
 
111
    unsigned int ch1:1;
 
112
    unsigned int ch2:1;
 
113
    unsigned int ch3:1;
 
114
    unsigned int id1:2;
 
115
    unsigned int clock1:1;
 
116
    unsigned int res1:2;
 
117
 
 
118
    unsigned int ch4:1;
 
119
    unsigned int midiin:1;
 
120
    unsigned int midi1:1;
 
121
    unsigned int id2:2;
 
122
    unsigned int clock2:1;
 
123
    unsigned int res2:2;
 
124
 
 
125
    unsigned int midi2:1;
 
126
    unsigned int mute:1;
 
127
    unsigned int insel:1;
 
128
    unsigned int id3:2;
 
129
    unsigned int clock3:1;
 
130
    unsigned int res3:2;
 
131
  }
 
132
  b;
 
133
 
 
134
  struct
 
135
  {
 
136
    unsigned int b0:8;
 
137
    unsigned int b1:8;
 
138
    unsigned int b2:8;
 
139
    unsigned int b3:8;
 
140
  }
 
141
  w;
 
142
 
 
143
  unsigned int dwVal;
 
144
 
 
145
}
 
146
ADSP;
 
147
 
 
148
#define _adsp devc->adsp
 
149
/*****************/
 
150
 
 
151
typedef struct envy24d_portc
 
152
{
 
153
  int audio_dev;
 
154
  int open_mode;
 
155
  int channels;
 
156
  int direction;
 
157
  int trigger_bits;
 
158
}
 
159
envy24d_portc;
 
160
 
 
161
typedef struct
 
162
{
 
163
  oss_device_t *osdev;
 
164
  oss_mutex_t mutex;
 
165
  int mpu1_attached, mpu2_attached;
 
166
  oss_native_word ccs_base, mt_base;
 
167
  int irq;
 
168
  card_spec *model_data;
 
169
  envy24_auxdrv_t *auxdrv;
 
170
  int skipdevs;                 /* envy24_skipdevs option */
 
171
 
 
172
  unsigned char eeprom[32];
 
173
 
 
174
/*
 
175
 * MT mixer
 
176
 */
 
177
 
 
178
  int mixer_dev;
 
179
 
 
180
/*
 
181
 * Consumer (AC97) mixer
 
182
 */
 
183
 
 
184
  ac97_devc ac97devc;
 
185
  int consumer_mixer_dev;
 
186
  int consumer_ac97_present;
 
187
 
 
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;
 
195
 
 
196
  int rec_bufsize, play_bufsize;
 
197
 
 
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;
 
209
  int syncsource;
 
210
  int gpio_tmp;
 
211
#define SYNC_INTERNAL   0
 
212
#define SYNC_SPDIF              1
 
213
#define SYNC_WCLOCK             2
 
214
 
 
215
  int play_channel_mask, rec_channel_mask;
 
216
  int nr_play_channels, nr_rec_channels;
 
217
  int writeahead;
 
218
 
 
219
  int use_src;
 
220
  int ratelock;
 
221
 
 
222
/* Spdif parameters */
 
223
  int spdif_pro_mode;
 
224
  unsigned char spdif_cbits[24];
 
225
  int sync_locked;
 
226
  int ac3_mode;
 
227
 
 
228
  short akm_gains[0xff];
 
229
  ADSP adsp;                    /* Hoontech only */
 
230
  uart401_devc uart401devc1;
 
231
  uart401_devc uart401devc2;
 
232
 
 
233
  int first_dev;
 
234
}
 
235
envy24_devc;
 
236
 
 
237
struct envy24_auxdrv
 
238
{
 
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,
 
244
                      ioctl_arg arg);
 
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);
 
251
};
 
252
 
 
253
struct speed_sel
 
254
{
 
255
  int speed, speedbits;
 
256
};
 
257
 
 
258
/* extern struct speed_sel speed_tab[]; */
 
259
 
 
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);
 
269
 
 
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,
 
273
                               ioctl_arg arg);
 
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);