Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/include/sound/gus.h
26278 views
1
/* SPDX-License-Identifier: GPL-2.0-or-later */
2
#ifndef __SOUND_GUS_H
3
#define __SOUND_GUS_H
4
5
/*
6
* Global structures used for GUS part of ALSA driver
7
* Copyright (c) by Jaroslav Kysela <[email protected]>
8
*/
9
10
#include <sound/pcm.h>
11
#include <sound/rawmidi.h>
12
#include <sound/timer.h>
13
#include <sound/seq_midi_emul.h>
14
#include <sound/seq_device.h>
15
#include <linux/io.h>
16
17
/* IO ports */
18
19
#define GUSP(gus, x) ((gus)->gf1.port + SNDRV_g_u_s_##x)
20
21
#define SNDRV_g_u_s_MIDICTRL (0x320-0x220)
22
#define SNDRV_g_u_s_MIDISTAT (0x320-0x220)
23
#define SNDRV_g_u_s_MIDIDATA (0x321-0x220)
24
25
#define SNDRV_g_u_s_GF1PAGE (0x322-0x220)
26
#define SNDRV_g_u_s_GF1REGSEL (0x323-0x220)
27
#define SNDRV_g_u_s_GF1DATALOW (0x324-0x220)
28
#define SNDRV_g_u_s_GF1DATAHIGH (0x325-0x220)
29
#define SNDRV_g_u_s_IRQSTAT (0x226-0x220)
30
#define SNDRV_g_u_s_TIMERCNTRL (0x228-0x220)
31
#define SNDRV_g_u_s_TIMERDATA (0x229-0x220)
32
#define SNDRV_g_u_s_DRAM (0x327-0x220)
33
#define SNDRV_g_u_s_MIXCNTRLREG (0x220-0x220)
34
#define SNDRV_g_u_s_IRQDMACNTRLREG (0x22b-0x220)
35
#define SNDRV_g_u_s_REGCNTRLS (0x22f-0x220)
36
#define SNDRV_g_u_s_BOARDVERSION (0x726-0x220)
37
#define SNDRV_g_u_s_MIXCNTRLPORT (0x726-0x220)
38
#define SNDRV_g_u_s_IVER (0x325-0x220)
39
#define SNDRV_g_u_s_MIXDATAPORT (0x326-0x220)
40
#define SNDRV_g_u_s_MAXCNTRLPORT (0x326-0x220)
41
42
/* GF1 registers */
43
44
/* global registers */
45
#define SNDRV_GF1_GB_ACTIVE_VOICES 0x0e
46
#define SNDRV_GF1_GB_VOICES_IRQ 0x0f
47
#define SNDRV_GF1_GB_GLOBAL_MODE 0x19
48
#define SNDRV_GF1_GW_LFO_BASE 0x1a
49
#define SNDRV_GF1_GB_VOICES_IRQ_READ 0x1f
50
#define SNDRV_GF1_GB_DRAM_DMA_CONTROL 0x41
51
#define SNDRV_GF1_GW_DRAM_DMA_LOW 0x42
52
#define SNDRV_GF1_GW_DRAM_IO_LOW 0x43
53
#define SNDRV_GF1_GB_DRAM_IO_HIGH 0x44
54
#define SNDRV_GF1_GB_SOUND_BLASTER_CONTROL 0x45
55
#define SNDRV_GF1_GB_ADLIB_TIMER_1 0x46
56
#define SNDRV_GF1_GB_ADLIB_TIMER_2 0x47
57
#define SNDRV_GF1_GB_RECORD_RATE 0x48
58
#define SNDRV_GF1_GB_REC_DMA_CONTROL 0x49
59
#define SNDRV_GF1_GB_JOYSTICK_DAC_LEVEL 0x4b
60
#define SNDRV_GF1_GB_RESET 0x4c
61
#define SNDRV_GF1_GB_DRAM_DMA_HIGH 0x50
62
#define SNDRV_GF1_GW_DRAM_IO16 0x51
63
#define SNDRV_GF1_GW_MEMORY_CONFIG 0x52
64
#define SNDRV_GF1_GB_MEMORY_CONTROL 0x53
65
#define SNDRV_GF1_GW_FIFO_RECORD_BASE_ADDR 0x54
66
#define SNDRV_GF1_GW_FIFO_PLAY_BASE_ADDR 0x55
67
#define SNDRV_GF1_GW_FIFO_SIZE 0x56
68
#define SNDRV_GF1_GW_INTERLEAVE 0x57
69
#define SNDRV_GF1_GB_COMPATIBILITY 0x59
70
#define SNDRV_GF1_GB_DECODE_CONTROL 0x5a
71
#define SNDRV_GF1_GB_VERSION_NUMBER 0x5b
72
#define SNDRV_GF1_GB_MPU401_CONTROL_A 0x5c
73
#define SNDRV_GF1_GB_MPU401_CONTROL_B 0x5d
74
#define SNDRV_GF1_GB_EMULATION_IRQ 0x60
75
/* voice specific registers */
76
#define SNDRV_GF1_VB_ADDRESS_CONTROL 0x00
77
#define SNDRV_GF1_VW_FREQUENCY 0x01
78
#define SNDRV_GF1_VW_START_HIGH 0x02
79
#define SNDRV_GF1_VW_START_LOW 0x03
80
#define SNDRV_GF1_VA_START SNDRV_GF1_VW_START_HIGH
81
#define SNDRV_GF1_VW_END_HIGH 0x04
82
#define SNDRV_GF1_VW_END_LOW 0x05
83
#define SNDRV_GF1_VA_END SNDRV_GF1_VW_END_HIGH
84
#define SNDRV_GF1_VB_VOLUME_RATE 0x06
85
#define SNDRV_GF1_VB_VOLUME_START 0x07
86
#define SNDRV_GF1_VB_VOLUME_END 0x08
87
#define SNDRV_GF1_VW_VOLUME 0x09
88
#define SNDRV_GF1_VW_CURRENT_HIGH 0x0a
89
#define SNDRV_GF1_VW_CURRENT_LOW 0x0b
90
#define SNDRV_GF1_VA_CURRENT SNDRV_GF1_VW_CURRENT_HIGH
91
#define SNDRV_GF1_VB_PAN 0x0c
92
#define SNDRV_GF1_VW_OFFSET_RIGHT 0x0c
93
#define SNDRV_GF1_VB_VOLUME_CONTROL 0x0d
94
#define SNDRV_GF1_VB_UPPER_ADDRESS 0x10
95
#define SNDRV_GF1_VW_EFFECT_HIGH 0x11
96
#define SNDRV_GF1_VW_EFFECT_LOW 0x12
97
#define SNDRV_GF1_VA_EFFECT SNDRV_GF1_VW_EFFECT_HIGH
98
#define SNDRV_GF1_VW_OFFSET_LEFT 0x13
99
#define SNDRV_GF1_VB_ACCUMULATOR 0x14
100
#define SNDRV_GF1_VB_MODE 0x15
101
#define SNDRV_GF1_VW_EFFECT_VOLUME 0x16
102
#define SNDRV_GF1_VB_FREQUENCY_LFO 0x17
103
#define SNDRV_GF1_VB_VOLUME_LFO 0x18
104
#define SNDRV_GF1_VW_OFFSET_RIGHT_FINAL 0x1b
105
#define SNDRV_GF1_VW_OFFSET_LEFT_FINAL 0x1c
106
#define SNDRV_GF1_VW_EFFECT_VOLUME_FINAL 0x1d
107
108
/* ICS registers */
109
110
#define SNDRV_ICS_MIC_DEV 0
111
#define SNDRV_ICS_LINE_DEV 1
112
#define SNDRV_ICS_CD_DEV 2
113
#define SNDRV_ICS_GF1_DEV 3
114
#define SNDRV_ICS_NONE_DEV 4
115
#define SNDRV_ICS_MASTER_DEV 5
116
117
/* LFO */
118
119
#define SNDRV_LFO_TREMOLO 0
120
#define SNDRV_LFO_VIBRATO 1
121
122
/* misc */
123
124
#define SNDRV_GF1_DMA_UNSIGNED 0x80
125
#define SNDRV_GF1_DMA_16BIT 0x40
126
#define SNDRV_GF1_DMA_IRQ 0x20
127
#define SNDRV_GF1_DMA_WIDTH16 0x04
128
#define SNDRV_GF1_DMA_READ 0x02 /* read from GUS's DRAM */
129
#define SNDRV_GF1_DMA_ENABLE 0x01
130
131
/* ramp ranges */
132
133
#define SNDRV_GF1_ATTEN(x) (snd_gf1_atten_table[x])
134
#define SNDRV_GF1_MIN_VOLUME 1800
135
#define SNDRV_GF1_MAX_VOLUME 4095
136
#define SNDRV_GF1_MIN_OFFSET (SNDRV_GF1_MIN_VOLUME>>4)
137
#define SNDRV_GF1_MAX_OFFSET 255
138
#define SNDRV_GF1_MAX_TDEPTH 90
139
140
/* defines for memory manager */
141
142
#define SNDRV_GF1_MEM_BLOCK_16BIT 0x0001
143
144
#define SNDRV_GF1_MEM_OWNER_DRIVER 0x0001
145
#define SNDRV_GF1_MEM_OWNER_WAVE_SIMPLE 0x0002
146
#define SNDRV_GF1_MEM_OWNER_WAVE_GF1 0x0003
147
#define SNDRV_GF1_MEM_OWNER_WAVE_IWFFFF 0x0004
148
149
/* constants for interrupt handlers */
150
151
#define SNDRV_GF1_HANDLER_MIDI_OUT 0x00010000
152
#define SNDRV_GF1_HANDLER_MIDI_IN 0x00020000
153
#define SNDRV_GF1_HANDLER_TIMER1 0x00040000
154
#define SNDRV_GF1_HANDLER_TIMER2 0x00080000
155
#define SNDRV_GF1_HANDLER_VOICE 0x00100000
156
#define SNDRV_GF1_HANDLER_DMA_WRITE 0x00200000
157
#define SNDRV_GF1_HANDLER_DMA_READ 0x00400000
158
#define SNDRV_GF1_HANDLER_ALL (0xffff0000&~SNDRV_GF1_HANDLER_VOICE)
159
160
/* constants for DMA flags */
161
162
#define SNDRV_GF1_DMA_TRIGGER 1
163
164
/* --- */
165
166
struct snd_gus_card;
167
168
/* GF1 specific structure */
169
170
struct snd_gf1_bank_info {
171
unsigned int address;
172
unsigned int size;
173
};
174
175
struct snd_gf1_mem_block {
176
unsigned short flags; /* flags - SNDRV_GF1_MEM_BLOCK_XXXX */
177
unsigned short owner; /* owner - SNDRV_GF1_MEM_OWNER_XXXX */
178
unsigned int share; /* share count */
179
unsigned int share_id[4]; /* share ID */
180
unsigned int ptr;
181
unsigned int size;
182
char *name;
183
struct snd_gf1_mem_block *next;
184
struct snd_gf1_mem_block *prev;
185
};
186
187
struct snd_gf1_mem {
188
struct snd_gf1_bank_info banks_8[4];
189
struct snd_gf1_bank_info banks_16[4];
190
struct snd_gf1_mem_block *first;
191
struct snd_gf1_mem_block *last;
192
struct mutex memory_mutex;
193
};
194
195
struct snd_gf1_dma_block {
196
void *buffer; /* buffer in computer's RAM */
197
unsigned long buf_addr; /* buffer address */
198
unsigned int addr; /* address in onboard memory */
199
unsigned int count; /* count in bytes */
200
unsigned int cmd; /* DMA command (format) */
201
void (*ack)(struct snd_gus_card * gus, void *private_data);
202
void *private_data;
203
struct snd_gf1_dma_block *next;
204
};
205
206
struct snd_gus_port {
207
struct snd_midi_channel_set * chset;
208
struct snd_gus_card * gus;
209
int mode; /* operation mode */
210
int client; /* sequencer client number */
211
int port; /* sequencer port number */
212
unsigned int midi_has_voices: 1;
213
};
214
215
struct snd_gus_voice;
216
217
#define SNDRV_GF1_VOICE_TYPE_PCM 0
218
#define SNDRV_GF1_VOICE_TYPE_SYNTH 1
219
#define SNDRV_GF1_VOICE_TYPE_MIDI 2
220
221
#define SNDRV_GF1_VFLG_RUNNING (1<<0)
222
#define SNDRV_GF1_VFLG_EFFECT_TIMER1 (1<<1)
223
#define SNDRV_GF1_VFLG_PAN (1<<2)
224
225
enum snd_gus_volume_state {
226
VENV_BEFORE,
227
VENV_ATTACK,
228
VENV_SUSTAIN,
229
VENV_RELEASE,
230
VENV_DONE,
231
VENV_VOLUME
232
};
233
234
struct snd_gus_voice {
235
int number;
236
unsigned int use: 1,
237
pcm: 1,
238
synth:1,
239
midi: 1;
240
unsigned int flags;
241
unsigned char client;
242
unsigned char port;
243
unsigned char index;
244
unsigned char pad;
245
246
#ifdef CONFIG_SND_DEBUG
247
unsigned int interrupt_stat_wave;
248
unsigned int interrupt_stat_volume;
249
#endif
250
void (*handler_wave) (struct snd_gus_card * gus, struct snd_gus_voice * voice);
251
void (*handler_volume) (struct snd_gus_card * gus, struct snd_gus_voice * voice);
252
void (*handler_effect) (struct snd_gus_card * gus, struct snd_gus_voice * voice);
253
void (*volume_change) (struct snd_gus_card * gus);
254
255
struct snd_gus_sample_ops *sample_ops;
256
257
/* running status / registers */
258
259
unsigned short fc_register;
260
unsigned short fc_lfo;
261
unsigned short gf1_volume;
262
unsigned char control;
263
unsigned char mode;
264
unsigned char gf1_pan;
265
unsigned char effect_accumulator;
266
unsigned char volume_control;
267
unsigned char venv_value_next;
268
enum snd_gus_volume_state venv_state;
269
enum snd_gus_volume_state venv_state_prev;
270
unsigned short vlo;
271
unsigned short vro;
272
unsigned short gf1_effect_volume;
273
274
/* --- */
275
276
void *private_data;
277
void (*private_free)(struct snd_gus_voice *voice);
278
};
279
280
struct snd_gf1 {
281
282
unsigned int enh_mode:1, /* enhanced mode (GFA1) */
283
hw_lfo:1, /* use hardware LFO */
284
sw_lfo:1, /* use software LFO */
285
effect:1; /* use effect voices */
286
287
unsigned long port; /* port of GF1 chip */
288
struct resource *res_port1;
289
struct resource *res_port2;
290
int irq; /* IRQ number */
291
int dma1; /* DMA1 number */
292
int dma2; /* DMA2 number */
293
unsigned int memory; /* GUS's DRAM size in bytes */
294
unsigned int rom_memory; /* GUS's ROM size in bytes */
295
unsigned int rom_present; /* bitmask */
296
unsigned int rom_banks; /* GUS's ROM banks */
297
298
struct snd_gf1_mem mem_alloc;
299
300
/* registers */
301
unsigned short reg_page;
302
unsigned short reg_regsel;
303
unsigned short reg_data8;
304
unsigned short reg_data16;
305
unsigned short reg_irqstat;
306
unsigned short reg_dram;
307
unsigned short reg_timerctrl;
308
unsigned short reg_timerdata;
309
unsigned char ics_regs[6][2];
310
/* --------- */
311
312
unsigned char active_voices; /* active voices */
313
unsigned char active_voice; /* selected voice (GF1PAGE register) */
314
315
struct snd_gus_voice voices[32]; /* GF1 voices */
316
317
unsigned int default_voice_address;
318
319
unsigned short playback_freq; /* GF1 playback (mixing) frequency */
320
unsigned short mode; /* see to SNDRV_GF1_MODE_XXXX */
321
unsigned char volume_ramp;
322
unsigned char smooth_pan;
323
unsigned char full_range_pan;
324
unsigned char pad0;
325
326
unsigned char *lfos;
327
328
/* interrupt handlers */
329
330
void (*interrupt_handler_midi_out) (struct snd_gus_card * gus);
331
void (*interrupt_handler_midi_in) (struct snd_gus_card * gus);
332
void (*interrupt_handler_timer1) (struct snd_gus_card * gus);
333
void (*interrupt_handler_timer2) (struct snd_gus_card * gus);
334
void (*interrupt_handler_dma_write) (struct snd_gus_card * gus);
335
void (*interrupt_handler_dma_read) (struct snd_gus_card * gus);
336
337
#ifdef CONFIG_SND_DEBUG
338
unsigned int interrupt_stat_midi_out;
339
unsigned int interrupt_stat_midi_in;
340
unsigned int interrupt_stat_timer1;
341
unsigned int interrupt_stat_timer2;
342
unsigned int interrupt_stat_dma_write;
343
unsigned int interrupt_stat_dma_read;
344
unsigned int interrupt_stat_voice_lost;
345
#endif
346
347
/* synthesizer */
348
349
int seq_client;
350
struct snd_gus_port seq_ports[4];
351
352
/* timer */
353
354
unsigned short timer_enabled;
355
struct snd_timer *timer1;
356
struct snd_timer *timer2;
357
358
/* midi */
359
360
unsigned short uart_cmd;
361
unsigned int uart_framing;
362
unsigned int uart_overrun;
363
364
/* dma operations */
365
366
unsigned int dma_flags;
367
unsigned int dma_shared;
368
struct snd_gf1_dma_block *dma_data_pcm;
369
struct snd_gf1_dma_block *dma_data_pcm_last;
370
struct snd_gf1_dma_block *dma_data_synth;
371
struct snd_gf1_dma_block *dma_data_synth_last;
372
void (*dma_ack)(struct snd_gus_card * gus, void *private_data);
373
void *dma_private_data;
374
375
/* pcm */
376
int pcm_channels;
377
int pcm_alloc_voices;
378
unsigned short pcm_volume_level_left;
379
unsigned short pcm_volume_level_right;
380
unsigned short pcm_volume_level_left1;
381
unsigned short pcm_volume_level_right1;
382
383
unsigned char pcm_rcntrl_reg;
384
unsigned char pad_end;
385
};
386
387
/* main structure for GUS card */
388
389
struct snd_gus_card {
390
struct snd_card *card;
391
392
unsigned int
393
initialized: 1, /* resources were initialized */
394
equal_irq:1, /* GF1 and CODEC shares IRQ (GUS MAX only) */
395
equal_dma:1, /* if dma channels are equal (not valid for daughter board) */
396
ics_flag:1, /* have we ICS mixer chip */
397
ics_flipped:1, /* ICS mixer have flipped some channels? */
398
codec_flag:1, /* have we CODEC chip? */
399
max_flag:1, /* have we GUS MAX card? */
400
max_ctrl_flag:1, /* have we original GUS MAX card? */
401
daughter_flag:1, /* have we daughter board? */
402
interwave:1, /* hey - we have InterWave card */
403
ess_flag:1, /* ESS chip found... GUS Extreme */
404
ace_flag:1, /* GUS ACE detected */
405
uart_enable:1; /* enable MIDI UART */
406
unsigned short revision; /* revision of chip */
407
unsigned short max_cntrl_val; /* GUS MAX control value */
408
unsigned short mix_cntrl_reg; /* mixer control register */
409
unsigned short joystick_dac; /* joystick DAC level */
410
int timer_dev; /* timer device */
411
412
struct snd_gf1 gf1; /* gf1 specific variables */
413
struct snd_pcm *pcm;
414
struct snd_pcm_substream *pcm_cap_substream;
415
unsigned int c_dma_size;
416
unsigned int c_period_size;
417
unsigned int c_pos;
418
419
struct snd_rawmidi *midi_uart;
420
struct snd_rawmidi_substream *midi_substream_output;
421
struct snd_rawmidi_substream *midi_substream_input;
422
423
spinlock_t reg_lock;
424
spinlock_t voice_alloc;
425
spinlock_t active_voice_lock;
426
spinlock_t event_lock;
427
spinlock_t dma_lock;
428
spinlock_t pcm_volume_level_lock;
429
spinlock_t uart_cmd_lock;
430
struct mutex dma_mutex;
431
struct mutex register_mutex;
432
};
433
434
/* I/O functions for GF1/InterWave chip - gus_io.c */
435
436
static inline void snd_gf1_select_voice(struct snd_gus_card * gus, int voice)
437
{
438
unsigned long flags;
439
440
spin_lock_irqsave(&gus->active_voice_lock, flags);
441
if (voice != gus->gf1.active_voice) {
442
gus->gf1.active_voice = voice;
443
outb(voice, GUSP(gus, GF1PAGE));
444
}
445
spin_unlock_irqrestore(&gus->active_voice_lock, flags);
446
}
447
448
static inline void snd_gf1_uart_cmd(struct snd_gus_card * gus, unsigned char b)
449
{
450
outb(gus->gf1.uart_cmd = b, GUSP(gus, MIDICTRL));
451
}
452
453
static inline unsigned char snd_gf1_uart_stat(struct snd_gus_card * gus)
454
{
455
return inb(GUSP(gus, MIDISTAT));
456
}
457
458
static inline void snd_gf1_uart_put(struct snd_gus_card * gus, unsigned char b)
459
{
460
outb(b, GUSP(gus, MIDIDATA));
461
}
462
463
static inline unsigned char snd_gf1_uart_get(struct snd_gus_card * gus)
464
{
465
return inb(GUSP(gus, MIDIDATA));
466
}
467
468
extern void snd_gf1_delay(struct snd_gus_card * gus);
469
470
extern void snd_gf1_ctrl_stop(struct snd_gus_card * gus, unsigned char reg);
471
472
extern void snd_gf1_write8(struct snd_gus_card * gus, unsigned char reg, unsigned char data);
473
extern unsigned char snd_gf1_look8(struct snd_gus_card * gus, unsigned char reg);
474
static inline unsigned char snd_gf1_read8(struct snd_gus_card * gus, unsigned char reg)
475
{
476
return snd_gf1_look8(gus, reg | 0x80);
477
}
478
extern void snd_gf1_write16(struct snd_gus_card * gus, unsigned char reg, unsigned int data);
479
extern unsigned short snd_gf1_look16(struct snd_gus_card * gus, unsigned char reg);
480
static inline unsigned short snd_gf1_read16(struct snd_gus_card * gus, unsigned char reg)
481
{
482
return snd_gf1_look16(gus, reg | 0x80);
483
}
484
extern void snd_gf1_adlib_write(struct snd_gus_card * gus, unsigned char reg, unsigned char data);
485
extern void snd_gf1_dram_addr(struct snd_gus_card * gus, unsigned int addr);
486
extern void snd_gf1_poke(struct snd_gus_card * gus, unsigned int addr, unsigned char data);
487
extern unsigned char snd_gf1_peek(struct snd_gus_card * gus, unsigned int addr);
488
extern void snd_gf1_write_addr(struct snd_gus_card * gus, unsigned char reg, unsigned int addr, short w_16bit);
489
extern unsigned int snd_gf1_read_addr(struct snd_gus_card * gus, unsigned char reg, short w_16bit);
490
extern void snd_gf1_i_ctrl_stop(struct snd_gus_card * gus, unsigned char reg);
491
extern void snd_gf1_i_write8(struct snd_gus_card * gus, unsigned char reg, unsigned char data);
492
extern unsigned char snd_gf1_i_look8(struct snd_gus_card * gus, unsigned char reg);
493
extern void snd_gf1_i_write16(struct snd_gus_card * gus, unsigned char reg, unsigned int data);
494
static inline unsigned char snd_gf1_i_read8(struct snd_gus_card * gus, unsigned char reg)
495
{
496
return snd_gf1_i_look8(gus, reg | 0x80);
497
}
498
extern unsigned short snd_gf1_i_look16(struct snd_gus_card * gus, unsigned char reg);
499
static inline unsigned short snd_gf1_i_read16(struct snd_gus_card * gus, unsigned char reg)
500
{
501
return snd_gf1_i_look16(gus, reg | 0x80);
502
}
503
504
extern void snd_gf1_select_active_voices(struct snd_gus_card * gus);
505
506
/* gus_lfo.c */
507
508
struct _SND_IW_LFO_PROGRAM {
509
unsigned short freq_and_control;
510
unsigned char depth_final;
511
unsigned char depth_inc;
512
unsigned short twave;
513
unsigned short depth;
514
};
515
516
/* gus_mem.c */
517
518
void snd_gf1_mem_lock(struct snd_gf1_mem * alloc, int xup);
519
int snd_gf1_mem_xfree(struct snd_gf1_mem * alloc, struct snd_gf1_mem_block * block);
520
struct snd_gf1_mem_block *snd_gf1_mem_alloc(struct snd_gf1_mem * alloc, int owner,
521
char *name, int size, int w_16,
522
int align, unsigned int *share_id);
523
int snd_gf1_mem_free(struct snd_gf1_mem * alloc, unsigned int address);
524
int snd_gf1_mem_free_owner(struct snd_gf1_mem * alloc, int owner);
525
int snd_gf1_mem_init(struct snd_gus_card * gus);
526
int snd_gf1_mem_done(struct snd_gus_card * gus);
527
528
/* gus_mem_proc.c */
529
530
int snd_gf1_mem_proc_init(struct snd_gus_card * gus);
531
532
/* gus_dma.c */
533
534
int snd_gf1_dma_init(struct snd_gus_card * gus);
535
int snd_gf1_dma_done(struct snd_gus_card * gus);
536
int snd_gf1_dma_transfer_block(struct snd_gus_card * gus,
537
struct snd_gf1_dma_block * block,
538
int atomic,
539
int synth);
540
541
/* gus_volume.c */
542
543
unsigned short snd_gf1_lvol_to_gvol_raw(unsigned int vol);
544
unsigned short snd_gf1_translate_freq(struct snd_gus_card * gus, unsigned int freq2);
545
546
/* gus_reset.c */
547
548
void snd_gf1_set_default_handlers(struct snd_gus_card * gus, unsigned int what);
549
void snd_gf1_smart_stop_voice(struct snd_gus_card * gus, unsigned short voice);
550
void snd_gf1_stop_voice(struct snd_gus_card * gus, unsigned short voice);
551
void snd_gf1_stop_voices(struct snd_gus_card * gus, unsigned short v_min, unsigned short v_max);
552
struct snd_gus_voice *snd_gf1_alloc_voice(struct snd_gus_card * gus, int type, int client, int port);
553
void snd_gf1_free_voice(struct snd_gus_card * gus, struct snd_gus_voice *voice);
554
int snd_gf1_start(struct snd_gus_card * gus);
555
int snd_gf1_stop(struct snd_gus_card * gus);
556
557
/* gus_mixer.c */
558
559
int snd_gf1_new_mixer(struct snd_gus_card * gus);
560
561
/* gus_pcm.c */
562
563
int snd_gf1_pcm_new(struct snd_gus_card *gus, int pcm_dev, int control_index);
564
565
/* gus.c */
566
567
int snd_gus_create(struct snd_card *card,
568
unsigned long port,
569
int irq, int dma1, int dma2,
570
int timer_dev,
571
int voices,
572
int pcm_channels,
573
int effect,
574
struct snd_gus_card ** rgus);
575
int snd_gus_initialize(struct snd_gus_card * gus);
576
577
/* gus_irq.c */
578
579
irqreturn_t snd_gus_interrupt(int irq, void *dev_id);
580
#ifdef CONFIG_SND_DEBUG
581
void snd_gus_irq_profile_init(struct snd_gus_card *gus);
582
#endif
583
584
/* gus_uart.c */
585
586
int snd_gf1_rawmidi_new(struct snd_gus_card *gus, int device);
587
588
/* gus_dram.c */
589
int snd_gus_dram_write(struct snd_gus_card *gus, char __user *ptr,
590
unsigned int addr, unsigned int size);
591
int snd_gus_dram_read(struct snd_gus_card *gus, char __user *ptr,
592
unsigned int addr, unsigned int size, int rom);
593
594
/* gus_timer.c */
595
void snd_gf1_timers_init(struct snd_gus_card *gus);
596
void snd_gf1_timers_done(struct snd_gus_card *gus);
597
598
#endif /* __SOUND_GUS_H */
599
600