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