11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef __SOUND_EMUX_SYNTH_H 21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define __SOUND_EMUX_SYNTH_H 31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Defines for the Emu-series WaveTable chip 61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright (C) 2000 Takashi Iwai <tiwai@suse.de> 81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * This program is free software; you can redistribute it and/or modify 101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * it under the terms of the GNU General Public License as published by 111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * the Free Software Foundation; either version 2 of the License, or 121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * (at your option) any later version. 131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * This program is distributed in the hope that it will be useful, 151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * but WITHOUT ANY WARRANTY; without even the implied warranty of 161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * GNU General Public License for more details. 181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * You should have received a copy of the GNU General Public License 201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * along with this program; if not, write to the Free Software 211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include "seq_kernel.h" 251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include "seq_device.h" 261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include "soundfont.h" 271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include "seq_midi_emul.h" 281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_SND_SEQUENCER_OSS 291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include "seq_oss.h" 301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include "emux_legacy.h" 321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include "seq_virmidi.h" 331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * compile flags 361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SNDRV_EMUX_USE_RAW_EFFECT 381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3903da312ac080b4f5c9359c233b8812cc93a035feTakashi Iwaistruct snd_emux; 4003da312ac080b4f5c9359c233b8812cc93a035feTakashi Iwaistruct snd_emux_port; 4103da312ac080b4f5c9359c233b8812cc93a035feTakashi Iwaistruct snd_emux_voice; 4203da312ac080b4f5c9359c233b8812cc93a035feTakashi Iwaistruct snd_emux_effect_table; 431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * operators 461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 4703da312ac080b4f5c9359c233b8812cc93a035feTakashi Iwaistruct snd_emux_operators { 481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct module *owner; 4903da312ac080b4f5c9359c233b8812cc93a035feTakashi Iwai struct snd_emux_voice *(*get_voice)(struct snd_emux *emu, 5003da312ac080b4f5c9359c233b8812cc93a035feTakashi Iwai struct snd_emux_port *port); 5103da312ac080b4f5c9359c233b8812cc93a035feTakashi Iwai int (*prepare)(struct snd_emux_voice *vp); 5203da312ac080b4f5c9359c233b8812cc93a035feTakashi Iwai void (*trigger)(struct snd_emux_voice *vp); 5303da312ac080b4f5c9359c233b8812cc93a035feTakashi Iwai void (*release)(struct snd_emux_voice *vp); 5403da312ac080b4f5c9359c233b8812cc93a035feTakashi Iwai void (*update)(struct snd_emux_voice *vp, int update); 5503da312ac080b4f5c9359c233b8812cc93a035feTakashi Iwai void (*terminate)(struct snd_emux_voice *vp); 5603da312ac080b4f5c9359c233b8812cc93a035feTakashi Iwai void (*free_voice)(struct snd_emux_voice *vp); 5703da312ac080b4f5c9359c233b8812cc93a035feTakashi Iwai void (*reset)(struct snd_emux *emu, int ch); 5803da312ac080b4f5c9359c233b8812cc93a035feTakashi Iwai /* the first parameters are struct snd_emux */ 5903da312ac080b4f5c9359c233b8812cc93a035feTakashi Iwai int (*sample_new)(struct snd_emux *emu, struct snd_sf_sample *sp, 6003da312ac080b4f5c9359c233b8812cc93a035feTakashi Iwai struct snd_util_memhdr *hdr, 6103da312ac080b4f5c9359c233b8812cc93a035feTakashi Iwai const void __user *data, long count); 6203da312ac080b4f5c9359c233b8812cc93a035feTakashi Iwai int (*sample_free)(struct snd_emux *emu, struct snd_sf_sample *sp, 6303da312ac080b4f5c9359c233b8812cc93a035feTakashi Iwai struct snd_util_memhdr *hdr); 6403da312ac080b4f5c9359c233b8812cc93a035feTakashi Iwai void (*sample_reset)(struct snd_emux *emu); 6503da312ac080b4f5c9359c233b8812cc93a035feTakashi Iwai int (*load_fx)(struct snd_emux *emu, int type, int arg, 6603da312ac080b4f5c9359c233b8812cc93a035feTakashi Iwai const void __user *data, long count); 6703da312ac080b4f5c9359c233b8812cc93a035feTakashi Iwai void (*sysex)(struct snd_emux *emu, char *buf, int len, int parsed, 6803da312ac080b4f5c9359c233b8812cc93a035feTakashi Iwai struct snd_midi_channel_set *chset); 691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_SND_SEQUENCER_OSS 7003da312ac080b4f5c9359c233b8812cc93a035feTakashi Iwai int (*oss_ioctl)(struct snd_emux *emu, int cmd, int p1, int p2); 711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 7203da312ac080b4f5c9359c233b8812cc93a035feTakashi Iwai}; 731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * constant values 771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SNDRV_EMUX_MAX_PORTS 32 /* max # of sequencer ports */ 791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SNDRV_EMUX_MAX_VOICES 64 /* max # of voices */ 801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SNDRV_EMUX_MAX_MULTI_VOICES 16 /* max # of playable voices 811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * simultineously 821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * flags 861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SNDRV_EMUX_ACCEPT_ROM (1<<0) 881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * emuX wavetable 911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct snd_emux { 931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 9403da312ac080b4f5c9359c233b8812cc93a035feTakashi Iwai struct snd_card *card; /* assigned card */ 951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* following should be initialized before registration */ 971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int max_voices; /* Number of voices */ 981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int mem_size; /* memory size (in byte) */ 991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int num_ports; /* number of ports to be created */ 1001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int pitch_shift; /* pitch shift value (for Emu10k1) */ 10103da312ac080b4f5c9359c233b8812cc93a035feTakashi Iwai struct snd_emux_operators ops; /* operators */ 1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds void *hw; /* hardware */ 1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned long flags; /* other conditions */ 1041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int midi_ports; /* number of virtual midi devices */ 1051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int midi_devidx; /* device offset of virtual midi */ 1061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned int linear_panning: 1; /* panning is linear (sbawe = 1, emu10k1 = 0) */ 1071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int hwdep_idx; /* hwdep device index */ 10803da312ac080b4f5c9359c233b8812cc93a035feTakashi Iwai struct snd_hwdep *hwdep; /* hwdep device */ 1091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* private */ 1111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int num_voices; /* current number of voices */ 11203da312ac080b4f5c9359c233b8812cc93a035feTakashi Iwai struct snd_sf_list *sflist; /* root of SoundFont list */ 11303da312ac080b4f5c9359c233b8812cc93a035feTakashi Iwai struct snd_emux_voice *voices; /* Voices (EMU 'channel') */ 1141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int use_time; /* allocation counter */ 1151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds spinlock_t voice_lock; /* Lock for voice access */ 116ef9f0a42db987e7e2df72289fb4522d24027786bIngo Molnar struct mutex register_mutex; 1171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int client; /* For the sequencer client */ 1181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int ports[SNDRV_EMUX_MAX_PORTS]; /* The ports for this device */ 11903da312ac080b4f5c9359c233b8812cc93a035feTakashi Iwai struct snd_emux_port *portptrs[SNDRV_EMUX_MAX_PORTS]; 1201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int used; /* use counter */ 1211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds char *name; /* name of the device (internal) */ 12203da312ac080b4f5c9359c233b8812cc93a035feTakashi Iwai struct snd_rawmidi **vmidi; 1231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct timer_list tlist; /* for pending note-offs */ 1241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int timer_active; 1251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 12603da312ac080b4f5c9359c233b8812cc93a035feTakashi Iwai struct snd_util_memhdr *memhdr; /* memory chunk information */ 1271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_PROC_FS 12903da312ac080b4f5c9359c233b8812cc93a035feTakashi Iwai struct snd_info_entry *proc; 1301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 1311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_SND_SEQUENCER_OSS 13303da312ac080b4f5c9359c233b8812cc93a035feTakashi Iwai struct snd_seq_device *oss_synth; 1341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 1351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 1361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 1391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * sequencer port information 1401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 1411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct snd_emux_port { 1421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 14303da312ac080b4f5c9359c233b8812cc93a035feTakashi Iwai struct snd_midi_channel_set chset; 14403da312ac080b4f5c9359c233b8812cc93a035feTakashi Iwai struct snd_emux *emu; 1451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds char port_mode; /* operation mode */ 1471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int volume_atten; /* emuX raw attenuation */ 1481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned long drum_flags; /* drum bitmaps */ 1491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int ctrls[EMUX_MD_END]; /* control parameters */ 1501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef SNDRV_EMUX_USE_RAW_EFFECT 15103da312ac080b4f5c9359c233b8812cc93a035feTakashi Iwai struct snd_emux_effect_table *effect; 1521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 1531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_SND_SEQUENCER_OSS 15403da312ac080b4f5c9359c233b8812cc93a035feTakashi Iwai struct snd_seq_oss_arg *oss_arg; 1551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 1561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 1571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* port_mode */ 1591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SNDRV_EMUX_PORT_MODE_MIDI 0 /* normal MIDI port */ 1601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SNDRV_EMUX_PORT_MODE_OSS_SYNTH 1 /* OSS synth port */ 1611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SNDRV_EMUX_PORT_MODE_OSS_MIDI 2 /* OSS multi channel synth port */ 1621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 1641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * A structure to keep track of each hardware voice 1651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 1661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct snd_emux_voice { 1671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int ch; /* Hardware channel number */ 1681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int state; /* status */ 1701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SNDRV_EMUX_ST_OFF 0x00 /* Not playing, and inactive */ 1711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SNDRV_EMUX_ST_ON 0x01 /* Note on */ 1721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SNDRV_EMUX_ST_RELEASED (0x02|SNDRV_EMUX_ST_ON) /* Note released */ 1731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SNDRV_EMUX_ST_SUSTAINED (0x04|SNDRV_EMUX_ST_ON) /* Note sustained */ 1741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SNDRV_EMUX_ST_STANDBY (0x08|SNDRV_EMUX_ST_ON) /* Waiting to be triggered */ 1751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SNDRV_EMUX_ST_PENDING (0x10|SNDRV_EMUX_ST_ON) /* Note will be released */ 1761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SNDRV_EMUX_ST_LOCKED 0x100 /* Not accessible */ 1771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned int time; /* An allocation time */ 1791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char note; /* Note currently assigned to this voice */ 1801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char key; 1811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char velocity; /* Velocity of current note */ 1821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 18303da312ac080b4f5c9359c233b8812cc93a035feTakashi Iwai struct snd_sf_zone *zone; /* Zone assigned to this note */ 1841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds void *block; /* sample block pointer (optional) */ 18503da312ac080b4f5c9359c233b8812cc93a035feTakashi Iwai struct snd_midi_channel *chan; /* Midi channel for this note */ 18603da312ac080b4f5c9359c233b8812cc93a035feTakashi Iwai struct snd_emux_port *port; /* associated port */ 18703da312ac080b4f5c9359c233b8812cc93a035feTakashi Iwai struct snd_emux *emu; /* assigned root info */ 18803da312ac080b4f5c9359c233b8812cc93a035feTakashi Iwai void *hw; /* hardware pointer (emu8000 or emu10k1) */ 1891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned long ontime; /* jiffies at note triggered */ 1901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* Emu8k/Emu10k1 registers */ 19203da312ac080b4f5c9359c233b8812cc93a035feTakashi Iwai struct soundfont_voice_info reg; 1931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* additional registers */ 1951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int avol; /* volume attenuation */ 1961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int acutoff; /* cutoff target */ 1971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int apitch; /* pitch offset */ 1981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int apan; /* pan/aux pair */ 1991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int aaux; 2001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int ptarget; /* pitch target */ 2011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int vtarget; /* volume target */ 2021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int ftarget; /* filter target */ 2031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 2051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 2071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * update flags (can be combined) 2081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 2091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SNDRV_EMUX_UPDATE_VOLUME (1<<0) 2101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SNDRV_EMUX_UPDATE_PITCH (1<<1) 2111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SNDRV_EMUX_UPDATE_PAN (1<<2) 2121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SNDRV_EMUX_UPDATE_FMMOD (1<<3) 2131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SNDRV_EMUX_UPDATE_TREMFREQ (1<<4) 2141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SNDRV_EMUX_UPDATE_FM2FRQ2 (1<<5) 2151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SNDRV_EMUX_UPDATE_Q (1<<6) 2161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef SNDRV_EMUX_USE_RAW_EFFECT 2191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 2201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * effect table 2211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 2221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct snd_emux_effect_table { 2231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* Emu8000 specific effects */ 2241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds short val[EMUX_NUM_EFFECTS]; 2251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char flag[EMUX_NUM_EFFECTS]; 2261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 2271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif /* SNDRV_EMUX_USE_RAW_EFFECT */ 2281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 2311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * prototypes - interface to Emu10k1 and Emu8k routines 2321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 23303da312ac080b4f5c9359c233b8812cc93a035feTakashi Iwaiint snd_emux_new(struct snd_emux **remu); 23403da312ac080b4f5c9359c233b8812cc93a035feTakashi Iwaiint snd_emux_register(struct snd_emux *emu, struct snd_card *card, int index, char *name); 23503da312ac080b4f5c9359c233b8812cc93a035feTakashi Iwaiint snd_emux_free(struct snd_emux *emu); 2361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 2381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * exported functions 2391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 24003da312ac080b4f5c9359c233b8812cc93a035feTakashi Iwaivoid snd_emux_terminate_all(struct snd_emux *emu); 24103da312ac080b4f5c9359c233b8812cc93a035feTakashi Iwaivoid snd_emux_lock_voice(struct snd_emux *emu, int voice); 24203da312ac080b4f5c9359c233b8812cc93a035feTakashi Iwaivoid snd_emux_unlock_voice(struct snd_emux *emu, int voice); 2431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif /* __SOUND_EMUX_SYNTH_H */ 245