import of ftp.dlink.com/GPL/DSMG-600_reB/ppclinux.tar.gz
[linux-2.4.21-pre4.git] / drivers / sound / emu10k1 / voicemgr.h
1 /*
2  **********************************************************************
3  *     sblive_voice.h -- EMU Voice Resource Manager header file
4  *     Copyright 1999, 2000 Creative Labs, Inc.
5  *
6  **********************************************************************
7  *
8  *     Date                 Author          Summary of changes
9  *     ----                 ------          ------------------
10  *     October 20, 1999     Bertrand Lee    base code release
11  *
12  **********************************************************************
13  *
14  *     This program is free software; you can redistribute it and/or
15  *     modify it under the terms of the GNU General Public License as
16  *     published by the Free Software Foundation; either version 2 of
17  *     the License, or (at your option) any later version.
18  *
19  *     This program is distributed in the hope that it will be useful,
20  *     but WITHOUT ANY WARRANTY; without even the implied warranty of
21  *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22  *     GNU General Public License for more details.
23  *
24  *     You should have received a copy of the GNU General Public
25  *     License along with this program; if not, write to the Free
26  *     Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
27  *     USA.
28  *
29  **********************************************************************
30  */
31
32 #ifndef _VOICEMGR_H
33 #define _VOICEMGR_H
34
35 #include "hwaccess.h"
36
37 /* struct emu_voice.usage flags */
38 #define VOICE_USAGE_FREE                0x01
39 #define VOICE_USAGE_MIDI                0x02
40 #define VOICE_USAGE_PLAYBACK            0x04
41
42 /* struct emu_voice.flags flags */
43 #define VOICE_FLAGS_STEREO              0x02
44 #define VOICE_FLAGS_16BIT               0x04
45
46 struct voice_param
47 {
48         /* FX bus amount send */
49
50         u32 send_routing;
51
52         u32 send_a;
53         u32 send_b;
54         u32 send_c;
55         u32 send_d;
56
57         u32 initial_fc;
58         u32 fc_target;
59
60         u32 initial_attn;
61         u32 volume_target;
62
63         u32 byampl_env_sustain;
64         u32 byampl_env_decay;
65 };
66
67 struct voice_mem {
68         int emupageindex;
69         void *addr[BUFMAXPAGES];
70         dma_addr_t dma_handle[BUFMAXPAGES];
71         u32 pages;
72 };
73
74 struct emu_voice
75 {
76         struct emu10k1_card *card;
77         u8 usage;               /* Free, MIDI, playback */
78         u8 num;                 /* Voice ID */
79         u8 flags;               /* Stereo/mono, 8/16 bit */
80
81         u32 startloop;
82         u32 endloop;
83         u32 start;
84
85         u32 initial_pitch;
86         u32 pitch_target;
87
88         struct voice_param params[2];
89
90         struct voice_mem mem;
91 };
92
93 int emu10k1_voice_alloc_buffer(struct emu10k1_card *, struct voice_mem *, u32);
94 void emu10k1_voice_free_buffer(struct emu10k1_card *, struct voice_mem *);
95 int emu10k1_voice_alloc(struct emu10k1_card *, struct emu_voice *);
96 void emu10k1_voice_free(struct emu_voice *);
97 void emu10k1_voice_playback_setup(struct emu_voice *);
98 void emu10k1_voices_start(struct emu_voice *, unsigned int, int);
99 void emu10k1_voices_stop(struct emu_voice *, int);
100
101 #endif /* _VOICEMGR_H */