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 */
102